[
  {
    "path": ".dockerignore",
    "content": "eulet-5\nmytestnet"
  },
  {
    "path": ".gitattributes",
    "content": "client/docs/swagger-ui/* linguist-vendored\n\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\n\n---\n\n<!--\nHi!\n\nPlease use the template below for issue bugs found within cyberd.\n\nProvide a general summary of the issue in the title above and use relevant fields below to define the problem.\n\n-->\n### Current Behavior\n[comment]: # (Describe what actually happened.)\n\n### Expected Behavior\n[comment]: # (Describe what you expected to happen.)\n\n### Reproduction\n[comment]: # (Describe how we can replicate the bug step by step.)\n\n### Log\n[comment]: # (Also you can attach log to this issue.)\n\n### Additional Information\n[comment]: # (Any other information that would be useful, content, screenshots, etc.)"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest an idea for this project\n\n---\n\n<!--\nHi!\n\nPlease use the template below for share your ideas with us.\n\nProvide a general summary of the issue in the title above and use relevant fields below to define the problem.\n\n-->\n\n### User Story\n\n[comment]: # (As a <user type>, I want to <task> so that <goal>.)\n\n\n### Why Is this Needed?\n\n[comment]: # (Describe the problem and why this task is needed. Provide description of the current state, what you would like to happen, and what actually happen)\n*Summary*:\n\n\n### Definition of Done\n[comment]: # (Any other information that would be useful, bullets are helpful.)\n\n\n### Additional Information\n[comment]: # (Any other information that would be useful, content, screenshots, etc.)\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/gitcoin-issue-template.md",
    "content": "---\nname: Add Issue to Gitcoin\nabout: This is recommended issue template for gitcoin\n\n---\n\n#### Overview\n[Here](https://github.com/cybercongress/cyberd/blob/master/README.md) you can explore our project\n\n---\n#### Current project situation\n\nCurrent project situation section where you can explain why we need to solve this task\n\n---\n#### Task description\n\nExplain task clearly with details\n\n---\n#### Required skills\n\n- List;\n- required;\n- skills;\n- here.\n\n---\n#### Contribution rules\n\n[Here](https://github.com/cybercongress/cyberd/blob/master/CONTRIBUTING.md) you can learn how to contribute to our project\n\n---\n#### Definition of done\n\nExplain what you actually want to see as a result:\n- [ ] you can\n- [ ] also\n- [ ] use checkboxes\n\n---\n#### Extra information\n\nBounty amount | 999 ETH\n------------ | -------------\nExperience level | beginner / intermediate / advanced\nProject length | hours / days / weeks / mounths\nExpires in | 2 weeks / 1 mounth / 3 mounths / 6 mounths / 1 year\nBounty type | bug / feature / security / other\n"
  },
  {
    "path": ".github/tests.yml",
    "content": "# https://github.com/mvdan/github-actions-golang\non: [push, pull_request]\nname: Test\njobs:\n  test:\n    strategy:\n      matrix:\n        go-version: [1.19.x, 1.20.x]\n        os: [ubuntu-latest, macos-latest, windows-latest]\n    runs-on: ${{ matrix.os }}\n    steps:\n    - uses: actions/checkout@v3\n    - uses: actions/setup-go@v4\n      with:\n        go-version: ${{ matrix.go-version }}\n    - run: go test ./...\n"
  },
  {
    "path": ".gitignore",
    "content": "# OS\n.DS_Store\n*.swp\n*.swo\n*.swl\n*.swm\n*.swn\n.vscode\n.idea\n\n# Build\nvendor\nbuild\ntools/bin/*\nexamples/build/*\ndocs/_build\ndocs/tutorial\ndist\ntools-stamp\ndocs/node_modules\nNULL\n\n# Data - ideally these don't exist\nbaseapp/data/*\nclient/lcd/keys/*\nmytestnet\ntestnet\ntestnets\n\n# Testing\ncoverage.txt\nprofile.out\n\n# Vagrant\n.vagrant/\n*.box\n*.log\nvagrant\n\n# IDE\n.idea/\n*.iml\n\n# Graphviz\ndependency-graph.png\n\n# Latex\n*.aux\n*.out\n*.synctex.gz\ncontract_tests/*\n\n# Wasm\ncontracts\n\n# Scripts\n*.mjs\n\n*.wasm\n\ncmd/iavltool/*.txt\n\n# Local infrastructure docs (not part of codebase)\nlocal/\n\n# Claude Code\n.claude/\nCLAUDE.md"
  },
  {
    "path": ".golangci.yml",
    "content": "run:\n  # timeout for analysis, e.g. 30s, 5m, default is 1m\n  timeout: 10m\n  tests: true\n\nlinters:\n  disable-all: true\n  enable:\n    - bodyclose\n    - depguard\n    - dogsled\n    - errcheck\n    - goconst\n    - gocritic\n    - gofumpt\n    - revive\n    - gosec\n    - gosimple\n    - govet\n    - ineffassign\n    - misspell\n    - nakedret\n    - exportloopref\n    - staticcheck\n    - stylecheck\n    - typecheck\n    - unconvert\n    - unused\n    - unparam\n    - misspell\n\nlinters-settings:\n  gosec:\n    excludes:\n      - G404\n"
  },
  {
    "path": ".goreleaser.yml",
    "content": "builds:\n  -\n    main: ./cyberdcli\n    binary: cyberdcli\n    env:\n      - CGO_ENABLED=0\n      - GO111MODULE=on\n    goos:\n      - linux\n      - darwin\n      - windows\n    goarch:\n      - amd64\n\n\nchecksum:\n  name_template: '{{ .ProjectName }}_checksums.txt'\n\n\nchangelog:\n  sort: asc\n  filters:\n    exclude:\n    - '^docs:'\n    - '^test:'\n    - '^CI:'\n    - Merge pull request\n\n\nnfpm:\n  name_template: '{{ .Binary }}_{{ .Os }}_{{ .Arch }}_{{ .Version }}'\n  replacements:\n    darwin: macOS\n    386: i386\n    amd64: x86_64\n  homepage:  https://github.com/cybercongress\n  description: Distributed search engine\n  maintainer: Cyber Admin <cybercongress42@gmail.com>\n  license: MIT\n  vendor: cyber.Congress\n  formats:\n    - deb\n    - rpm\n  dependencies:\n    - git\n  recommends:\n    - rpm\n\n\narchive:\n  name_template: '{{ .Binary }}_{{ .Os }}_{{ .Arch }}_{{ .Version }}'\n  replacements:\n    darwin: MacOS\n    linux: Linux\n    windows: Windows\n    386: i386\n    amd64: x86_64\n  format: zip\n  format_overrides:\n    - goos: linux\n      format: tar.gz\n  wrap_in_directory: true\n  files:\n    - none*"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Change Log\n\n## [Unreleased](https://github.com/cybercongress/go-cyber/tree/HEAD)\n\n[Full Changelog](https://github.com/cybercongress/go-cyber/compare/v0.1.6...HEAD)\n\n**Closed issues:**\n\n- Disable karma calculations [\\#552](https://github.com/cybercongress/go-cyber/issues/552)\n- Upgrade to Launchpad [\\#550](https://github.com/cybercongress/go-cyber/issues/550)\n- Test onchain upgrade against docker container [\\#541](https://github.com/cybercongress/go-cyber/issues/541)\n- Upgrade to sdk 38.5 and tm 33.6 [\\#530](https://github.com/cybercongress/go-cyber/issues/530)\n- Delegations not indexed with bank module wrapper [\\#521](https://github.com/cybercongress/go-cyber/issues/521)\n- Security upgrade with bump to 0.38.3/0.33.3 [\\#518](https://github.com/cybercongress/go-cyber/issues/518)\n- Rename cyberdcli [\\#481](https://github.com/cybercongress/go-cyber/issues/481)\n- Euler-6 release [\\#463](https://github.com/cybercongress/go-cyber/issues/463)\n- Md style error in  run\\_validator.md [\\#445](https://github.com/cybercongress/go-cyber/issues/445)\n- Support easy install with brew tap [\\#426](https://github.com/cybercongress/go-cyber/issues/426)\n- Validator setup using Tendermint KMS + Ledger  [\\#393](https://github.com/cybercongress/go-cyber/issues/393)\n- Delegation of energy and power [\\#329](https://github.com/cybercongress/go-cyber/issues/329)\n- Daemon for autoclaiming of validators rewards [\\#280](https://github.com/cybercongress/go-cyber/issues/280)\n\n**Merged pull requests:**\n\n- Indexing rewards of withdraw proxy account [\\#579](https://github.com/cybercongress/go-cyber/pull/579) ([litvintech](https://github.com/litvintech))\n- Skip indexing of not existed account [\\#578](https://github.com/cybercongress/go-cyber/pull/578) ([litvintech](https://github.com/litvintech))\n- Fixed call of rank rpc endpoint [\\#572](https://github.com/cybercongress/go-cyber/pull/572) ([litvintech](https://github.com/litvintech))\n- Fixed freeing of allocated memory [\\#571](https://github.com/cybercongress/go-cyber/pull/571) ([litvintech](https://github.com/litvintech))\n- Energy module [\\#565](https://github.com/cybercongress/go-cyber/pull/565) ([litvintech](https://github.com/litvintech))\n- Uints rank's values [\\#564](https://github.com/cybercongress/go-cyber/pull/564) ([litvintech](https://github.com/litvintech))\n- Extra APIs [\\#563](https://github.com/cybercongress/go-cyber/pull/563) ([litvintech](https://github.com/litvintech))\n- upgrade\\_fixes\\_to\\_run\\_val [\\#545](https://github.com/cybercongress/go-cyber/pull/545) ([mrlp4](https://github.com/mrlp4))\n- fixes to upgrade guide [\\#537](https://github.com/cybercongress/go-cyber/pull/537) ([mrlp4](https://github.com/mrlp4))\n- Update script.sh [\\#536](https://github.com/cybercongress/go-cyber/pull/536) ([SaveTheAles](https://github.com/SaveTheAles))\n- Update naming for docs build to go-cyber [\\#535](https://github.com/cybercongress/go-cyber/pull/535) ([SaveTheAles](https://github.com/SaveTheAles))\n- Software upgrade documentation [\\#534](https://github.com/cybercongress/go-cyber/pull/534) ([litvintech](https://github.com/litvintech))\n- Delegation tracking and Darwin upgrade [\\#533](https://github.com/cybercongress/go-cyber/pull/533) ([litvintech](https://github.com/litvintech))\n- Master docs update [\\#532](https://github.com/cybercongress/go-cyber/pull/532) ([mrlp4](https://github.com/mrlp4))\n- Upgraded to sdk 38.5 and tm 33.6 [\\#531](https://github.com/cybercongress/go-cyber/pull/531) ([litvintech](https://github.com/litvintech))\n- upd repo name to go-cyber [\\#527](https://github.com/cybercongress/go-cyber/pull/527) ([mrlp4](https://github.com/mrlp4))\n- docs\\_fixes [\\#526](https://github.com/cybercongress/go-cyber/pull/526) ([mrlp4](https://github.com/mrlp4))\n- fixes\\_tun\\_val\\_guide [\\#525](https://github.com/cybercongress/go-cyber/pull/525) ([mrlp4](https://github.com/mrlp4))\n- fix\\_daemon\\_name [\\#523](https://github.com/cybercongress/go-cyber/pull/523) ([mrlp4](https://github.com/mrlp4))\n- Upgrade sdk and tm versions due to security issue [\\#519](https://github.com/cybercongress/go-cyber/pull/519) ([litvintech](https://github.com/litvintech))\n- docs\\_update [\\#517](https://github.com/cybercongress/go-cyber/pull/517) ([mrlp4](https://github.com/mrlp4))\n\n## [v0.1.6](https://github.com/cybercongress/go-cyber/tree/v0.1.6) (2020-04-03)\n[Full Changelog](https://github.com/cybercongress/go-cyber/compare/euler-5...v0.1.6)\n\n**Closed issues:**\n\n- Update docs for euler-6 [\\#503](https://github.com/cybercongress/go-cyber/issues/503)\n- Add network load endpoint [\\#499](https://github.com/cybercongress/go-cyber/issues/499)\n- Remove graph merkling due storage iterator non-determinism [\\#496](https://github.com/cybercongress/go-cyber/issues/496)\n- Add used karma to cyberlink's events [\\#495](https://github.com/cybercongress/go-cyber/issues/495)\n- The error during the signing tx with imported eth key [\\#494](https://github.com/cybercongress/go-cyber/issues/494)\n- Refactore http client [\\#493](https://github.com/cybercongress/go-cyber/issues/493)\n- Provide NewEventManager to links handler [\\#488](https://github.com/cybercongress/go-cyber/issues/488)\n- Upgrade to cosmwasm 0.7 [\\#484](https://github.com/cybercongress/go-cyber/issues/484)\n- Apply infinite gas meter to ante handler [\\#483](https://github.com/cybercongress/go-cyber/issues/483)\n- Fix iteration over links storage [\\#482](https://github.com/cybercongress/go-cyber/issues/482)\n- Rename cyberlink msg [\\#480](https://github.com/cybercongress/go-cyber/issues/480)\n- Deploy first WASM contract to Euler-6 [\\#479](https://github.com/cybercongress/go-cyber/issues/479)\n- Refactore module to go-cyber [\\#478](https://github.com/cybercongress/go-cyber/issues/478)\n- Add cosmwasm build stage in Dockerfile [\\#470](https://github.com/cybercongress/go-cyber/issues/470)\n- Prepare genesis file of Euler-6 [\\#466](https://github.com/cybercongress/go-cyber/issues/466)\n- Export cyberlinks from Euler-5 [\\#465](https://github.com/cybercongress/go-cyber/issues/465)\n- Test online upgrades in Euler-6 [\\#464](https://github.com/cybercongress/go-cyber/issues/464)\n- Upgrade link's custom storage to sdk's storage [\\#462](https://github.com/cybercongress/go-cyber/issues/462)\n- Update swagger.yaml for LCD  [\\#461](https://github.com/cybercongress/go-cyber/issues/461)\n- Unexpected bandwidth regeneration after a transaction [\\#460](https://github.com/cybercongress/go-cyber/issues/460)\n- NaN rank values for objects after agent's full power transfer [\\#455](https://github.com/cybercongress/go-cyber/issues/455)\n- Add events to link msg [\\#454](https://github.com/cybercongress/go-cyber/issues/454)\n- Wrong app hash calculated after node restart. [\\#453](https://github.com/cybercongress/go-cyber/issues/453)\n- Error in RPC response, top endpoint [\\#451](https://github.com/cybercongress/go-cyber/issues/451)\n- Upgrade to cosmos-sdk v0.38.0 [\\#449](https://github.com/cybercongress/go-cyber/issues/449)\n- Fix overall karma calculation [\\#448](https://github.com/cybercongress/go-cyber/issues/448)\n- Standalone changes of modules balance shouldn't trigger a rank recalculation [\\#446](https://github.com/cybercongress/go-cyber/issues/446)\n- Command list from euler 3 update [\\#433](https://github.com/cybercongress/go-cyber/issues/433)\n- Upgrade to Cosmos-SDK 0.38.0 [\\#429](https://github.com/cybercongress/go-cyber/issues/429)\n- Update run\\_validator guide for Euler-dev [\\#423](https://github.com/cybercongress/go-cyber/issues/423)\n- WASM integration [\\#381](https://github.com/cybercongress/go-cyber/issues/381)\n\n**Merged pull requests:**\n\n- upd to cli-install script [\\#516](https://github.com/cybercongress/go-cyber/pull/516) ([mrlp4](https://github.com/mrlp4))\n- update ci script for changelog generator [\\#515](https://github.com/cybercongress/go-cyber/pull/515) ([SaveTheAles](https://github.com/SaveTheAles))\n- update repo name at changelog generator [\\#514](https://github.com/cybercongress/go-cyber/pull/514) ([SaveTheAles](https://github.com/SaveTheAles))\n- Improve band and rank params init [\\#513](https://github.com/cybercongress/go-cyber/pull/513) ([litvintech](https://github.com/litvintech))\n- Upd genesis hash at run\\_validator [\\#512](https://github.com/cybercongress/go-cyber/pull/512) ([mrlp4](https://github.com/mrlp4))\n- Euler-6 release [\\#511](https://github.com/cybercongress/go-cyber/pull/511) ([litvintech](https://github.com/litvintech))\n- Updated README [\\#510](https://github.com/cybercongress/go-cyber/pull/510) ([litvintech](https://github.com/litvintech))\n- Remove http client [\\#509](https://github.com/cybercongress/go-cyber/pull/509) ([litvintech](https://github.com/litvintech))\n- Add swagger bundle for cyber [\\#508](https://github.com/cybercongress/go-cyber/pull/508) ([litvintech](https://github.com/litvintech))\n- Documentation update for 0.1.6 [\\#507](https://github.com/cybercongress/go-cyber/pull/507) ([mrlp4](https://github.com/mrlp4))\n- Install cybercli script [\\#506](https://github.com/cybercongress/go-cyber/pull/506) ([mrlp4](https://github.com/mrlp4))\n- Update run validator guide [\\#504](https://github.com/cybercongress/go-cyber/pull/504) ([mrlp4](https://github.com/mrlp4))\n- Remove merkling of graph [\\#501](https://github.com/cybercongress/go-cyber/pull/501) ([litvintech](https://github.com/litvintech))\n- Add RPC endpoint for network load [\\#500](https://github.com/cybercongress/go-cyber/pull/500) ([litvintech](https://github.com/litvintech))\n- Fixed ethereum private key import [\\#498](https://github.com/cybercongress/go-cyber/pull/498) ([litvintech](https://github.com/litvintech))\n- Add used karma to cyberlinks events [\\#497](https://github.com/cybercongress/go-cyber/pull/497) ([litvintech](https://github.com/litvintech))\n- Fix event manager for NewLinksHangler [\\#492](https://github.com/cybercongress/go-cyber/pull/492) ([litvintech](https://github.com/litvintech))\n- Fix iteration over links storage [\\#491](https://github.com/cybercongress/go-cyber/pull/491) ([litvintech](https://github.com/litvintech))\n- Rename cyberlink msg [\\#490](https://github.com/cybercongress/go-cyber/pull/490) ([litvintech](https://github.com/litvintech))\n- Upgrade to cosmwasm 0.7 [\\#489](https://github.com/cybercongress/go-cyber/pull/489) ([litvintech](https://github.com/litvintech))\n- Add custom ante handler with applied infinity gas meter [\\#487](https://github.com/cybercongress/go-cyber/pull/487) ([litvintech](https://github.com/litvintech))\n- Add cosmwasm docker build stage [\\#486](https://github.com/cybercongress/go-cyber/pull/486) ([litvintech](https://github.com/litvintech))\n- Added cosmwasm module [\\#477](https://github.com/cybercongress/go-cyber/pull/477) ([litvintech](https://github.com/litvintech))\n- Upgrade to cosmos-SDK v0.38.1 [\\#476](https://github.com/cybercongress/go-cyber/pull/476) ([litvintech](https://github.com/litvintech))\n- Fixed NaN in weights calculation in CPU/GPU [\\#475](https://github.com/cybercongress/go-cyber/pull/475) ([litvintech](https://github.com/litvintech))\n- Euler-5.1 [\\#473](https://github.com/cybercongress/go-cyber/pull/473) ([litvintech](https://github.com/litvintech))\n- Fixed calculation of overall karma [\\#459](https://github.com/cybercongress/go-cyber/pull/459) ([litvintech](https://github.com/litvintech))\n- Fixed triggering of rank calculation by modules [\\#458](https://github.com/cybercongress/go-cyber/pull/458) ([litvintech](https://github.com/litvintech))\n- Added skipping of NaN objects during sorting [\\#457](https://github.com/cybercongress/go-cyber/pull/457) ([litvintech](https://github.com/litvintech))\n- Updated index.md [\\#442](https://github.com/cybercongress/go-cyber/pull/442) ([mrlp4](https://github.com/mrlp4))\n- fixed title ultimate guide; fixed folders names [\\#441](https://github.com/cybercongress/go-cyber/pull/441) ([mrlp4](https://github.com/mrlp4))\n\n## [euler-5](https://github.com/cybercongress/go-cyber/tree/euler-5) (2019-12-20)\n[Full Changelog](https://github.com/cybercongress/go-cyber/compare/v0.1.5-rc1...euler-5)\n\n**Closed issues:**\n\n- Bump tendermint/cosmos-sdk to 0.32.8/0.37.4 [\\#437](https://github.com/cybercongress/go-cyber/issues/437)\n- Add overall karma stats [\\#435](https://github.com/cybercongress/go-cyber/issues/435)\n- Add instructions for easy install and use non-validating version of cyberdcli [\\#425](https://github.com/cybercongress/go-cyber/issues/425)\n- euler-x params discussion [\\#422](https://github.com/cybercongress/go-cyber/issues/422)\n- Add rank and bandwidth modules LCD endpoints [\\#419](https://github.com/cybercongress/go-cyber/issues/419)\n- Add max block bandwidth parameter [\\#415](https://github.com/cybercongress/go-cyber/issues/415)\n- Make cross testing of data preparation code for GPU [\\#413](https://github.com/cybercongress/go-cyber/issues/413)\n- Fix CLI output on txs [\\#412](https://github.com/cybercongress/go-cyber/issues/412)\n- Add Makefile for rank CUDA kernel [\\#409](https://github.com/cybercongress/go-cyber/issues/409)\n- CUDA kernel for Rank Merkle Tree calculation [\\#401](https://github.com/cybercongress/go-cyber/issues/401)\n- Sync fail due to possible DB corruption  [\\#397](https://github.com/cybercongress/go-cyber/issues/397)\n- Add instructions to use without docker [\\#389](https://github.com/cybercongress/go-cyber/issues/389)\n- Update docs on inflation params from euler-5 [\\#385](https://github.com/cybercongress/go-cyber/issues/385)\n- Ability to launch validator from blockchain backup [\\#384](https://github.com/cybercongress/go-cyber/issues/384)\n- Top CIDs endpoint [\\#378](https://github.com/cybercongress/go-cyber/issues/378)\n- Index of used by account bandwidth for linking [\\#371](https://github.com/cybercongress/go-cyber/issues/371)\n- Snapshot of Cosmos Hub for euler-5 [\\#369](https://github.com/cybercongress/go-cyber/issues/369)\n- Configure BIP44 path [\\#368](https://github.com/cybercongress/go-cyber/issues/368)\n- Get actual data on euler-4 validators uptime [\\#360](https://github.com/cybercongress/go-cyber/issues/360)\n- Set size limit for CIDv1 [\\#346](https://github.com/cybercongress/go-cyber/issues/346)\n- Prepare genesis for euler-5 with proofs flow [\\#339](https://github.com/cybercongress/go-cyber/issues/339)\n- Adjust consensus and cyberd params for euler-5 [\\#338](https://github.com/cybercongress/go-cyber/issues/338)\n- Add table of seed/validator nodes to README for euler-4 [\\#319](https://github.com/cybercongress/go-cyber/issues/319)\n- Advanced export [\\#318](https://github.com/cybercongress/go-cyber/issues/318)\n- Make profiling [\\#317](https://github.com/cybercongress/go-cyber/issues/317)\n- Move bandwidth logic to ante handler [\\#249](https://github.com/cybercongress/go-cyber/issues/249)\n- Download genesis files on start of docker container [\\#224](https://github.com/cybercongress/go-cyber/issues/224)\n- Refactor daemon/cmd package [\\#199](https://github.com/cybercongress/go-cyber/issues/199)\n- index stats rpc add block time fields [\\#176](https://github.com/cybercongress/go-cyber/issues/176)\n\n**Merged pull requests:**\n\n- 0.1.5 docs cleanup [\\#439](https://github.com/cybercongress/go-cyber/pull/439) ([mrlp4](https://github.com/mrlp4))\n- Bump cosmos-sdk and tendermint versions [\\#438](https://github.com/cybercongress/go-cyber/pull/438) ([litvintech](https://github.com/litvintech))\n- Added used overall karma generated by agents [\\#436](https://github.com/cybercongress/go-cyber/pull/436) ([litvintech](https://github.com/litvintech))\n- Implemented top cids endpoint and top processing [\\#434](https://github.com/cybercongress/go-cyber/pull/434) ([litvintech](https://github.com/litvintech))\n- run\\_validator\\_fixes [\\#432](https://github.com/cybercongress/go-cyber/pull/432) ([mrlp4](https://github.com/mrlp4))\n- add Tendermint KMS  with Leger validator setup [\\#431](https://github.com/cybercongress/go-cyber/pull/431) ([mrlp4](https://github.com/mrlp4))\n- Update README.md [\\#430](https://github.com/cybercongress/go-cyber/pull/430) ([serejandmyself](https://github.com/serejandmyself))\n- ledger\\_guide\\_cyberd [\\#428](https://github.com/cybercongress/go-cyber/pull/428) ([mrlp4](https://github.com/mrlp4))\n- create run\\_validator for euler-dev testnet [\\#427](https://github.com/cybercongress/go-cyber/pull/427) ([mrlp4](https://github.com/mrlp4))\n- Remove outdated whitepaper [\\#424](https://github.com/cybercongress/go-cyber/pull/424) ([cyb-master](https://github.com/cyb-master))\n- 419 band and rank modules endpoints [\\#420](https://github.com/cybercongress/go-cyber/pull/420) ([litvintech](https://github.com/litvintech))\n- Client upgrade [\\#418](https://github.com/cybercongress/go-cyber/pull/418) ([litvintech](https://github.com/litvintech))\n- Added stat for used for linking band [\\#417](https://github.com/cybercongress/go-cyber/pull/417) ([litvintech](https://github.com/litvintech))\n- \\#320 add advanced guides [\\#390](https://github.com/cybercongress/go-cyber/pull/390) ([SaveTheAles](https://github.com/SaveTheAles))\n\n## [v0.1.5-rc1](https://github.com/cybercongress/go-cyber/tree/v0.1.5-rc1) (2019-11-01)\n[Full Changelog](https://github.com/cybercongress/go-cyber/compare/v0.1.4...v0.1.5-rc1)\n\n**Closed issues:**\n\n- Change to native ante handler [\\#403](https://github.com/cybercongress/go-cyber/issues/403)\n- Parallelization data preparation for GPU [\\#400](https://github.com/cybercongress/go-cyber/issues/400)\n- Add Makefile [\\#396](https://github.com/cybercongress/go-cyber/issues/396)\n- Cyberd Ledger support guide [\\#391](https://github.com/cybercongress/go-cyber/issues/391)\n- Refactor DesirableNetworkBandwidthForRecoveryPeriod [\\#386](https://github.com/cybercongress/go-cyber/issues/386)\n- Damping factor as onchain parameter [\\#379](https://github.com/cybercongress/go-cyber/issues/379)\n- Upgrade to cosmos-sdk 0.37.0 [\\#377](https://github.com/cybercongress/go-cyber/issues/377)\n- Fix search index loading [\\#373](https://github.com/cybercongress/go-cyber/issues/373)\n- Upgrade mint module [\\#356](https://github.com/cybercongress/go-cyber/issues/356)\n- Remove old distribution [\\#353](https://github.com/cybercongress/go-cyber/issues/353)\n- Add validate-genesis command to CLI [\\#335](https://github.com/cybercongress/go-cyber/issues/335)\n- Governance parameterization of bandwidth parameters [\\#332](https://github.com/cybercongress/go-cyber/issues/332)\n- Governance parameterization of rank window [\\#331](https://github.com/cybercongress/go-cyber/issues/331)\n- Adjusting of link weight [\\#330](https://github.com/cybercongress/go-cyber/issues/330)\n- Answer why CyberD is better for Web3 then Google [\\#328](https://github.com/cybercongress/go-cyber/issues/328)\n-  Exclude at the current stage the consideration of the behavioural factor in the search for ordinary users [\\#327](https://github.com/cybercongress/go-cyber/issues/327)\n- New distribution [\\#316](https://github.com/cybercongress/go-cyber/issues/316)\n- Create list of supported and tested GPUs [\\#315](https://github.com/cybercongress/go-cyber/issues/315)\n- Upgrade to cosmos-sdk 0.34.4 [\\#313](https://github.com/cybercongress/go-cyber/issues/313)\n- Update development environment documentation [\\#311](https://github.com/cybercongress/go-cyber/issues/311)\n- RPC endpoint for cid rank proofs [\\#309](https://github.com/cybercongress/go-cyber/issues/309)\n- Fix pictures in whitepaper [\\#303](https://github.com/cybercongress/go-cyber/issues/303)\n- Error during rewards withdrawal  [\\#302](https://github.com/cybercongress/go-cyber/issues/302)\n- Merkle proofs for link storage [\\#299](https://github.com/cybercongress/go-cyber/issues/299)\n- Add backup and restore validator keys guide. [\\#286](https://github.com/cybercongress/go-cyber/issues/286)\n- Move bandwidth and rank constants to params store [\\#284](https://github.com/cybercongress/go-cyber/issues/284)\n- Cyberadmin telegram-bot for cyberd [\\#281](https://github.com/cybercongress/go-cyber/issues/281)\n- Align current network capabilities with cyberCongress pricing model [\\#262](https://github.com/cybercongress/go-cyber/issues/262)\n- Add keystore doc [\\#256](https://github.com/cybercongress/go-cyber/issues/256)\n- Finish Proof of Code genesis drop [\\#294](https://github.com/cybercongress/go-cyber/issues/294)\n- Full validating quorum [\\#195](https://github.com/cybercongress/go-cyber/issues/195)\n- Infinity race problem. [\\#172](https://github.com/cybercongress/go-cyber/issues/172)\n- Rank calculation period automatic adjustment [\\#142](https://github.com/cybercongress/go-cyber/issues/142)\n- Slow node start-up. [\\#138](https://github.com/cybercongress/go-cyber/issues/138)\n- RPC get cid rank endpoint [\\#116](https://github.com/cybercongress/go-cyber/issues/116)\n- CheckTx doesn't include coins that will be minted in current block [\\#113](https://github.com/cybercongress/go-cyber/issues/113)\n\n**Merged pull requests:**\n\n- Added max block band params and validation [\\#421](https://github.com/cybercongress/go-cyber/pull/421) ([litvintech](https://github.com/litvintech))\n- 318 advanced export [\\#416](https://github.com/cybercongress/go-cyber/pull/416) ([litvintech](https://github.com/litvintech))\n- Remove outdated whitepaper from docs [\\#414](https://github.com/cybercongress/go-cyber/pull/414) ([SaveTheAles](https://github.com/SaveTheAles))\n- Added makefile for rank, added tag CUDA for daemon build [\\#411](https://github.com/cybercongress/go-cyber/pull/411) ([litvintech](https://github.com/litvintech))\n- Band refactoring [\\#408](https://github.com/cybercongress/go-cyber/pull/408) ([litvintech](https://github.com/litvintech))\n- Damping factor and tolerance as onchain params [\\#407](https://github.com/cybercongress/go-cyber/pull/407) ([litvintech](https://github.com/litvintech))\n- Refactoring of data preparation for GPU, added workers [\\#406](https://github.com/cybercongress/go-cyber/pull/406) ([litvintech](https://github.com/litvintech))\n- Added native ante handler [\\#405](https://github.com/cybercongress/go-cyber/pull/405) ([litvintech](https://github.com/litvintech))\n- Added Makefile, updated Dockerfile for [\\#404](https://github.com/cybercongress/go-cyber/pull/404) ([litvintech](https://github.com/litvintech))\n- Update band parameters [\\#399](https://github.com/cybercongress/go-cyber/pull/399) ([vasilistefanenko](https://github.com/vasilistefanenko))\n- Sdk 37 upgrade [\\#395](https://github.com/cybercongress/go-cyber/pull/395) ([vasilistefanenko](https://github.com/vasilistefanenko))\n- add Ledger support guide  [\\#392](https://github.com/cybercongress/go-cyber/pull/392) ([mrlp4](https://github.com/mrlp4))\n- Upgrade SDK to 0.37.0 LTS [\\#388](https://github.com/cybercongress/go-cyber/pull/388) ([litvintech](https://github.com/litvintech))\n- 352 link node [\\#387](https://github.com/cybercongress/go-cyber/pull/387) ([vasilistefanenko](https://github.com/vasilistefanenko))\n- Update README.md [\\#376](https://github.com/cybercongress/go-cyber/pull/376) ([serejandmyself](https://github.com/serejandmyself))\n- Search index fix [\\#375](https://github.com/cybercongress/go-cyber/pull/375) ([litvintech](https://github.com/litvintech))\n- Awesome README [\\#374](https://github.com/cybercongress/go-cyber/pull/374) ([litvintech](https://github.com/litvintech))\n- add governance overview article [\\#367](https://github.com/cybercongress/go-cyber/pull/367) ([SaveTheAles](https://github.com/SaveTheAles))\n- Update multisig\\_guide.md [\\#366](https://github.com/cybercongress/go-cyber/pull/366) ([serejandmyself](https://github.com/serejandmyself))\n- Upgrade to cosmos-sdk  [\\#362](https://github.com/cybercongress/go-cyber/pull/362) ([litvintech](https://github.com/litvintech))\n- Merkle tree for links [\\#361](https://github.com/cybercongress/go-cyber/pull/361) ([litvintech](https://github.com/litvintech))\n- Removed old distribution [\\#358](https://github.com/cybercongress/go-cyber/pull/358) ([litvintech](https://github.com/litvintech))\n- Upgrade to cosmos-hub mint module [\\#357](https://github.com/cybercongress/go-cyber/pull/357) ([litvintech](https://github.com/litvintech))\n- 309 rank proof [\\#355](https://github.com/cybercongress/go-cyber/pull/355) ([janus](https://github.com/janus))\n- Fixes fatal mistake in distribution [\\#348](https://github.com/cybercongress/go-cyber/pull/348) ([cyb-master](https://github.com/cyb-master))\n- Format hotfix [\\#347](https://github.com/cybercongress/go-cyber/pull/347) ([cyb-master](https://github.com/cyb-master))\n- Edit GPU list according to @litvintech comments [\\#345](https://github.com/cybercongress/go-cyber/pull/345) ([SaveTheAles](https://github.com/SaveTheAles))\n- Change get-cyb description [\\#344](https://github.com/cybercongress/go-cyber/pull/344) ([SaveTheAles](https://github.com/SaveTheAles))\n- Add keystore managment guide \\#256 [\\#343](https://github.com/cybercongress/go-cyber/pull/343) ([SaveTheAles](https://github.com/SaveTheAles))\n- Merkle tree for links [\\#340](https://github.com/cybercongress/go-cyber/pull/340) ([litvintech](https://github.com/litvintech))\n- Final fixes of paper [\\#334](https://github.com/cybercongress/go-cyber/pull/334) ([cyb-master](https://github.com/cyb-master))\n- Problem with install NVIDIA drivers  [\\#326](https://github.com/cybercongress/go-cyber/pull/326) ([wimel](https://github.com/wimel))\n- update run\\_validator [\\#325](https://github.com/cybercongress/go-cyber/pull/325) ([wimel](https://github.com/wimel))\n- \\#320 add multisig guide create and send [\\#324](https://github.com/cybercongress/go-cyber/pull/324) ([SaveTheAles](https://github.com/SaveTheAles))\n- Some Dan's fixes [\\#323](https://github.com/cybercongress/go-cyber/pull/323) ([ghost](https://github.com/ghost))\n- Proposal of the new distribution [\\#322](https://github.com/cybercongress/go-cyber/pull/322) ([cyb-master](https://github.com/cyb-master))\n- Cosmos-sdk upgrade to 0.34.4 [\\#314](https://github.com/cybercongress/go-cyber/pull/314) ([litvintech](https://github.com/litvintech))\n- Updated docs for dev env setup [\\#312](https://github.com/cybercongress/go-cyber/pull/312) ([litvintech](https://github.com/litvintech))\n- Add goveralls support for test coverage [\\#305](https://github.com/cybercongress/go-cyber/pull/305) ([arturalbov](https://github.com/arturalbov))\n\n## [v0.1.4](https://github.com/cybercongress/go-cyber/tree/v0.1.4) (2019-03-15)\n[Full Changelog](https://github.com/cybercongress/go-cyber/compare/v0.1.3...v0.1.4)\n\n**Closed issues:**\n\n- Consensus Failure [\\#293](https://github.com/cybercongress/go-cyber/issues/293)\n- Enabled send [\\#290](https://github.com/cybercongress/go-cyber/issues/290)\n- move debug logic to x/debug module [\\#288](https://github.com/cybercongress/go-cyber/issues/288)\n- Add doc of using help feature of cli [\\#287](https://github.com/cybercongress/go-cyber/issues/287)\n- Infinity loop in rank end blocker if node was restarted before x00 blocks. [\\#283](https://github.com/cybercongress/go-cyber/issues/283)\n- Add doc about editing moniker and openning 26656 port. [\\#282](https://github.com/cybercongress/go-cyber/issues/282)\n- Centralized network communication [\\#257](https://github.com/cybercongress/go-cyber/issues/257)\n- Get supply [\\#158](https://github.com/cybercongress/go-cyber/issues/158)\n- Development start guide [\\#78](https://github.com/cybercongress/go-cyber/issues/78)\n\n**Merged pull requests:**\n\n- 0.1.4 [\\#298](https://github.com/cybercongress/go-cyber/pull/298) ([hleb-albau](https://github.com/hleb-albau))\n- \\#293 Handle bank delegation method in inmem index update mechanism [\\#297](https://github.com/cybercongress/go-cyber/pull/297) ([hleb-albau](https://github.com/hleb-albau))\n- 138 links storage [\\#295](https://github.com/cybercongress/go-cyber/pull/295) ([hleb-albau](https://github.com/hleb-albau))\n- \\#78 Dev Env docs [\\#292](https://github.com/cybercongress/go-cyber/pull/292) ([hleb-albau](https://github.com/hleb-albau))\n- \\#290 Enable send [\\#291](https://github.com/cybercongress/go-cyber/pull/291) ([hleb-albau](https://github.com/hleb-albau))\n- \\#288 Move debug code to x/debug [\\#289](https://github.com/cybercongress/go-cyber/pull/289) ([hleb-albau](https://github.com/hleb-albau))\n- \\#158 Get supply [\\#285](https://github.com/cybercongress/go-cyber/pull/285) ([hleb-albau](https://github.com/hleb-albau))\n\n## [v0.1.3](https://github.com/cybercongress/go-cyber/tree/v0.1.3) (2019-03-01)\n[Full Changelog](https://github.com/cybercongress/go-cyber/compare/v0.1.2...v0.1.3)\n\n**Closed issues:**\n\n- Remove full index loading for next rank in link index [\\#275](https://github.com/cybercongress/go-cyber/issues/275)\n- Generate lottery results cmd [\\#273](https://github.com/cybercongress/go-cyber/issues/273)\n- Can not explore existing account if it have not any outgoing transactions [\\#238](https://github.com/cybercongress/go-cyber/issues/238)\n- distribution validator slashes don't work in cybercli [\\#237](https://github.com/cybercongress/go-cyber/issues/237)\n- Enable governance module [\\#193](https://github.com/cybercongress/go-cyber/issues/193)\n\n**Merged pull requests:**\n\n- minor docs reorg fixes [\\#279](https://github.com/cybercongress/go-cyber/pull/279) ([SaveTheAles](https://github.com/SaveTheAles))\n- \\#193 Enable governance module [\\#278](https://github.com/cybercongress/go-cyber/pull/278) ([hleb-albau](https://github.com/hleb-albau))\n- Remove full index loading for next rank in link index [\\#277](https://github.com/cybercongress/go-cyber/pull/277) ([arturalbov](https://github.com/arturalbov))\n- \\#273 Generate lottery results cmd [\\#274](https://github.com/cybercongress/go-cyber/pull/274) ([hleb-albau](https://github.com/hleb-albau))\n- add staging [\\#272](https://github.com/cybercongress/go-cyber/pull/272) ([SaveTheAles](https://github.com/SaveTheAles))\n- add folder removing [\\#271](https://github.com/cybercongress/go-cyber/pull/271) ([SaveTheAles](https://github.com/SaveTheAles))\n- Docs ci upd [\\#270](https://github.com/cybercongress/go-cyber/pull/270) ([SaveTheAles](https://github.com/SaveTheAles))\n\n## [v0.1.2](https://github.com/cybercongress/go-cyber/tree/v0.1.2) (2019-02-23)\n[Full Changelog](https://github.com/cybercongress/go-cyber/compare/v0.1.1...v0.1.2)\n\n**Closed issues:**\n\n- Update  to cosmos 0.32.0 [\\#265](https://github.com/cybercongress/go-cyber/issues/265)\n- Rank calculation failed: out of memory [\\#264](https://github.com/cybercongress/go-cyber/issues/264)\n- Download golang only once during docker build. [\\#259](https://github.com/cybercongress/go-cyber/issues/259)\n- Do not calculate rank, if there is no new links on last window. [\\#258](https://github.com/cybercongress/go-cyber/issues/258)\n- Http client only new links option for submit endpoint [\\#254](https://github.com/cybercongress/go-cyber/issues/254)\n- Add fail at height debug flags [\\#250](https://github.com/cybercongress/go-cyber/issues/250)\n- Different bandwidth price on same block height [\\#247](https://github.com/cybercongress/go-cyber/issues/247)\n- Add more seeds into initial config [\\#244](https://github.com/cybercongress/go-cyber/issues/244)\n- Consensus failure after node restart [\\#243](https://github.com/cybercongress/go-cyber/issues/243)\n- Extend isLinkExist endpoint with possibility not specify address param [\\#242](https://github.com/cybercongress/go-cyber/issues/242)\n- Search returns 500 error when previously unexisted \"from\" CID added [\\#241](https://github.com/cybercongress/go-cyber/issues/241)\n- Create awesome gif for readme [\\#239](https://github.com/cybercongress/go-cyber/issues/239)\n- Add staking/validators endpoint to node RPC [\\#235](https://github.com/cybercongress/go-cyber/issues/235)\n- Rest server  blocks cli keystore file [\\#233](https://github.com/cybercongress/go-cyber/issues/233)\n- Add cyberd rest light-client to docker image [\\#230](https://github.com/cybercongress/go-cyber/issues/230)\n- Losе token on testnet  [\\#227](https://github.com/cybercongress/go-cyber/issues/227)\n- Launch 0.1.1 testnet [\\#205](https://github.com/cybercongress/go-cyber/issues/205)\n- Cannot interact with node [\\#203](https://github.com/cybercongress/go-cyber/issues/203)\n- Update cyberd.ai [\\#185](https://github.com/cybercongress/go-cyber/issues/185)\n- Cyberd release scheme. [\\#180](https://github.com/cybercongress/go-cyber/issues/180)\n- CI: Cyberd docker image building. Include genesis file [\\#160](https://github.com/cybercongress/go-cyber/issues/160)\n- Improve building of links index for search queries [\\#145](https://github.com/cybercongress/go-cyber/issues/145)\n- Store initial supply from genesis file \\(used by mint\\) [\\#115](https://github.com/cybercongress/go-cyber/issues/115)\n- Genesis state generator [\\#92](https://github.com/cybercongress/go-cyber/issues/92)\n- Webscoket API [\\#76](https://github.com/cybercongress/go-cyber/issues/76)\n- Distribution [\\#27](https://github.com/cybercongress/go-cyber/issues/27)\n- Ranking research [\\#24](https://github.com/cybercongress/go-cyber/issues/24)\n- Define distribution in paper [\\#5](https://github.com/cybercongress/go-cyber/issues/5)\n\n**Merged pull requests:**\n\n- 0.1.2 [\\#269](https://github.com/cybercongress/go-cyber/pull/269) ([hleb-albau](https://github.com/hleb-albau))\n- Refactoring  of search index. Fix links export [\\#268](https://github.com/cybercongress/go-cyber/pull/268) ([arturalbov](https://github.com/arturalbov))\n- Launch euler-2 testnet [\\#267](https://github.com/cybercongress/go-cyber/pull/267) ([hleb-albau](https://github.com/hleb-albau))\n- \\#265 Update to cosmos 0.32.0 [\\#266](https://github.com/cybercongress/go-cyber/pull/266) ([hleb-albau](https://github.com/hleb-albau))\n- Consensus failure after node restart [\\#263](https://github.com/cybercongress/go-cyber/pull/263) ([arturalbov](https://github.com/arturalbov))\n- Do not calculate rank, if there is no new links on last window. [\\#261](https://github.com/cybercongress/go-cyber/pull/261) ([arturalbov](https://github.com/arturalbov))\n- Client submit only new links flag [\\#260](https://github.com/cybercongress/go-cyber/pull/260) ([hleb-albau](https://github.com/hleb-albau))\n- Improve building of links index for search queries [\\#255](https://github.com/cybercongress/go-cyber/pull/255) ([arturalbov](https://github.com/arturalbov))\n- \\#244 Add moon as seed node [\\#253](https://github.com/cybercongress/go-cyber/pull/253) ([hleb-albau](https://github.com/hleb-albau))\n- \\#250 Add fail at height debug flag [\\#251](https://github.com/cybercongress/go-cyber/pull/251) ([hleb-albau](https://github.com/hleb-albau))\n- \\#247 Different bandwidth price on same block height [\\#248](https://github.com/cybercongress/go-cyber/pull/248) ([hleb-albau](https://github.com/hleb-albau))\n- \\#242 Extend isLinkExist endpoint with possibility not specify address [\\#246](https://github.com/cybercongress/go-cyber/pull/246) ([hleb-albau](https://github.com/hleb-albau))\n- \\#242 Extend isLinkExist endpoint with possibility not specify address [\\#245](https://github.com/cybercongress/go-cyber/pull/245) ([hleb-albau](https://github.com/hleb-albau))\n- Add staking/validators endpoint to node RPC [\\#236](https://github.com/cybercongress/go-cyber/pull/236) ([arturalbov](https://github.com/arturalbov))\n- Rest server blocks cli keystore file [\\#234](https://github.com/cybercongress/go-cyber/pull/234) ([arturalbov](https://github.com/arturalbov))\n- UPD run validator md [\\#232](https://github.com/cybercongress/go-cyber/pull/232) ([SaveTheAles](https://github.com/SaveTheAles))\n- Add cyberd rest light-client to docker image [\\#231](https://github.com/cybercongress/go-cyber/pull/231) ([arturalbov](https://github.com/arturalbov))\n- Fix docs [\\#228](https://github.com/cybercongress/go-cyber/pull/228) ([arturalbov](https://github.com/arturalbov))\n- upd run-validator.md [\\#225](https://github.com/cybercongress/go-cyber/pull/225) ([SaveTheAles](https://github.com/SaveTheAles))\n\n## [v0.1.1](https://github.com/cybercongress/go-cyber/tree/v0.1.1) (2019-01-31)\n[Full Changelog](https://github.com/cybercongress/go-cyber/compare/euler-1...v0.1.1)\n\n**Closed issues:**\n\n- Mass testing of cyberd-testnet 0.1.1 [\\#219](https://github.com/cybercongress/go-cyber/issues/219)\n- Export 0.1.1 genesis from 0.1.0 testnet. [\\#215](https://github.com/cybercongress/go-cyber/issues/215)\n- Setup 0.1.1 chain params for staking, distr, slashing, mint modules. [\\#201](https://github.com/cybercongress/go-cyber/issues/201)\n- Error on replay with wrong app hash calculation \\(block \\#914381\\) [\\#197](https://github.com/cybercongress/go-cyber/issues/197)\n\n## [euler-1](https://github.com/cybercongress/go-cyber/tree/euler-1) (2019-01-31)\n[Full Changelog](https://github.com/cybercongress/go-cyber/compare/euler-1.1-dev1...euler-1)\n\n**Merged pull requests:**\n\n- Euler 0.1.1 [\\#223](https://github.com/cybercongress/go-cyber/pull/223) ([arturalbov](https://github.com/arturalbov))\n- Fix import reader [\\#222](https://github.com/cybercongress/go-cyber/pull/222) ([arturalbov](https://github.com/arturalbov))\n- Landing update [\\#220](https://github.com/cybercongress/go-cyber/pull/220) ([asadovka](https://github.com/asadovka))\n- DISCUSS: Chain params for 0.1.1 network [\\#202](https://github.com/cybercongress/go-cyber/pull/202) ([hleb-albau](https://github.com/hleb-albau))\n\n## [euler-1.1-dev1](https://github.com/cybercongress/go-cyber/tree/euler-1.1-dev1) (2019-01-30)\n[Full Changelog](https://github.com/cybercongress/go-cyber/compare/euler-1.1-dev0...euler-1.1-dev1)\n\n**Closed issues:**\n\n- Link msg bandwidth cost doesn't take into account links count  [\\#216](https://github.com/cybercongress/go-cyber/issues/216)\n- Docker image  with possibility to select compute unit [\\#211](https://github.com/cybercongress/go-cyber/issues/211)\n\n**Merged pull requests:**\n\n- \\#215 Fix pou distribution uses share not percentage [\\#221](https://github.com/cybercongress/go-cyber/pull/221) ([hleb-albau](https://github.com/hleb-albau))\n- \\#215 Fix gentx commands. [\\#218](https://github.com/cybercongress/go-cyber/pull/218) ([hleb-albau](https://github.com/hleb-albau))\n\n## [euler-1.1-dev0](https://github.com/cybercongress/go-cyber/tree/euler-1.1-dev0) (2019-01-29)\n[Full Changelog](https://github.com/cybercongress/go-cyber/compare/v0.1.0...euler-1.1-dev0)\n\n**Closed issues:**\n\n- Fix typos [\\#207](https://github.com/cybercongress/go-cyber/issues/207)\n- Update landing for 0.4 whitepaper [\\#204](https://github.com/cybercongress/go-cyber/issues/204)\n- Fix validator manual [\\#189](https://github.com/cybercongress/go-cyber/issues/189)\n- Update to tendermint v29.0 [\\#187](https://github.com/cybercongress/go-cyber/issues/187)\n- Links Exporter [\\#184](https://github.com/cybercongress/go-cyber/issues/184)\n- Change mint module to default cosmos module [\\#181](https://github.com/cybercongress/go-cyber/issues/181)\n- Change Bandwidth Price to Average for 24h Sliding Window [\\#179](https://github.com/cybercongress/go-cyber/issues/179)\n- High bandwidth cost for create validator msg [\\#178](https://github.com/cybercongress/go-cyber/issues/178)\n- Bandwidth Specification Change [\\#177](https://github.com/cybercongress/go-cyber/issues/177)\n- Add rpc endpoint to submit signed link and send messages [\\#173](https://github.com/cybercongress/go-cyber/issues/173)\n- Tx size reduction: switch to more compact links tx encoding. [\\#171](https://github.com/cybercongress/go-cyber/issues/171)\n- Current Bandwidth do not respect price [\\#168](https://github.com/cybercongress/go-cyber/issues/168)\n- index entities count  endpoint [\\#165](https://github.com/cybercongress/go-cyber/issues/165)\n- negative bandwidnt  [\\#164](https://github.com/cybercongress/go-cyber/issues/164)\n- Add ipfs hashes to release [\\#161](https://github.com/cybercongress/go-cyber/issues/161)\n- Change token name from CBD to CYB in the testnetwork [\\#157](https://github.com/cybercongress/go-cyber/issues/157)\n- Wrong CYB allocation in Genesis [\\#156](https://github.com/cybercongress/go-cyber/issues/156)\n- Update docker with 0.1.0 version [\\#154](https://github.com/cybercongress/go-cyber/issues/154)\n- Add more issues templates. [\\#153](https://github.com/cybercongress/go-cyber/issues/153)\n- Move import\\_private command to keys subcomand [\\#152](https://github.com/cybercongress/go-cyber/issues/152)\n- Add trust-node by default in cli [\\#151](https://github.com/cybercongress/go-cyber/issues/151)\n- Handle import of ethereum privkeys with 0x [\\#150](https://github.com/cybercongress/go-cyber/issues/150)\n- Numerous small fixes in whitepaper [\\#89](https://github.com/cybercongress/go-cyber/issues/89)\n- Cyberd landing make up [\\#36](https://github.com/cybercongress/go-cyber/issues/36)\n- Whitepaper 0.4 [\\#25](https://github.com/cybercongress/go-cyber/issues/25)\n\n**Merged pull requests:**\n\n- CI: testnet ipfs files hashes   [\\#217](https://github.com/cybercongress/go-cyber/pull/217) ([arturalbov](https://github.com/arturalbov))\n- WIP: CI Cyberd docker image building. Include genesis file [\\#214](https://github.com/cybercongress/go-cyber/pull/214) ([arturalbov](https://github.com/arturalbov))\n- \\#197 Error on replay with wrong app hash calculation [\\#213](https://github.com/cybercongress/go-cyber/pull/213) ([hleb-albau](https://github.com/hleb-albau))\n- Links exporter [\\#210](https://github.com/cybercongress/go-cyber/pull/210) ([arturalbov](https://github.com/arturalbov))\n- R4R \\#181 Constant Block Reward [\\#209](https://github.com/cybercongress/go-cyber/pull/209) ([hleb-albau](https://github.com/hleb-albau))\n- 157 change token protocol name [\\#208](https://github.com/cybercongress/go-cyber/pull/208) ([hleb-albau](https://github.com/hleb-albau))\n- Fix typos get\\_CYB.md [\\#206](https://github.com/cybercongress/go-cyber/pull/206) ([serejandmyself](https://github.com/serejandmyself))\n- R4R: \\#156 Add Missing euler tokens cmd [\\#200](https://github.com/cybercongress/go-cyber/pull/200) ([hleb-albau](https://github.com/hleb-albau))\n- Update to cosmos-sdk v0.30.0 [\\#198](https://github.com/cybercongress/go-cyber/pull/198) ([hleb-albau](https://github.com/hleb-albau))\n- Tx size reduction: switch to more compact links tx encoding [\\#192](https://github.com/cybercongress/go-cyber/pull/192) ([arturalbov](https://github.com/arturalbov))\n- Fix rank calculation context data [\\#191](https://github.com/cybercongress/go-cyber/pull/191) ([hleb-albau](https://github.com/hleb-albau))\n- Important fixes in validators manual [\\#190](https://github.com/cybercongress/go-cyber/pull/190) ([cyb-master](https://github.com/cyb-master))\n- Change Bandwidth Price to Average for 24h Sliding Window [\\#188](https://github.com/cybercongress/go-cyber/pull/188) ([arturalbov](https://github.com/arturalbov))\n- R4R Update cosmos to latest develop [\\#186](https://github.com/cybercongress/go-cyber/pull/186) ([hleb-albau](https://github.com/hleb-albau))\n- \\#153 Add more issues templates. [\\#183](https://github.com/cybercongress/go-cyber/pull/183) ([hleb-albau](https://github.com/hleb-albau))\n- \\#178 \\#168 Bandwidth price + Msg cost for non link txes [\\#182](https://github.com/cybercongress/go-cyber/pull/182) ([hleb-albau](https://github.com/hleb-albau))\n- \\#173 Add rpc endpoint to submit signed link and send messages [\\#174](https://github.com/cybercongress/go-cyber/pull/174) ([hleb-albau](https://github.com/hleb-albau))\n- Technical notes on euler release [\\#169](https://github.com/cybercongress/go-cyber/pull/169) ([cyb-master](https://github.com/cyb-master))\n- Handle import of ethereum privkeys with 0x. Trust node by default  [\\#167](https://github.com/cybercongress/go-cyber/pull/167) ([arturalbov](https://github.com/arturalbov))\n- \\#164 fix rpc negative bw \\#165 add index entities count endpoint [\\#166](https://github.com/cybercongress/go-cyber/pull/166) ([hleb-albau](https://github.com/hleb-albau))\n- Move import\\_private command to keys subcomand [\\#159](https://github.com/cybercongress/go-cyber/pull/159) ([arturalbov](https://github.com/arturalbov))\n\n## [v0.1.0](https://github.com/cybercongress/go-cyber/tree/v0.1.0) (2019-01-06)\n[Full Changelog](https://github.com/cybercongress/go-cyber/compare/v0.0.8...v0.1.0)\n\n**Closed issues:**\n\n- Cannot check balance using cli [\\#149](https://github.com/cybercongress/go-cyber/issues/149)\n- Cli: Add possibility to restore acc from priv keys [\\#146](https://github.com/cybercongress/go-cyber/issues/146)\n- Index out of range for cids with not calculated rank yet. [\\#139](https://github.com/cybercongress/go-cyber/issues/139)\n- CID rank merkle proofs [\\#133](https://github.com/cybercongress/go-cyber/issues/133)\n- Go mod Ci dependency error  [\\#128](https://github.com/cybercongress/go-cyber/issues/128)\n- Update to cosmos 29 [\\#126](https://github.com/cybercongress/go-cyber/issues/126)\n- Simple go cyberd client [\\#122](https://github.com/cybercongress/go-cyber/issues/122)\n- Write down bandwidth specification [\\#114](https://github.com/cybercongress/go-cyber/issues/114)\n- Consensus hash [\\#112](https://github.com/cybercongress/go-cyber/issues/112)\n- Add remainig bandwidth endpoint [\\#109](https://github.com/cybercongress/go-cyber/issues/109)\n- Make docker container based on  nvidia-gpu image. [\\#104](https://github.com/cybercongress/go-cyber/issues/104)\n- Index transactions by addresses. [\\#103](https://github.com/cybercongress/go-cyber/issues/103)\n- Calculate rank in ||, post results each 600 blocks. [\\#101](https://github.com/cybercongress/go-cyber/issues/101)\n- Account inmem balances should be updated by wrapping accountKeeper [\\#99](https://github.com/cybercongress/go-cyber/issues/99)\n- Get rid of RPC proxy [\\#94](https://github.com/cybercongress/go-cyber/issues/94)\n- Linkchains support [\\#91](https://github.com/cybercongress/go-cyber/issues/91)\n- Include addresses into knowledge graph [\\#90](https://github.com/cybercongress/go-cyber/issues/90)\n- Graphics for whitepaper [\\#88](https://github.com/cybercongress/go-cyber/issues/88)\n- Add bandwidth by stake [\\#77](https://github.com/cybercongress/go-cyber/issues/77)\n- Launch testnet Euler [\\#73](https://github.com/cybercongress/go-cyber/issues/73)\n- Test Ethereum Network Statistical Significance [\\#52](https://github.com/cybercongress/go-cyber/issues/52)\n- Cyberd landing design [\\#51](https://github.com/cybercongress/go-cyber/issues/51)\n- Simulation [\\#31](https://github.com/cybercongress/go-cyber/issues/31)\n- Link Chain PoC | Zeronet [\\#26](https://github.com/cybercongress/go-cyber/issues/26)\n- Write benchmark and test SpringRank with different amount of objects/edges [\\#22](https://github.com/cybercongress/go-cyber/issues/22)\n- Parse Ethereum network and calculate SpringRank [\\#21](https://github.com/cybercongress/go-cyber/issues/21)\n- Research basic chains fundamentals [\\#15](https://github.com/cybercongress/go-cyber/issues/15)\n- Perfomance testing of Solana [\\#10](https://github.com/cybercongress/go-cyber/issues/10)\n- Research on perfomance of consensus computers [\\#9](https://github.com/cybercongress/go-cyber/issues/9)\n- Perfomance testing scenario for cyberd [\\#8](https://github.com/cybercongress/go-cyber/issues/8)\n\n**Merged pull requests:**\n\n- \\[euler\\] Launch euler testnet [\\#148](https://github.com/cybercongress/go-cyber/pull/148) ([hleb-albau](https://github.com/hleb-albau))\n- Cli: Add possibility to restore acc from priv keys [\\#147](https://github.com/cybercongress/go-cyber/pull/147) ([arturalbov](https://github.com/arturalbov))\n- Rank merkle proofs [\\#144](https://github.com/cybercongress/go-cyber/pull/144) ([arturalbov](https://github.com/arturalbov))\n- Setup bw params [\\#143](https://github.com/cybercongress/go-cyber/pull/143) ([hleb-albau](https://github.com/hleb-albau))\n- Merkle tree implementation [\\#141](https://github.com/cybercongress/go-cyber/pull/141) ([arturalbov](https://github.com/arturalbov))\n- \\#139 Index out of range for cids with not calculated rank yet. [\\#140](https://github.com/cybercongress/go-cyber/pull/140) ([hleb-albau](https://github.com/hleb-albau))\n- Fix http client and rank logs [\\#137](https://github.com/cybercongress/go-cyber/pull/137) ([hleb-albau](https://github.com/hleb-albau))\n- \\[euler-dev3\\] New testnet [\\#136](https://github.com/cybercongress/go-cyber/pull/136) ([hleb-albau](https://github.com/hleb-albau))\n- \\#101 Copy state before index creation [\\#135](https://github.com/cybercongress/go-cyber/pull/135) ([hleb-albau](https://github.com/hleb-albau))\n- \\#92 Populate state with random addresses [\\#134](https://github.com/cybercongress/go-cyber/pull/134) ([hleb-albau](https://github.com/hleb-albau))\n- Small fixes [\\#131](https://github.com/cybercongress/go-cyber/pull/131) ([arturalbov](https://github.com/arturalbov))\n- Parallel rank calculation [\\#130](https://github.com/cybercongress/go-cyber/pull/130) ([arturalbov](https://github.com/arturalbov))\n- Update stake index every block [\\#129](https://github.com/cybercongress/go-cyber/pull/129) ([hleb-albau](https://github.com/hleb-albau))\n- \\#126 Update to cosmos 29 [\\#127](https://github.com/cybercongress/go-cyber/pull/127) ([hleb-albau](https://github.com/hleb-albau))\n- Refactoring [\\#125](https://github.com/cybercongress/go-cyber/pull/125) ([hleb-albau](https://github.com/hleb-albau))\n- Various Bug fixes [\\#124](https://github.com/cybercongress/go-cyber/pull/124) ([hleb-albau](https://github.com/hleb-albau))\n- In-memory storages refactoring [\\#123](https://github.com/cybercongress/go-cyber/pull/123) ([arturalbov](https://github.com/arturalbov))\n- \\#114 Write bw specification [\\#121](https://github.com/cybercongress/go-cyber/pull/121) ([hleb-albau](https://github.com/hleb-albau))\n- WIP \\#114 Add cbdbank module [\\#120](https://github.com/cybercongress/go-cyber/pull/120) ([hleb-albau](https://github.com/hleb-albau))\n- Update readme [\\#119](https://github.com/cybercongress/go-cyber/pull/119) ([hleb-albau](https://github.com/hleb-albau))\n- Clean up folders [\\#118](https://github.com/cybercongress/go-cyber/pull/118) ([arturalbov](https://github.com/arturalbov))\n- \\#103 Index transactions by signers. [\\#117](https://github.com/cybercongress/go-cyber/pull/117) ([hleb-albau](https://github.com/hleb-albau))\n\n## [v0.0.8](https://github.com/cybercongress/go-cyber/tree/v0.0.8) (2018-12-11)\n[Full Changelog](https://github.com/cybercongress/go-cyber/compare/v0.0.7...v0.0.8)\n\n**Closed issues:**\n\n- Cid validation [\\#93](https://github.com/cybercongress/go-cyber/issues/93)\n- Update to cosmos-sdk version 0.26.1 [\\#79](https://github.com/cybercongress/go-cyber/issues/79)\n- Add possibility to join for new validators. [\\#75](https://github.com/cybercongress/go-cyber/issues/75)\n- Calculate rank using GPU [\\#74](https://github.com/cybercongress/go-cyber/issues/74)\n- Create basic wiki cyberd indexer [\\#71](https://github.com/cybercongress/go-cyber/issues/71)\n- Build node releases with cleveldb [\\#59](https://github.com/cybercongress/go-cyber/issues/59)\n- Remove 'cosmosaccaddr' prefix from cyberd address [\\#39](https://github.com/cybercongress/go-cyber/issues/39)\n- Create cyberd PoC based on Cosmos SDK [\\#37](https://github.com/cybercongress/go-cyber/issues/37)\n- Make up cyberd landing [\\#87](https://github.com/cybercongress/go-cyber/issues/87)\n- Draw logo for cyberd [\\#16](https://github.com/cybercongress/go-cyber/issues/16)\n- Build basic economic model [\\#1](https://github.com/cybercongress/go-cyber/issues/1)\n\n**Merged pull requests:**\n\n- \\#76 Define Basic RPC specification [\\#111](https://github.com/cybercongress/go-cyber/pull/111) ([hleb-albau](https://github.com/hleb-albau))\n- \\#104 Make docker container based on nvidia-gpu image [\\#110](https://github.com/cybercongress/go-cyber/pull/110) ([hleb-albau](https://github.com/hleb-albau))\n- \\[DON'T MERGE\\] Add bandwidth by stake. Part 2. [\\#108](https://github.com/cybercongress/go-cyber/pull/108) ([arturalbov](https://github.com/arturalbov))\n- Add bandwidth by stake Part 1 [\\#107](https://github.com/cybercongress/go-cyber/pull/107) ([arturalbov](https://github.com/arturalbov))\n- \\#93 Cid validation [\\#106](https://github.com/cybercongress/go-cyber/pull/106) ([hleb-albau](https://github.com/hleb-albau))\n- \\#78 Add guide `How to join network as validator` [\\#105](https://github.com/cybercongress/go-cyber/pull/105) ([hleb-albau](https://github.com/hleb-albau))\n-  \\#1 Build basic economic model [\\#102](https://github.com/cybercongress/go-cyber/pull/102) ([hleb-albau](https://github.com/hleb-albau))\n- Update cosmos to 0.27.0 [\\#100](https://github.com/cybercongress/go-cyber/pull/100) ([hleb-albau](https://github.com/hleb-albau))\n- Small fixes for validators joining [\\#98](https://github.com/cybercongress/go-cyber/pull/98) ([arturalbov](https://github.com/arturalbov))\n- Remove poc folder [\\#97](https://github.com/cybercongress/go-cyber/pull/97) ([hleb-albau](https://github.com/hleb-albau))\n- Add possibility to join for new validators [\\#96](https://github.com/cybercongress/go-cyber/pull/96) ([arturalbov](https://github.com/arturalbov))\n- Calculate eth network significance [\\#85](https://github.com/cybercongress/go-cyber/pull/85) ([hleb-albau](https://github.com/hleb-albau))\n- 74 gpu rank calculation [\\#83](https://github.com/cybercongress/go-cyber/pull/83) ([hleb-albau](https://github.com/hleb-albau))\n- Remove 'cosmosaccaddr' prefix from cyberd address [\\#82](https://github.com/cybercongress/go-cyber/pull/82) ([arturalbov](https://github.com/arturalbov))\n- UPD docs\\_upd job [\\#81](https://github.com/cybercongress/go-cyber/pull/81) ([SaveTheAles](https://github.com/SaveTheAles))\n- Update cosmos-sdk version to 0.26.1 [\\#80](https://github.com/cybercongress/go-cyber/pull/80) ([arturalbov](https://github.com/arturalbov))\n\n## [v0.0.7](https://github.com/cybercongress/go-cyber/tree/v0.0.7) (2018-10-25)\n[Full Changelog](https://github.com/cybercongress/go-cyber/compare/v0.0.6...v0.0.7)\n\n**Closed issues:**\n\n- Proxy service. Add search pagination [\\#69](https://github.com/cybercongress/go-cyber/issues/69)\n- Proxy service. Search request with \"spaces\" fails [\\#67](https://github.com/cybercongress/go-cyber/issues/67)\n- Non-deterministic rank calculation [\\#66](https://github.com/cybercongress/go-cyber/issues/66)\n- Claim service: increment tx sequence manually [\\#64](https://github.com/cybercongress/go-cyber/issues/64)\n- Add send tokens endpoint to proxy [\\#62](https://github.com/cybercongress/go-cyber/issues/62)\n\n**Merged pull requests:**\n\n- \\#71 Create basic wiki cyberd indexer [\\#72](https://github.com/cybercongress/go-cyber/pull/72) ([hleb-albau](https://github.com/hleb-albau))\n- Proxy service. Add search pagination [\\#70](https://github.com/cybercongress/go-cyber/pull/70) ([arturalbov](https://github.com/arturalbov))\n- Proxy service. Search request with spaces fails [\\#68](https://github.com/cybercongress/go-cyber/pull/68) ([arturalbov](https://github.com/arturalbov))\n- Claim service: increment tx sequence manually [\\#65](https://github.com/cybercongress/go-cyber/pull/65) ([arturalbov](https://github.com/arturalbov))\n\n## [v0.0.6](https://github.com/cybercongress/go-cyber/tree/v0.0.6) (2018-10-24)\n[Full Changelog](https://github.com/cybercongress/go-cyber/compare/v0.0.5...v0.0.6)\n\n## [v0.0.5](https://github.com/cybercongress/go-cyber/tree/v0.0.5) (2018-10-23)\n[Full Changelog](https://github.com/cybercongress/go-cyber/compare/v0.0.4...v0.0.5)\n\n**Closed issues:**\n\n- \\[RPC\\] Fix small finding  [\\#57](https://github.com/cybercongress/go-cyber/issues/57)\n\n## [v0.0.4](https://github.com/cybercongress/go-cyber/tree/v0.0.4) (2018-10-23)\n[Full Changelog](https://github.com/cybercongress/go-cyber/compare/v0.0.3...v0.0.4)\n\n**Closed issues:**\n\n- Service to claim cyberd zeronet tokens [\\#61](https://github.com/cybercongress/go-cyber/issues/61)\n- Update cosmos-sdk to latest dev branch version  [\\#56](https://github.com/cybercongress/go-cyber/issues/56)\n- Perfomance Degradation: Heavy Disk Usage [\\#50](https://github.com/cybercongress/go-cyber/issues/50)\n\n**Merged pull requests:**\n\n- Add send tokens endpoint to proxy [\\#63](https://github.com/cybercongress/go-cyber/pull/63) ([arturalbov](https://github.com/arturalbov))\n- Claim service [\\#60](https://github.com/cybercongress/go-cyber/pull/60) ([arturalbov](https://github.com/arturalbov))\n- \\#57 \\[RPC\\] Fix small finding [\\#58](https://github.com/cybercongress/go-cyber/pull/58) ([hleb-albau](https://github.com/hleb-albau))\n- Update cosmos-sdk to latest dev branch version [\\#53](https://github.com/cybercongress/go-cyber/pull/53) ([hleb-albau](https://github.com/hleb-albau))\n\n## [v0.0.3](https://github.com/cybercongress/go-cyber/tree/v0.0.3) (2018-10-19)\n[Full Changelog](https://github.com/cybercongress/go-cyber/compare/v0.0.2...v0.0.3)\n\n**Closed issues:**\n\n- RPC Client: /search on non existing cid return first added cid [\\#48](https://github.com/cybercongress/go-cyber/issues/48)\n- CLI: Add \"wait\\_for\\_confirmation\" Flag [\\#47](https://github.com/cybercongress/go-cyber/issues/47)\n- Write validation logic of IPFS hash for Losion Zeronet [\\#18](https://github.com/cybercongress/go-cyber/issues/18)\n- Genesis Zeronet [\\#17](https://github.com/cybercongress/go-cyber/issues/17)\n- Performance testing of Zeronet [\\#4](https://github.com/cybercongress/go-cyber/issues/4)\n\n**Merged pull requests:**\n\n- Add cyberdproxy process to docker container. Add status endpoint [\\#55](https://github.com/cybercongress/go-cyber/pull/55) ([arturalbov](https://github.com/arturalbov))\n- Proxy rpc [\\#54](https://github.com/cybercongress/go-cyber/pull/54) ([arturalbov](https://github.com/arturalbov))\n\n## [v0.0.2](https://github.com/cybercongress/go-cyber/tree/v0.0.2) (2018-10-05)\n[Full Changelog](https://github.com/cybercongress/go-cyber/compare/v0.0.1...v0.0.2)\n\n**Closed issues:**\n\n- Cosmos PoC: Integrate Rank Calculation [\\#43](https://github.com/cybercongress/go-cyber/issues/43)\n- Cosmos PoC: Extenend Standart Tendermint RPC API  [\\#42](https://github.com/cybercongress/go-cyber/issues/42)\n- Implement persistent storage for links. [\\#40](https://github.com/cybercongress/go-cyber/issues/40)\n- run extra node for cyberd [\\#20](https://github.com/cybercongress/go-cyber/issues/20)\n\n**Merged pull requests:**\n\n- Fix search on non existing cid [\\#49](https://github.com/cybercongress/go-cyber/pull/49) ([arturalbov](https://github.com/arturalbov))\n- Add Circle CI build job [\\#46](https://github.com/cybercongress/go-cyber/pull/46) ([arturalbov](https://github.com/arturalbov))\n- Extenend Standart Tendermint RPC API [\\#45](https://github.com/cybercongress/go-cyber/pull/45) ([arturalbov](https://github.com/arturalbov))\n- \\#43 Simplest Rank [\\#44](https://github.com/cybercongress/go-cyber/pull/44) ([hleb-albau](https://github.com/hleb-albau))\n- \\#40 introduce in-memory store [\\#41](https://github.com/cybercongress/go-cyber/pull/41) ([hleb-albau](https://github.com/hleb-albau))\n- \\#37 redesign db, app refactor [\\#38](https://github.com/cybercongress/go-cyber/pull/38) ([hleb-albau](https://github.com/hleb-albau))\n- Cosmos POC: Clean up CLI [\\#35](https://github.com/cybercongress/go-cyber/pull/35) ([arturalbov](https://github.com/arturalbov))\n- Update cyberd/cosmos README [\\#34](https://github.com/cybercongress/go-cyber/pull/34) ([arturalbov](https://github.com/arturalbov))\n\n## [v0.0.1](https://github.com/cybercongress/go-cyber/tree/v0.0.1) (2018-09-25)\n**Closed issues:**\n\n- Make cyberd docs to be included into common wiki. [\\#32](https://github.com/cybercongress/go-cyber/issues/32)\n- Write LT/NLT logic to Losion Zeronet [\\#19](https://github.com/cybercongress/go-cyber/issues/19)\n- Research basic technologies [\\#14](https://github.com/cybercongress/go-cyber/issues/14)\n- Research basic papers [\\#13](https://github.com/cybercongress/go-cyber/issues/13)\n- Perfomance testing of Ethermint [\\#12](https://github.com/cybercongress/go-cyber/issues/12)\n- Perfomance testing of Plasma [\\#11](https://github.com/cybercongress/go-cyber/issues/11)\n- Perfomance testing of PoA networks [\\#7](https://github.com/cybercongress/go-cyber/issues/7)\n- Cleanup paper [\\#6](https://github.com/cybercongress/go-cyber/issues/6)\n-  Perfomance testing of EOS [\\#3](https://github.com/cybercongress/go-cyber/issues/3)\n\n**Merged pull requests:**\n\n- Genesis zeronet: Cosmos SDK [\\#33](https://github.com/cybercongress/go-cyber/pull/33) ([arturalbov](https://github.com/arturalbov))\n- \\[WIP\\] 21 calculate spring rank for ethereum [\\#23](https://github.com/cybercongress/go-cyber/pull/23) ([hleb-albau](https://github.com/hleb-albau))\n- Fixing typo [\\#2](https://github.com/cybercongress/go-cyber/pull/2) ([trummax](https://github.com/trummax))\n\n\n\n\\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to go-cyber\nThank you for considering a contribution to **go-cyber**! This guide explains how to:\n* Get started\n* Development workflow\n* Get help if you encounter trouble\n\n\n## Get in touch\nBefore starting to work on a feature or a fix, please open an issue to discuss the use case or bug with us. This can \nsave both you and us a lot of time. For any non-trivial change, we'll ask you to create a short design document explaining:\n\n* Why is this change done? What's the use case?\n* What test cases should it have? What could go wrong?\n* How will it roughly be implemented? (We'll happily provide code pointers to save you time)\n\n\n## Development Workflow\n\n### Development Setup\nPlease, use [development environment setup guide](./docs/help/setup_dev_env.md).\n\n### Creating Commits And Writing Commit Messages\nThe commit messages that accompany your code changes are an important piece of documentation, please follow these guidelines when writing commit messages:\n\n* Keep commits discrete: avoid including multiple unrelated changes in a single commit\n* Keep commits self-contained: avoid spreading a single change across multiple commits. A single commit should make sense in isolation\n* Include GitHub issue in the commit message on a first line at the beginning. Example:\n```\n#123 Refactor CONTRIBUTING.md\n\n--Add Creating Commits And Writing Commit Messages Section\n```\n\n### Submitting Your Change\nAfter you submit your pull request, a core developer will review it. It is normal that this takes several \niterations, so don't get discouraged by change requests. They ensure the high quality that we all enjoy.\n\n\n## Getting Help\nIf you run into any trouble, please reach out to us on the issue you are working on.\n\n\n## Our Thanks\nWe deeply appreciate your effort toward improving go-cyber. For any contribution, large or small, you will be immortalized\n in the release notes for the version you've contributed to.\n"
  },
  {
    "path": "Dockerfile",
    "content": "###########################################################################################\n# Build cyber\n###########################################################################################\nFROM ubuntu:20.04\n\nENV GO_VERSION '1.22.7'\nENV GO_ARCH 'linux-amd64'\nENV GO_BIN_SHA 'fc5d49b7a5035f1f1b265c17aa86e9819e6dc9af8260ad61430ee7fbe27881bb'\nENV DEBIAN_FRONTEND=noninteractive\nENV DAEMON_HOME /root/.cyber\nENV DAEMON_RESTART_AFTER_UPGRADE=true\nENV DAEMON_ALLOW_DOWNLOAD_BINARIES=true\nENV DAEMON_LOG_BUFFER_SIZE=1048\nENV UNSAFE_SKIP_BACKUP=true\nENV DAEMON_NAME cyber\nENV BUILD_DIR /build\nENV PATH /usr/local/go/bin:/root/.cargo/bin:/root/cargo/env:/root/.cyber/scripts:$PATH\nENV CUDA_VER '11.4.4-1'\nENV PATH=\"/usr/local/go/bin:/usr/local/cuda/bin:$PATH\"\n\n\n# Install go and required deps\n###########################################################################################\nRUN apt-get update && apt-get install -y --no-install-recommends wget ca-certificates \\\n&& wget -O go.tgz https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz \\\n&& echo \"${GO_BIN_SHA} *go.tgz\" | sha256sum -c - \\\n&& tar -C /usr/local -xzf go.tgz \\\n&& rm go.tgz \\\n&& go version\n\n\nCOPY . /sources\nWORKDIR /sources\n\n# Install CUDA, build tools and compile cyber\n###########################################################################################\nRUN apt-get update && apt-get -y install --no-install-recommends \\\n    make gcc g++ \\\n    curl \\\n    gnupg \\\n    git \\\n    software-properties-common \\\n#    nvidia-cuda-toolkit \\\n# Install cuda selected version instead nvidia-cuda-toolkit\n&& wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin \\\n&& mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 \\\n&& apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub \\\n&& add-apt-repository \"deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /\" \\\n&& apt-get update \\\n&& apt-get install cuda=${CUDA_VER} -y --no-install-recommends \\\n&& mkdir -p /cyber/cosmovisor/upgrades/v3/bin \\\n&& mkdir -p /cyber/cosmovisor/upgrades/v4/bin \\\n&& mkdir -p /cyber/cosmovisor/upgrades/v6/bin \\\n&& mkdir -p /cyber/cosmovisor/upgrades/v7/bin \\\n # Compile cyber for v3 version\n###########################################################################################\n&& git checkout v3.0.1 \\\n&& cd /sources/x/rank/cuda \\\n&& make build \\\n&& cd  /sources \\\n&& make build CUDA_ENABLED=true \\\n&& cp ./build/cyber /cyber/cosmovisor/upgrades/v3/bin/ \\\n&& rm -rf ./build \\\n # Compile cyber for v4 version\n###########################################################################################\n&& git checkout v5.2.0 \\\n&& cd /sources/x/rank/cuda \\\n&& make build \\\n&& cd  /sources \\\n&& make build CUDA_ENABLED=true \\\n&& cp ./build/cyber /cyber/cosmovisor/upgrades/v4/bin/ \\\n&& rm -rf ./build \\\n # Compile cyber for v6 version\n###########################################################################################\n&& git checkout v6.0.1 \\\n&& cd /sources/x/rank/cuda \\\n&& make build \\\n&& cd  /sources \\\n&& make build CUDA_ENABLED=true \\\n&& cp ./build/cyber /cyber/cosmovisor/upgrades/v6/bin/ \\\n&& rm -rf ./build \\\n # Compile cyber for v7 version\n###########################################################################################\n&& git checkout v7.0.2 \\\n&& cd /sources/x/rank/cuda \\\n&& make build \\\n&& cd  /sources \\\n&& make build CUDA_ENABLED=true \\\n&& cp ./build/cyber /cyber/cosmovisor/upgrades/v7/bin/ \\\n&& rm -rf ./build \\\n# Cleanup\n###########################################################################################\n&& apt-get purge -y git \\\n    make \\\n    cuda \\\n    gcc g++ \\\n    curl \\\n    gnupg \\\n    python3.8 \\\n&& go clean --cache -i \\\n&& apt-get remove --purge '^nvidia-.*' -y \\\n&& apt-get autoremove -y \\\n&& apt-get clean\n\n# Install cosmovisor\n###########################################################################################\n RUN wget -O cosmovisor.tgz https://github.com/cosmos/cosmos-sdk/releases/download/cosmovisor%2Fv1.5.0/cosmovisor-v1.5.0-linux-amd64.tar.gz \\\n && tar -xzf cosmovisor.tgz \\\n && cp cosmovisor /usr/bin/cosmovisor \\\n && chmod +x /usr/bin/cosmovisor \\\n && rm cosmovisor.tgz && rm -fR $BUILD_DIR/* && rm -fR $BUILD_DIR/.*[a-z]\n\n# Copy startup scripts and genesis\n###########################################################################################\nWORKDIR /\nCOPY start_script.sh start_script.sh\nCOPY entrypoint.sh /entrypoint.sh\nRUN wget -O /genesis.json https://gateway.ipfs.cybernode.ai/ipfs/QmYubyVNfghD4xCrTFj26zBwrF9s5GJhi1TmxvrwmJCipr \\\n&& chmod +x start_script.sh \\\n&& chmod +x /entrypoint.sh\n\n#  Start\n###############################################################################\nEXPOSE 26656 26657 1317 9090 26660\nENTRYPOINT [\"/entrypoint.sh\"]\nCMD [\"./start_script.sh\"]\n"
  },
  {
    "path": "LICENSE",
    "content": "Cyber License\n\nDon’t believe, don’t fear, don’t ask.\n"
  },
  {
    "path": "Makefile",
    "content": "#!/usr/bin/make -f\nCUDA_ENABLED ?= false\nLEDGER_ENABLED ?= true\nVERSION := $(shell echo $(shell git describe --tags) | sed 's/^v//')\nCOMMIT := $(shell git log -1 --format='%H')\nBFT_VERSION := $(shell go list -m github.com/cometbft/cometbft | sed 's:.* ::')\n\nBINDIR ?= $(GOPATH)/bin\nBUILDDIR ?= $(CURDIR)/build/\n\n# for dockerized protobuf tools\nDOCKER := $(shell which docker)\nBUF_IMAGE=bufbuild/buf@sha256:3cb1f8a4b48bd5ad8f09168f10f607ddc318af202f5c057d52a45216793d85e5 #v1.4.0\nDOCKER_BUF := $(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace $(BUF_IMAGE)\nHTTPS_GIT := https://github.com/cybercongress/go-cyber.git\n\nexport GO111MODULE = on\n\n###############################################################################\n###                              Build Flags/Tags                           ###\n###############################################################################\n\nbuild_tags = netgo\nifeq ($(LEDGER_ENABLED),true)\n  ifeq ($(OS),Windows_NT)\n    GCCEXE = $(shell where gcc.exe 2> NUL)\n    ifeq ($(GCCEXE),)\n      $(error gcc.exe not installed for ledger support, please install or set LEDGER_ENABLED=false)\n    else\n      build_tags += ledger\n    endif\n  else\n    UNAME_S = $(shell uname -s)\n    ifeq ($(UNAME_S),OpenBSD)\n      $(warning OpenBSD detected, disabling ledger support (https://github.com/cosmos/cosmos-sdk/issues/1988))\n    else\n      GCC = $(shell command -v gcc 2> /dev/null)\n      ifeq ($(GCC),)\n        $(error gcc not installed for ledger support, please install or set LEDGER_ENABLED=false)\n      else\n        build_tags += ledger\n      endif\n    endif\n  endif\nendif\n\nifeq ($(CUDA_ENABLED),true)\n    NVCC_RESULT := $(shell which nvcc 2> NULL)\n    NVCC_TEST := $(notdir $(NVCC_RESULT))\n    ifeq ($(NVCC_TEST),nvcc)\n        build_tags += cuda\n    else\n        $(error CUDA not installed for GPU support, please install or set CUDA_ENABLED=false)\n    endif\nendif\n\nbuild_tags += $(BUILD_TAGS)\nbuild_tags := $(strip $(build_tags))\n\nwhitespace :=\nempty = $(whitespace) $(whitespace)\ncomma := ,\nbuild_tags_comma_sep := $(subst $(empty),$(comma),$(build_tags))\n\nldflags = -X github.com/cosmos/cosmos-sdk/version.Name=cyber \\\n\t\t  -X github.com/cosmos/cosmos-sdk/version.AppName=cyber \\\n\t\t  -X github.com/cosmos/cosmos-sdk/version.Version=$(VERSION) \\\n\t\t  -X github.com/cosmos/cosmos-sdk/version.Commit=$(COMMIT) \\\n\t\t  -X \"github.com/cosmos/cosmos-sdk/version.BuildTags=$(build_tags_comma_sep)\" \\\n\t\t  -X github.com/cometbft/cometbft/version.BFTVer=$(BFT_VERSION)\n\nldflags += $(LDFLAGS)\nldflags := $(strip $(ldflags))\nBUILD_FLAGS := -tags \"$(build_tags_comma_sep)\" -ldflags '$(ldflags)' -trimpath\n\ninclude contrib/devtools/Makefile\n\nall: build format lint test\n.PHONY: all\n\n###############################################################################\n###                                Build                                    ###\n###############################################################################\n\nbuild: go.sum\n\tgo build $(BUILD_FLAGS) -o $(BUILDDIR) ./cmd/cyber\n\ninstall: go.sum\n\tgo install $(BUILD_FLAGS) ./cmd/cyber\n\n.PHONY: build install\n\n###############################################################################\n###                           Tools / Dependencies                          ###\n###############################################################################\n\ngo-mod-cache: go.sum\n\t@echo \"--> Download go modules to local cache\"\n\t@go mod download\n\ngo.sum: go.mod\n\t@echo \"--> Ensure dependencies have not been modified\"\n\tgo mod verify\n\tgo mod tidy\n.PHONY: go.sum\n\n.PHONY: go.sum go-mod-cache\n\n###############################################################################\n###                                Localnet                                 ###\n###############################################################################\n\n# TODO update localnet flow\n#build-docker-cybernode: build-linux\n#\t$(MAKE) -C networks/local\n#\n## Run a 4-node testnet locally\n#localnet-start: localnet-stop\n#\t@if ! [ -f build/node0/cyber/config/genesis.json ]; then docker run --rm -v $(CURDIR)/build:/cyber:Z cybercongress/cyber testnet --v 4 -o . --starting-ip-address 192.168.10.2 --keyring-backend=test --chain-id=chain-local ; fi\n#\tdocker-compose up -d\n#\n## Stop testnet\n#localnet-stop:\n#\tdocker-compose down\n\n###############################################################################\n###                                Linting                                  ###\n###############################################################################\n\nformat-tools:\n\tgo install mvdan.cc/gofumpt@v0.4.0\n\tgo install github.com/client9/misspell/cmd/misspell@v0.3.4\n\tgo install golang.org/x/tools/cmd/goimports@latest\n\nlint: format-tools\n\tgolangci-lint run --tests=false\n\tfind . -name '*.go' -type f -not -path \"./vendor*\" -not -path \"*.git*\" -not -path \"*_test.go\" | xargs gofumpt -d\n\nformat: format-tools\n\tfind . -name '*.go' -type f -not -path \"./vendor*\" -not -path \"*.git*\" -not -path \"./client/docs/statik/statik.go\" | xargs gofumpt -w\n\tfind . -name '*.go' -type f -not -path \"./vendor*\" -not -path \"*.git*\" -not -path \"./client/docs/statik/statik.go\" | xargs misspell -w\n\tfind . -name '*.go' -type f -not -path \"./vendor*\" -not -path \"*.git*\" -not -path \"./client/docs/statik/statik.go\" | xargs goimports -w -local github.com/cybercongress/go-cyber\n\n###############################################################################\n###                                Protobuf                                 ###\n###############################################################################\n\nprotoVer=0.13.1\nprotoImageName=ghcr.io/cosmos/proto-builder:$(protoVer)\nprotoImage=$(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace $(protoImageName)\n\nproto-all: proto-format proto-lint proto-gen\n\nproto-gen:\n\t@echo \"Generating Protobuf files\"\n\t@$(protoImage) sh ./scripts/protocgen.sh\n\nproto-format:\n\t@echo \"Formatting Protobuf files\"\n\t@$(protoImage) find ./ -name \"*.proto\" -exec clang-format -i {} \\;\n\n# npm install -g swagger2openapi swagger-merger swagger-combine\nproto-swagger-gen:\n\t@echo \"Generating Protobuf Swagger OpenAPI\"\n\t@./scripts/protoc_swagger_openapi_gen.sh\n\nproto-lint:\n\t@$(DOCKER_BUF) lint --error-format=json\n\nproto-check-breaking:\n\t@$(DOCKER_BUF) breaking --against $(HTTPS_GIT)#branch=main\n\n###############################################################################\n###                                Docs                                     ###\n###############################################################################\n\n# TODO update statik and swagger flow\n#update-swagger-docs: statik proto-swagger-gen\n#\t$(BINDIR)/statik -src=client/docs/swagger-ui -dest=client/docs -f -m\n#\n#.PHONY: update-swagger-docs"
  },
  {
    "path": "README.md",
    "content": "# go-cyber\n\nCollective intelligence substrate. Convergent computation over a knowledge graph with on-chain diffusion model, built on Cosmos SDK.\n\n[![version](https://img.shields.io/github/release/cyberia-to/go-cyber.svg?style=flat-square)](https://github.com/cyberia-to/go-cyber/releases/latest)\n![Cosmos-SDK](https://img.shields.io/static/v1.svg?label=cosmos-sdk&message=0.47.16&color=blue&style=flat-square)\n![CometBFT](https://img.shields.io/static/v1.svg?label=cometbft&message=0.37.18&color=blue&style=flat-square)\n![IBC](https://img.shields.io/static/v1.svg?label=ibc-go&message=7.10.0&color=blue&style=flat-square)\n![CosmWasm](https://img.shields.io/static/v1.svg?label=wasmd&message=0.46.0&color=blue&style=flat-square)\n[![license](https://img.shields.io/badge/License-Cyber-brightgreen.svg?style=flat-square)](https://github.com/cyberia-to/go-cyber/blob/main/LICENSE)\n\n## Networks\n\n| Network | Hub | Launch | Token |\n|---|---|---|---|\n| [Bostrom](https://cyb.ai) | Bootloader Hub | 2021 | BOOT |\n| [Space Pussy](https://spacepussy.ai) | Meme Community Network | 2022 | PUSSY |\n\n## Build\n\n```bash\nmake install\n```\n\nWithout GPU (CLI-only, connects to remote node):\n\n```bash\nmake install CUDA_ENABLED=false\n```\n\n## Quick Start\n\n- RPC: `https://rpc.bostrom.cybernode.ai/`\n- REST: `https://lcd.bostrom.cybernode.ai/`\n- Seed: `d0518ce9881a4b0c5872e5e9b7c4ea8d760dad3f@85.10.207.173:26656`\n\nUse [localbostrom](networks/local/) for local development.\n\n## Documentation\n\nSee [docs/](docs/README.md) for validator setup, CLI guides, module specs, and tutorials.\n"
  },
  {
    "path": "app/ante.go",
    "content": "package app\n\nimport (\n\terrorsmod \"cosmossdk.io/errors\"\n\twasmkeeper \"github.com/CosmWasm/wasmd/x/wasm/keeper\"\n\twasmtypes \"github.com/CosmWasm/wasmd/x/wasm/types\"\n\tstoretypes \"github.com/cosmos/cosmos-sdk/store/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tsdkerrors \"github.com/cosmos/cosmos-sdk/types/errors\"\n\t\"github.com/cosmos/cosmos-sdk/x/auth/ante\"\n\n\tibcante \"github.com/cosmos/ibc-go/v7/modules/core/ante\"\n\tibckeeper \"github.com/cosmos/ibc-go/v7/modules/core/keeper\"\n)\n\n// HandlerOptions extend the SDK's AnteHandler options by requiring the IBC\n// channel keeper.\ntype HandlerOptions struct {\n\tante.HandlerOptions\n\n\tIBCKeeper         *ibckeeper.Keeper\n\tWasmConfig        *wasmtypes.WasmConfig\n\tWasmKeeper        *wasmkeeper.Keeper\n\tTXCounterStoreKey storetypes.StoreKey\n\n\tTxEncoder sdk.TxEncoder\n\n\t// ProofExemptContracts is a list of CosmWasm contract addresses\n\t// whose \"submit_proof\" execute messages are exempt from gas fees.\n\t// This allows miners to submit PoW proofs without holding tokens.\n\tProofExemptContracts []string\n}\n\nfunc NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) {\n\tif options.AccountKeeper == nil {\n\t\treturn nil, errorsmod.Wrap(sdkerrors.ErrLogic, \"account keeper is required for AnteHandler\")\n\t}\n\n\tif options.BankKeeper == nil {\n\t\treturn nil, errorsmod.Wrap(sdkerrors.ErrLogic, \"bank keeper is required for AnteHandler\")\n\t}\n\n\tif options.SignModeHandler == nil {\n\t\treturn nil, errorsmod.Wrap(sdkerrors.ErrLogic, \"sign mode handler is required for ante builder\")\n\t}\n\n\tif options.WasmConfig == nil {\n\t\treturn nil, errorsmod.Wrap(sdkerrors.ErrLogic, \"wasm config is required for ante builder\")\n\t}\n\n\tif options.TXCounterStoreKey == nil {\n\t\treturn nil, errorsmod.Wrap(sdkerrors.ErrLogic, \"tx counter key is required for ante builder\")\n\t}\n\n\tsigGasConsumer := options.SigGasConsumer\n\tif sigGasConsumer == nil {\n\t\tsigGasConsumer = ante.DefaultSigVerificationGasConsumer\n\t}\n\n\tanteDecorators := []sdk.AnteDecorator{\n\t\tante.NewSetUpContextDecorator(), // outermost AnteDecorator. SetUpContext must be called first\n\t\twasmkeeper.NewLimitSimulationGasDecorator(options.WasmConfig.SimulationGasLimit), // after setup context to enforce limits early\n\t\twasmkeeper.NewCountTXDecorator(options.TXCounterStoreKey),\n\t\twasmkeeper.NewGasRegisterDecorator(options.WasmKeeper.GetGasRegister()),\n\t\tante.NewExtensionOptionsDecorator(options.ExtensionOptionChecker),\n\t\tante.NewValidateBasicDecorator(),\n\t\tante.NewTxTimeoutHeightDecorator(),\n\t\tante.NewValidateMemoDecorator(options.AccountKeeper),\n\t\tante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper),\n\t\tNewProofExemptDecorator(options.HandlerOptions, options.ProofExemptContracts),\n\t\tante.NewSetPubKeyDecorator(options.AccountKeeper), // SetPubKeyDecorator must be called before all signature verification decorators\n\t\tante.NewValidateSigCountDecorator(options.AccountKeeper),\n\t\tante.NewSigGasConsumeDecorator(options.AccountKeeper, sigGasConsumer),\n\t\tante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler),\n\t\tante.NewIncrementSequenceDecorator(options.AccountKeeper),\n\t\tibcante.NewRedundantRelayDecorator(options.IBCKeeper),\n\t}\n\n\treturn sdk.ChainAnteDecorators(anteDecorators...), nil\n}\n"
  },
  {
    "path": "app/app.go",
    "content": "package app\n\nimport (\n\tautocliv1 \"cosmossdk.io/api/cosmos/autocli/v1\"\n\t\"cosmossdk.io/math\"\n\t\"fmt\"\n\t\"github.com/cometbft/cometbft/crypto\"\n\t\"github.com/cometbft/cometbft/libs/bytes\"\n\t\"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519\"\n\t\"github.com/cosmos/cosmos-sdk/server\"\n\tstoretypes \"github.com/cosmos/cosmos-sdk/store/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/bech32\"\n\t\"github.com/cosmos/cosmos-sdk/x/bank\"\n\tbankkeeper \"github.com/cosmos/cosmos-sdk/x/bank/keeper\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n\tdistrtypes \"github.com/cosmos/cosmos-sdk/x/distribution/types\"\n\tv7 \"github.com/cybercongress/go-cyber/v7/app/upgrades/v7\"\n\n\tslashingtypes \"github.com/cosmos/cosmos-sdk/x/slashing/types\"\n\tstakingtypes \"github.com/cosmos/cosmos-sdk/x/staking/types\"\n\tv5 \"github.com/cybercongress/go-cyber/v7/app/upgrades/v5\"\n\tv6 \"github.com/cybercongress/go-cyber/v7/app/upgrades/v6\"\n\t\"github.com/cybercongress/go-cyber/v7/client/docs\"\n\tbandwidthkeeper \"github.com/cybercongress/go-cyber/v7/x/bandwidth/keeper\"\n\tcyberbankkeeper \"github.com/cybercongress/go-cyber/v7/x/cyberbank/keeper\"\n\tgraphkeeper \"github.com/cybercongress/go-cyber/v7/x/graph/keeper\"\n\trankkeeper \"github.com/cybercongress/go-cyber/v7/x/rank/keeper\"\n\t\"io\"\n\t\"os\"\n\t\"time\"\n\n\treflectionv1 \"cosmossdk.io/api/cosmos/reflection/v1\"\n\n\t\"github.com/cosmos/cosmos-sdk/runtime\"\n\t\"github.com/cosmos/cosmos-sdk/x/auth/posthandler\"\n\n\tv2 \"github.com/cybercongress/go-cyber/v7/app/upgrades/v2\"\n\tv3 \"github.com/cybercongress/go-cyber/v7/app/upgrades/v3\"\n\tv4 \"github.com/cybercongress/go-cyber/v7/app/upgrades/v4\"\n\n\t\"github.com/cosmos/cosmos-sdk/client/grpc/tmservice\"\n\tibcclientclient \"github.com/cosmos/ibc-go/v7/modules/core/02-client/client\"\n\n\t\"github.com/cybercongress/go-cyber/v7/app/keepers\"\n\t\"github.com/cybercongress/go-cyber/v7/app/upgrades\"\n\n\tdbm \"github.com/cometbft/cometbft-db\"\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/cosmos/cosmos-sdk/codec/types\"\n\tservertypes \"github.com/cosmos/cosmos-sdk/server/types\"\n\tauthtx \"github.com/cosmos/cosmos-sdk/x/auth/tx\"\n\t\"github.com/spf13/cast\"\n\n\tabci \"github.com/cometbft/cometbft/abci/types\"\n\t\"github.com/cometbft/cometbft/libs/log\"\n\ttmos \"github.com/cometbft/cometbft/libs/os\"\n\t\"github.com/cosmos/cosmos-sdk/baseapp\"\n\tnodeservice \"github.com/cosmos/cosmos-sdk/client/grpc/node\"\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\t\"github.com/cosmos/cosmos-sdk/server/api\"\n\t\"github.com/cosmos/cosmos-sdk/server/config\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/module\"\n\t\"github.com/cosmos/cosmos-sdk/version\"\n\t\"github.com/cosmos/cosmos-sdk/x/auth/ante\"\n\tauthtypes \"github.com/cosmos/cosmos-sdk/x/auth/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/crisis\"\n\n\tparamsclient \"github.com/cosmos/cosmos-sdk/x/params/client\"\n\tparamstypes \"github.com/cosmos/cosmos-sdk/x/params/types\"\n\tupgradeclient \"github.com/cosmos/cosmos-sdk/x/upgrade/client\"\n\tupgradetypes \"github.com/cosmos/cosmos-sdk/x/upgrade/types\"\n\n\ttmproto \"github.com/cometbft/cometbft/proto/tendermint/types\"\n\n\t\"github.com/CosmWasm/wasmd/x/wasm\"\n\twasmkeeper \"github.com/CosmWasm/wasmd/x/wasm/keeper\"\n\twasmtypes \"github.com/CosmWasm/wasmd/x/wasm/types\"\n\n\ttmjson \"github.com/cometbft/cometbft/libs/json\"\n\n\tgovclient \"github.com/cosmos/cosmos-sdk/x/gov/client\"\n\n\t\"github.com/cybercongress/go-cyber/v7/utils\"\n\n\truntimeservices \"github.com/cosmos/cosmos-sdk/runtime/services\"\n)\n\nconst (\n\tappName = \"BostromHub\"\n\tName    = \"bostrom\"\n)\n\n// We pull these out so we can set them with LDFLAGS in the Makefile\nvar (\n\tNodeDir      = \".cyber\"\n\tBech32Prefix = \"bostrom\"\n\n\tUpgrades = []upgrades.Upgrade{v2.Upgrade, v3.Upgrade, v4.Upgrade, v6.Upgrade, v7.Upgrade}\n\tForks    = []upgrades.Fork{v5.Fork}\n)\n\n// These constants are derived from the above variables.\n// These are the ones we will want to use in the code, based on\n// any overrides above\nvar (\n\t// DefaultNodeHome default home directories for wasmd\n\tDefaultNodeHome = os.ExpandEnv(\"$HOME/\") + NodeDir\n)\n\nfunc getGovProposalHandlers() []govclient.ProposalHandler {\n\treturn []govclient.ProposalHandler{\n\t\tparamsclient.ProposalHandler,\n\t\tupgradeclient.LegacyProposalHandler,\n\t\tupgradeclient.LegacyCancelProposalHandler,\n\t\tibcclientclient.UpdateClientProposalHandler,\n\t\tibcclientclient.UpgradeProposalHandler,\n\t}\n}\n\n//// module accounts that are allowed to receive tokens\n//var allowedReceivingModAcc = map[string]bool{\n//\tdistrtypes.ModuleName: true,\n//}\n\nvar (\n\t_ runtime.AppI            = (*App)(nil)\n\t_ servertypes.Application = (*App)(nil)\n)\n\n// App extends an ABCI application, but with most of its parameters exported.\n// They are exported for convenience in creating helper functions, as object\n// capabilities aren't needed for testing.\ntype App struct {\n\t*baseapp.BaseApp\n\tkeepers.AppKeepers\n\n\taminoCodec        *codec.LegacyAmino\n\tappCodec          codec.Codec\n\ttxConfig          client.TxConfig\n\tinterfaceRegistry types.InterfaceRegistry\n\n\tinvCheckPeriod uint\n\n\tModuleManager *module.Manager\n\n\tsm *module.SimulationManager\n\n\tconfigurator module.Configurator\n}\n\n// New returns a reference to an initialized Cyber Consensus Computer.\nfunc NewBostromApp(\n\tlogger log.Logger,\n\tdb dbm.DB,\n\ttraceStore io.Writer,\n\tloadLatest bool,\n\tappOpts servertypes.AppOptions,\n\twasmOpts []wasmkeeper.Option,\n\tbaseAppOptions ...func(*baseapp.BaseApp),\n) *App {\n\twasmtypes.MaxWasmSize = 2 * 1024 * 1024 // 2MB\n\tencodingConfig := MakeEncodingConfig()\n\n\tappCodec, legacyAmino := encodingConfig.Codec, encodingConfig.Amino\n\tinterfaceRegistry := encodingConfig.InterfaceRegistry\n\ttxConfig := encodingConfig.TxConfig\n\n\t// App Opts\n\tskipGenesisInvariants := cast.ToBool(appOpts.Get(crisis.FlagSkipGenesisInvariants))\n\tinvCheckPeriod := cast.ToUint(appOpts.Get(server.FlagInvCheckPeriod))\n\n\tbApp := baseapp.NewBaseApp(\n\t\tappName,\n\t\tlogger,\n\t\tdb,\n\t\ttxConfig.TxDecoder(),\n\t\tbaseAppOptions...)\n\n\tbApp.SetCommitMultiStoreTracer(traceStore)\n\tbApp.SetVersion(version.Version)\n\tbApp.SetInterfaceRegistry(interfaceRegistry)\n\tbApp.SetTxEncoder(txConfig.TxEncoder())\n\n\tapp := &App{\n\t\tBaseApp:           bApp,\n\t\taminoCodec:        legacyAmino,\n\t\tappCodec:          appCodec,\n\t\ttxConfig:          txConfig,\n\t\tinterfaceRegistry: interfaceRegistry,\n\t\tinvCheckPeriod:    invCheckPeriod,\n\t}\n\n\t// Setup keepers\n\tapp.AppKeepers = keepers.NewAppKeepers(\n\t\tappCodec,\n\t\tbApp,\n\t\tlegacyAmino,\n\t\tkeepers.GetMaccPerms(),\n\t\tinvCheckPeriod,\n\t\tlogger,\n\t\tappOpts,\n\t\twasmOpts,\n\t)\n\n\t/****  Module Options ****/\n\n\t// NOTE: Any module instantiated in the module manager that is later modified\n\t// must be passed by reference here.\n\tapp.ModuleManager = module.NewManager(appModules(app, encodingConfig, skipGenesisInvariants)...)\n\n\t// During begin block slashing happens after distr.BeginBlocker so that\n\t// there is nothing left over in the validator fee pool, so as to keep the\n\t// CanWithdrawInvariant invariant.\n\t// NOTE: staking module is required if HistoricalEntries param > 0\n\t// NOTE: capability module's beginblocker must come before any modules using capabilities (e.g. IBC)\n\t// Tell the app's module manager how to set the order of BeginBlockers, which are run at the beginning of every block.\n\tapp.ModuleManager.SetOrderBeginBlockers(orderBeginBlockers()...)\n\n\tapp.ModuleManager.SetOrderEndBlockers(orderEndBlockers()...)\n\n\t// NOTE: The genutils module must occur after staking so that pools are\n\t// properly initialized with tokens from genesis accounts.\n\t// NOTE: The genutils module must also occur after auth so that it can access the params from auth.\n\t// NOTE: Capability module must occur first so that it can initialize any capabilities\n\t// so that other modules that want to create or claim capabilities afterwards in InitChain\n\t// can do so safely.\n\tapp.ModuleManager.SetOrderInitGenesis(orderInitBlockers()...)\n\n\t// Uncomment if you want to set a custom migration order here.\n\t// NOTE: can be useful for future upgrades\n\t// app.mm.SetOrderMigrations(custom order)\n\n\tapp.ModuleManager.RegisterInvariants(app.CrisisKeeper)\n\n\t// NOTE hack to register bank's module services because of custom wrapper\n\t// from sdk.bank/module.go: AppModule RegisterServices\n\t// \tm := keeper.NewMigrator(am.keeper.(keeper.BaseKeeper))\n\t// NOTE skip bank module from native services registration then initialize manually\n\tapp.configurator = module.NewConfigurator(appCodec, app.MsgServiceRouter(), app.GRPCQueryRouter())\n\n\tdelete(app.ModuleManager.Modules, banktypes.ModuleName)\n\tapp.ModuleManager.RegisterServices(app.configurator)\n\tautocliv1.RegisterQueryServer(app.GRPCQueryRouter(), runtimeservices.NewAutoCLIQueryService(app.ModuleManager.Modules))\n\tapp.ModuleManager.Modules[banktypes.ModuleName] = bank.NewAppModule(appCodec, app.CyberbankKeeper.Proxy, app.AccountKeeper, app.GetSubspace(banktypes.ModuleName))\n\n\tbanktypes.RegisterMsgServer(app.configurator.MsgServer(), bankkeeper.NewMsgServerImpl(app.CyberbankKeeper.Proxy))\n\tbanktypes.RegisterQueryServer(app.configurator.QueryServer(), app.CyberbankKeeper.Proxy)\n\n\treflectionSvc, err := runtimeservices.NewReflectionService()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treflectionv1.RegisterReflectionServiceServer(app.GRPCQueryRouter(), reflectionSvc)\n\n\t// initialize stores\n\tapp.MountKVStores(app.GetKVStoreKey())\n\tapp.MountTransientStores(app.GetTransientStoreKey())\n\tapp.MountMemoryStores(app.GetMemoryStoreKey())\n\n\twasmConfig, err := wasm.ReadWasmConfig(appOpts)\n\tif err != nil {\n\t\tpanic(\"error while reading wasm config: \" + err.Error())\n\t}\n\n\tproofExemptContracts := cast.ToStringSlice(appOpts.Get(\"proof-exempt.contracts\"))\n\n\tanteHandler, err := NewAnteHandler(\n\t\tHandlerOptions{\n\t\t\tHandlerOptions: ante.HandlerOptions{\n\t\t\t\tAccountKeeper:   app.AccountKeeper,\n\t\t\t\tBankKeeper:      app.BankKeeper,\n\t\t\t\tFeegrantKeeper:  app.FeeGrantKeeper,\n\t\t\t\tSignModeHandler: encodingConfig.TxConfig.SignModeHandler(),\n\t\t\t\tSigGasConsumer:  ante.DefaultSigVerificationGasConsumer,\n\t\t\t},\n\t\t\tIBCKeeper:            app.IBCKeeper,\n\t\t\tTXCounterStoreKey:    app.GetKey(wasmtypes.StoreKey),\n\t\t\tWasmConfig:           &wasmConfig,\n\t\t\tWasmKeeper:           app.WasmKeeper,\n\t\t\tProofExemptContracts: proofExemptContracts,\n\t\t},\n\t)\n\tif err != nil {\n\t\tpanic(fmt.Errorf(\"failed to create AnteHandler: %s\", err))\n\t}\n\n\t// set ante and post handlers\n\tapp.SetAnteHandler(anteHandler)\n\n\tapp.SetInitChainer(app.InitChainer)\n\tapp.SetBeginBlocker(app.BeginBlocker)\n\tapp.SetEndBlocker(app.EndBlocker)\n\n\t// Register snapshot extensions to enable state-sync for wasm and cyber modules\n\tif manager := app.SnapshotManager(); manager != nil {\n\t\terr = manager.RegisterExtensions(\n\t\t\twasmkeeper.NewWasmSnapshotter(app.CommitMultiStore(), app.WasmKeeper),\n\t\t\tcyberbankkeeper.NewCyberbankSnapshotter(app.CommitMultiStore(), app.CyberbankKeeper),\n\t\t\tgraphkeeper.NewGraphSnapshotter(app.CommitMultiStore(), app.AppKeepers.GraphKeeper, app.IndexKeeper),\n\t\t\tbandwidthkeeper.NewBandwidthSnapshotter(app.CommitMultiStore(), app.BandwidthMeter),\n\t\t\trankkeeper.NewRankSnapshotter(app.CommitMultiStore(), app.RankKeeper),\n\t\t)\n\t\tif err != nil {\n\t\t\tpanic(\"failed to register snapshot extension: \" + err.Error())\n\t\t}\n\t}\n\n\tapp.setupUpgradeHandlers(app.configurator)\n\tapp.setupUpgradeStoreLoaders()\n\n\tapp.setPostHandler()\n\n\tif loadLatest {\n\t\tif err := app.LoadLatestVersion(); err != nil {\n\t\t\ttmos.Exit(fmt.Sprintf(\"failed to load latest version: %s\", err))\n\t\t}\n\t\tctx := app.BaseApp.NewUncachedContext(true, tmproto.Header{})\n\n\t\t// TODO refactor context load flow\n\t\t// NOTE custom implementation\n\t\tapp.loadContexts(db, ctx)\n\n\t\tif err := app.WasmKeeper.InitializePinnedCodes(ctx); err != nil {\n\t\t\ttmos.Exit(fmt.Sprintf(\"failed initialize pinned codes %s\", err))\n\t\t}\n\t}\n\n\t// create the simulation manager and define the order of the modules for deterministic simulations\n\t//\n\t// NOTE: this is not required apps that don't use the simulator for fuzz testing\n\t// transactions\n\tapp.sm = module.NewSimulationManager(simulationModules(app, encodingConfig, skipGenesisInvariants)...)\n\n\tapp.sm.RegisterStoreDecoders()\n\n\treturn app\n}\n\nfunc (app *App) setPostHandler() {\n\tpostHandler, err := posthandler.NewPostHandler(\n\t\tposthandler.HandlerOptions{},\n\t)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tapp.SetPostHandler(postHandler)\n}\n\n// Name returns the name of the App\nfunc (app *App) Name() string {\n\treturn app.BaseApp.Name()\n}\n\n// BeginBlocker application updates every begin block\nfunc (app *App) BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock) abci.ResponseBeginBlock {\n\t//BeginBlockForks(ctx, app)\n\treturn app.ModuleManager.BeginBlock(ctx, req)\n}\n\n// EndBlocker application updates every end block\nfunc (app *App) EndBlocker(ctx sdk.Context, req abci.RequestEndBlock) abci.ResponseEndBlock {\n\treturn app.ModuleManager.EndBlock(ctx, req)\n}\n\n// InitChainer application update at chain initialization\nfunc (app *App) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain {\n\tvar genesisState GenesisState\n\tif err := tmjson.Unmarshal(req.AppStateBytes, &genesisState); err != nil {\n\t\tpanic(err)\n\t}\n\n\t// custom initialization\n\t// var bankGenesisState banktypes.GenesisState\n\t// app.appCodec.MustUnmarshalJSON(genesisState[\"bank\"], &bankGenesisState)\n\t// app.BandwidthMeter.AddToDesirableBandwidth(ctx, bankGenesisState.Supply.AmountOf(ctypes.VOLT).Uint64())\n\n\tapp.UpgradeKeeper.SetModuleVersionMap(ctx, app.ModuleManager.GetVersionMap())\n\tresp := app.ModuleManager.InitGenesis(ctx, app.appCodec, genesisState)\n\n\t// custom initialization\n\tfor _, account := range app.AccountKeeper.GetAllAccounts(ctx) {\n\t\tapp.CyberbankKeeper.InitializeStakeAmpere(\n\t\t\taccount.GetAccountNumber(),\n\t\t\tuint64(app.CyberbankKeeper.Proxy.GetAccountStakeAmperPlusRouted(ctx, account.GetAddress())),\n\t\t)\n\t}\n\n\treturn resp\n}\n\n// LoadHeight loads a particular height\nfunc (app *App) LoadHeight(height int64) error {\n\treturn app.LoadVersion(height)\n}\n\n// ModuleAccountAddrs returns all the app's module account addresses.\nfunc (app *App) ModuleAccountAddrs() map[string]bool {\n\tmodAccAddrs := make(map[string]bool)\n\tfor acc := range keepers.GetMaccPerms() {\n\t\tmodAccAddrs[authtypes.NewModuleAddress(acc).String()] = true\n\t}\n\n\treturn modAccAddrs\n}\n\n// LegacyAmino returns SimApp's amino codec.\n//\n// NOTE: This is solely to be used for testing purposes as it may be desirable\n// for modules to register their own custom testing types.\nfunc (app *App) LegacyAmino() *codec.LegacyAmino {\n\treturn app.aminoCodec\n}\n\n// AppCodec returns Juno's app codec.\n//\n// NOTE: This is solely to be used for testing purposes as it may be desirable\n// for modules to register their own custom testing types.\nfunc (app *App) AppCodec() codec.Codec {\n\treturn app.appCodec\n}\n\n// InterfaceRegistry returns Juno's InterfaceRegistry\nfunc (app *App) InterfaceRegistry() types.InterfaceRegistry {\n\treturn app.interfaceRegistry\n}\n\n// GetSubspace returns a param subspace for a given module name.\n//\n// NOTE: This is solely to be used for testing purposes.\nfunc (app *App) GetSubspace(moduleName string) paramstypes.Subspace {\n\tsubspace, _ := app.ParamsKeeper.GetSubspace(moduleName)\n\treturn subspace\n}\n\n// RegisterAPIRoutes registers all application module routes with the provided\n// API server.\nfunc (app *App) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.APIConfig) {\n\tclientCtx := apiSvr.ClientCtx\n\t// Register new tx routes from grpc-gateway.\n\tauthtx.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)\n\n\t// Register new tendermint queries routes from grpc-gateway.\n\ttmservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)\n\n\t// Register node gRPC service for grpc-gateway.\n\tnodeservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)\n\n\t// Register grpc-gateway routes for all modules.\n\tModuleBasics.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)\n\n\t// register app's OpenAPI routes.\n\tdocs.RegisterOpenAPIService(Name, apiSvr.Router)\n}\n\n// RegisterTxService implements the Application.RegisterTxService method.\nfunc (app *App) RegisterTxService(clientCtx client.Context) {\n\tauthtx.RegisterTxService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.BaseApp.Simulate, app.interfaceRegistry)\n}\n\n// RegisterTendermintService implements the Application.RegisterTendermintService method.\nfunc (app *App) RegisterTendermintService(clientCtx client.Context) {\n\ttmservice.RegisterTendermintService(\n\t\tclientCtx,\n\t\tapp.BaseApp.GRPCQueryRouter(),\n\t\tapp.interfaceRegistry,\n\t\tapp.Query,\n\t)\n}\n\nfunc (app *App) RegisterNodeService(clientCtx client.Context) {\n\tnodeservice.RegisterNodeService(clientCtx, app.GRPCQueryRouter())\n}\n\n// configure store loader that checks if version == upgradeHeight and applies store upgrades\nfunc (app *App) setupUpgradeStoreLoaders() {\n\tupgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk()\n\tif err != nil {\n\t\tpanic(\"failed to read upgrade info from disk\" + err.Error())\n\t}\n\n\tif app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) {\n\t\treturn\n\t}\n\n\tfor _, upgrade := range Upgrades {\n\t\tstoreUpgrades := upgrade.StoreUpgrades\n\t\tif upgradeInfo.Name == upgrade.UpgradeName {\n\t\t\tapp.SetStoreLoader(\n\t\t\t\tupgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades),\n\t\t\t)\n\t\t}\n\t}\n}\n\nfunc (app *App) setupUpgradeHandlers(cfg module.Configurator) {\n\tfor _, upgrade := range Upgrades {\n\t\tapp.UpgradeKeeper.SetUpgradeHandler(\n\t\t\tupgrade.UpgradeName,\n\t\t\tupgrade.CreateUpgradeHandler(\n\t\t\t\tapp.ModuleManager,\n\t\t\t\tcfg,\n\t\t\t\t&app.AppKeepers,\n\t\t\t),\n\t\t)\n\t}\n}\n\n// SimulationManager implements the SimulationApp interface\nfunc (app *App) SimulationManager() *module.SimulationManager {\n\treturn app.sm\n}\n\n// MakeCodecs constructs the *std.Codec and *codec.LegacyAmino instances used by\n// Cyber's app. It is useful for tests and clients who do not want to construct the\n// full Cyber app\nfunc MakeCodecs() (codec.Codec, *codec.LegacyAmino) {\n\tconfig := MakeEncodingConfig()\n\treturn config.Codec, config.Amino\n}\n\nfunc (app *App) loadContexts(db dbm.DB, ctx sdk.Context) {\n\tfreshCtx := ctx.WithBlockHeight(int64(app.RankKeeper.GetLatestBlockNumber(ctx)))\n\tstart := time.Now()\n\tapp.BaseApp.Logger().Info(\"Loading the brain state\")\n\n\tif app.LastBlockHeight() >= 1 {\n\t\tcalculationPeriod := app.RankKeeper.GetParams(freshCtx).CalculationPeriod\n\t\t// TODO remove this after upgrade to v4 because on network upgrade block cannot access rank params\n\t\tif calculationPeriod == 0 {\n\t\t\tcalculationPeriod = int64(5)\n\t\t}\n\n\t\trankRoundBlockNumber := (freshCtx.BlockHeight() / calculationPeriod) * calculationPeriod\n\t\tif rankRoundBlockNumber == 0 && freshCtx.BlockHeight() >= 1 {\n\t\t\trankRoundBlockNumber = 1\n\t\t}\n\n\t\trankCtx, err := utils.NewContextWithMSVersion(db, rankRoundBlockNumber, app.GetKVStoreKey())\n\t\tif err != nil {\n\t\t\ttmos.Exit(err.Error())\n\t\t}\n\n\t\tapp.CyberbankKeeper.LoadState(rankCtx, freshCtx)\n\t\t// TODO update index state load to one context as we store cyberlink' block now\n\t\tapp.IndexKeeper.LoadState(rankCtx, freshCtx)\n\t\tapp.BandwidthMeter.LoadState(freshCtx)\n\t\tapp.GraphKeeper.LoadNeudeg(rankCtx, freshCtx)\n\t\tapp.RankKeeper.LoadState(freshCtx)\n\t\tapp.RankKeeper.StartRankCalculation(freshCtx)\n\t} else {\n\t\t// genesis case\n\t\t// NOTE this flow when starting from snapshot\n\t\tapp.CyberbankKeeper.LoadState(freshCtx, freshCtx)\n\t\t// TODO update index state load to one context as we store cyberlink' block now\n\t\tapp.IndexKeeper.LoadState(freshCtx, freshCtx)\n\t\tapp.BandwidthMeter.InitState()\n\t\tapp.GraphKeeper.LoadNeudeg(freshCtx, freshCtx)\n\t\tapp.RankKeeper.LoadState(freshCtx)\n\t}\n\n\tapp.BaseApp.Logger().Info(\n\t\t\"Cyber Consensus Supercomputer is started!\",\n\t\t\"duration\", time.Since(start).String(),\n\t)\n}\n\n// InitOsmosisAppForTestnet is broken down into two sections:\n// Required Changes: Changes that, if not made, will cause the testnet to halt or panic\n// Optional Changes: Changes to customize the testnet to one's liking (lower vote times, fund accounts, etc)\nfunc InitAppForTestnet(app *App, newValAddr bytes.HexBytes, newValPubKey crypto.PubKey, newOperatorAddress, upgradeToTrigger string) *App {\n\t//\n\t// Required Changes:\n\t//\n\n\tctx := app.BaseApp.NewUncachedContext(true, tmproto.Header{})\n\tpubkey := &ed25519.PubKey{Key: newValPubKey.Bytes()}\n\tpubkeyAny, err := types.NewAnyWithValue(pubkey)\n\tif err != nil {\n\t\ttmos.Exit(err.Error())\n\t}\n\n\t// STAKING\n\t//\n\n\t// Create Validator struct for our new validator.\n\t_, bz, err := bech32.DecodeAndConvert(newOperatorAddress)\n\tif err != nil {\n\t\ttmos.Exit(err.Error())\n\t}\n\tbech32Addr, err := bech32.ConvertAndEncode(\"bostromvaloper\", bz)\n\tif err != nil {\n\t\ttmos.Exit(err.Error())\n\t}\n\tnewVal := stakingtypes.Validator{\n\t\tOperatorAddress: bech32Addr,\n\t\tConsensusPubkey: pubkeyAny,\n\t\tJailed:          false,\n\t\tStatus:          stakingtypes.Bonded,\n\t\tTokens:          math.NewInt(900000000000000),\n\t\tDelegatorShares: sdk.MustNewDecFromStr(\"10000000\"),\n\t\tDescription: stakingtypes.Description{\n\t\t\tMoniker: \"Testnet Validator\",\n\t\t},\n\t\tCommission: stakingtypes.Commission{\n\t\t\tCommissionRates: stakingtypes.CommissionRates{\n\t\t\t\tRate:          sdk.MustNewDecFromStr(\"0.05\"),\n\t\t\t\tMaxRate:       sdk.MustNewDecFromStr(\"0.1\"),\n\t\t\t\tMaxChangeRate: sdk.MustNewDecFromStr(\"0.05\"),\n\t\t\t},\n\t\t},\n\t\tMinSelfDelegation: math.OneInt(),\n\t}\n\n\t// Remove all validators from power store\n\tstakingKey := app.GetKey(stakingtypes.ModuleName)\n\tstakingStore := ctx.KVStore(stakingKey)\n\titerator := app.StakingKeeper.ValidatorsPowerStoreIterator(ctx)\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tstakingStore.Delete(iterator.Key())\n\t}\n\titerator.Close()\n\n\t// Remove all valdiators from last validators store\n\titerator = app.StakingKeeper.LastValidatorsIterator(ctx)\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tstakingStore.Delete(iterator.Key())\n\t}\n\titerator.Close()\n\n\t// Remove all validators from validators store\n\titerator = storetypes.KVStorePrefixIterator(stakingStore, stakingtypes.ValidatorsKey)\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tstakingStore.Delete(iterator.Key())\n\t}\n\titerator.Close()\n\n\t// Remove all validators from unbonding queue\n\titerator = storetypes.KVStorePrefixIterator(stakingStore, stakingtypes.ValidatorQueueKey)\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tstakingStore.Delete(iterator.Key())\n\t}\n\titerator.Close()\n\n\t// Add our validator to power and last validators store\n\tapp.StakingKeeper.SetValidator(ctx, newVal)\n\terr = app.StakingKeeper.SetValidatorByConsAddr(ctx, newVal)\n\tif err != nil {\n\t\ttmos.Exit(err.Error())\n\t}\n\tapp.StakingKeeper.SetValidatorByPowerIndex(ctx, newVal)\n\tvalAddr, err := sdk.ValAddressFromBech32(newVal.GetOperator().String())\n\tif err != nil {\n\t\ttmos.Exit(err.Error())\n\t}\n\tapp.StakingKeeper.SetLastValidatorPower(ctx, valAddr, 0)\n\tif err := app.StakingKeeper.Hooks().AfterValidatorCreated(ctx, valAddr); err != nil {\n\t\tpanic(err)\n\t}\n\n\t// DISTRIBUTION\n\t//\n\n\t// Initialize records for this validator across all distribution stores\n\tvalAddr, err = sdk.ValAddressFromBech32(newVal.GetOperator().String())\n\tif err != nil {\n\t\ttmos.Exit(err.Error())\n\t}\n\tapp.DistrKeeper.SetValidatorHistoricalRewards(ctx, valAddr, 0, distrtypes.NewValidatorHistoricalRewards(sdk.DecCoins{}, 1))\n\tapp.DistrKeeper.SetValidatorCurrentRewards(ctx, valAddr, distrtypes.NewValidatorCurrentRewards(sdk.DecCoins{}, 1))\n\tapp.DistrKeeper.SetValidatorAccumulatedCommission(ctx, valAddr, distrtypes.InitialValidatorAccumulatedCommission())\n\tapp.DistrKeeper.SetValidatorOutstandingRewards(ctx, valAddr, distrtypes.ValidatorOutstandingRewards{Rewards: sdk.DecCoins{}})\n\n\t// SLASHING\n\t//\n\n\t// Set validator signing info for our new validator.\n\tnewConsAddr := sdk.ConsAddress(newValAddr.Bytes())\n\tnewValidatorSigningInfo := slashingtypes.ValidatorSigningInfo{\n\t\tAddress:     newConsAddr.String(),\n\t\tStartHeight: app.LastBlockHeight() - 1,\n\t\tTombstoned:  false,\n\t}\n\tapp.SlashingKeeper.SetValidatorSigningInfo(ctx, newConsAddr, newValidatorSigningInfo)\n\n\t//\n\t// Optional Changes:\n\t//\n\n\t// UPGRADE\n\t//\n\n\tif upgradeToTrigger != \"\" {\n\t\tupgradePlan := upgradetypes.Plan{\n\t\t\tName: upgradeToTrigger,\n\t\t\t//Height: app.LastBlockHeight() + 10,\n\t\t\tHeight: app.LastBlockHeight(),\n\t\t}\n\t\terr = app.UpgradeKeeper.ScheduleUpgrade(ctx, upgradePlan)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t}\n\n\treturn app\n}\n"
  },
  {
    "path": "app/apptesting/events.go",
    "content": "package apptesting\n\nimport sdk \"github.com/cosmos/cosmos-sdk/types\"\n\n// AssertEventEmitted asserts that ctx's event manager has emitted the given number of events\n// of the given type.\nfunc (s *KeeperTestHelper) AssertEventEmitted(ctx sdk.Context, eventTypeExpected string, numEventsExpected int) {\n\tallEvents := ctx.EventManager().Events()\n\n\t// filter out other events\n\tactualEvents := make([]sdk.Event, 0)\n\tfor _, event := range allEvents {\n\t\tif event.Type == eventTypeExpected {\n\t\t\tactualEvents = append(actualEvents, event)\n\t\t}\n\t}\n\ts.Equal(numEventsExpected, len(actualEvents))\n}\n"
  },
  {
    "path": "app/apptesting/test_suite.go",
    "content": "package apptesting\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/stretchr/testify/require\"\n\t\"github.com/stretchr/testify/suite\"\n\n\tdbm \"github.com/cometbft/cometbft-db\"\n\tabci \"github.com/cometbft/cometbft/abci/types\"\n\t\"github.com/cometbft/cometbft/crypto/ed25519\"\n\t\"github.com/cometbft/cometbft/libs/log\"\n\ttmtypes \"github.com/cometbft/cometbft/proto/tendermint/types\"\n\n\t\"cosmossdk.io/math\"\n\n\t\"github.com/cosmos/cosmos-sdk/baseapp\"\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\tcdctypes \"github.com/cosmos/cosmos-sdk/codec/types\"\n\t\"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1\"\n\t\"github.com/cosmos/cosmos-sdk/store/rootmulti\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/tx/signing\"\n\tauthsigning \"github.com/cosmos/cosmos-sdk/x/auth/signing\"\n\t\"github.com/cosmos/cosmos-sdk/x/authz\"\n\tauthzcodec \"github.com/cosmos/cosmos-sdk/x/authz/codec\"\n\tbanktestutil \"github.com/cosmos/cosmos-sdk/x/bank/testutil\"\n\tdistrtypes \"github.com/cosmos/cosmos-sdk/x/distribution/types\"\n\tminttypes \"github.com/cosmos/cosmos-sdk/x/mint/types\"\n\tslashingtypes \"github.com/cosmos/cosmos-sdk/x/slashing/types\"\n\tstakinghelper \"github.com/cosmos/cosmos-sdk/x/staking/testutil\"\n\tstakingtypes \"github.com/cosmos/cosmos-sdk/x/staking/types\"\n\tupgradetypes \"github.com/cosmos/cosmos-sdk/x/upgrade/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/app\"\n\tappparams \"github.com/cybercongress/go-cyber/v7/app/params\"\n)\n\ntype KeeperTestHelper struct {\n\tsuite.Suite\n\n\tApp         *app.App\n\tCtx         sdk.Context\n\tQueryHelper *baseapp.QueryServiceTestHelper\n\tTestAccs    []sdk.AccAddress\n\n\tStakingHelper *stakinghelper.Helper\n}\n\nvar (\n\tSecondaryDenom  = \"uion\"\n\tSecondaryAmount = sdk.NewInt(100000000)\n)\n\n// Setup sets up basic environment for suite (App, Ctx, and test accounts)\nfunc (s *KeeperTestHelper) Setup() {\n\tt := s.T()\n\ts.App = app.Setup(t)\n\ts.Ctx = s.App.BaseApp.NewContext(false, tmtypes.Header{Height: 1, ChainID: \"juno-1\", Time: time.Now().UTC()})\n\ts.QueryHelper = &baseapp.QueryServiceTestHelper{\n\t\tGRPCQueryRouter: s.App.GRPCQueryRouter(),\n\t\tCtx:             s.Ctx,\n\t}\n\ts.TestAccs = CreateRandomAccounts(3)\n\n\ts.StakingHelper = stakinghelper.NewHelper(s.Suite.T(), s.Ctx, s.App.AppKeepers.StakingKeeper)\n\ts.StakingHelper.Denom = \"ujuno\"\n}\n\nfunc (s *KeeperTestHelper) SetupTestForInitGenesis() {\n\tt := s.T()\n\t// Setting to True, leads to init genesis not running\n\ts.App = app.Setup(t)\n\ts.Ctx = s.App.BaseApp.NewContext(true, tmtypes.Header{\n\t\tChainID: \"testing\",\n\t})\n}\n\n// CreateTestContext creates a test context.\nfunc (s *KeeperTestHelper) CreateTestContext() sdk.Context {\n\tctx, _ := s.CreateTestContextWithMultiStore()\n\treturn ctx\n}\n\n// CreateTestContextWithMultiStore creates a test context and returns it together with multi store.\nfunc (s *KeeperTestHelper) CreateTestContextWithMultiStore() (sdk.Context, sdk.CommitMultiStore) {\n\tdb := dbm.NewMemDB()\n\tlogger := log.NewNopLogger()\n\n\tms := rootmulti.NewStore(db, logger)\n\n\treturn sdk.NewContext(ms, tmtypes.Header{}, false, logger), ms\n}\n\n// CreateTestContext creates a test context.\nfunc (s *KeeperTestHelper) Commit() {\n\toldHeight := s.Ctx.BlockHeight()\n\toldHeader := s.Ctx.BlockHeader()\n\ts.App.Commit()\n\tnewHeader := tmtypes.Header{Height: oldHeight + 1, ChainID: \"testing\", Time: oldHeader.Time.Add(time.Second)}\n\ts.App.BeginBlock(abci.RequestBeginBlock{Header: newHeader})\n\ts.Ctx = s.App.NewContext(false, newHeader)\n}\n\n// FundAcc funds target address with specified amount.\nfunc (s *KeeperTestHelper) FundAcc(acc sdk.AccAddress, amounts sdk.Coins) {\n\terr := banktestutil.FundAccount(s.App.AppKeepers.BankKeeper, s.Ctx, acc, amounts)\n\ts.Require().NoError(err)\n}\n\n// FundModuleAcc funds target modules with specified amount.\nfunc (s *KeeperTestHelper) FundModuleAcc(moduleName string, amounts sdk.Coins) {\n\terr := banktestutil.FundModuleAccount(s.App.AppKeepers.BankKeeper, s.Ctx, moduleName, amounts)\n\ts.Require().NoError(err)\n}\n\nfunc (s *KeeperTestHelper) MintCoins(coins sdk.Coins) {\n\terr := s.App.AppKeepers.BankKeeper.MintCoins(s.Ctx, minttypes.ModuleName, coins)\n\ts.Require().NoError(err)\n}\n\n// SetupValidator sets up a validator and returns the ValAddress.\nfunc (s *KeeperTestHelper) SetupValidator(bondStatus stakingtypes.BondStatus) sdk.ValAddress {\n\tvalPriv := secp256k1.GenPrivKey()\n\tvalPub := valPriv.PubKey()\n\tvalAddr := sdk.ValAddress(valPub.Address())\n\tbondDenom := s.App.AppKeepers.StakingKeeper.GetParams(s.Ctx).BondDenom\n\tselfBond := sdk.NewCoins(sdk.Coin{Amount: sdk.NewInt(100), Denom: bondDenom})\n\n\ts.FundAcc(sdk.AccAddress(valAddr), selfBond)\n\n\tmsg := s.StakingHelper.CreateValidatorMsg(valAddr, valPub, selfBond[0].Amount)\n\tres, err := s.StakingHelper.CreateValidatorWithMsg(s.Ctx, msg)\n\ts.Require().NoError(err)\n\ts.Require().NotNil(res)\n\n\tval, found := s.App.AppKeepers.StakingKeeper.GetValidator(s.Ctx, valAddr)\n\ts.Require().True(found)\n\n\tval = val.UpdateStatus(bondStatus)\n\ts.App.AppKeepers.StakingKeeper.SetValidator(s.Ctx, val)\n\n\tconsAddr, err := val.GetConsAddr()\n\ts.Suite.Require().NoError(err)\n\n\tsigningInfo := slashingtypes.NewValidatorSigningInfo(\n\t\tconsAddr,\n\t\ts.Ctx.BlockHeight(),\n\t\t0,\n\t\ttime.Unix(0, 0),\n\t\tfalse,\n\t\t0,\n\t)\n\ts.App.AppKeepers.SlashingKeeper.SetValidatorSigningInfo(s.Ctx, consAddr, signingInfo)\n\n\treturn valAddr\n}\n\n// BeginNewBlock starts a new block.\nfunc (s *KeeperTestHelper) BeginNewBlock() {\n\tvar valAddr []byte\n\n\tvalidators := s.App.AppKeepers.StakingKeeper.GetAllValidators(s.Ctx)\n\tif len(validators) >= 1 {\n\t\tvalAddrFancy, err := validators[0].GetConsAddr()\n\t\ts.Require().NoError(err)\n\t\tvalAddr = valAddrFancy.Bytes()\n\t} else {\n\t\tvalAddrFancy := s.SetupValidator(stakingtypes.Bonded)\n\t\tvalidator, _ := s.App.AppKeepers.StakingKeeper.GetValidator(s.Ctx, valAddrFancy)\n\t\tvalAddr2, _ := validator.GetConsAddr()\n\t\tvalAddr = valAddr2.Bytes()\n\t}\n\n\ts.BeginNewBlockWithProposer(valAddr)\n}\n\n// BeginNewBlockWithProposer begins a new block with a proposer.\nfunc (s *KeeperTestHelper) BeginNewBlockWithProposer(proposer sdk.ValAddress) {\n\tvalidator, found := s.App.AppKeepers.StakingKeeper.GetValidator(s.Ctx, proposer)\n\ts.Assert().True(found)\n\n\tvalConsAddr, err := validator.GetConsAddr()\n\ts.Require().NoError(err)\n\n\tvalAddr := valConsAddr.Bytes()\n\n\tnewBlockTime := s.Ctx.BlockTime().Add(5 * time.Second)\n\n\theader := tmtypes.Header{Height: s.Ctx.BlockHeight() + 1, Time: newBlockTime}\n\tnewCtx := s.Ctx.WithBlockTime(newBlockTime).WithBlockHeight(s.Ctx.BlockHeight() + 1)\n\ts.Ctx = newCtx\n\tlastCommitInfo := abci.CommitInfo{\n\t\tVotes: []abci.VoteInfo{{\n\t\t\tValidator:       abci.Validator{Address: valAddr, Power: 1000},\n\t\t\tSignedLastBlock: true,\n\t\t}},\n\t\tRound: 0,\n\t}\n\treqBeginBlock := abci.RequestBeginBlock{Header: header, LastCommitInfo: lastCommitInfo}\n\n\tfmt.Println(\"beginning block \", s.Ctx.BlockHeight())\n\ts.App.BeginBlocker(s.Ctx, reqBeginBlock)\n}\n\n// EndBlock ends the block.\nfunc (s *KeeperTestHelper) EndBlock() {\n\treqEndBlock := abci.RequestEndBlock{Height: s.Ctx.BlockHeight()}\n\ts.App.EndBlocker(s.Ctx, reqEndBlock)\n}\n\n// AllocateRewardsToValidator allocates reward tokens to a distribution module then allocates rewards to the validator address.\nfunc (s *KeeperTestHelper) AllocateRewardsToValidator(valAddr sdk.ValAddress, rewardAmt math.Int) {\n\tvalidator, found := s.App.AppKeepers.StakingKeeper.GetValidator(s.Ctx, valAddr)\n\ts.Require().True(found)\n\n\t// allocate reward tokens to distribution module\n\tcoins := sdk.Coins{sdk.NewCoin(appparams.BondDenom, rewardAmt)}\n\terr := banktestutil.FundModuleAccount(s.App.AppKeepers.BankKeeper, s.Ctx, distrtypes.ModuleName, coins)\n\ts.Require().NoError(err)\n\n\t// allocate rewards to validator\n\ts.Ctx = s.Ctx.WithBlockHeight(s.Ctx.BlockHeight() + 1)\n\tdecTokens := sdk.DecCoins{{Denom: appparams.BondDenom, Amount: sdk.NewDec(20000)}}\n\ts.App.AppKeepers.DistrKeeper.AllocateTokensToValidator(s.Ctx, validator, decTokens)\n}\n\n// BuildTx builds a transaction.\nfunc (s *KeeperTestHelper) BuildTx(\n\ttxBuilder client.TxBuilder,\n\tmsgs []sdk.Msg,\n\tsigV2 signing.SignatureV2,\n\tmemo string, txFee sdk.Coins,\n\tgasLimit uint64,\n) authsigning.Tx {\n\terr := txBuilder.SetMsgs(msgs[0])\n\ts.Require().NoError(err)\n\n\terr = txBuilder.SetSignatures(sigV2)\n\ts.Require().NoError(err)\n\n\ttxBuilder.SetMemo(memo)\n\ttxBuilder.SetFeeAmount(txFee)\n\ttxBuilder.SetGasLimit(gasLimit)\n\n\treturn txBuilder.GetTx()\n}\n\nfunc (s *KeeperTestHelper) ConfirmUpgradeSucceeded(upgradeName string, upgradeHeight int64) {\n\ts.Ctx = s.Ctx.WithBlockHeight(upgradeHeight - 1)\n\tplan := upgradetypes.Plan{Name: upgradeName, Height: upgradeHeight}\n\terr := s.App.AppKeepers.UpgradeKeeper.ScheduleUpgrade(s.Ctx, plan)\n\ts.Require().NoError(err)\n\t_, exists := s.App.AppKeepers.UpgradeKeeper.GetUpgradePlan(s.Ctx)\n\ts.Require().True(exists)\n\n\ts.Ctx = s.Ctx.WithBlockHeight(upgradeHeight)\n\ts.Require().NotPanics(func() {\n\t\tbeginBlockRequest := abci.RequestBeginBlock{}\n\t\ts.App.BeginBlocker(s.Ctx, beginBlockRequest)\n\t})\n}\n\n// CreateRandomAccounts is a function return a list of randomly generated AccAddresses\nfunc CreateRandomAccounts(numAccts int) []sdk.AccAddress {\n\ttestAddrs := make([]sdk.AccAddress, numAccts)\n\tfor i := 0; i < numAccts; i++ {\n\t\tpk := ed25519.GenPrivKey().PubKey()\n\t\ttestAddrs[i] = sdk.AccAddress(pk.Address())\n\t}\n\n\treturn testAddrs\n}\n\nfunc TestMessageAuthzSerialization(t *testing.T, msg sdk.Msg) {\n\tsomeDate := time.Date(1, 1, 1, 1, 1, 1, 1, time.UTC)\n\tconst (\n\t\tmockGranter string = \"cosmos1abc\"\n\t\tmockGrantee string = \"cosmos1xyz\"\n\t)\n\n\tvar (\n\t\tmockMsgGrant  authz.MsgGrant\n\t\tmockMsgRevoke authz.MsgRevoke\n\t\tmockMsgExec   authz.MsgExec\n\t)\n\n\t// Authz: Grant Msg\n\ttypeURL := sdk.MsgTypeURL(msg)\n\tlater := someDate.Add(time.Hour)\n\tgrant, err := authz.NewGrant(someDate, authz.NewGenericAuthorization(typeURL), &later)\n\trequire.NoError(t, err)\n\n\tmsgGrant := authz.MsgGrant{Granter: mockGranter, Grantee: mockGrantee, Grant: grant}\n\tmsgGrantBytes := json.RawMessage(sdk.MustSortJSON(authzcodec.ModuleCdc.MustMarshalJSON(&msgGrant)))\n\terr = authzcodec.ModuleCdc.UnmarshalJSON(msgGrantBytes, &mockMsgGrant)\n\trequire.NoError(t, err)\n\n\t// Authz: Revoke Msg\n\tmsgRevoke := authz.MsgRevoke{Granter: mockGranter, Grantee: mockGrantee, MsgTypeUrl: typeURL}\n\tmsgRevokeByte := json.RawMessage(sdk.MustSortJSON(authzcodec.ModuleCdc.MustMarshalJSON(&msgRevoke)))\n\terr = authzcodec.ModuleCdc.UnmarshalJSON(msgRevokeByte, &mockMsgRevoke)\n\trequire.NoError(t, err)\n\n\t// Authz: Exec Msg\n\tmsgAny, err := cdctypes.NewAnyWithValue(msg)\n\trequire.NoError(t, err)\n\tmsgExec := authz.MsgExec{Grantee: mockGrantee, Msgs: []*cdctypes.Any{msgAny}}\n\texecMsgByte := json.RawMessage(sdk.MustSortJSON(authzcodec.ModuleCdc.MustMarshalJSON(&msgExec)))\n\terr = authzcodec.ModuleCdc.UnmarshalJSON(execMsgByte, &mockMsgExec)\n\trequire.NoError(t, err)\n\trequire.Equal(t, msgExec.Msgs[0].Value, mockMsgExec.Msgs[0].Value)\n}\n\nfunc GenerateTestAddrs() (string, string) {\n\tpk1 := ed25519.GenPrivKey().PubKey()\n\tvalidAddr := sdk.AccAddress(pk1.Address()).String()\n\tinvalidAddr := sdk.AccAddress(\"invalid\").String()\n\treturn validAddr, invalidAddr\n}\n"
  },
  {
    "path": "app/encoding.go",
    "content": "package app\n\nimport (\n\tsimappparams \"cosmossdk.io/simapp/params\"\n\t\"github.com/cosmos/cosmos-sdk/std\"\n\n\t\"github.com/cybercongress/go-cyber/v7/app/params\"\n)\n\nfunc MakeEncodingConfig() simappparams.EncodingConfig {\n\tencodingConfig := params.MakeEncodingConfig()\n\tstd.RegisterLegacyAminoCodec(encodingConfig.Amino)\n\tstd.RegisterInterfaces(encodingConfig.InterfaceRegistry)\n\tModuleBasics.RegisterLegacyAminoCodec(encodingConfig.Amino)\n\tModuleBasics.RegisterInterfaces(encodingConfig.InterfaceRegistry)\n\treturn encodingConfig\n}\n"
  },
  {
    "path": "app/export.go",
    "content": "package app\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\ttmproto \"github.com/cometbft/cometbft/proto/tendermint/types\"\n\n\tservertypes \"github.com/cosmos/cosmos-sdk/server/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/staking\"\n)\n\n// ExportAppStateAndValidators exports the state of the application for a genesis\n// file.\nfunc (app *App) ExportAppStateAndValidators(forZeroHeight bool, jailAllowedAddrs []string, modulesToExport []string) (servertypes.ExportedApp, error) {\n\t// as if they could withdraw from the start of the next block\n\tctx := app.NewContext(true, tmproto.Header{Height: app.LastBlockHeight()})\n\n\t// We export at last height + 1, because that's the height at which\n\t// Tendermint will start InitChain.\n\theight := app.LastBlockHeight() + 1\n\tif forZeroHeight {\n\t\treturn servertypes.ExportedApp{}, fmt.Errorf(\"forZeroHeight not supported\")\n\t}\n\n\tgenState := app.ModuleManager.ExportGenesisForModules(ctx, app.appCodec, modulesToExport)\n\tappState, err := json.MarshalIndent(genState, \"\", \"  \")\n\tif err != nil {\n\t\treturn servertypes.ExportedApp{}, err\n\t}\n\n\tvalidators, err := staking.WriteValidators(ctx, app.AppKeepers.StakingKeeper)\n\treturn servertypes.ExportedApp{\n\t\tAppState:        appState,\n\t\tValidators:      validators,\n\t\tHeight:          height,\n\t\tConsensusParams: app.BaseApp.GetConsensusParams(ctx),\n\t}, err\n}\n"
  },
  {
    "path": "app/forks.go",
    "content": "package app\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\n// BeginBlockForks is intended to be ran in a chain upgrade.\nfunc BeginBlockForks(ctx sdk.Context, app *App) {\n\tfor _, fork := range Forks {\n\t\tif ctx.BlockHeight() == fork.UpgradeHeight {\n\t\t\tfork.BeginForkLogic(ctx, &app.AppKeepers)\n\t\t\treturn\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "app/genesis.go",
    "content": "package app\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n)\n\n// The genesis state of the blockchain is represented here as a map of raw json\n// messages key'd by a identifier string.\n// The identifier is used to determine which module genesis information belongs\n// to so it may be appropriately routed during init chain.\n// Within this application default genesis information is retrieved from\n// the ModuleBasicManager which populates json from each BasicModule\n// object provided to it during init.\ntype GenesisState map[string]json.RawMessage\n\n// NewDefaultGenesisState generates the default state for the application.\nfunc NewDefaultGenesisState(cdc codec.JSONCodec) GenesisState {\n\treturn ModuleBasics.DefaultGenesis(cdc)\n}\n"
  },
  {
    "path": "app/helpers/contracts.go",
    "content": "package helpers\n\nimport (\n\twasmtypes \"github.com/CosmWasm/wasmd/x/wasm/types\"\n\n\tstoretypes \"github.com/cosmos/cosmos-sdk/store/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\n// Execute contract, recover from panic\nfunc ExecuteContract(k wasmtypes.ContractOpsKeeper, childCtx sdk.Context, contractAddr sdk.AccAddress, msgBz []byte, err *error) {\n\t// Recover from panic, return error\n\tdefer func() {\n\t\tif recoveryError := recover(); recoveryError != nil {\n\t\t\t// Determine error associated with panic\n\t\t\tif isOutofGas, msg := IsOutOfGasError(recoveryError); isOutofGas {\n\t\t\t\t*err = ErrOutOfGas.Wrapf(\"%s\", msg)\n\t\t\t} else {\n\t\t\t\t*err = ErrContractExecutionPanic.Wrapf(\"%s\", recoveryError)\n\t\t\t}\n\t\t}\n\t}()\n\n\t// Execute contract with sudo\n\t_, *err = k.Sudo(childCtx, contractAddr, msgBz)\n}\n\n// Check if error is out of gas error\nfunc IsOutOfGasError(err any) (bool, string) {\n\tswitch e := err.(type) {\n\tcase storetypes.ErrorOutOfGas:\n\t\treturn true, e.Descriptor\n\tcase storetypes.ErrorGasOverflow:\n\t\treturn true, e.Descriptor\n\tdefault:\n\t\treturn false, \"\"\n\t}\n}\n"
  },
  {
    "path": "app/helpers/global_errors.go",
    "content": "package helpers\n\nimport (\n\terrorsmod \"cosmossdk.io/errors\"\n\n\tsdkerrors \"github.com/cosmos/cosmos-sdk/types/errors\"\n)\n\nconst codespace = \"cyber-global\"\n\nvar (\n\tErrInvalidAddress            = sdkerrors.ErrInvalidAddress\n\tErrContractNotRegistered     = errorsmod.Register(codespace, 1, \"contract not registered\")\n\tErrContractAlreadyRegistered = errorsmod.Register(codespace, 2, \"contract already registered\")\n\tErrContractNotAdmin          = errorsmod.Register(codespace, 3, \"sender is not the contract admin\")\n\tErrContractNotCreator        = errorsmod.Register(codespace, 4, \"sender is not the contract creator\")\n\tErrInvalidCWContract         = errorsmod.Register(codespace, 5, \"invalid CosmWasm contract\")\n\tErrOutOfGas                  = errorsmod.Register(codespace, 6, \"contract execution ran out of gas\")\n\tErrContractExecutionPanic    = errorsmod.Register(codespace, 7, \"contract execution panicked\")\n)\n"
  },
  {
    "path": "app/helpers/mock.go",
    "content": "package helpers\n\nimport (\n\t\"github.com/cometbft/cometbft/crypto\"\n\ttmproto \"github.com/cometbft/cometbft/proto/tendermint/types\"\n\ttmtypes \"github.com/cometbft/cometbft/types\"\n\n\tcryptocodec \"github.com/cosmos/cosmos-sdk/crypto/codec\"\n\t\"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519\"\n\tcryptotypes \"github.com/cosmos/cosmos-sdk/crypto/types\"\n)\n\nvar _ tmtypes.PrivValidator = PV{}\n\n// PV implements PrivValidator without any safety or persistence.\n// Only use it for testing.\ntype PV struct {\n\tPrivKey cryptotypes.PrivKey\n}\n\nfunc NewPV() PV {\n\treturn PV{ed25519.GenPrivKey()}\n}\n\n// GetPubKey implements PrivValidator interface\nfunc (pv PV) GetPubKey() (crypto.PubKey, error) {\n\treturn cryptocodec.ToTmPubKeyInterface(pv.PrivKey.PubKey())\n}\n\n// SignVote implements PrivValidator interface\nfunc (pv PV) SignVote(chainID string, vote *tmproto.Vote) error {\n\tsignBytes := tmtypes.VoteSignBytes(chainID, vote)\n\tsig, err := pv.PrivKey.Sign(signBytes)\n\tif err != nil {\n\t\treturn err\n\t}\n\tvote.Signature = sig\n\treturn nil\n}\n\n// SignProposal implements PrivValidator interface\nfunc (pv PV) SignProposal(chainID string, proposal *tmproto.Proposal) error {\n\tsignBytes := tmtypes.ProposalSignBytes(chainID, proposal)\n\tsig, err := pv.PrivKey.Sign(signBytes)\n\tif err != nil {\n\t\treturn err\n\t}\n\tproposal.Signature = sig\n\treturn nil\n}\n"
  },
  {
    "path": "app/keepers/keepers.go",
    "content": "package keepers\n\nimport (\n\t\"fmt\"\n\t\"github.com/cosmos/cosmos-sdk/store/streaming\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/nft\"\n\tnftkeeper \"github.com/cosmos/cosmos-sdk/x/nft/keeper\"\n\t\"github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward\"\n\tpacketforwardtypes \"github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types\"\n\ticq \"github.com/cosmos/ibc-apps/modules/async-icq/v7\"\n\ticqkeeper \"github.com/cosmos/ibc-apps/modules/async-icq/v7/keeper\"\n\ticqtypes \"github.com/cosmos/ibc-apps/modules/async-icq/v7/types\"\n\ticacontroller \"github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller\"\n\ticacontrollertypes \"github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types\"\n\ticahost \"github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host\"\n\ticahosttypes \"github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types\"\n\ticatypes \"github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types\"\n\tclocktypes \"github.com/cybercongress/go-cyber/v7/x/clock/types\"\n\ttokenfactorykeeper \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/keeper\"\n\ttokenfactorytypes \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/CosmWasm/wasmd/x/wasm\"\n\twasmkeeper \"github.com/CosmWasm/wasmd/x/wasm/keeper\"\n\twasmtypes \"github.com/CosmWasm/wasmd/x/wasm/types\"\n\t\"github.com/cosmos/cosmos-sdk/baseapp\"\n\t\"github.com/cosmos/cosmos-sdk/client/flags\"\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\t\"github.com/cosmos/cosmos-sdk/server\"\n\tservertypes \"github.com/cosmos/cosmos-sdk/server/types\"\n\tstoretypes \"github.com/cosmos/cosmos-sdk/store/types\"\n\tauthkeeper \"github.com/cosmos/cosmos-sdk/x/auth/keeper\"\n\tauthtypes \"github.com/cosmos/cosmos-sdk/x/auth/types\"\n\tauthzkeeper \"github.com/cosmos/cosmos-sdk/x/authz/keeper\"\n\tbankkeeper \"github.com/cosmos/cosmos-sdk/x/bank/keeper\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n\tcapabilitykeeper \"github.com/cosmos/cosmos-sdk/x/capability/keeper\"\n\tcapabilitytypes \"github.com/cosmos/cosmos-sdk/x/capability/types\"\n\tcrisiskeeper \"github.com/cosmos/cosmos-sdk/x/crisis/keeper\"\n\tcrisistypes \"github.com/cosmos/cosmos-sdk/x/crisis/types\"\n\tdistrkeeper \"github.com/cosmos/cosmos-sdk/x/distribution/keeper\"\n\tdistrtypes \"github.com/cosmos/cosmos-sdk/x/distribution/types\"\n\tevidencekeeper \"github.com/cosmos/cosmos-sdk/x/evidence/keeper\"\n\tevidencetypes \"github.com/cosmos/cosmos-sdk/x/evidence/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/feegrant\"\n\tfeegrantkeeper \"github.com/cosmos/cosmos-sdk/x/feegrant/keeper\"\n\tgovkeeper \"github.com/cosmos/cosmos-sdk/x/gov/keeper\"\n\tgovtypes \"github.com/cosmos/cosmos-sdk/x/gov/types\"\n\tmintkeeper \"github.com/cosmos/cosmos-sdk/x/mint/keeper\"\n\tminttypes \"github.com/cosmos/cosmos-sdk/x/mint/types\"\n\tsdkparams \"github.com/cosmos/cosmos-sdk/x/params\"\n\tparamskeeper \"github.com/cosmos/cosmos-sdk/x/params/keeper\"\n\tparamstypes \"github.com/cosmos/cosmos-sdk/x/params/types\"\n\tparamproposal \"github.com/cosmos/cosmos-sdk/x/params/types/proposal\"\n\tslashingkeeper \"github.com/cosmos/cosmos-sdk/x/slashing/keeper\"\n\tslashingtypes \"github.com/cosmos/cosmos-sdk/x/slashing/types\"\n\tstakingkeeper \"github.com/cosmos/cosmos-sdk/x/staking/keeper\"\n\tstakingtypes \"github.com/cosmos/cosmos-sdk/x/staking/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/upgrade\"\n\tupgradekeeper \"github.com/cosmos/cosmos-sdk/x/upgrade/keeper\"\n\tupgradetypes \"github.com/cosmos/cosmos-sdk/x/upgrade/types\"\n\tibcfee \"github.com/cosmos/ibc-go/v7/modules/apps/29-fee\"\n\tibcfeekeeper \"github.com/cosmos/ibc-go/v7/modules/apps/29-fee/keeper\"\n\tibcfeetypes \"github.com/cosmos/ibc-go/v7/modules/apps/29-fee/types\"\n\t\"github.com/cosmos/ibc-go/v7/modules/apps/transfer\"\n\tibctransferkeeper \"github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper\"\n\tibctransfertypes \"github.com/cosmos/ibc-go/v7/modules/apps/transfer/types\"\n\tibcclient \"github.com/cosmos/ibc-go/v7/modules/core/02-client\"\n\tibcclienttypes \"github.com/cosmos/ibc-go/v7/modules/core/02-client/types\"\n\tporttypes \"github.com/cosmos/ibc-go/v7/modules/core/05-port/types\"\n\tibcexported \"github.com/cosmos/ibc-go/v7/modules/core/exported\"\n\tibckeeper \"github.com/cosmos/ibc-go/v7/modules/core/keeper\"\n\n\t//\"github.com/cybercongress/go-cyber/v4/app\"\n\n\t\"github.com/spf13/cast\"\n\n\tliquiditykeeper \"github.com/cybercongress/go-cyber/v7/x/liquidity/keeper\"\n\tliquiditytypes \"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n\n\twasmplugins \"github.com/cybercongress/go-cyber/v7/plugins\"\n\tbandwidthkeeper \"github.com/cybercongress/go-cyber/v7/x/bandwidth/keeper\"\n\tbandwidthtypes \"github.com/cybercongress/go-cyber/v7/x/bandwidth/types\"\n\tcyberbankkeeper \"github.com/cybercongress/go-cyber/v7/x/cyberbank/keeper\"\n\tdmnkeeper \"github.com/cybercongress/go-cyber/v7/x/dmn/keeper\"\n\tdmntypes \"github.com/cybercongress/go-cyber/v7/x/dmn/types\"\n\tgraphkeeper \"github.com/cybercongress/go-cyber/v7/x/graph/keeper\"\n\tgraphtypes \"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n\tgridkeeper \"github.com/cybercongress/go-cyber/v7/x/grid/keeper\"\n\tgridtypes \"github.com/cybercongress/go-cyber/v7/x/grid/types\"\n\t\"github.com/cybercongress/go-cyber/v7/x/rank\"\n\trankkeeper \"github.com/cybercongress/go-cyber/v7/x/rank/keeper\"\n\tranktypes \"github.com/cybercongress/go-cyber/v7/x/rank/types\"\n\tresourceskeeper \"github.com/cybercongress/go-cyber/v7/x/resources/keeper\"\n\tresourcestypes \"github.com/cybercongress/go-cyber/v7/x/resources/types\"\n\n\tconsensusparamkeeper \"github.com/cosmos/cosmos-sdk/x/consensus/keeper\"\n\tconsensusparamtypes \"github.com/cosmos/cosmos-sdk/x/consensus/types\"\n\n\tgovv1beta \"github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1\"\n\n\tclockkeeper \"github.com/cybercongress/go-cyber/v7/x/clock/keeper\"\n\n\t\"github.com/cometbft/cometbft/libs/log\"\n\ticacontrollerkeeper \"github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/keeper\"\n\ticahostkeeper \"github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/keeper\"\n\n\tpacketforwardkeeper \"github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/keeper\"\n\tibchooks \"github.com/cosmos/ibc-apps/modules/ibc-hooks/v7\"\n\tibchookskeeper \"github.com/cosmos/ibc-apps/modules/ibc-hooks/v7/keeper\"\n\tibchookstypes \"github.com/cosmos/ibc-apps/modules/ibc-hooks/v7/types\"\n)\n\nvar (\n\twasmCapabilities = \"iterator,staking,stargate,cyber,cosmwasm_1_1,cosmwasm_1_2,cosmwasm_1_3\"\n\n\ttokenFactoryCapabilities = []string{\n\t\ttokenfactorytypes.EnableBurnFrom,\n\t\ttokenfactorytypes.EnableForceTransfer,\n\t\ttokenfactorytypes.EnableSetMetadata,\n\t}\n)\n\n// module account permissions\nvar maccPerms = map[string][]string{\n\tauthtypes.FeeCollectorName:     nil,\n\tdistrtypes.ModuleName:          nil,\n\tminttypes.ModuleName:           {authtypes.Minter},\n\tstakingtypes.BondedPoolName:    {authtypes.Burner, authtypes.Staking},\n\tstakingtypes.NotBondedPoolName: {authtypes.Burner, authtypes.Staking},\n\tgovtypes.ModuleName:            {authtypes.Burner},\n\tnft.ModuleName:                 nil,\n\tibctransfertypes.ModuleName:    {authtypes.Minter, authtypes.Burner},\n\tibcfeetypes.ModuleName:         nil,\n\twasmtypes.ModuleName:           {authtypes.Burner},\n\tliquiditytypes.ModuleName:      {authtypes.Minter, authtypes.Burner},\n\tgridtypes.GridPoolName:         nil,\n\tresourcestypes.ResourcesName:   {authtypes.Minter, authtypes.Burner},\n\ttokenfactorytypes.ModuleName:   {authtypes.Minter, authtypes.Burner},\n\ticatypes.ModuleName:            nil,\n\ticqtypes.ModuleName:            nil,\n\tbandwidthtypes.ModuleName:      {authtypes.Burner},\n}\n\ntype AppKeepers struct {\n\t// keys to access the substores\n\tkeys    map[string]*storetypes.KVStoreKey\n\ttkeys   map[string]*storetypes.TransientStoreKey\n\tmemKeys map[string]*storetypes.MemoryStoreKey\n\n\t// keepers\n\tAccountKeeper         authkeeper.AccountKeeper\n\tBankKeeper            bankkeeper.Keeper\n\tCapabilityKeeper      *capabilitykeeper.Keeper\n\tStakingKeeper         *stakingkeeper.Keeper\n\tSlashingKeeper        slashingkeeper.Keeper\n\tMintKeeper            mintkeeper.Keeper\n\tDistrKeeper           distrkeeper.Keeper\n\tGovKeeper             govkeeper.Keeper\n\tCrisisKeeper          *crisiskeeper.Keeper\n\tUpgradeKeeper         *upgradekeeper.Keeper\n\tParamsKeeper          paramskeeper.Keeper\n\tEvidenceKeeper        evidencekeeper.Keeper\n\tFeeGrantKeeper        feegrantkeeper.Keeper\n\tNFTKeeper             nftkeeper.Keeper\n\tAuthzKeeper           authzkeeper.Keeper\n\tConsensusParamsKeeper consensusparamkeeper.Keeper\n\n\tIBCKeeper           *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly\n\tICQKeeper           *icqkeeper.Keeper\n\tICAHostKeeper       *icahostkeeper.Keeper\n\tICAControllerKeeper *icacontrollerkeeper.Keeper\n\tIBCFeeKeeper        ibcfeekeeper.Keeper\n\tIBCHooksKeeper      *ibchookskeeper.Keeper\n\tTransferKeeper      *ibctransferkeeper.Keeper\n\n\tTokenFactoryKeeper tokenfactorykeeper.Keeper\n\tWasmKeeper         *wasmkeeper.Keeper\n\tLiquidityKeeper    liquiditykeeper.Keeper\n\tBandwidthMeter     *bandwidthkeeper.BandwidthMeter\n\tCyberbankKeeper    *cyberbankkeeper.IndexedKeeper\n\tGraphKeeper        *graphkeeper.GraphKeeper\n\tIndexKeeper        *graphkeeper.IndexKeeper\n\tRankKeeper         *rankkeeper.StateKeeper\n\tGridKeeper         gridkeeper.Keeper\n\tDmnKeeper          *dmnkeeper.Keeper\n\tResourcesKeeper    resourceskeeper.Keeper\n\tContractKeeper     wasmtypes.ContractOpsKeeper\n\tClockKeeper        clockkeeper.Keeper\n\n\tScopedIBCKeeper           capabilitykeeper.ScopedKeeper\n\tScopedICQKeeper           capabilitykeeper.ScopedKeeper\n\tScopedTransferKeeper      capabilitykeeper.ScopedKeeper\n\tScopedICAHostKeeper       capabilitykeeper.ScopedKeeper\n\tScopedICAControllerKeeper capabilitykeeper.ScopedKeeper\n\tScopedWasmKeeper          capabilitykeeper.ScopedKeeper\n\n\t// IBC modules\n\t// transfer module\n\t// Middleware wrapper\n\tIcs20WasmHooks      *ibchooks.WasmHooks\n\tHooksICS4Wrapper    ibchooks.ICS4Middleware\n\tPacketForwardKeeper *packetforwardkeeper.Keeper\n}\n\nfunc NewAppKeepers(\n\tappCodec codec.Codec,\n\tbApp *baseapp.BaseApp,\n\tcdc *codec.LegacyAmino,\n\tmaccPerms map[string][]string,\n\tinvCheckPeriod uint,\n\tlogger log.Logger,\n\tappOpts servertypes.AppOptions,\n\twasmOpts []wasmkeeper.Option,\n) AppKeepers {\n\tappKeepers := AppKeepers{}\n\n\t// Set keys KVStoreKey, TransientStoreKey, MemoryStoreKey\n\tappKeepers.GenerateKeys()\n\tkeys := appKeepers.GetKVStoreKey()\n\ttkeys := appKeepers.GetTransientStoreKey()\n\n\t// load state streaming if enabled\n\tif _, _, err := streaming.LoadStreamingServices(bApp, appOpts, appCodec, logger, appKeepers.GetKVStoreKey()); err != nil {\n\t\tlogger.Error(\"failed to load state streaming\", \"err\", err)\n\t\tos.Exit(1)\n\t}\n\n\tappKeepers.ParamsKeeper = initParamsKeeper(\n\t\tappCodec,\n\t\tcdc,\n\t\tkeys[paramstypes.StoreKey],\n\t\ttkeys[paramstypes.TStoreKey],\n\t)\n\n\tgovModAddress := authtypes.NewModuleAddress(govtypes.ModuleName).String()\n\n\t// set the BaseApp's parameter store\n\tappKeepers.ConsensusParamsKeeper = consensusparamkeeper.NewKeeper(\n\t\tappCodec,\n\t\tkeys[consensusparamtypes.StoreKey],\n\t\tgovModAddress,\n\t)\n\tbApp.SetParamStore(&appKeepers.ConsensusParamsKeeper)\n\n\t// add capability keeper and ScopeToModule for ibc module\n\tappKeepers.CapabilityKeeper = capabilitykeeper.NewKeeper(\n\t\tappCodec,\n\t\tkeys[capabilitytypes.StoreKey],\n\t\tappKeepers.memKeys[capabilitytypes.MemStoreKey],\n\t)\n\n\tscopedIBCKeeper := appKeepers.CapabilityKeeper.ScopeToModule(ibcexported.ModuleName)\n\tscopedICAHostKeeper := appKeepers.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName)\n\tscopedICAControllerKeeper := appKeepers.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName)\n\tscopedICQKeeper := appKeepers.CapabilityKeeper.ScopeToModule(icqtypes.ModuleName)\n\tscopedTransferKeeper := appKeepers.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName)\n\tscopedWasmKeeper := appKeepers.CapabilityKeeper.ScopeToModule(wasmtypes.ModuleName)\n\tappKeepers.CapabilityKeeper.Seal()\n\n\t// add keepers\n\tBech32Prefix := \"bostrom\"\n\tappKeepers.AccountKeeper = authkeeper.NewAccountKeeper(\n\t\tappCodec,\n\t\tkeys[authtypes.StoreKey],\n\t\tauthtypes.ProtoBaseAccount,\n\t\tmaccPerms,\n\t\tBech32Prefix,\n\t\tgovModAddress,\n\t)\n\n\tappKeepers.BankKeeper = bankkeeper.NewBaseKeeper(\n\t\tappCodec,\n\t\tkeys[banktypes.StoreKey],\n\t\tappKeepers.AccountKeeper,\n\t\tBlockedAddresses(),\n\t\tgovModAddress,\n\t)\n\n\t// Cyber uses custom bank module wrapped around SDK's bank module\n\tappKeepers.CyberbankKeeper = cyberbankkeeper.NewIndexedKeeper(\n\t\tappCodec,\n\t\tkeys[authtypes.StoreKey],\n\t\tcyberbankkeeper.Wrap(appKeepers.BankKeeper),\n\t\tappKeepers.AccountKeeper,\n\t)\n\n\tstakingKeeper := stakingkeeper.NewKeeper(\n\t\tappCodec,\n\t\tkeys[stakingtypes.StoreKey],\n\t\tappKeepers.AccountKeeper,\n\t\tappKeepers.CyberbankKeeper.Proxy,\n\t\tgovModAddress,\n\t)\n\n\tappKeepers.MintKeeper = mintkeeper.NewKeeper(\n\t\tappCodec,\n\t\tkeys[minttypes.StoreKey],\n\t\tstakingKeeper,\n\t\tappKeepers.AccountKeeper,\n\t\tappKeepers.CyberbankKeeper.Proxy,\n\t\tauthtypes.FeeCollectorName,\n\t\tgovModAddress,\n\t)\n\n\tappKeepers.DistrKeeper = distrkeeper.NewKeeper(\n\t\tappCodec,\n\t\tkeys[distrtypes.StoreKey],\n\t\tappKeepers.AccountKeeper,\n\t\tappKeepers.CyberbankKeeper.Proxy,\n\t\tstakingKeeper,\n\t\tauthtypes.FeeCollectorName,\n\t\tgovModAddress,\n\t)\n\n\tappKeepers.SlashingKeeper = slashingkeeper.NewKeeper(\n\t\tappCodec,\n\t\tcdc,\n\t\tkeys[slashingtypes.StoreKey],\n\t\tstakingKeeper,\n\t\tgovModAddress,\n\t)\n\n\tappKeepers.CrisisKeeper = crisiskeeper.NewKeeper(\n\t\tappCodec,\n\t\tkeys[crisistypes.StoreKey],\n\t\tinvCheckPeriod,\n\t\tappKeepers.CyberbankKeeper.Proxy,\n\t\tauthtypes.FeeCollectorName,\n\t\tgovModAddress,\n\t)\n\n\tskipUpgradeHeights := map[int64]bool{}\n\tfor _, h := range cast.ToIntSlice(appOpts.Get(server.FlagUnsafeSkipUpgrades)) {\n\t\tskipUpgradeHeights[int64(h)] = true\n\t}\n\thomePath := cast.ToString(appOpts.Get(flags.FlagHome))\n\tappKeepers.UpgradeKeeper = upgradekeeper.NewKeeper(\n\t\tskipUpgradeHeights,\n\t\tkeys[upgradetypes.StoreKey],\n\t\tappCodec,\n\t\thomePath,\n\t\tbApp,\n\t\tgovModAddress,\n\t)\n\n\t// register the staking hooks\n\t// NOTE: stakingKeeper above is passed by reference, so that it will contain these hooks\n\tstakingKeeper.SetHooks(\n\t\tstakingtypes.NewMultiStakingHooks(\n\t\t\tappKeepers.DistrKeeper.Hooks(),\n\t\t\tappKeepers.SlashingKeeper.Hooks(),\n\t\t),\n\t)\n\tappKeepers.StakingKeeper = stakingKeeper\n\n\t// Start cyber's keepers configuration\n\n\tappKeepers.BandwidthMeter = bandwidthkeeper.NewBandwidthMeter(\n\t\tappCodec,\n\t\tkeys[bandwidthtypes.StoreKey],\n\t\ttkeys[bandwidthtypes.TStoreKey],\n\t\tappKeepers.CyberbankKeeper.Proxy,\n\t\tgovModAddress,\n\t)\n\n\tappKeepers.GraphKeeper = graphkeeper.NewKeeper(\n\t\tappCodec,\n\t\tkeys[graphtypes.ModuleName],\n\t\t// TODO fixed appKeepers.tkeys[paramstypes.TStoreKey], need test\n\t\ttkeys[graphtypes.TStoreKey],\n\t)\n\n\tappKeepers.IndexKeeper = graphkeeper.NewIndexKeeper(\n\t\t*appKeepers.GraphKeeper,\n\t\t// TODO fixed appKeepers.tkeys[paramstypes.TStoreKey], need test\n\t\ttkeys[graphtypes.TStoreKey],\n\t)\n\n\tcomputeUnit := ranktypes.ComputeUnit(cast.ToInt(appOpts.Get(rank.FlagComputeGPU)))\n\tcomputeMock := cast.ToBool(appOpts.Get(rank.FlagComputeMock))\n\tsearchAPI := cast.ToBool(appOpts.Get(rank.FlagSearchAPI))\n\tappKeepers.RankKeeper = rankkeeper.NewKeeper(\n\t\tappCodec,\n\t\tkeys[ranktypes.ModuleName],\n\t\tsearchAPI,\n\t\tappKeepers.CyberbankKeeper,\n\t\tappKeepers.IndexKeeper,\n\t\tappKeepers.GraphKeeper,\n\t\tappKeepers.AccountKeeper,\n\t\tcomputeUnit,\n\t\tcomputeMock,\n\t\tgovModAddress,\n\t)\n\n\tappKeepers.GridKeeper = gridkeeper.NewKeeper(\n\t\tappCodec,\n\t\tkeys[gridtypes.ModuleName],\n\t\tappKeepers.CyberbankKeeper.Proxy,\n\t\tappKeepers.AccountKeeper,\n\t\tgovModAddress,\n\t)\n\tappKeepers.CyberbankKeeper.SetGridKeeper(&appKeepers.GridKeeper)\n\tappKeepers.CyberbankKeeper.SetAccountKeeper(appKeepers.AccountKeeper)\n\tappKeepers.CyberbankKeeper.SetGraphKeeper(appKeepers.GraphKeeper)\n\n\tappKeepers.ResourcesKeeper = resourceskeeper.NewKeeper(\n\t\tappCodec,\n\t\tkeys[gridtypes.ModuleName],\n\t\tappKeepers.AccountKeeper,\n\t\tappKeepers.CyberbankKeeper.Proxy,\n\t\tappKeepers.BandwidthMeter,\n\t\tappKeepers.GraphKeeper,\n\t\tgovModAddress,\n\t)\n\n\tappKeepers.DmnKeeper = dmnkeeper.NewKeeper(\n\t\tappCodec,\n\t\tkeys[dmntypes.StoreKey],\n\t\tappKeepers.CyberbankKeeper.Proxy,\n\t\tappKeepers.AccountKeeper,\n\t\tgovModAddress,\n\t)\n\n\tappKeepers.LiquidityKeeper = liquiditykeeper.NewKeeper(\n\t\tappCodec,\n\t\tkeys[liquiditytypes.StoreKey],\n\t\tappKeepers.CyberbankKeeper.Proxy,\n\t\tappKeepers.AccountKeeper,\n\t\tappKeepers.DistrKeeper,\n\t\tgovModAddress,\n\t)\n\n\t// End cyber's keepers configuration\n\n\t// Create IBC Keeper\n\tappKeepers.IBCKeeper = ibckeeper.NewKeeper(\n\t\tappCodec,\n\t\tkeys[ibcexported.StoreKey],\n\t\tappKeepers.GetSubspace(ibcexported.ModuleName),\n\t\tstakingKeeper,\n\t\tappKeepers.UpgradeKeeper,\n\t\tscopedIBCKeeper,\n\t)\n\n\tappKeepers.FeeGrantKeeper = feegrantkeeper.NewKeeper(\n\t\tappCodec,\n\t\tkeys[feegrant.StoreKey],\n\t\tappKeepers.AccountKeeper,\n\t)\n\n\tappKeepers.AuthzKeeper = authzkeeper.NewKeeper(\n\t\tkeys[authzkeeper.StoreKey],\n\t\tappCodec,\n\t\tbApp.MsgServiceRouter(),\n\t\tappKeepers.AccountKeeper,\n\t)\n\n\t// register the proposal types\n\tgovRouter := govv1beta.NewRouter()\n\tgovRouter.\n\t\tAddRoute(govtypes.RouterKey, govv1beta.ProposalHandler).\n\t\tAddRoute(paramproposal.RouterKey, sdkparams.NewParamChangeProposalHandler(appKeepers.ParamsKeeper)).\n\t\tAddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(appKeepers.UpgradeKeeper)).\n\t\tAddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(appKeepers.IBCKeeper.ClientKeeper))\n\n\tgovConfig := govtypes.DefaultConfig()\n\tgovConfig.MaxMetadataLen = 10200\n\n\tgovKeeper := govkeeper.NewKeeper(\n\t\tappCodec,\n\t\tkeys[govtypes.StoreKey],\n\t\tappKeepers.AccountKeeper,\n\t\tappKeepers.CyberbankKeeper.Proxy,\n\t\tappKeepers.StakingKeeper,\n\t\tbApp.MsgServiceRouter(),\n\t\tgovtypes.DefaultConfig(),\n\t\tgovModAddress,\n\t)\n\n\tappKeepers.GovKeeper = *govKeeper.SetHooks(\n\t\tgovtypes.NewMultiGovHooks(\n\t\t// register governance hooks\n\t\t),\n\t)\n\n\tappKeepers.NFTKeeper = nftkeeper.NewKeeper(keys[nftkeeper.StoreKey], appCodec, appKeepers.AccountKeeper, appKeepers.CyberbankKeeper.Proxy)\n\n\t// Configure the hooks keeper\n\thooksKeeper := ibchookskeeper.NewKeeper(\n\t\tappKeepers.keys[ibchookstypes.StoreKey],\n\t)\n\tappKeepers.IBCHooksKeeper = &hooksKeeper\n\n\tcyberPrefix := sdk.GetConfig().GetBech32AccountAddrPrefix()\n\twasmHooks := ibchooks.NewWasmHooks(appKeepers.IBCHooksKeeper, appKeepers.WasmKeeper, cyberPrefix) // The contract keeper needs to be set later\n\tappKeepers.Ics20WasmHooks = &wasmHooks\n\tappKeepers.HooksICS4Wrapper = ibchooks.NewICS4Middleware(\n\t\tappKeepers.IBCKeeper.ChannelKeeper,\n\t\tappKeepers.Ics20WasmHooks,\n\t)\n\n\t// Do not use this middleware for anything except x/wasm requirement.\n\t// The spec currently requires new channels to be created, to use it.\n\t// We need to wait for Channel Upgradability before we can use this for any other middleware.\n\tappKeepers.IBCFeeKeeper = ibcfeekeeper.NewKeeper(\n\t\tappCodec,\n\t\tkeys[ibcfeetypes.StoreKey],\n\t\tappKeepers.HooksICS4Wrapper, // replaced with IBC middleware\n\t\tappKeepers.IBCKeeper.ChannelKeeper,\n\t\t&appKeepers.IBCKeeper.PortKeeper,\n\t\tappKeepers.AccountKeeper,\n\t\tappKeepers.CyberbankKeeper.Proxy,\n\t)\n\n\t// PacketForwardKeeper must be created before TransferKeeper\n\tappKeepers.PacketForwardKeeper = packetforwardkeeper.NewKeeper(\n\t\tappCodec,\n\t\tappKeepers.keys[packetforwardtypes.StoreKey],\n\t\tnil, // Will be zero-value here. Reference is set later on with SetTransferKeeper.\n\t\tappKeepers.IBCKeeper.ChannelKeeper,\n\t\tappKeepers.CyberbankKeeper.Proxy,\n\t\tappKeepers.HooksICS4Wrapper,\n\t\tgovModAddress,\n\t)\n\n\t// Create Transfer Keepers\n\ttransferKeeper := ibctransferkeeper.NewKeeper(\n\t\tappCodec,\n\t\tkeys[ibctransfertypes.StoreKey],\n\t\tappKeepers.GetSubspace(ibctransfertypes.ModuleName),\n\t\t// The ICS4Wrapper is replaced by the PacketForwardKeeper instead of the channel so that sending can be overridden by the middleware\n\t\tappKeepers.PacketForwardKeeper,\n\t\tappKeepers.IBCKeeper.ChannelKeeper,\n\t\t&appKeepers.IBCKeeper.PortKeeper,\n\t\tappKeepers.AccountKeeper,\n\t\tappKeepers.CyberbankKeeper.Proxy,\n\t\tscopedTransferKeeper,\n\t)\n\tappKeepers.TransferKeeper = &transferKeeper\n\n\t// Must be called on PFMRouter AFTER TransferKeeper initialized\n\tappKeepers.PacketForwardKeeper.SetTransferKeeper(appKeepers.TransferKeeper)\n\n\t// ICQ Keeper\n\ticqKeeper := icqkeeper.NewKeeper(\n\t\tappCodec,\n\t\tappKeepers.keys[icqtypes.StoreKey],\n\t\tappKeepers.IBCKeeper.ChannelKeeper, // may be replaced with middleware\n\t\tappKeepers.IBCKeeper.ChannelKeeper,\n\t\t&appKeepers.IBCKeeper.PortKeeper,\n\t\tscopedICQKeeper,\n\t\tbApp.GRPCQueryRouter(),\n\t\tgovModAddress,\n\t)\n\tappKeepers.ICQKeeper = &icqKeeper\n\n\ticaHostKeeper := icahostkeeper.NewKeeper(\n\t\tappCodec,\n\t\tkeys[icahosttypes.StoreKey],\n\t\tappKeepers.GetSubspace(icahosttypes.SubModuleName),\n\t\tappKeepers.HooksICS4Wrapper,\n\t\tappKeepers.IBCKeeper.ChannelKeeper,\n\t\t&appKeepers.IBCKeeper.PortKeeper,\n\t\tappKeepers.AccountKeeper,\n\t\tscopedICAHostKeeper,\n\t\tbApp.MsgServiceRouter(),\n\t)\n\tappKeepers.ICAHostKeeper = &icaHostKeeper\n\n\t// required since ibc-go v7.5.0\n\tappKeepers.ICAHostKeeper.WithQueryRouter(bApp.GRPCQueryRouter())\n\n\ticaControllerKeeper := icacontrollerkeeper.NewKeeper(\n\t\tappCodec,\n\t\tkeys[icacontrollertypes.StoreKey],\n\t\tappKeepers.GetSubspace(icacontrollertypes.SubModuleName),\n\t\tappKeepers.IBCFeeKeeper, // use ics29 fee as ics4Wrapper in middleware stack\n\t\tappKeepers.IBCKeeper.ChannelKeeper,\n\t\t&appKeepers.IBCKeeper.PortKeeper,\n\t\tscopedICAControllerKeeper,\n\t\tbApp.MsgServiceRouter(),\n\t)\n\tappKeepers.ICAControllerKeeper = &icaControllerKeeper\n\n\t// Create evidence Keeper for to register the IBC light client misbehaviour evidence route\n\tevidenceKeeper := evidencekeeper.NewKeeper(\n\t\tappCodec,\n\t\tkeys[evidencetypes.StoreKey],\n\t\tstakingKeeper,\n\t\tappKeepers.SlashingKeeper,\n\t)\n\t// If evidence needs to be handled for the app, set routes in router here and seal\n\tappKeepers.EvidenceKeeper = *evidenceKeeper\n\n\tappKeepers.TokenFactoryKeeper = tokenfactorykeeper.NewKeeper(\n\t\tappCodec,\n\t\tappKeepers.keys[tokenfactorytypes.StoreKey],\n\t\tmaccPerms,\n\t\tappKeepers.AccountKeeper,\n\t\tappKeepers.CyberbankKeeper.Proxy,\n\t\tappKeepers.DistrKeeper,\n\t\ttokenFactoryCapabilities,\n\t\tgovModAddress,\n\t)\n\n\t// TODO update later to data (move wasm dir inside data directory)\n\twasmDir := filepath.Join(homePath, \"wasm\")\n\n\twasmConfig, err := wasm.ReadWasmConfig(appOpts)\n\tif err != nil {\n\t\tpanic(fmt.Sprintf(\"error while reading wasm config: %s\", err))\n\t}\n\n\tcyberOpts := wasmplugins.RegisterCustomPlugins(\n\t\tappKeepers.RankKeeper,\n\t\tappKeepers.GraphKeeper,\n\t\tappKeepers.DmnKeeper,\n\t\t&appKeepers.GridKeeper,\n\t\tappKeepers.BandwidthMeter,\n\t\t&appKeepers.ResourcesKeeper,\n\t\tappKeepers.IndexKeeper,\n\t\t&appKeepers.AccountKeeper,\n\t\tappKeepers.CyberbankKeeper,\n\t\t&appKeepers.BankKeeper,\n\t\t&appKeepers.TokenFactoryKeeper,\n\t)\n\twasmOpts = append(wasmOpts, cyberOpts...)\n\twasmOpts = append(wasmplugins.RegisterStargateQueries(*bApp.GRPCQueryRouter(), appCodec), wasmOpts...)\n\n\twasmKeeper := wasmkeeper.NewKeeper(\n\t\tappCodec,\n\t\tkeys[wasmtypes.StoreKey],\n\t\tappKeepers.AccountKeeper,\n\t\tappKeepers.CyberbankKeeper.Proxy,\n\t\tstakingKeeper,\n\t\tdistrkeeper.NewQuerier(appKeepers.DistrKeeper),\n\t\tappKeepers.IBCFeeKeeper, // ISC4 Wrapper: fee IBC middleware\n\t\tappKeepers.IBCKeeper.ChannelKeeper,\n\t\t&appKeepers.IBCKeeper.PortKeeper,\n\t\tscopedWasmKeeper,\n\t\tappKeepers.TransferKeeper,\n\t\tbApp.MsgServiceRouter(),\n\t\tbApp.GRPCQueryRouter(),\n\t\twasmDir,\n\t\twasmConfig,\n\t\twasmCapabilities,\n\t\tgovModAddress,\n\t\twasmOpts...,\n\t)\n\tappKeepers.WasmKeeper = &wasmKeeper\n\n\t// set the contract keeper for the Ics20WasmHooks\n\tappKeepers.ContractKeeper = wasmkeeper.NewDefaultPermissionKeeper(appKeepers.WasmKeeper)\n\tappKeepers.Ics20WasmHooks.ContractKeeper = appKeepers.WasmKeeper\n\t//appKeepers.IBCHooksKeeper.ContractKeeper = appKeepers.ContractKeeper\n\n\tappKeepers.ClockKeeper = clockkeeper.NewKeeper(\n\t\tappKeepers.keys[clocktypes.StoreKey],\n\t\tappCodec,\n\t\t*appKeepers.WasmKeeper,\n\t\tappKeepers.ContractKeeper,\n\t\tgovModAddress,\n\t)\n\n\tappKeepers.DmnKeeper.SetWasmKeeper(*appKeepers.WasmKeeper)\n\n\t// register wasm gov proposal types\n\t// The gov proposal types can be individually enabled\n\tgovRouter.AddRoute(wasm.RouterKey, wasmkeeper.NewLegacyWasmProposalHandler(appKeepers.WasmKeeper, wasmtypes.EnableAllProposals))\n\t// Set legacy router for backwards compatibility with gov v1beta1\n\tappKeepers.GovKeeper.SetLegacyRouter(govRouter)\n\n\t// Create Transfer Stack\n\tvar transferStack porttypes.IBCModule\n\ttransferStack = transfer.NewIBCModule(*appKeepers.TransferKeeper)\n\ttransferStack = ibchooks.NewIBCMiddleware(transferStack, &appKeepers.HooksICS4Wrapper)\n\ttransferStack = packetforward.NewIBCMiddleware(\n\t\ttransferStack,\n\t\tappKeepers.PacketForwardKeeper,\n\t\t0,\n\t\tpacketforwardkeeper.DefaultForwardTransferPacketTimeoutTimestamp,\n\t\tpacketforwardkeeper.DefaultRefundTransferPacketTimeoutTimestamp,\n\t)\n\t// ibcfee must come after PFM since PFM does not understand IncentivizedAcknowlegements (ICS29)\n\ttransferStack = ibcfee.NewIBCMiddleware(transferStack, appKeepers.IBCFeeKeeper)\n\n\t// Create Interchain Accounts Stack\n\t// SendPacket, since it is originating from the application to core IBC:\n\t// icaAuthModuleKeeper.SendTx -> icaController.SendPacket -> fee.SendPacket -> channel.SendPacket\n\tvar icaControllerStack porttypes.IBCModule\n\t// integration point for custom authentication modules\n\t// see https://medium.com/the-interchain-foundation/ibc-go-v6-changes-to-interchain-accounts-and-how-it-impacts-your-chain-806c185300d7\n\tvar noAuthzModule porttypes.IBCModule\n\ticaControllerStack = icacontroller.NewIBCMiddleware(noAuthzModule, *appKeepers.ICAControllerKeeper)\n\ticaControllerStack = ibcfee.NewIBCMiddleware(icaControllerStack, appKeepers.IBCFeeKeeper)\n\n\t// RecvPacket, message that originates from core IBC and goes down to app, the flow is:\n\t// channel.RecvPacket -> fee.OnRecvPacket -> icaHost.OnRecvPacket\n\tvar icaHostStack porttypes.IBCModule\n\ticaHostStack = icahost.NewIBCModule(*appKeepers.ICAHostKeeper)\n\ticaHostStack = ibcfee.NewIBCMiddleware(icaHostStack, appKeepers.IBCFeeKeeper)\n\n\t// Create fee enabled wasm ibc Stack\n\tvar wasmStack porttypes.IBCModule\n\twasmStack = wasm.NewIBCHandler(appKeepers.WasmKeeper, appKeepers.IBCKeeper.ChannelKeeper, appKeepers.IBCFeeKeeper)\n\twasmStack = ibcfee.NewIBCMiddleware(wasmStack, appKeepers.IBCFeeKeeper)\n\n\t// Create Async ICQ module\n\ticqModule := icq.NewIBCModule(*appKeepers.ICQKeeper)\n\n\tibcRouter := porttypes.NewRouter().\n\t\tAddRoute(ibctransfertypes.ModuleName, transferStack).\n\t\tAddRoute(wasmtypes.ModuleName, wasmStack).\n\t\tAddRoute(icacontrollertypes.SubModuleName, icaControllerStack).\n\t\tAddRoute(icahosttypes.SubModuleName, icaHostStack).\n\t\tAddRoute(icqtypes.ModuleName, icqModule)\n\tappKeepers.IBCKeeper.SetRouter(ibcRouter)\n\n\tappKeepers.ScopedWasmKeeper = scopedWasmKeeper\n\tappKeepers.ScopedIBCKeeper = scopedIBCKeeper\n\tappKeepers.ScopedTransferKeeper = scopedTransferKeeper\n\tappKeepers.ScopedICQKeeper = scopedICQKeeper\n\tappKeepers.ScopedICAHostKeeper = scopedICAHostKeeper\n\tappKeepers.ScopedICAControllerKeeper = scopedICAControllerKeeper\n\n\treturn appKeepers\n}\n\nfunc initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey storetypes.StoreKey) paramskeeper.Keeper {\n\tparamsKeeper := paramskeeper.NewKeeper(appCodec, legacyAmino, key, tkey)\n\n\t// https://github.com/cosmos/ibc-go/issues/2010\n\t// Will remove all of these in the future. For now we keep for legacy proposals to work properly.\n\tparamsKeeper.Subspace(authtypes.ModuleName)\n\tparamsKeeper.Subspace(banktypes.ModuleName)\n\tparamsKeeper.Subspace(distrtypes.ModuleName)\n\tparamsKeeper.Subspace(slashingtypes.ModuleName)\n\tparamsKeeper.Subspace(govtypes.ModuleName)\n\tparamsKeeper.Subspace(crisistypes.ModuleName)\n\tparamsKeeper.Subspace(stakingtypes.ModuleName)\n\tparamsKeeper.Subspace(minttypes.ModuleName)\n\t// custom\n\tparamsKeeper.Subspace(ibctransfertypes.ModuleName)\n\tparamsKeeper.Subspace(ibcexported.ModuleName)\n\tparamsKeeper.Subspace(icahosttypes.SubModuleName)\n\tparamsKeeper.Subspace(icacontrollertypes.SubModuleName)\n\tparamsKeeper.Subspace(icqtypes.ModuleName)\n\t// commented out because there are no more ParamKeyTable in packer forward module\n\t//paramsKeeper.Subspace(packetforwardtypes.ModuleName).WithKeyTable(packetforwardtypes.ParamKeyTable())\n\tparamsKeeper.Subspace(wasmtypes.ModuleName)\n\tparamsKeeper.Subspace(bandwidthtypes.ModuleName)\n\tparamsKeeper.Subspace(ranktypes.ModuleName)\n\tparamsKeeper.Subspace(gridtypes.ModuleName)\n\tparamsKeeper.Subspace(dmntypes.ModuleName)\n\tparamsKeeper.Subspace(resourcestypes.ModuleName)\n\tparamsKeeper.Subspace(liquiditytypes.ModuleName)\n\tparamsKeeper.Subspace(tokenfactorytypes.ModuleName)\n\n\treturn paramsKeeper\n}\n\n// GetSubspace returns a param subspace for a given module name.\nfunc (appKeepers *AppKeepers) GetSubspace(moduleName string) paramstypes.Subspace {\n\tsubspace, _ := appKeepers.ParamsKeeper.GetSubspace(moduleName)\n\treturn subspace\n}\n\n// BlockedAddresses returns all the app's blocked account addresses.\nfunc BlockedAddresses() map[string]bool {\n\tmodAccAddrs := make(map[string]bool)\n\tfor acc := range GetMaccPerms() {\n\t\tmodAccAddrs[authtypes.NewModuleAddress(acc).String()] = true\n\t}\n\n\t// allow the following addresses to receive funds\n\tdelete(modAccAddrs, authtypes.NewModuleAddress(govtypes.ModuleName).String())\n\n\treturn modAccAddrs\n}\n\n// GetMaccPerms returns a copy of the module account permissions\nfunc GetMaccPerms() map[string][]string {\n\tdupMaccPerms := make(map[string][]string)\n\tfor k, v := range maccPerms {\n\t\tdupMaccPerms[k] = v\n\t}\n\n\treturn dupMaccPerms\n}\n"
  },
  {
    "path": "app/keepers/keys.go",
    "content": "package keepers\n\nimport (\n\twasmtypes \"github.com/CosmWasm/wasmd/x/wasm/types\"\n\tstoretypes \"github.com/cosmos/cosmos-sdk/store/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tauthtypes \"github.com/cosmos/cosmos-sdk/x/auth/types\"\n\tauthzkeeper \"github.com/cosmos/cosmos-sdk/x/authz/keeper\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n\tcapabilitytypes \"github.com/cosmos/cosmos-sdk/x/capability/types\"\n\tconsensusparamtypes \"github.com/cosmos/cosmos-sdk/x/consensus/types\"\n\tcrisistypes \"github.com/cosmos/cosmos-sdk/x/crisis/types\"\n\tdistrtypes \"github.com/cosmos/cosmos-sdk/x/distribution/types\"\n\tevidencetypes \"github.com/cosmos/cosmos-sdk/x/evidence/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/feegrant\"\n\tgovtypes \"github.com/cosmos/cosmos-sdk/x/gov/types\"\n\tminttypes \"github.com/cosmos/cosmos-sdk/x/mint/types\"\n\tnftkeeper \"github.com/cosmos/cosmos-sdk/x/nft/keeper\"\n\tparamstypes \"github.com/cosmos/cosmos-sdk/x/params/types\"\n\tslashingtypes \"github.com/cosmos/cosmos-sdk/x/slashing/types\"\n\tstakingtypes \"github.com/cosmos/cosmos-sdk/x/staking/types\"\n\tupgradetypes \"github.com/cosmos/cosmos-sdk/x/upgrade/types\"\n\tpacketforwardtypes \"github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types\"\n\ticqtypes \"github.com/cosmos/ibc-apps/modules/async-icq/v7/types\"\n\tibchookstypes \"github.com/cosmos/ibc-apps/modules/ibc-hooks/v7/types\"\n\ticacontrollertypes \"github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types\"\n\ticahosttypes \"github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types\"\n\tibcfeetypes \"github.com/cosmos/ibc-go/v7/modules/apps/29-fee/types\"\n\tibctransfertypes \"github.com/cosmos/ibc-go/v7/modules/apps/transfer/types\"\n\tibcexported \"github.com/cosmos/ibc-go/v7/modules/core/exported\"\n\tclocktypes \"github.com/cybercongress/go-cyber/v7/x/clock/types\"\n\ttokenfactorytypes \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n\n\tliquiditytypes \"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n\n\tbandwidthtypes \"github.com/cybercongress/go-cyber/v7/x/bandwidth/types\"\n\tdmntypes \"github.com/cybercongress/go-cyber/v7/x/dmn/types\"\n\tgraphtypes \"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n\tgridtypes \"github.com/cybercongress/go-cyber/v7/x/grid/types\"\n\tranktypes \"github.com/cybercongress/go-cyber/v7/x/rank/types\"\n\tresourcestypes \"github.com/cybercongress/go-cyber/v7/x/resources/types\"\n)\n\nfunc (appKeepers *AppKeepers) GenerateKeys() {\n\tappKeepers.keys = sdk.NewKVStoreKeys(\n\t\t// defaults\n\t\tauthtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey,\n\t\tminttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey,\n\t\tgovtypes.StoreKey, paramstypes.StoreKey, upgradetypes.StoreKey,\n\t\tevidencetypes.StoreKey, capabilitytypes.StoreKey,\n\t\tauthzkeeper.StoreKey, feegrant.StoreKey, nftkeeper.StoreKey,\n\t\tconsensusparamtypes.StoreKey, crisistypes.StoreKey,\n\t\t// non sdk store keys\n\t\ticahosttypes.StoreKey,\n\t\ticacontrollertypes.StoreKey,\n\t\tibcexported.StoreKey,\n\t\tibctransfertypes.StoreKey,\n\t\tibcfeetypes.StoreKey,\n\t\twasmtypes.StoreKey,\n\t\tpacketforwardtypes.StoreKey,\n\t\tibchookstypes.StoreKey,\n\t\ticqtypes.StoreKey,\n\t\t// our additions\n\t\tclocktypes.StoreKey,\n\t\tliquiditytypes.StoreKey,\n\t\tbandwidthtypes.StoreKey,\n\t\tgraphtypes.StoreKey,\n\t\tranktypes.StoreKey,\n\t\tgridtypes.StoreKey,\n\t\tdmntypes.StoreKey,\n\t\tresourcestypes.StoreKey,\n\t\ttokenfactorytypes.StoreKey,\n\t)\n\n\tappKeepers.tkeys = sdk.NewTransientStoreKeys(\n\t\tparamstypes.TStoreKey,\n\t\tgraphtypes.TStoreKey,\n\t\tbandwidthtypes.TStoreKey,\n\t)\n\tappKeepers.memKeys = sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey)\n}\n\nfunc (appKeepers *AppKeepers) GetKVStoreKey() map[string]*storetypes.KVStoreKey {\n\treturn appKeepers.keys\n}\n\nfunc (appKeepers *AppKeepers) GetTransientStoreKey() map[string]*storetypes.TransientStoreKey {\n\treturn appKeepers.tkeys\n}\n\nfunc (appKeepers *AppKeepers) GetMemoryStoreKey() map[string]*storetypes.MemoryStoreKey {\n\treturn appKeepers.memKeys\n}\n\n// GetKey returns the KVStoreKey for the provided store key.\n//\n// NOTE: This is solely to be used for testing purposes.\nfunc (appKeepers *AppKeepers) GetKey(storeKey string) *storetypes.KVStoreKey {\n\treturn appKeepers.keys[storeKey]\n}\n\n// GetTKey returns the TransientStoreKey for the provided store key.\n//\n// NOTE: This is solely to be used for testing purposes.\nfunc (appKeepers *AppKeepers) GetTKey(storeKey string) *storetypes.TransientStoreKey {\n\treturn appKeepers.tkeys[storeKey]\n}\n\n// GetMemKey returns the MemStoreKey for the provided mem key.\n//\n// NOTE: This is solely used for testing purposes.\nfunc (appKeepers *AppKeepers) GetMemKey(storeKey string) *storetypes.MemoryStoreKey {\n\treturn appKeepers.memKeys[storeKey]\n}\n"
  },
  {
    "path": "app/modules.go",
    "content": "package app\n\nimport (\n\tsimappparams \"cosmossdk.io/simapp/params\"\n\t\"github.com/CosmWasm/wasmd/x/wasm\"\n\twasmtypes \"github.com/CosmWasm/wasmd/x/wasm/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/module\"\n\t\"github.com/cosmos/cosmos-sdk/x/auth\"\n\tauthtypes \"github.com/cosmos/cosmos-sdk/x/auth/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/auth/vesting\"\n\tvestingtypes \"github.com/cosmos/cosmos-sdk/x/auth/vesting/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/authz\"\n\tauthzmodule \"github.com/cosmos/cosmos-sdk/x/authz/module\"\n\t\"github.com/cosmos/cosmos-sdk/x/bank\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/capability\"\n\tcapabilitytypes \"github.com/cosmos/cosmos-sdk/x/capability/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/consensus\"\n\tconsensusparamtypes \"github.com/cosmos/cosmos-sdk/x/consensus/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/crisis\"\n\tcrisistypes \"github.com/cosmos/cosmos-sdk/x/crisis/types\"\n\tdistr \"github.com/cosmos/cosmos-sdk/x/distribution\"\n\tdistrtypes \"github.com/cosmos/cosmos-sdk/x/distribution/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/evidence\"\n\tevidencetypes \"github.com/cosmos/cosmos-sdk/x/evidence/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/feegrant\"\n\tfeegrantmodule \"github.com/cosmos/cosmos-sdk/x/feegrant/module\"\n\t\"github.com/cosmos/cosmos-sdk/x/genutil\"\n\tgenutiltypes \"github.com/cosmos/cosmos-sdk/x/genutil/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/gov\"\n\tgovtypes \"github.com/cosmos/cosmos-sdk/x/gov/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/mint\"\n\tminttypes \"github.com/cosmos/cosmos-sdk/x/mint/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/nft\"\n\tnftmodule \"github.com/cosmos/cosmos-sdk/x/nft/module\"\n\tsdkparams \"github.com/cosmos/cosmos-sdk/x/params\"\n\tparamstypes \"github.com/cosmos/cosmos-sdk/x/params/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/slashing\"\n\tslashingtypes \"github.com/cosmos/cosmos-sdk/x/slashing/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/staking\"\n\tstakingtypes \"github.com/cosmos/cosmos-sdk/x/staking/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/upgrade\"\n\tupgradetypes \"github.com/cosmos/cosmos-sdk/x/upgrade/types\"\n\tpacketforward \"github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward\"\n\tpacketforwardtypes \"github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types\"\n\tibchooks \"github.com/cosmos/ibc-apps/modules/ibc-hooks/v7\"\n\tibchookstypes \"github.com/cosmos/ibc-apps/modules/ibc-hooks/v7/types\"\n\tica \"github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts\"\n\tibcfee \"github.com/cosmos/ibc-go/v7/modules/apps/29-fee\"\n\tibcfeetypes \"github.com/cosmos/ibc-go/v7/modules/apps/29-fee/types\"\n\t\"github.com/cosmos/ibc-go/v7/modules/apps/transfer\"\n\tibctransfertypes \"github.com/cosmos/ibc-go/v7/modules/apps/transfer/types\"\n\tibc \"github.com/cosmos/ibc-go/v7/modules/core\"\n\tibcexported \"github.com/cosmos/ibc-go/v7/modules/core/exported\"\n\tsolomachine \"github.com/cosmos/ibc-go/v7/modules/light-clients/06-solomachine\"\n\tibctm \"github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint\"\n\t\"github.com/cybercongress/go-cyber/v7/x/clock\"\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory\"\n\ttokenfactorytypes \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity\"\n\tliquiditytypes \"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/bandwidth\"\n\tbandwidthtypes \"github.com/cybercongress/go-cyber/v7/x/bandwidth/types\"\n\t\"github.com/cybercongress/go-cyber/v7/x/cyberbank\"\n\tcyberbanktypes \"github.com/cybercongress/go-cyber/v7/x/cyberbank/types\"\n\t\"github.com/cybercongress/go-cyber/v7/x/dmn\"\n\tdmntypes \"github.com/cybercongress/go-cyber/v7/x/dmn/types\"\n\t\"github.com/cybercongress/go-cyber/v7/x/graph\"\n\tgraphtypes \"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n\tgrid \"github.com/cybercongress/go-cyber/v7/x/grid\"\n\tgridtypes \"github.com/cybercongress/go-cyber/v7/x/grid/types\"\n\t\"github.com/cybercongress/go-cyber/v7/x/rank\"\n\tranktypes \"github.com/cybercongress/go-cyber/v7/x/rank/types\"\n\t\"github.com/cybercongress/go-cyber/v7/x/resources\"\n\tresourcestypes \"github.com/cybercongress/go-cyber/v7/x/resources/types\"\n\tstakingwrap \"github.com/cybercongress/go-cyber/v7/x/staking\"\n\n\tauthsims \"github.com/cosmos/cosmos-sdk/x/auth/simulation\"\n\ticatypes \"github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types\"\n\tclocktypes \"github.com/cybercongress/go-cyber/v7/x/clock/types\"\n\n\ticq \"github.com/cosmos/ibc-apps/modules/async-icq/v7\"\n\ticqtypes \"github.com/cosmos/ibc-apps/modules/async-icq/v7/types\"\n)\n\n// ModuleBasics TODO add notes which modules have functional blockers\n// ModuleBasics defines the module BasicManager is in charge of setting up basic,\n// non-dependant module elements, such as codec registration\n// and genesis verification.\nvar ModuleBasics = module.NewBasicManager(\n\tauth.AppModuleBasic{},\n\tgenutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator),\n\tbank.AppModuleBasic{},\n\tcapability.AppModuleBasic{},\n\tstaking.AppModuleBasic{},\n\tmint.AppModuleBasic{},\n\tdistr.AppModuleBasic{},\n\tgov.NewAppModuleBasic(getGovProposalHandlers()),\n\tsdkparams.AppModuleBasic{},\n\tcrisis.AppModuleBasic{},\n\tslashing.AppModuleBasic{},\n\tupgrade.AppModuleBasic{},\n\tevidence.AppModuleBasic{},\n\tauthzmodule.AppModuleBasic{},\n\tfeegrantmodule.AppModuleBasic{},\n\tvesting.AppModuleBasic{},\n\tnftmodule.AppModuleBasic{},\n\n\ttransfer.AppModuleBasic{},\n\tconsensus.AppModuleBasic{},\n\tliquidity.AppModuleBasic{},\n\twasm.AppModuleBasic{},\n\tbandwidth.AppModuleBasic{},\n\tcyberbank.AppModuleBasic{},\n\tgraph.AppModuleBasic{},\n\trank.AppModuleBasic{},\n\tgrid.AppModuleBasic{},\n\tdmn.AppModuleBasic{},\n\tresources.AppModuleBasic{},\n\ttokenfactory.AppModuleBasic{},\n\tclock.AppModuleBasic{},\n\n\tibctm.AppModuleBasic{},\n\tibc.AppModuleBasic{},\n\tica.AppModuleBasic{},\n\tibcfee.AppModuleBasic{},\n\ticq.AppModuleBasic{},\n\tibchooks.AppModuleBasic{},\n\tpacketforward.AppModuleBasic{},\n\tsolomachine.AppModuleBasic{},\n)\n\nfunc appModules(\n\tapp *App,\n\tencodingConfig simappparams.EncodingConfig,\n\tskipGenesisInvariants bool,\n) []module.AppModule {\n\tappCodec := encodingConfig.Codec\n\n\treturn []module.AppModule{\n\t\tgenutil.NewAppModule(\n\t\t\tapp.AccountKeeper,\n\t\t\tapp.StakingKeeper,\n\t\t\tapp.BaseApp.DeliverTx,\n\t\t\tencodingConfig.TxConfig,\n\t\t),\n\t\tauth.NewAppModule(appCodec, app.AccountKeeper, nil, app.GetSubspace(authtypes.ModuleName)),\n\t\tvesting.NewAppModule(app.AccountKeeper, app.CyberbankKeeper.Proxy),\n\t\tbank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper, app.GetSubspace(banktypes.ModuleName)),\n\t\tcapability.NewAppModule(appCodec, *app.CapabilityKeeper, false),\n\t\tfeegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.CyberbankKeeper.Proxy, app.FeeGrantKeeper, app.interfaceRegistry),\n\t\tgov.NewAppModule(appCodec, &app.GovKeeper, app.AccountKeeper, app.CyberbankKeeper.Proxy, app.GetSubspace(govtypes.ModuleName)),\n\t\tmint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper, nil, app.GetSubspace(minttypes.ModuleName)),\n\t\tslashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.CyberbankKeeper.Proxy, app.StakingKeeper, app.GetSubspace(slashingtypes.ModuleName)),\n\t\tdistr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.CyberbankKeeper.Proxy, app.StakingKeeper, app.GetSubspace(distrtypes.ModuleName)),\n\t\tupgrade.NewAppModule(app.UpgradeKeeper),\n\t\tevidence.NewAppModule(app.EvidenceKeeper),\n\t\tsdkparams.NewAppModule(app.ParamsKeeper),\n\t\tauthzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.CyberbankKeeper.Proxy, app.interfaceRegistry),\n\t\tnftmodule.NewAppModule(appCodec, app.AppKeepers.NFTKeeper, app.AppKeepers.AccountKeeper, app.CyberbankKeeper.Proxy, app.interfaceRegistry),\n\t\tcrisis.NewAppModule(app.AppKeepers.CrisisKeeper, skipGenesisInvariants, app.GetSubspace(crisistypes.ModuleName)),\n\t\tconsensus.NewAppModule(appCodec, app.AppKeepers.ConsensusParamsKeeper),\n\n\t\twasm.NewAppModule(appCodec, app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.CyberbankKeeper.Proxy, app.MsgServiceRouter(), app.GetSubspace(wasmtypes.ModuleName)),\n\t\tliquidity.NewAppModule(appCodec, app.LiquidityKeeper, app.AccountKeeper, app.CyberbankKeeper.Proxy, app.DistrKeeper, app.GetSubspace(liquiditytypes.ModuleName)),\n\t\tcyberbank.NewAppModule(appCodec, app.CyberbankKeeper),\n\t\tbandwidth.NewAppModule(appCodec, app.AccountKeeper, app.BandwidthMeter, app.GetSubspace(bandwidthtypes.ModuleName)),\n\t\tgraph.NewAppModule(\n\t\t\tappCodec, app.GraphKeeper, app.IndexKeeper,\n\t\t\tapp.AccountKeeper, app.CyberbankKeeper, app.BandwidthMeter,\n\t\t),\n\t\trank.NewAppModule(appCodec, app.RankKeeper, app.GetSubspace(ranktypes.ModuleName)),\n\t\tgrid.NewAppModule(appCodec, app.GridKeeper, app.GetSubspace(gridtypes.ModuleName)),\n\t\tdmn.NewAppModule(appCodec, *app.DmnKeeper, app.GetSubspace(dmntypes.ModuleName)),\n\t\tresources.NewAppModule(appCodec, app.ResourcesKeeper, app.GetSubspace(resourcestypes.ModuleName)),\n\t\tstakingwrap.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.CyberbankKeeper.Proxy, app.GetSubspace(stakingtypes.ModuleName)),\n\t\t// NOTE add Bank Proxy here to resolve issue when new neuron is created during token-factory token transfer\n\t\t// TODO add storage listener to update neurons memory index out of cyberbank proxy\n\t\ttokenfactory.NewAppModule(app.AppKeepers.TokenFactoryKeeper, app.AppKeepers.AccountKeeper, app.CyberbankKeeper.Proxy, app.GetSubspace(tokenfactorytypes.ModuleName)),\n\t\tclock.NewAppModule(appCodec, app.AppKeepers.ClockKeeper),\n\n\t\tibc.NewAppModule(app.IBCKeeper),\n\t\ttransfer.NewAppModule(*app.TransferKeeper),\n\t\tibcfee.NewAppModule(app.IBCFeeKeeper),\n\t\tica.NewAppModule(app.ICAControllerKeeper, app.ICAHostKeeper),\n\t\tibchooks.NewAppModule(app.AppKeepers.AccountKeeper),\n\t\tpacketforward.NewAppModule(app.PacketForwardKeeper, app.GetSubspace(packetforwardtypes.ModuleName)),\n\t\ticq.NewAppModule(*app.AppKeepers.ICQKeeper, app.GetSubspace(icqtypes.ModuleName)),\n\t}\n}\n\n// simulationModules returns modules for simulation manager\n// define the order of the modules for deterministic simulationss\nfunc simulationModules(\n\tapp *App,\n\tencodingConfig simappparams.EncodingConfig,\n\t_ bool,\n) []module.AppModuleSimulation {\n\tappCodec := encodingConfig.Codec\n\n\treturn []module.AppModuleSimulation{\n\t\tauth.NewAppModule(appCodec, app.AppKeepers.AccountKeeper, authsims.RandomGenesisAccounts, app.GetSubspace(authtypes.ModuleName)),\n\t\tbank.NewAppModule(appCodec, app.AppKeepers.BankKeeper, app.AppKeepers.AccountKeeper, app.GetSubspace(banktypes.ModuleName)),\n\t\tcapability.NewAppModule(appCodec, *app.AppKeepers.CapabilityKeeper, false),\n\t\tfeegrantmodule.NewAppModule(appCodec, app.AppKeepers.AccountKeeper, app.AppKeepers.BankKeeper, app.AppKeepers.FeeGrantKeeper, app.interfaceRegistry),\n\t\tauthzmodule.NewAppModule(appCodec, app.AppKeepers.AuthzKeeper, app.AppKeepers.AccountKeeper, app.AppKeepers.BankKeeper, app.interfaceRegistry),\n\t\tgov.NewAppModule(appCodec, &app.AppKeepers.GovKeeper, app.AppKeepers.AccountKeeper, app.AppKeepers.BankKeeper, app.GetSubspace(govtypes.ModuleName)),\n\t\tmint.NewAppModule(appCodec, app.AppKeepers.MintKeeper, app.AppKeepers.AccountKeeper, nil, app.GetSubspace(minttypes.ModuleName)),\n\t\tstakingwrap.NewAppModule(appCodec, app.AppKeepers.StakingKeeper, app.AppKeepers.AccountKeeper, app.AppKeepers.BankKeeper, app.GetSubspace(stakingtypes.ModuleName)),\n\t\tdistr.NewAppModule(appCodec, app.AppKeepers.DistrKeeper, app.AppKeepers.AccountKeeper, app.AppKeepers.BankKeeper, app.AppKeepers.StakingKeeper, app.GetSubspace(distrtypes.ModuleName)),\n\t\tslashing.NewAppModule(appCodec, app.AppKeepers.SlashingKeeper, app.AppKeepers.AccountKeeper, app.AppKeepers.BankKeeper, app.AppKeepers.StakingKeeper, app.GetSubspace(stakingtypes.ModuleName)),\n\t\tsdkparams.NewAppModule(app.AppKeepers.ParamsKeeper),\n\t\tevidence.NewAppModule(app.AppKeepers.EvidenceKeeper),\n\t\twasm.NewAppModule(appCodec, app.AppKeepers.WasmKeeper, app.AppKeepers.StakingKeeper, app.AppKeepers.AccountKeeper, app.AppKeepers.BankKeeper, app.MsgServiceRouter(), app.GetSubspace(wasmtypes.ModuleName)),\n\t\tibc.NewAppModule(app.AppKeepers.IBCKeeper),\n\t\ttransfer.NewAppModule(*app.AppKeepers.TransferKeeper),\n\t\tibcfee.NewAppModule(app.IBCFeeKeeper),\n\t\tica.NewAppModule(app.ICAControllerKeeper, app.ICAHostKeeper),\n\t}\n}\n\n// orderBeginBlockers tell the app's module manager how to set the order of\n// BeginBlockers, which are run at the beginning of every block.\n// NOTE: capability module's beginblocker must come before any modules using capabilities (e.g. IBC)\nfunc orderBeginBlockers() []string {\n\treturn []string{\n\t\t// upgrades should be run first\n\t\tupgradetypes.ModuleName,\n\t\tcapabilitytypes.ModuleName,\n\t\tminttypes.ModuleName,\n\t\tdistrtypes.ModuleName,\n\t\tslashingtypes.ModuleName,\n\t\tevidencetypes.ModuleName,\n\t\tstakingtypes.ModuleName,\n\t\tauthtypes.ModuleName,\n\t\tbanktypes.ModuleName,\n\t\tgovtypes.ModuleName,\n\t\tcrisistypes.ModuleName,\n\t\tibcexported.ModuleName,\n\t\tibctransfertypes.ModuleName,\n\t\ticatypes.ModuleName,\n\t\tpacketforwardtypes.ModuleName,\n\t\tibcfeetypes.ModuleName,\n\t\tgenutiltypes.ModuleName,\n\t\tauthz.ModuleName,\n\t\tfeegrant.ModuleName,\n\t\tparamstypes.ModuleName,\n\t\tvestingtypes.ModuleName,\n\t\tconsensusparamtypes.ModuleName,\n\t\tnft.ModuleName,\n\t\ticqtypes.ModuleName,\n\t\tibchookstypes.ModuleName,\n\t\t// additional modules\n\t\tliquiditytypes.ModuleName,\n\t\tdmntypes.ModuleName,\n\t\tclocktypes.ModuleName,\n\t\tbandwidthtypes.ModuleName,\n\t\tcyberbanktypes.ModuleName,\n\t\tgraphtypes.ModuleName,\n\t\tgridtypes.ModuleName,\n\t\tranktypes.ModuleName,\n\t\tresourcestypes.ModuleName,\n\t\ttokenfactorytypes.ModuleName,\n\t\twasm.ModuleName,\n\t}\n}\n\nfunc orderEndBlockers() []string {\n\treturn []string{\n\t\tcrisistypes.ModuleName,\n\t\tgovtypes.ModuleName,\n\t\tstakingtypes.ModuleName,\n\t\tibcexported.ModuleName,\n\t\tibctransfertypes.ModuleName,\n\t\ticatypes.ModuleName,\n\t\tpacketforwardtypes.ModuleName,\n\t\tcapabilitytypes.ModuleName,\n\t\tibcfeetypes.ModuleName,\n\t\tauthtypes.ModuleName,\n\t\tbanktypes.ModuleName,\n\t\tdistrtypes.ModuleName,\n\t\tslashingtypes.ModuleName,\n\t\tminttypes.ModuleName,\n\t\tgenutiltypes.ModuleName,\n\t\tevidencetypes.ModuleName,\n\t\tauthz.ModuleName,\n\t\tfeegrant.ModuleName,\n\t\tparamstypes.ModuleName,\n\t\tupgradetypes.ModuleName,\n\t\tvestingtypes.ModuleName,\n\t\tconsensusparamtypes.ModuleName,\n\t\tnft.ModuleName,\n\t\ticqtypes.ModuleName,\n\t\tibchookstypes.ModuleName,\n\t\t// additional modules\n\t\tclocktypes.ModuleName,\n\t\ttokenfactorytypes.ModuleName,\n\t\tdmntypes.ModuleName,\n\t\tgridtypes.ModuleName,\n\t\tresourcestypes.ModuleName,\n\t\tliquiditytypes.ModuleName,\n\t\twasm.ModuleName,\n\t\t// TODO check end blocks\n\t\tcyberbanktypes.ModuleName,\n\t\tbandwidthtypes.ModuleName,\n\t\tgraphtypes.ModuleName,\n\t\tranktypes.ModuleName,\n\t}\n}\n\n// NOTE: The genutils module must occur after staking so that pools are\n// properly initialized with tokens from genesis accounts.\n// NOTE: The genutils module must also occur after auth so that it can access the params from auth.\n// NOTE: Capability module must occur first so that it can initialize any capabilities\n// so that other modules that want to create or claim capabilities afterwards in InitChain\n// can do so safely.\n// NOTE: wasm module should be at the end as it can call other module functionality direct or via message dispatching during\n// genesis phase. For example bank transfer, auth account check, staking, ...\nfunc orderInitBlockers() []string {\n\treturn []string{\n\t\tcapabilitytypes.ModuleName,\n\t\tauthtypes.ModuleName,\n\t\tbanktypes.ModuleName,\n\t\tdistrtypes.ModuleName,\n\t\tgovtypes.ModuleName,\n\t\tstakingtypes.ModuleName,\n\t\tslashingtypes.ModuleName,\n\t\tminttypes.ModuleName,\n\t\tcrisistypes.ModuleName,\n\t\tgenutiltypes.ModuleName,\n\t\tibctransfertypes.ModuleName,\n\t\tibcexported.ModuleName,\n\t\ticatypes.ModuleName,\n\t\tevidencetypes.ModuleName,\n\t\tauthz.ModuleName,\n\t\tfeegrant.ModuleName,\n\t\tpacketforwardtypes.ModuleName,\n\t\tparamstypes.ModuleName,\n\t\tupgradetypes.ModuleName,\n\t\tvestingtypes.ModuleName,\n\t\tnft.ModuleName,\n\t\tconsensusparamtypes.ModuleName,\n\t\ticqtypes.ModuleName,\n\t\tibchookstypes.ModuleName,\n\t\t// additional modules\n\t\tliquiditytypes.ModuleName,\n\t\tibcfeetypes.ModuleName,\n\t\tclocktypes.ModuleName,\n\t\ttokenfactorytypes.ModuleName,\n\t\tbandwidthtypes.ModuleName,\n\t\tranktypes.ModuleName,\n\t\tgridtypes.ModuleName,\n\t\tresourcestypes.ModuleName,\n\t\tdmntypes.ModuleName,\n\t\tgraphtypes.ModuleName,\n\t\t// NOTE: cyberbank will be initialized directly in InitChainer\n\t\tcyberbanktypes.ModuleName,\n\t\twasm.ModuleName,\n\t}\n}\n"
  },
  {
    "path": "app/params/const.go",
    "content": "package params\n\nconst (\n\tDefaultDenom = \"boot\"\n\tBondDenom    = \"boot\"\n)\n"
  },
  {
    "path": "app/params/encoding.go",
    "content": "package params\n\nimport (\n\tsimappparams \"cosmossdk.io/simapp/params\"\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\t\"github.com/cosmos/cosmos-sdk/codec/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/auth/tx\"\n)\n\n// MakeEncodingConfig creates an EncodingConfig for an amino based test configuration.\nfunc MakeEncodingConfig() simappparams.EncodingConfig {\n\tamino := codec.NewLegacyAmino()\n\tinterfaceRegistry := types.NewInterfaceRegistry()\n\tmarshaler := codec.NewProtoCodec(interfaceRegistry)\n\ttxCfg := tx.NewTxConfig(marshaler, tx.DefaultSignModes)\n\n\treturn simappparams.EncodingConfig{\n\t\tInterfaceRegistry: interfaceRegistry,\n\t\tCodec:             marshaler,\n\t\tTxConfig:          txCfg,\n\t\tAmino:             amino,\n\t}\n}\n"
  },
  {
    "path": "app/params/weights.go",
    "content": "package params\n\n// Simulation parameter constants\nconst (\n\tStakePerAccount           = \"stake_per_account\"\n\tInitiallyBondedValidators = \"initially_bonded_validators\"\n\n\tDefaultWeightMsgCreateDenom      int = 100\n\tDefaultWeightMsgMint             int = 100\n\tDefaultWeightMsgBurn             int = 100\n\tDefaultWeightMsgChangeAdmin      int = 100\n\tDefaultWeightMsgSetDenomMetadata int = 100\n\tDefaultWeightMsgForceTransfer    int = 100\n)\n"
  },
  {
    "path": "app/prefix.go",
    "content": "package app\n\nimport (\n\twasmtypes \"github.com/CosmWasm/wasmd/x/wasm/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\nvar (\n\tAccountAddressPrefix   = Bech32Prefix\n\tAccountPubKeyPrefix    = AccountAddressPrefix + \"pub\"\n\tValidatorAddressPrefix = AccountAddressPrefix + \"valoper\"\n\tValidatorPubKeyPrefix  = AccountAddressPrefix + \"valoperpub\"\n\tConsNodeAddressPrefix  = AccountAddressPrefix + \"valcons\"\n\tConsNodePubKeyPrefix   = AccountAddressPrefix + \"valconspub\"\n\tCoinType               = 118\n)\n\n// SetConfig sets the configuration for the network using mainnet or testnet\nfunc SetConfig() {\n\tconfig := sdk.GetConfig()\n\tconfig.SetCoinType(uint32(CoinType))\n\tconfig.SetBech32PrefixForAccount(AccountAddressPrefix, AccountPubKeyPrefix)\n\tconfig.SetBech32PrefixForValidator(ValidatorAddressPrefix, ValidatorPubKeyPrefix)\n\tconfig.SetBech32PrefixForConsensusNode(ConsNodeAddressPrefix, ConsNodePubKeyPrefix)\n\tconfig.SetAddressVerifier(wasmtypes.VerifyAddressLen())\n\tconfig.Seal()\n}\n"
  },
  {
    "path": "app/proof_exempt.go",
    "content": "package app\n\nimport (\n\t\"encoding/json\"\n\n\twasmtypes \"github.com/CosmWasm/wasmd/x/wasm/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/auth/ante\"\n)\n\n// ProofExemptDecorator conditionally skips fee deduction for\n// PoW mining proof submissions to whitelisted contracts.\n//\n// When a transaction contains ONLY MsgExecuteContract calls\n// targeting an exempt contract with a \"submit_proof\" message,\n// the decorator bypasses DeductFeeDecorator entirely.\n// This allows miners to submit proofs without holding any tokens\n// for gas — the mining contract deducts gas cost from rewards.\n//\n// For all other transactions, normal fee deduction applies.\ntype ProofExemptDecorator struct {\n\tinner           ante.DeductFeeDecorator\n\texemptContracts map[string]struct{}\n}\n\nfunc NewProofExemptDecorator(\n\topts ante.HandlerOptions,\n\texemptContracts []string,\n) ProofExemptDecorator {\n\tcontracts := make(map[string]struct{}, len(exemptContracts))\n\tfor _, c := range exemptContracts {\n\t\tif c != \"\" {\n\t\t\tcontracts[c] = struct{}{}\n\t\t}\n\t}\n\treturn ProofExemptDecorator{\n\t\tinner:           ante.NewDeductFeeDecorator(opts.AccountKeeper, opts.BankKeeper, opts.FeegrantKeeper, opts.TxFeeChecker),\n\t\texemptContracts: contracts,\n\t}\n}\n\nfunc (d ProofExemptDecorator) AnteHandle(\n\tctx sdk.Context,\n\ttx sdk.Tx,\n\tsimulate bool,\n\tnext sdk.AnteHandler,\n) (sdk.Context, error) {\n\tif d.isProofSubmission(tx) {\n\t\t// Skip fee deduction — gas cost is handled inside the contract.\n\t\t// Still call next to continue the ante chain (sig verification, etc.).\n\t\treturn next(ctx, tx, simulate)\n\t}\n\treturn d.inner.AnteHandle(ctx, tx, simulate, next)\n}\n\n// isProofSubmission returns true when ALL messages in the tx are\n// MsgExecuteContract targeting an exempt contract with \"submit_proof\".\nfunc (d ProofExemptDecorator) isProofSubmission(tx sdk.Tx) bool {\n\tif len(d.exemptContracts) == 0 {\n\t\treturn false\n\t}\n\n\tmsgs := tx.GetMsgs()\n\tif len(msgs) == 0 {\n\t\treturn false\n\t}\n\n\tfor _, msg := range msgs {\n\t\texecMsg, ok := msg.(*wasmtypes.MsgExecuteContract)\n\t\tif !ok {\n\t\t\treturn false\n\t\t}\n\n\t\tif _, exempt := d.exemptContracts[execMsg.Contract]; !exempt {\n\t\t\treturn false\n\t\t}\n\n\t\t// Parse just the top-level keys to check for \"submit_proof\"\n\t\tvar payload map[string]json.RawMessage\n\t\tif err := json.Unmarshal(execMsg.Msg, &payload); err != nil {\n\t\t\treturn false\n\t\t}\n\t\tif _, ok := payload[\"submit_proof\"]; !ok {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n"
  },
  {
    "path": "app/proof_exempt_test.go",
    "content": "package app\n\nimport (\n\t\"testing\"\n\n\twasmtypes \"github.com/CosmWasm/wasmd/x/wasm/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n)\n\n// mockTx implements sdk.Tx for testing isProofSubmission.\ntype mockTx struct {\n\tmsgs []sdk.Msg\n}\n\nfunc (m mockTx) GetMsgs() []sdk.Msg         { return m.msgs }\nfunc (m mockTx) ValidateBasic() error        { return nil }\n\nfunc newExecMsg(contract string, msgJSON string) *wasmtypes.MsgExecuteContract {\n\treturn &wasmtypes.MsgExecuteContract{\n\t\tSender:   \"bostrom1sender\",\n\t\tContract: contract,\n\t\tMsg:      wasmtypes.RawContractMessage(msgJSON),\n\t}\n}\n\nconst mineContract = \"bostrom123mine\"\n\nfunc makeDecorator(contracts ...string) ProofExemptDecorator {\n\tm := make(map[string]struct{}, len(contracts))\n\tfor _, c := range contracts {\n\t\tm[c] = struct{}{}\n\t}\n\treturn ProofExemptDecorator{exemptContracts: m}\n}\n\n// --- isProofSubmission tests ---\n\nfunc TestIsProofSubmission_ValidSingle(t *testing.T) {\n\td := makeDecorator(mineContract)\n\ttx := mockTx{msgs: []sdk.Msg{\n\t\tnewExecMsg(mineContract, `{\"submit_proof\":{\"hash\":\"abc\",\"nonce\":1,\"miner_address\":\"bostrom1m\",\"challenge\":\"def\",\"difficulty\":8,\"timestamp\":1700000000}}`),\n\t}}\n\tif !d.isProofSubmission(tx) {\n\t\tt.Fatal(\"expected valid single submit_proof to be recognized\")\n\t}\n}\n\nfunc TestIsProofSubmission_ValidBatch(t *testing.T) {\n\td := makeDecorator(mineContract)\n\ttx := mockTx{msgs: []sdk.Msg{\n\t\tnewExecMsg(mineContract, `{\"submit_proof\":{\"hash\":\"a1\",\"nonce\":1,\"miner_address\":\"m1\",\"challenge\":\"c1\",\"difficulty\":8,\"timestamp\":1}}`),\n\t\tnewExecMsg(mineContract, `{\"submit_proof\":{\"hash\":\"a2\",\"nonce\":2,\"miner_address\":\"m1\",\"challenge\":\"c2\",\"difficulty\":8,\"timestamp\":2}}`),\n\t}}\n\tif !d.isProofSubmission(tx) {\n\t\tt.Fatal(\"expected batch of submit_proof to be recognized\")\n\t}\n}\n\nfunc TestIsProofSubmission_WrongContract(t *testing.T) {\n\td := makeDecorator(mineContract)\n\ttx := mockTx{msgs: []sdk.Msg{\n\t\tnewExecMsg(\"bostrom1other\", `{\"submit_proof\":{\"hash\":\"abc\"}}`),\n\t}}\n\tif d.isProofSubmission(tx) {\n\t\tt.Fatal(\"should reject non-exempt contract\")\n\t}\n}\n\nfunc TestIsProofSubmission_WrongMessage(t *testing.T) {\n\td := makeDecorator(mineContract)\n\ttx := mockTx{msgs: []sdk.Msg{\n\t\tnewExecMsg(mineContract, `{\"update_config\":{\"paused\":true}}`),\n\t}}\n\tif d.isProofSubmission(tx) {\n\t\tt.Fatal(\"should reject non-submit_proof message\")\n\t}\n}\n\nfunc TestIsProofSubmission_MixedMessages(t *testing.T) {\n\td := makeDecorator(mineContract)\n\ttx := mockTx{msgs: []sdk.Msg{\n\t\tnewExecMsg(mineContract, `{\"submit_proof\":{\"hash\":\"abc\"}}`),\n\t\tnewExecMsg(mineContract, `{\"update_config\":{\"paused\":true}}`),\n\t}}\n\tif d.isProofSubmission(tx) {\n\t\tt.Fatal(\"should reject tx with mixed message types\")\n\t}\n}\n\nfunc TestIsProofSubmission_NonWasmMessage(t *testing.T) {\n\td := makeDecorator(mineContract)\n\ttx := mockTx{msgs: []sdk.Msg{\n\t\t&banktypes.MsgSend{FromAddress: \"a\", ToAddress: \"b\"},\n\t}}\n\tif d.isProofSubmission(tx) {\n\t\tt.Fatal(\"should reject non-wasm messages\")\n\t}\n}\n\nfunc TestIsProofSubmission_ProofPlusNonWasm(t *testing.T) {\n\td := makeDecorator(mineContract)\n\ttx := mockTx{msgs: []sdk.Msg{\n\t\tnewExecMsg(mineContract, `{\"submit_proof\":{\"hash\":\"abc\"}}`),\n\t\t&banktypes.MsgSend{FromAddress: \"a\", ToAddress: \"b\"},\n\t}}\n\tif d.isProofSubmission(tx) {\n\t\tt.Fatal(\"should reject proof bundled with non-wasm message\")\n\t}\n}\n\nfunc TestIsProofSubmission_EmptyTx(t *testing.T) {\n\td := makeDecorator(mineContract)\n\ttx := mockTx{msgs: []sdk.Msg{}}\n\tif d.isProofSubmission(tx) {\n\t\tt.Fatal(\"should reject empty tx\")\n\t}\n}\n\nfunc TestIsProofSubmission_NoExemptContracts(t *testing.T) {\n\td := makeDecorator() // empty list\n\ttx := mockTx{msgs: []sdk.Msg{\n\t\tnewExecMsg(mineContract, `{\"submit_proof\":{\"hash\":\"abc\"}}`),\n\t}}\n\tif d.isProofSubmission(tx) {\n\t\tt.Fatal(\"should reject when no contracts are exempt\")\n\t}\n}\n\nfunc TestIsProofSubmission_InvalidJSON(t *testing.T) {\n\td := makeDecorator(mineContract)\n\ttx := mockTx{msgs: []sdk.Msg{\n\t\tnewExecMsg(mineContract, `not json`),\n\t}}\n\tif d.isProofSubmission(tx) {\n\t\tt.Fatal(\"should reject invalid JSON\")\n\t}\n}\n\nfunc TestIsProofSubmission_MultipleExemptContracts(t *testing.T) {\n\tother := \"bostrom456mine\"\n\td := makeDecorator(mineContract, other)\n\n\ttx1 := mockTx{msgs: []sdk.Msg{\n\t\tnewExecMsg(mineContract, `{\"submit_proof\":{\"hash\":\"abc\"}}`),\n\t}}\n\ttx2 := mockTx{msgs: []sdk.Msg{\n\t\tnewExecMsg(other, `{\"submit_proof\":{\"hash\":\"def\"}}`),\n\t}}\n\tif !d.isProofSubmission(tx1) {\n\t\tt.Fatal(\"should accept first exempt contract\")\n\t}\n\tif !d.isProofSubmission(tx2) {\n\t\tt.Fatal(\"should accept second exempt contract\")\n\t}\n}\n"
  },
  {
    "path": "app/test_helpers.go",
    "content": "package app\n\nimport (\n\t\"encoding/json\"\n\t\"path/filepath\"\n\t\"testing\"\n\t\"time\"\n\n\twasmkeeper \"github.com/CosmWasm/wasmd/x/wasm/keeper\"\n\t\"github.com/stretchr/testify/require\"\n\n\tdbm \"github.com/cometbft/cometbft-db\"\n\tabci \"github.com/cometbft/cometbft/abci/types\"\n\t\"github.com/cometbft/cometbft/crypto\"\n\t\"github.com/cometbft/cometbft/crypto/ed25519\"\n\t\"github.com/cometbft/cometbft/libs/log\"\n\ttmproto \"github.com/cometbft/cometbft/proto/tendermint/types\"\n\ttmtypes \"github.com/cometbft/cometbft/types\"\n\n\t\"cosmossdk.io/math\"\n\n\tbam \"github.com/cosmos/cosmos-sdk/baseapp\"\n\t\"github.com/cosmos/cosmos-sdk/client/flags\"\n\tcodectypes \"github.com/cosmos/cosmos-sdk/codec/types\"\n\tcryptocodec \"github.com/cosmos/cosmos-sdk/crypto/codec\"\n\t\"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1\"\n\t\"github.com/cosmos/cosmos-sdk/snapshots\"\n\tsnapshottypes \"github.com/cosmos/cosmos-sdk/snapshots/types\"\n\tsimtestutil \"github.com/cosmos/cosmos-sdk/testutil/sims\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tauthtypes \"github.com/cosmos/cosmos-sdk/x/auth/types\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n\tstakingtypes \"github.com/cosmos/cosmos-sdk/x/staking/types\"\n\n\tapphelpers \"github.com/cybercongress/go-cyber/v7/app/helpers\"\n\tappparams \"github.com/cybercongress/go-cyber/v7/app/params\"\n)\n\n// SimAppChainID hardcoded chainID for simulation\nconst (\n\tSimAppChainID = \"testing\"\n)\n\n// EmptyBaseAppOptions is a stub implementing AppOptions\ntype EmptyBaseAppOptions struct{}\n\n// Get implements AppOptions\nfunc (ao EmptyBaseAppOptions) Get(_ string) interface{} {\n\treturn nil\n}\n\n// DefaultConsensusParams defines the default Tendermint consensus params used\n// in junoApp testing.\nvar DefaultConsensusParams = &tmproto.ConsensusParams{\n\tBlock: &tmproto.BlockParams{\n\t\tMaxBytes: 200000,\n\t\tMaxGas:   2000000,\n\t},\n\tEvidence: &tmproto.EvidenceParams{\n\t\tMaxAgeNumBlocks: 302400,\n\t\tMaxAgeDuration:  504 * time.Hour, // 3 weeks is the max duration\n\t\tMaxBytes:        10000,\n\t},\n\tValidator: &tmproto.ValidatorParams{\n\t\tPubKeyTypes: []string{\n\t\t\ttmtypes.ABCIPubKeyTypeEd25519,\n\t\t},\n\t},\n}\n\ntype EmptyAppOptions struct{}\n\nfunc (EmptyAppOptions) Get(_ string) interface{} { return nil }\n\nfunc Setup(t *testing.T) *App {\n\tt.Helper()\n\n\tprivVal := apphelpers.NewPV()\n\tpubKey, err := privVal.GetPubKey()\n\trequire.NoError(t, err)\n\n\t// create validator set with single validator\n\tvalidator := tmtypes.NewValidator(pubKey, 1)\n\tvalSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{validator})\n\n\t// generate genesis account\n\tsenderPrivKey := secp256k1.GenPrivKey()\n\tacc := authtypes.NewBaseAccount(senderPrivKey.PubKey().Address().Bytes(), senderPrivKey.PubKey(), 0, 0)\n\tbalance := banktypes.Balance{\n\t\tAddress: acc.GetAddress().String(),\n\t\tCoins:   sdk.NewCoins(sdk.NewCoin(appparams.BondDenom, sdk.NewInt(100000000000000))),\n\t}\n\n\tapp := SetupWithGenesisValSet(t, valSet, []authtypes.GenesisAccount{acc}, balance)\n\n\treturn app\n}\n\n// SetupWithGenesisValSet initializes a new junoApp with a validator set and genesis accounts\n// that also act as delegators. For simplicity, each validator is bonded with a delegation\n// of one consensus engine unit in the default token of the JunoApp from first genesis\n// account. A Nop logger is set in JunoApp.\nfunc SetupWithGenesisValSet(t *testing.T, valSet *tmtypes.ValidatorSet, genAccs []authtypes.GenesisAccount, balances ...banktypes.Balance) *App {\n\tt.Helper()\n\n\tjunoApp, genesisState := setup(t, true)\n\tgenesisState = genesisStateWithValSet(t, junoApp, genesisState, valSet, genAccs, balances...)\n\n\tstateBytes, err := json.MarshalIndent(genesisState, \"\", \" \")\n\trequire.NoError(t, err)\n\n\t// init chain will set the validator set and initialize the genesis accounts\n\tjunoApp.InitChain(\n\t\tabci.RequestInitChain{\n\t\t\tValidators:      []abci.ValidatorUpdate{},\n\t\t\tConsensusParams: DefaultConsensusParams,\n\t\t\tAppStateBytes:   stateBytes,\n\t\t\tChainId:         \"testing\",\n\t\t\tTime:            time.Now().UTC(),\n\t\t\tInitialHeight:   1,\n\t\t},\n\t)\n\n\t// commit genesis changes\n\tjunoApp.Commit()\n\tjunoApp.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{\n\t\tChainID:            \"testing\",\n\t\tHeight:             junoApp.LastBlockHeight() + 1,\n\t\tAppHash:            junoApp.LastCommitID().Hash,\n\t\tValidatorsHash:     valSet.Hash(),\n\t\tNextValidatorsHash: valSet.Hash(),\n\t\tTime:               time.Now().UTC(),\n\t}})\n\n\treturn junoApp\n}\n\nfunc setup(t *testing.T, withGenesis bool, opts ...wasmkeeper.Option) (*App, GenesisState) {\n\tdb := dbm.NewMemDB()\n\tnodeHome := t.TempDir()\n\tsnapshotDir := filepath.Join(nodeHome, \"data\", \"snapshots\")\n\n\tsnapshotDB, err := dbm.NewDB(\"metadata\", dbm.GoLevelDBBackend, snapshotDir)\n\trequire.NoError(t, err)\n\tt.Cleanup(func() { snapshotDB.Close() })\n\tsnapshotStore, err := snapshots.NewStore(snapshotDB, snapshotDir)\n\trequire.NoError(t, err)\n\n\t// var emptyWasmOpts []wasm.Option\n\tappOptions := make(simtestutil.AppOptionsMap, 0)\n\tappOptions[flags.FlagHome] = nodeHome // ensure unique folder\n\n\tapp := NewBostromApp(\n\t\tlog.NewNopLogger(),\n\t\tdb,\n\t\tnil,\n\t\ttrue,\n\t\tEmptyAppOptions{},\n\t\topts,\n\t\tbam.SetChainID(\"testing\"),\n\t\tbam.SetSnapshot(snapshotStore, snapshottypes.SnapshotOptions{KeepRecent: 2}),\n\t)\n\tif withGenesis {\n\t\treturn app, NewDefaultGenesisState(app.AppCodec())\n\t}\n\n\treturn app, GenesisState{}\n}\n\nfunc genesisStateWithValSet(t *testing.T,\n\tapp *App, genesisState GenesisState,\n\tvalSet *tmtypes.ValidatorSet, genAccs []authtypes.GenesisAccount,\n\tbalances ...banktypes.Balance,\n) GenesisState {\n\tcodec := app.AppCodec()\n\n\t// set genesis accounts\n\tauthGenesis := authtypes.NewGenesisState(authtypes.DefaultParams(), genAccs)\n\tgenesisState[authtypes.ModuleName] = codec.MustMarshalJSON(authGenesis)\n\n\tvalidators := make([]stakingtypes.Validator, 0, len(valSet.Validators))\n\tdelegations := make([]stakingtypes.Delegation, 0, len(valSet.Validators))\n\n\tbondAmt := sdk.DefaultPowerReduction\n\n\tfor _, val := range valSet.Validators {\n\t\tpk, err := cryptocodec.FromTmPubKeyInterface(val.PubKey)\n\t\trequire.NoError(t, err)\n\t\tpkAny, err := codectypes.NewAnyWithValue(pk)\n\t\trequire.NoError(t, err)\n\t\tvalidator := stakingtypes.Validator{\n\t\t\tOperatorAddress:   sdk.ValAddress(val.Address).String(),\n\t\t\tConsensusPubkey:   pkAny,\n\t\t\tJailed:            false,\n\t\t\tStatus:            stakingtypes.Bonded,\n\t\t\tTokens:            bondAmt,\n\t\t\tDelegatorShares:   math.LegacyOneDec(),\n\t\t\tDescription:       stakingtypes.Description{},\n\t\t\tUnbondingHeight:   int64(0),\n\t\t\tUnbondingTime:     time.Unix(0, 0).UTC(),\n\t\t\tCommission:        stakingtypes.NewCommission(math.LegacyZeroDec(), math.LegacyZeroDec(), math.LegacyZeroDec()),\n\t\t\tMinSelfDelegation: math.ZeroInt(),\n\t\t}\n\t\tvalidators = append(validators, validator)\n\t\tdelegations = append(delegations, stakingtypes.NewDelegation(genAccs[0].GetAddress(), val.Address.Bytes(), math.LegacyOneDec()))\n\n\t}\n\n\tdefaultStParams := stakingtypes.DefaultParams()\n\tstParams := stakingtypes.NewParams(\n\t\tdefaultStParams.UnbondingTime,\n\t\tdefaultStParams.MaxValidators,\n\t\tdefaultStParams.MaxEntries,\n\t\tdefaultStParams.HistoricalEntries,\n\t\tappparams.BondDenom,\n\t\tdefaultStParams.MinCommissionRate, // 5%\n\t)\n\n\t// set validators and delegations\n\tstakingGenesis := stakingtypes.NewGenesisState(stParams, validators, delegations)\n\tgenesisState[stakingtypes.ModuleName] = codec.MustMarshalJSON(stakingGenesis)\n\n\t// add bonded amount to bonded pool module account\n\tbalances = append(balances, banktypes.Balance{\n\t\tAddress: authtypes.NewModuleAddress(stakingtypes.BondedPoolName).String(),\n\t\tCoins:   sdk.Coins{sdk.NewCoin(appparams.BondDenom, bondAmt.MulRaw(int64(len(valSet.Validators))))},\n\t})\n\n\ttotalSupply := sdk.NewCoins()\n\tfor _, b := range balances {\n\t\t// add genesis acc tokens to total supply\n\t\ttotalSupply = totalSupply.Add(b.Coins...)\n\t}\n\n\t// update total supply\n\tbankGenesis := banktypes.NewGenesisState(banktypes.DefaultGenesisState().Params, balances, totalSupply, []banktypes.Metadata{}, []banktypes.SendEnabled{})\n\tgenesisState[banktypes.ModuleName] = codec.MustMarshalJSON(bankGenesis)\n\t// println(\"genesisStateWithValSet bankState:\", string(genesisState[banktypes.ModuleName]))\n\n\treturn genesisState\n}\n\nfunc keyPubAddr() (crypto.PrivKey, crypto.PubKey, sdk.AccAddress) {\n\tkey := ed25519.GenPrivKey()\n\tpub := key.PubKey()\n\taddr := sdk.AccAddress(pub.Address())\n\treturn key, pub, addr\n}\n\nfunc RandomAccountAddress() sdk.AccAddress {\n\t_, _, addr := keyPubAddr()\n\treturn addr\n}\n\nfunc ExecuteRawCustom(t *testing.T, ctx sdk.Context, app *App, contract sdk.AccAddress, sender sdk.AccAddress, msg json.RawMessage, funds sdk.Coin) error {\n\tt.Helper()\n\toracleBz, err := json.Marshal(msg)\n\trequire.NoError(t, err)\n\t// no funds sent if amount is 0\n\tvar coins sdk.Coins\n\tif !funds.Amount.IsNil() {\n\t\tcoins = sdk.Coins{funds}\n\t}\n\n\tcontractKeeper := wasmkeeper.NewDefaultPermissionKeeper(app.AppKeepers.WasmKeeper)\n\t_, err = contractKeeper.Execute(ctx, contract, sender, oracleBz, coins)\n\treturn err\n}\n"
  },
  {
    "path": "app/upgrades/types.go",
    "content": "package upgrades\n\nimport (\n\ttmproto \"github.com/cometbft/cometbft/proto/tendermint/types\"\n\tstore \"github.com/cosmos/cosmos-sdk/store/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/module\"\n\tupgradetypes \"github.com/cosmos/cosmos-sdk/x/upgrade/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/app/keepers\"\n)\n\n// BaseAppParamManager defines an interrace that BaseApp is expected to fullfil\n// that allows upgrade handlers to modify BaseApp parameters.\ntype BaseAppParamManager interface {\n\tGetConsensusParams(ctx sdk.Context) *tmproto.ConsensusParams\n\tStoreConsensusParams(ctx sdk.Context, cp *tmproto.ConsensusParams)\n}\n\n// Upgrade defines a struct containing necessary fields that a SoftwareUpgradeProposal\n// must have written, in order for the state migration to go smoothly.\n// An upgrade must implement this struct, and then set it in the app.go.\n// The app.go will then define the handler.\ntype Upgrade struct {\n\t// Upgrade version name, for the upgrade handler, e.g. `v7`\n\tUpgradeName string\n\n\t// CreateUpgradeHandler defines the function that creates an upgrade handler\n\tCreateUpgradeHandler func(\n\t\t*module.Manager,\n\t\tmodule.Configurator,\n\t\t*keepers.AppKeepers,\n\t) upgradetypes.UpgradeHandler\n\n\t// Store upgrades, should be used for any new modules introduced, new modules deleted, or store names renamed.\n\tStoreUpgrades store.StoreUpgrades\n}\n\n// Fork defines a struct containing the requisite fields for a non-software upgrade proposal\n// Hard Fork at a given height to implement.\n// There is one time code that can be added for the start of the Fork, in `BeginForkLogic`.\n// Any other change in the code should be height-gated, if the goal is to have old and new binaries\n// to be compatible prior to the upgrade height.\ntype Fork struct {\n\t// Upgrade version name, for the upgrade handler, e.g. `v7`\n\tUpgradeName string\n\t// height the upgrade occurs at\n\tUpgradeHeight int64\n\n\t// Function that runs some custom state transition code at the beginning of a fork.\n\tBeginForkLogic func(ctx sdk.Context, keepers *keepers.AppKeepers)\n}\n"
  },
  {
    "path": "app/upgrades/v2/constants.go",
    "content": "package v2\n\nimport (\n\tstore \"github.com/cosmos/cosmos-sdk/store/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/app/upgrades\"\n)\n\nconst UpgradeName = \"cyberfrey\"\n\nvar Upgrade = upgrades.Upgrade{\n\tUpgradeName:          UpgradeName,\n\tCreateUpgradeHandler: CreateV2UpgradeHandler,\n\tStoreUpgrades: store.StoreUpgrades{\n\t\tAdded: []string{},\n\t},\n}\n"
  },
  {
    "path": "app/upgrades/v2/upgrades.go",
    "content": "package v2\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/module\"\n\tupgradetypes \"github.com/cosmos/cosmos-sdk/x/upgrade/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/app/keepers\"\n)\n\nfunc CreateV2UpgradeHandler(\n\t_ *module.Manager,\n\t_ module.Configurator,\n\t_ *keepers.AppKeepers,\n) upgradetypes.UpgradeHandler {\n\treturn func(ctx sdk.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) {\n\t\treturn vm, nil\n\t}\n}\n"
  },
  {
    "path": "app/upgrades/v3/constants.go",
    "content": "package v3\n\nimport (\n\tstore \"github.com/cosmos/cosmos-sdk/store/types\"\n\tibcfeetypes \"github.com/cosmos/ibc-go/v7/modules/apps/29-fee/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/app/upgrades\"\n)\n\nconst UpgradeName = \"v3\"\n\nvar Upgrade = upgrades.Upgrade{\n\tUpgradeName:          UpgradeName,\n\tCreateUpgradeHandler: CreateV3UpgradeHandler,\n\tStoreUpgrades: store.StoreUpgrades{\n\t\tAdded: []string{\n\t\t\tibcfeetypes.ModuleName,\n\t\t},\n\t},\n}\n"
  },
  {
    "path": "app/upgrades/v3/upgrades.go",
    "content": "package v3\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/module\"\n\tupgradetypes \"github.com/cosmos/cosmos-sdk/x/upgrade/types\"\n\tibcfeetypes \"github.com/cosmos/ibc-go/v7/modules/apps/29-fee/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/app/keepers\"\n)\n\nfunc CreateV3UpgradeHandler(\n\tmm *module.Manager,\n\tcfg module.Configurator,\n\t_ *keepers.AppKeepers,\n) upgradetypes.UpgradeHandler {\n\treturn func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {\n\t\tbefore := time.Now()\n\n\t\tlogger := ctx.Logger().With(\"upgrade\", UpgradeName)\n\n\t\t// fromVM[ibcfeetypes.ModuleName] = mm.Modules[ibcfeetypes.ModuleName].ConsensusVersion()\n\t\tlogger.Info(fmt.Sprintf(\"ibcfee module version %s set\", fmt.Sprint(fromVM[ibcfeetypes.ModuleName])))\n\n\t\t// Run migrations\n\t\tversionMap, err := mm.RunMigrations(ctx, cfg, fromVM)\n\n\t\tafter := time.Now()\n\n\t\tctx.Logger().Info(\"migration time\", \"duration_ms\", after.Sub(before).Milliseconds())\n\n\t\treturn versionMap, err\n\t}\n}\n"
  },
  {
    "path": "app/upgrades/v4/constants.go",
    "content": "package v4\n\nimport (\n\tstore \"github.com/cosmos/cosmos-sdk/store/types\"\n\tconsensustypes \"github.com/cosmos/cosmos-sdk/x/consensus/types\"\n\tcrisistypes \"github.com/cosmos/cosmos-sdk/x/crisis/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/nft\"\n\tpacketforwardtypes \"github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types\"\n\ticqtypes \"github.com/cosmos/ibc-apps/modules/async-icq/v7/types\"\n\tibchookstypes \"github.com/cosmos/ibc-apps/modules/ibc-hooks/v7/types\"\n\ticacontrollertypes \"github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types\"\n\ticahosttypes \"github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types\"\n\tclocktypes \"github.com/cybercongress/go-cyber/v7/x/clock/types\"\n\ttokenfactorytypes \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n\n\tresourcestypes \"github.com/cybercongress/go-cyber/v7/x/resources/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/app/upgrades\"\n)\n\nconst UpgradeName = \"v4\"\n\nvar Upgrade = upgrades.Upgrade{\n\tUpgradeName:          UpgradeName,\n\tCreateUpgradeHandler: CreateV4UpgradeHandler,\n\tStoreUpgrades: store.StoreUpgrades{\n\t\tAdded: []string{\n\t\t\tcrisistypes.ModuleName,\n\t\t\tconsensustypes.ModuleName,\n\t\t\tresourcestypes.ModuleName,\n\t\t\ttokenfactorytypes.ModuleName,\n\t\t\tnft.ModuleName,\n\t\t\tclocktypes.ModuleName,\n\t\t\ticacontrollertypes.StoreKey,\n\t\t\ticahosttypes.StoreKey,\n\t\t\tibchookstypes.StoreKey,\n\t\t\ticqtypes.ModuleName,\n\t\t\tpacketforwardtypes.StoreKey,\n\t\t},\n\t},\n}\n"
  },
  {
    "path": "app/upgrades/v4/upgrades.go",
    "content": "package v4\n\nimport (\n\t\"fmt\"\n\ticqtypes \"github.com/cosmos/ibc-apps/modules/async-icq/v7/types\"\n\ticacontrollertypes \"github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types\"\n\ticahosttypes \"github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types\"\n\t\"github.com/cosmos/ibc-go/v7/modules/core/exported\"\n\tgeneraltypes \"github.com/cybercongress/go-cyber/v7/types\"\n\tclocktypes \"github.com/cybercongress/go-cyber/v7/x/clock/types\"\n\ttokenfactorytypes \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n\t\"time\"\n\n\tliquiditytypes \"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n\n\t\"github.com/cosmos/cosmos-sdk/baseapp\"\n\tauthtypes \"github.com/cosmos/cosmos-sdk/x/auth/types\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n\tcrisistypes \"github.com/cosmos/cosmos-sdk/x/crisis/types\"\n\tdistrtypes \"github.com/cosmos/cosmos-sdk/x/distribution/types\"\n\tgovtypes \"github.com/cosmos/cosmos-sdk/x/gov/types\"\n\tgovtypesv1 \"github.com/cosmos/cosmos-sdk/x/gov/types/v1\"\n\tminttypes \"github.com/cosmos/cosmos-sdk/x/mint/types\"\n\tparamstypes \"github.com/cosmos/cosmos-sdk/x/params/types\"\n\tslashingtypes \"github.com/cosmos/cosmos-sdk/x/slashing/types\"\n\tstakingtypes \"github.com/cosmos/cosmos-sdk/x/staking/types\"\n\tibctransfertypes \"github.com/cosmos/ibc-go/v7/modules/apps/transfer/types\"\n\n\tbandwidthtypes \"github.com/cybercongress/go-cyber/v7/x/bandwidth/types\"\n\tdmntypes \"github.com/cybercongress/go-cyber/v7/x/dmn/types\"\n\tgridtypes \"github.com/cybercongress/go-cyber/v7/x/grid/types\"\n\tranktypes \"github.com/cybercongress/go-cyber/v7/x/rank/types\"\n\tresourcestypes \"github.com/cybercongress/go-cyber/v7/x/resources/types\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/module\"\n\tupgradetypes \"github.com/cosmos/cosmos-sdk/x/upgrade/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/app/keepers\"\n)\n\nconst NewDenomCreationGasConsume uint64 = 2_000_000\n\nfunc CreateV4UpgradeHandler(\n\tmm *module.Manager,\n\tcfg module.Configurator,\n\tkeepers *keepers.AppKeepers,\n) upgradetypes.UpgradeHandler {\n\treturn func(ctx sdk.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) {\n\t\tbefore := time.Now()\n\n\t\tlogger := ctx.Logger().With(\"upgrade\", UpgradeName)\n\n\t\tfor _, subspace := range keepers.ParamsKeeper.GetSubspaces() {\n\t\t\tsubspace := subspace\n\n\t\t\tvar keyTable paramstypes.KeyTable\n\t\t\tswitch subspace.Name() {\n\t\t\tcase authtypes.ModuleName:\n\t\t\t\tkeyTable = authtypes.ParamKeyTable() //nolint:staticcheck\n\t\t\tcase banktypes.ModuleName:\n\t\t\t\tkeyTable = banktypes.ParamKeyTable() //nolint:staticcheck\n\t\t\tcase stakingtypes.ModuleName:\n\t\t\t\tkeyTable = stakingtypes.ParamKeyTable() //nolint:staticcheck\n\n\t\t\tcase minttypes.ModuleName:\n\t\t\t\tkeyTable = minttypes.ParamKeyTable() //nolint:staticcheck\n\t\t\tcase distrtypes.ModuleName:\n\t\t\t\tkeyTable = distrtypes.ParamKeyTable() //nolint:staticcheck\n\t\t\tcase slashingtypes.ModuleName:\n\t\t\t\tkeyTable = slashingtypes.ParamKeyTable() //nolint:staticcheck\n\t\t\tcase govtypes.ModuleName:\n\t\t\t\tkeyTable = govtypesv1.ParamKeyTable() //nolint:staticcheck\n\t\t\tcase crisistypes.ModuleName:\n\t\t\t\tkeyTable = crisistypes.ParamKeyTable() //nolint:staticcheck\n\n\t\t\t// ibc types\n\t\t\tcase ibctransfertypes.ModuleName:\n\t\t\t\tkeyTable = ibctransfertypes.ParamKeyTable()\n\t\t\tcase icahosttypes.SubModuleName:\n\t\t\t\tkeyTable = icahosttypes.ParamKeyTable()\n\t\t\tcase icacontrollertypes.SubModuleName:\n\t\t\t\tkeyTable = icacontrollertypes.ParamKeyTable()\n\n\t\t\t// wasm\n\t\t\t// commented out because in current version of wasmd there are not ParamKeyTable\n\t\t\t//case wasmtypes.ModuleName:\n\t\t\t//\tkeyTable = wasmtypes.ParamKeyTable() //nolint:staticcheck\n\n\t\t\t// cyber modules\n\t\t\tcase bandwidthtypes.ModuleName:\n\t\t\t\tkeyTable = bandwidthtypes.ParamKeyTable() //nolint:staticcheck\n\t\t\tcase dmntypes.ModuleName:\n\t\t\t\tkeyTable = dmntypes.ParamKeyTable() //nolint:staticcheck\n\t\t\tcase gridtypes.ModuleName:\n\t\t\t\tkeyTable = gridtypes.ParamKeyTable() //nolint:staticcheck\n\t\t\tcase ranktypes.ModuleName:\n\t\t\t\tkeyTable = ranktypes.ParamKeyTable() //nolint:staticcheck\n\t\t\tcase resourcestypes.ModuleName:\n\t\t\t\tkeyTable = resourcestypes.ParamKeyTable() //nolint:staticcheck\n\t\t\tcase liquiditytypes.ModuleName:\n\t\t\t\tkeyTable = liquiditytypes.ParamKeyTable() //nolint:staticcheck\n\t\t\tcase tokenfactorytypes.ModuleName:\n\t\t\t\tkeyTable = tokenfactorytypes.ParamKeyTable() //nolint:staticcheck\n\t\t\tcase icqtypes.ModuleName:\n\t\t\t\tkeyTable = icqtypes.ParamKeyTable()\n\t\t\t}\n\t\t\tif !subspace.HasKeyTable() {\n\t\t\t\tlogger.Info(fmt.Sprintf(\"set key table for subspace %s\", subspace.Name()))\n\t\t\t\tsubspace.WithKeyTable(keyTable)\n\t\t\t}\n\t\t}\n\n\t\t// Migrate Tendermint consensus parameters from x/params module to a deprecated x/consensus module.\n\t\t// The old params module is required to still be imported in your app.go in order to handle this migration.\n\t\tbaseAppLegacySS := keepers.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramstypes.ConsensusParamsKeyTable())\n\t\tbaseapp.MigrateParams(ctx, baseAppLegacySS, &keepers.ConsensusParamsKeeper)\n\n\t\t// Run migrations\n\t\tlogger.Info(fmt.Sprintf(\"pre migrate version map: %v\", vm))\n\t\tversionMap, err := mm.RunMigrations(ctx, cfg, vm)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tlogger.Info(fmt.Sprintf(\"post migrate version map: %v\", versionMap))\n\n\t\tafter := time.Now()\n\t\tctx.Logger().Info(\"migration time\", \"duration ms\", after.Sub(before).Milliseconds())\n\n\t\t// TODO check ibc-go state after migration\n\t\t// https://github.com/cosmos/ibc-go/blob/v7.1.0/docs/migrations/v7-to-v7_1.md\n\t\t// explicitly update the IBC 02-client params, adding the localhost client type\n\t\tparams := keepers.IBCKeeper.ClientKeeper.GetParams(ctx)\n\t\tparams.AllowedClients = append(params.AllowedClients, exported.Localhost)\n\t\tkeepers.IBCKeeper.ClientKeeper.SetParams(ctx, params)\n\n\t\tlogger.Info(\"set ibc client params with localhost\")\n\n\t\tnewTokenFactoryParams := tokenfactorytypes.Params{\n\t\t\tDenomCreationFee:        sdk.NewCoins(sdk.NewCoin(generaltypes.CYB, sdk.NewInt(10*generaltypes.Giga))),\n\t\t\tDenomCreationGasConsume: NewDenomCreationGasConsume,\n\t\t}\n\t\tif err := keepers.TokenFactoryKeeper.SetParams(ctx, newTokenFactoryParams); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tlogger.Info(\"set tokenfactory params\")\n\n\t\t// x/clock\n\t\tif err := keepers.ClockKeeper.SetParams(ctx, clocktypes.Params{\n\t\t\tContractGasLimit: 20_000_000,\n\t\t}); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tlogger.Info(\"set clock params\")\n\n\t\tkeepers.ICAControllerKeeper.SetParams(ctx, icacontrollertypes.DefaultParams())\n\t\thostParams := icahosttypes.Params{\n\t\t\tHostEnabled:   true,\n\t\t\tAllowMessages: []string{icahosttypes.AllowAllHostMsgs},\n\t\t}\n\t\tkeepers.ICAHostKeeper.SetParams(ctx, hostParams)\n\t\tlogger.Info(\"set interchain accounts host and controller params\")\n\n\t\t// commented out because there are no more SetParams for packet forward module\n\t\t//if err := keepers.PacketForwardKeeper.SetParams(ctx, packetforwardtypes.DefaultParams()); err != nil {\n\t\t//\treturn nil, err\n\t\t//}\n\t\t//logger.Info(\"set ibc packets forward params\")\n\n\t\ticqParams := icqtypes.DefaultParams()\n\t\t// TODO Fix this, because if enable than all nodes will go to consensus failure on next block\n\t\t//icqParams.AllowQueries = types.GetStargateWhitelistedPaths()\n\t\tif err := keepers.ICQKeeper.SetParams(ctx, icqParams); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tlogger.Info(\"set interchain queries params\")\n\n\t\tbootDenom, exist := keepers.BankKeeper.GetDenomMetaData(ctx, \"boot\")\n\t\tif exist {\n\t\t\tbootDenom.DenomUnits = append(bootDenom.DenomUnits, &banktypes.DenomUnit{\n\t\t\t\tDenom:    \"root\",\n\t\t\t\tExponent: 9,\n\t\t\t\tAliases:  []string{\"ROOT\"},\n\t\t\t})\n\t\t\tkeepers.BankKeeper.SetDenomMetaData(ctx, bootDenom)\n\t\t\tlogger.Info(\"update boot denom metadata with root denom\")\n\t\t}\n\n\t\tafter = time.Now()\n\t\tctx.Logger().Info(\"upgrade time\", \"duration ms\", after.Sub(before).Milliseconds())\n\n\t\treturn versionMap, err\n\t}\n}\n"
  },
  {
    "path": "app/upgrades/v5/constants.go",
    "content": "package v5\n\nimport (\n\t\"github.com/cybercongress/go-cyber/v7/app/upgrades\"\n)\n\nconst (\n\tUpgradeName = \"v5\"\n\n\tUpgradeHeight = 15_700_805\n)\n\nvar Fork = upgrades.Fork{\n\tUpgradeName:    UpgradeName,\n\tUpgradeHeight:  UpgradeHeight,\n\tBeginForkLogic: RunForkLogic,\n}\n"
  },
  {
    "path": "app/upgrades/v5/forks.go",
    "content": "package v5\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cybercongress/go-cyber/v7/app/keepers\"\n)\n\nfunc RunForkLogic(ctx sdk.Context, keepers *keepers.AppKeepers) {\n\tlogger := ctx.Logger().With(\"upgrade\", UpgradeName)\n\n\tlogger.Info(\"Applying emergency hard fork for v5\")\n\n\tliquidityParams := keepers.LiquidityKeeper.GetParams(ctx)\n\tliquidityParams.CircuitBreakerEnabled = true\n\terr := keepers.LiquidityKeeper.SetParams(ctx, liquidityParams)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tlogger.Info(\"set liquidity circuit breaker enabled, disable dex\")\n\n\tkeepers.BankKeeper.SetSendEnabled(ctx, \"millivolt\", false)\n\tkeepers.BankKeeper.SetSendEnabled(ctx, \"milliampere\", false)\n\n\tlogger.Info(\"set bank send disabled for millivolt and amperes\")\n}\n"
  },
  {
    "path": "app/upgrades/v6/burn.go",
    "content": "package v6\n\ntype burnEntry struct {\n\taddr   string\n\tdenom  string\n\tamount string\n}\n\nvar hfrBurnEntries = []burnEntry{\n\t{addr: \"bostrom1fvh29xlzzatu390p3lpe7uhdsl7dpffcnlxdsq\", denom: \"milliampere\", amount: \"26932298723\"},\n\t{addr: \"bostrom1fvh29xlzzatu390p3lpe7uhdsl7dpffcnlxdsq\", denom: \"millivolt\", amount: \"2602715242\"},\n\t{addr: \"bostrom1vt38jz5g2hrszegvs929y6zp59tgkwlsgjkprq\", denom: \"milliampere\", amount: \"2882337639\"},\n\t{addr: \"bostrom1k09afxhedzgrkn60rrnpa0u66yv3vz7yxj7ja9\", denom: \"milliampere\", amount: \"519384871\"},\n\t{addr: \"bostrom1srklpacfmq889tedn9gpxmlxulcxp3vc6dfxdd\", denom: \"milliampere\", amount: \"279939249\"},\n\t{addr: \"bostrom1nmr4flrrzrka3lanfwxklunsapr92fqq5rfrd3\", denom: \"milliampere\", amount: \"1400231678\"},\n\t{addr: \"bostrom1qkw8dtdansmvayk2jxfkpel9q4d20rvfhwcf4k\", denom: \"millivolt\", amount: \"801420796\"},\n\t{addr: \"bostrom1qkw8dtdansmvayk2jxfkpel9q4d20rvfhwcf4k\", denom: \"milliampere\", amount: \"3701530803\"},\n\t{addr: \"bostrom1fj8d32l98legw3l23ag5gl6ulc64akfrpp8jzw\", denom: \"milliampere\", amount: \"1819889604\"},\n\t{addr: \"bostrom1latgea9pkd8qspxag6am6568h6sgcsywjxskr9\", denom: \"millivolt\", amount: \"2262900956\"},\n\t{addr: \"bostrom1latgea9pkd8qspxag6am6568h6sgcsywjxskr9\", denom: \"milliampere\", amount: \"26039233057\"},\n\t{addr: \"bostrom1f88q956xu3k6lvt8d60u3kj8gkk45nmqzt4h7y\", denom: \"millivolt\", amount: \"263762923\"},\n\t{addr: \"bostrom1qqays2hpyw2zy3qhvvvhp8w953hqc8la9w4u7n\", denom: \"milliampere\", amount: \"351433460\"},\n\t{addr: \"bostrom1qe0mlgcumms5qsvervcpsvwgltc8vl4r234lc5\", denom: \"millivolt\", amount: \"919947132573\"},\n\t{addr: \"bostrom1qkw8dtdansmvayk2jxfkpel9q4d20rvfhwcf4k\", denom: \"millivolt\", amount: \"810823925\"},\n\t{addr: \"bostrom1qkw8dtdansmvayk2jxfkpel9q4d20rvfhwcf4k\", denom: \"milliampere\", amount: \"3607499517\"},\n\t{addr: \"bostrom1ymprf45c44rp9k0g2r84w2tjhsq7kalv98rgpt\", denom: \"milliampere\", amount: \"23309976454\"},\n\t{addr: \"bostrom1ymprf45c44rp9k0g2r84w2tjhsq7kalv98rgpt\", denom: \"millivolt\", amount: \"1945783863\"},\n\t{addr: \"bostrom125uwvkh0je7ug5dsv0pgrquef89k33v0rywexu\", denom: \"milliampere\", amount: \"7803967398\"},\n\t{addr: \"bostrom1k09afxhedzgrkn60rrnpa0u66yv3vz7yxj7ja9\", denom: \"milliampere\", amount: \"551211514\"},\n\t{addr: \"bostrom1k09afxhedzgrkn60rrnpa0u66yv3vz7yxj7ja9\", denom: \"milliampere\", amount: \"2726353018\"},\n\t{addr: \"bostrom1k09afxhedzgrkn60rrnpa0u66yv3vz7yxj7ja9\", denom: \"millivolt\", amount: \"508210244\"},\n\t{addr: \"bostrom1v2rqwg7zvj5rrllgp6wu5h3q8ertfetsngznvy\", denom: \"milliampere\", amount: \"10523379733\"},\n\t{addr: \"bostrom1k09afxhedzgrkn60rrnpa0u66yv3vz7yxj7ja9\", denom: \"milliampere\", amount: \"3980209389\"},\n\t{addr: \"bostrom1zswrrnduv7w3vqqxll2vr2u7u67677egl46k8z\", denom: \"millivolt\", amount: \"343855512\"},\n\t{addr: \"bostrom1qqays2hpyw2zy3qhvvvhp8w953hqc8la9w4u7n\", denom: \"millivolt\", amount: \"5341580419\"},\n\t{addr: \"bostrom1f5warat4vc0q98k7ygys4saka8u04rfxpmthvl\", denom: \"milliampere\", amount: \"59911163882\"},\n\t{addr: \"bostrom1f5warat4vc0q98k7ygys4saka8u04rfxpmthvl\", denom: \"millivolt\", amount: \"5121347544\"},\n\t{addr: \"bostrom1vt38jz5g2hrszegvs929y6zp59tgkwlsgjkprq\", denom: \"milliampere\", amount: \"413761980\"},\n\t{addr: \"bostrom1v2rqwg7zvj5rrllgp6wu5h3q8ertfetsngznvy\", denom: \"milliampere\", amount: \"351922703\"},\n\t{addr: \"bostrom1k09afxhedzgrkn60rrnpa0u66yv3vz7yxj7ja9\", denom: \"milliampere\", amount: \"4553479199\"},\n\t{addr: \"bostrom1jpkh0h7npgp3cq3cy2xt25tus7k7kfey7s8cl0\", denom: \"milliampere\", amount: \"275137941\"},\n\t{addr: \"bostrom1qkw8dtdansmvayk2jxfkpel9q4d20rvfhwcf4k\", denom: \"millivolt\", amount: \"788685037\"},\n\t{addr: \"bostrom1qkw8dtdansmvayk2jxfkpel9q4d20rvfhwcf4k\", denom: \"milliampere\", amount: \"3828888401\"},\n\t{addr: \"bostrom1v2rqwg7zvj5rrllgp6wu5h3q8ertfetsngznvy\", denom: \"milliampere\", amount: \"455964649\"},\n\t{addr: \"bostrom1k09afxhedzgrkn60rrnpa0u66yv3vz7yxj7ja9\", denom: \"millivolt\", amount: \"712020894\"},\n\t{addr: \"bostrom1k09afxhedzgrkn60rrnpa0u66yv3vz7yxj7ja9\", denom: \"millivolt\", amount: \"393178603\"},\n\t{addr: \"bostrom1k09afxhedzgrkn60rrnpa0u66yv3vz7yxj7ja9\", denom: \"milliampere\", amount: \"9613298490\"},\n\t{addr: \"bostrom1v2rqwg7zvj5rrllgp6wu5h3q8ertfetsngznvy\", denom: \"milliampere\", amount: \"494072354\"},\n\t{addr: \"bostrom1vt38jz5g2hrszegvs929y6zp59tgkwlsgjkprq\", denom: \"millivolt\", amount: \"288237732\"},\n\t{addr: \"bostrom1vt38jz5g2hrszegvs929y6zp59tgkwlsgjkprq\", denom: \"millivolt\", amount: \"303654781\"},\n\t{addr: \"bostrom1v2rqwg7zvj5rrllgp6wu5h3q8ertfetsngznvy\", denom: \"millivolt\", amount: \"260954257\"},\n\t{addr: \"bostrom1k09afxhedzgrkn60rrnpa0u66yv3vz7yxj7ja9\", denom: \"millivolt\", amount: \"1286096483\"},\n\t{addr: \"bostrom15dme26c0jv6gcxzed4yc4q8d7rlypev0t0vt5c\", denom: \"millivolt\", amount: \"261126476\"},\n\t{addr: \"bostrom1k09afxhedzgrkn60rrnpa0u66yv3vz7yxj7ja9\", denom: \"millivolt\", amount: \"302091183\"},\n\t{addr: \"bostrom1pxgpxr2xty0r77sfgah9zc3vtatrw56y329n2l\", denom: \"millivolt\", amount: \"327958125\"},\n\t{addr: \"bostrom1vt38jz5g2hrszegvs929y6zp59tgkwlsgjkprq\", denom: \"milliampere\", amount: \"413761980\"},\n\t{addr: \"bostrom15dme26c0jv6gcxzed4yc4q8d7rlypev0t0vt5c\", denom: \"milliampere\", amount: \"315286008\"},\n\t{addr: \"bostrom1k09afxhedzgrkn60rrnpa0u66yv3vz7yxj7ja9\", denom: \"millivolt\", amount: \"614199696\"},\n\t{addr: \"bostrom1vt38jz5g2hrszegvs929y6zp59tgkwlsgjkprq\", denom: \"millivolt\", amount: \"303654781\"},\n\t{addr: \"bostrom1vt38jz5g2hrszegvs929y6zp59tgkwlsgjkprq\", denom: \"milliampere\", amount: \"2188331236\"},\n\t{addr: \"bostrom1v2rqwg7zvj5rrllgp6wu5h3q8ertfetsngznvy\", denom: \"milliampere\", amount: \"265056074\"},\n\t{addr: \"bostrom1k09afxhedzgrkn60rrnpa0u66yv3vz7yxj7ja9\", denom: \"milliampere\", amount: \"3076363293\"},\n\t{addr: \"bostrom15dme26c0jv6gcxzed4yc4q8d7rlypev0t0vt5c\", denom: \"milliampere\", amount: \"2601393556\"},\n\t{addr: \"bostrom15dme26c0jv6gcxzed4yc4q8d7rlypev0t0vt5c\", denom: \"milliampere\", amount: \"1509398189\"},\n\t{addr: \"bostrom1vt38jz5g2hrszegvs929y6zp59tgkwlsgjkprq\", denom: \"millivolt\", amount: \"537330942\"},\n\t{addr: \"bostrom1k09afxhedzgrkn60rrnpa0u66yv3vz7yxj7ja9\", denom: \"millivolt\", amount: \"469031783\"},\n\t{addr: \"bostrom1v2rqwg7zvj5rrllgp6wu5h3q8ertfetsngznvy\", denom: \"millivolt\", amount: \"353620879\"},\n\t{addr: \"bostrom1vt38jz5g2hrszegvs929y6zp59tgkwlsgjkprq\", denom: \"millivolt\", amount: \"390355260\"},\n\t{addr: \"bostrom18zrtny9ghuyy9qhpvgtd0jjped9eujzpcc3lzk\", denom: \"millivolt\", amount: \"388804500\"},\n\t{addr: \"bostrom1v2rqwg7zvj5rrllgp6wu5h3q8ertfetsngznvy\", denom: \"milliampere\", amount: \"354330221\"},\n\t{addr: \"bostrom15dme26c0jv6gcxzed4yc4q8d7rlypev0t0vt5c\", denom: \"milliampere\", amount: \"14594313658\"},\n\t{addr: \"bostrom1qe0mlgcumms5qsvervcpsvwgltc8vl4r234lc5\", denom: \"milliampere\", amount: \"152062237261\"},\n\t{addr: \"bostrom1k09afxhedzgrkn60rrnpa0u66yv3vz7yxj7ja9\", denom: \"milliampere\", amount: \"12738135126\"},\n\t{addr: \"bostrom1k09afxhedzgrkn60rrnpa0u66yv3vz7yxj7ja9\", denom: \"millivolt\", amount: \"2231730860\"},\n\t{addr: \"bostrom1vt38jz5g2hrszegvs929y6zp59tgkwlsgjkprq\", denom: \"milliampere\", amount: \"5409149881\"},\n\t{addr: \"bostrom1vt38jz5g2hrszegvs929y6zp59tgkwlsgjkprq\", denom: \"millivolt\", amount: \"545310484\"},\n\t{addr: \"bostrom1vt38jz5g2hrszegvs929y6zp59tgkwlsgjkprq\", denom: \"milliampere\", amount: \"288735209\"},\n\t{addr: \"bostrom15dme26c0jv6gcxzed4yc4q8d7rlypev0t0vt5c\", denom: \"milliampere\", amount: \"771149592\"},\n\t{addr: \"bostrom14qtapaem0rcj2h9gp5r7q32mq9sh5cs3wlvsn7\", denom: \"millivolt\", amount: \"2429029471\"},\n\t{addr: \"bostrom1qe0mlgcumms5qsvervcpsvwgltc8vl4r234lc5\", denom: \"millivolt\", amount: \"818108814658\"},\n\t{addr: \"bostrom1qe0mlgcumms5qsvervcpsvwgltc8vl4r234lc5\", denom: \"millivolt\", amount: \"7128428104\"},\n\t{addr: \"bostrom1fty3ql39e7m4gy98z0jv68vdst0wksy932vxku\", denom: \"millivolt\", amount: \"2085965578\"},\n\t{addr: \"bostrom1ngymhfhty76w8r6e8dlyvj68g5zfm09qjmejts\", denom: \"millivolt\", amount: \"2370208604\"},\n\t{addr: \"bostrom1ngymhfhty76w8r6e8dlyvj68g5zfm09qjmejts\", denom: \"milliampere\", amount: \"24649814272\"},\n\t{addr: \"bostrom1a3nm66sw7ejp454azqem2d88g5m7lc6dwf9tsa\", denom: \"millivolt\", amount: \"1511899342\"},\n\t{addr: \"bostrom1a3nm66sw7ejp454azqem2d88g5m7lc6dwf9tsa\", denom: \"millivolt\", amount: \"726616669\"},\n\t{addr: \"bostrom1a3nm66sw7ejp454azqem2d88g5m7lc6dwf9tsa\", denom: \"millivolt\", amount: \"596926589\"},\n\t{addr: \"bostrom1a3nm66sw7ejp454azqem2d88g5m7lc6dwf9tsa\", denom: \"millivolt\", amount: \"524364059\"},\n\t{addr: \"bostrom1a3nm66sw7ejp454azqem2d88g5m7lc6dwf9tsa\", denom: \"milliampere\", amount: \"3387538353\"},\n\t{addr: \"bostrom1a3nm66sw7ejp454azqem2d88g5m7lc6dwf9tsa\", denom: \"milliampere\", amount: \"2539415149\"},\n\t{addr: \"bostrom1a3nm66sw7ejp454azqem2d88g5m7lc6dwf9tsa\", denom: \"milliampere\", amount: \"2877122095\"},\n\t{addr: \"bostrom1vt38jz5g2hrszegvs929y6zp59tgkwlsgjkprq\", denom: \"millivolt\", amount: \"6823201994\"},\n\t{addr: \"bostrom15dme26c0jv6gcxzed4yc4q8d7rlypev0t0vt5c\", denom: \"milliampere\", amount: \"18783348485\"},\n\t{addr: \"bostrom1gvy4vk6v2rzpd9my487l358uajec8n0vn5c9us\", denom: \"milliampere\", amount: \"55387606103\"},\n\t{addr: \"bostrom1gvy4vk6v2rzpd9my487l358uajec8n0vn5c9us\", denom: \"millivolt\", amount: \"8690051483\"},\n\t{addr: \"bostrom10r6r8crpu0c8t4cumlpcp6uzc8ngut3j09flpy\", denom: \"milliampere\", amount: \"43311697895\"},\n\t{addr: \"bostrom10r6r8crpu0c8t4cumlpcp6uzc8ngut3j09flpy\", denom: \"millivolt\", amount: \"7033800128\"},\n\t{addr: \"bostrom10r6r8crpu0c8t4cumlpcp6uzc8ngut3j09flpy\", denom: \"milliampere\", amount: \"8821722561\"},\n\t{addr: \"bostrom1tkz3uvmgglns04c524quqx26aunj3h0k00q68f\", denom: \"milliampere\", amount: \"267406320\"},\n\t{addr: \"bostrom1k09afxhedzgrkn60rrnpa0u66yv3vz7yxj7ja9\", denom: \"millivolt\", amount: \"2774293087\"},\n\t{addr: \"bostrom1vt38jz5g2hrszegvs929y6zp59tgkwlsgjkprq\", denom: \"milliampere\", amount: \"5400859561\"},\n\t{addr: \"bostrom1c5g8xw3dfcxypw65j7aa4j29hetr4wy48acpcx\", denom: \"milliampere\", amount: \"12662635612\"},\n\t{addr: \"bostrom15dme26c0jv6gcxzed4yc4q8d7rlypev0t0vt5c\", denom: \"milliampere\", amount: \"18797239514\"},\n\t{addr: \"bostrom15dme26c0jv6gcxzed4yc4q8d7rlypev0t0vt5c\", denom: \"milliampere\", amount: \"11070841292\"},\n\t{addr: \"bostrom1ggda2n35v7zkwucufzp25mp34p0adp0x0w7wgc\", denom: \"millivolt\", amount: \"432000000\"},\n\t{addr: \"bostrom1ggda2n35v7zkwucufzp25mp34p0adp0x0w7wgc\", denom: \"milliampere\", amount: \"4320000000\"},\n\t{addr: \"bostrom1k09afxhedzgrkn60rrnpa0u66yv3vz7yxj7ja9\", denom: \"millivolt\", amount: \"1397957106\"},\n\t{addr: \"bostrom1ay267fakkrgfy9lf2m7wsj8uez2dgylhtkdf9k\", denom: \"milliampere\", amount: \"11162598095\"},\n\t{addr: \"bostrom1qqays2hpyw2zy3qhvvvhp8w953hqc8la9w4u7n\", denom: \"milliampere\", amount: \"18749017000\"},\n\t{addr: \"bostrom135ca8hdpy9sk0ntwqzpzsvatyl48ptx5j359lz\", denom: \"millivolt\", amount: \"229080000000\"},\n\t{addr: \"bostrom12k2pyuylm9t7ugdvz67h9pg4gmmvhn5vu43p0n\", denom: \"millivolt\", amount: \"5146755828\"},\n\t{addr: \"bostrom15dme26c0jv6gcxzed4yc4q8d7rlypev0t0vt5c\", denom: \"millivolt\", amount: \"2132585268\"},\n\t{addr: \"bostrom12k2pyuylm9t7ugdvz67h9pg4gmmvhn5vu43p0n\", denom: \"milliampere\", amount: \"33988579640\"},\n}\n\nvar dexBurnEntries = []burnEntry{\n\t{addr: \"bostrom10xu73c3nkcdcf6j6u4j2kzq0cjftfj2nv7xz9y\", denom: \"milliampere\", amount: \"37724907920\"},\n\t{addr: \"bostrom1u3u628ue3c5hn7ya4x4cjlk5t2d0unnarrq34k\", denom: \"millivolt\", amount: \"3431620200\"},\n\t{addr: \"bostrom1y7au5el59mf8mlak53gfvmr75gr2m2jz6lra0s\", denom: \"milliampere\", amount: \"7756244360\"},\n\t{addr: \"bostrom1rfyjzaqpt2aywpnvs456la6c9323nqyysaf7zg\", denom: \"millivolt\", amount: \"520683170\"},\n\t//{addr: \"bostrom1jphne3xq7335qvvepkupwcda8yyfp79ggfx7hy\", denom: \"milliampere\", amount: \"2120351490\"},\n\t//{addr: \"bostrom1jphne3xq7335qvvepkupwcda8yyfp79ggfx7hy\", denom: \"millivolt\", amount: \"144935100\"},\n}\n"
  },
  {
    "path": "app/upgrades/v6/constants.go",
    "content": "package v6\n\nimport (\n\tstore \"github.com/cosmos/cosmos-sdk/store/types\"\n\t\"github.com/cybercongress/go-cyber/v7/app/upgrades\"\n)\n\nconst UpgradeName = \"v6\"\n\nvar Upgrade = upgrades.Upgrade{\n\tUpgradeName:          UpgradeName,\n\tCreateUpgradeHandler: CreateV6UpgradeHandler,\n\tStoreUpgrades: store.StoreUpgrades{\n\t\tAdded: []string{},\n\t},\n}\n"
  },
  {
    "path": "app/upgrades/v6/upgrades.go",
    "content": "package v6\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\tsdkmath \"cosmossdk.io/math\"\n\tliquiditytypes \"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n\n\tbandwidthtypes \"github.com/cybercongress/go-cyber/v7/x/bandwidth/types\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/module\"\n\tvestingtypes \"github.com/cosmos/cosmos-sdk/x/auth/vesting/types\"\n\tupgradetypes \"github.com/cosmos/cosmos-sdk/x/upgrade/types\"\n\t\"github.com/cybercongress/go-cyber/v7/app/keepers\"\n\tresourcestypes \"github.com/cybercongress/go-cyber/v7/x/resources/types\"\n)\n\nfunc CreateV6UpgradeHandler(\n\tmm *module.Manager,\n\tcfg module.Configurator,\n\tkeepers *keepers.AppKeepers,\n) upgradetypes.UpgradeHandler {\n\treturn func(ctx sdk.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) {\n\t\tbefore := time.Now()\n\t\tlogger := ctx.Logger().With(\"upgrade\", UpgradeName)\n\n\t\tliquidityParams := keepers.LiquidityKeeper.GetParams(ctx)\n\t\tliquidityParams.CircuitBreakerEnabled = false\n\t\terr := keepers.LiquidityKeeper.SetParams(ctx, liquidityParams)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tlogger.Info(\"set liquidity circuit breaker disabled, enable dex\")\n\n\t\tkeepers.BankKeeper.SetSendEnabled(ctx, \"millivolt\", true)\n\t\tkeepers.BankKeeper.SetSendEnabled(ctx, \"milliampere\", true)\n\n\t\tlogger.Info(\"set bank send enabled for millivolt and amperes\")\n\n\t\tlogger.Info(fmt.Sprintf(\"pre migrate version map: %v\", vm))\n\t\tversionMap, err := mm.RunMigrations(ctx, cfg, vm)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tlogger.Info(fmt.Sprintf(\"post migrate version map: %v\", versionMap))\n\t\tafter := time.Now()\n\t\tctx.Logger().Info(\"upgrade time\", \"duration ms\", after.Sub(before).Milliseconds())\n\n\t\tvoltSupply := keepers.BankKeeper.GetSupply(ctx, \"millivolt\")\n\t\tampereSupply := keepers.BankKeeper.GetSupply(ctx, \"milliampere\")\n\t\tresourcesSupplyBefore := sdk.NewCoins(voltSupply, ampereSupply)\n\n\t\tbootSupply := keepers.BankKeeper.GetSupply(ctx, \"boot\")\n\t\thydrogenSupply := keepers.BankKeeper.GetSupply(ctx, \"hydrogen\")\n\t\ttocybSupply := keepers.BankKeeper.GetSupply(ctx, \"tocyb\")\n\t\tbaseSupplyBefore := sdk.NewCoins(bootSupply, hydrogenSupply, tocybSupply)\n\n\t\tbefore = time.Now()\n\t\t// -- burn unvested coins for accounts with periodic vesting accounts\n\t\t// -- delete unvested future vesting periods, set end time to current block time\n\n\t\tupdatedVestingAccounts := 0\n\t\ttotalUnvestedBurned := sdk.NewCoins()\n\t\tfor _, acc := range keepers.AccountKeeper.GetAllAccounts(ctx) {\n\t\t\tswitch v := acc.(type) {\n\t\t\tcase *vestingtypes.PeriodicVestingAccount:\n\n\t\t\t\t// compute unvested (still vesting) coins at upgrade time before any conversion\n\t\t\t\tunvested := v.GetVestingCoins(ctx.BlockTime())\n\n\t\t\t\t// Trim all not-yet-finished periods so remaining schedule contains only fully completed periods.\n\t\t\t\t// Also set EndTime to current block time and align OriginalVesting with kept periods.\n\t\t\t\tif unvested.IsAllPositive() {\n\t\t\t\t\telapsed := ctx.BlockTime().Unix() - v.StartTime\n\t\t\t\t\tif elapsed < 0 {\n\t\t\t\t\t\telapsed = 0\n\t\t\t\t\t}\n\t\t\t\t\tcumLength := int64(0)\n\t\t\t\t\tkeptPeriods := vestingtypes.Periods{}\n\t\t\t\t\tkeptOriginal := sdk.NewCoins()\n\t\t\t\t\tfor _, p := range v.VestingPeriods {\n\t\t\t\t\t\tcumLength += p.Length\n\t\t\t\t\t\tif cumLength <= elapsed {\n\t\t\t\t\t\t\tkeptPeriods = append(keptPeriods, p)\n\t\t\t\t\t\t\tkeptOriginal = keptOriginal.Add(p.Amount...)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tv.VestingPeriods = keptPeriods\n\t\t\t\t\tv.OriginalVesting = keptOriginal\n\t\t\t\t\tv.EndTime = v.StartTime + cumLength // or ctx.BlockTime().Unix()\n\t\t\t\t\tkeepers.AccountKeeper.SetAccount(ctx, v)\n\n\t\t\t\t\tupdatedVestingAccounts++\n\n\t\t\t\t\t// After unlocking, burn the unvested resources, limited by available balances.\n\t\t\t\t\taddr := acc.GetAddress()\n\t\t\t\t\tbalances := keepers.BankKeeper.GetAllBalances(ctx, addr)\n\t\t\t\t\tcoinsToBurn := sdk.NewCoins()\n\t\t\t\t\tfor _, c := range unvested {\n\t\t\t\t\t\tif c.Denom == \"millivolt\" || c.Denom == \"milliampere\" {\n\t\t\t\t\t\t\tbalAmt := balances.AmountOf(c.Denom)\n\t\t\t\t\t\t\tif balAmt.IsPositive() {\n\t\t\t\t\t\t\t\tamt := sdk.MinInt(c.Amount, balAmt)\n\t\t\t\t\t\t\t\tif amt.IsPositive() {\n\t\t\t\t\t\t\t\t\tcoinsToBurn = coinsToBurn.Add(sdk.NewCoin(c.Denom, amt))\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif coinsToBurn.IsAllPositive() {\n\t\t\t\t\t\tif err := keepers.BankKeeper.SendCoinsFromAccountToModule(ctx, addr, resourcestypes.ResourcesName, coinsToBurn); err != nil {\n\t\t\t\t\t\t\tlogger.Error(\"failed to move coins for burning\", \"addr\", addr.String(), \"coins\", coinsToBurn.String(), \"err\", err)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif err := keepers.BankKeeper.BurnCoins(ctx, resourcestypes.ResourcesName, coinsToBurn); err != nil {\n\t\t\t\t\t\t\t\tlogger.Error(\"failed to burn coins\", \"addr\", addr.String(), \"coins\", coinsToBurn.String(), \"err\", err)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttotalUnvestedBurned = totalUnvestedBurned.Add(coinsToBurn...)\n\t\t\t\t\t\t\t\t//logger.Info(\"unvested and burned coins\", \"addr\", addr.String(), \"coins\", coinsToBurn)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tlogger.Info(\"vesting cleanup completed\", \"accounts updated\", updatedVestingAccounts, \"total unvested burned\", totalUnvestedBurned.String())\n\n\t\t// manually burn minted coins for accounts which made investmints during HFR break\n\n\t\texplosionBurned := sdk.NewCoins()\n\t\tprocessedHFREntries := 0\n\t\tfor _, e := range hfrBurnEntries {\n\t\t\taddr, err := sdk.AccAddressFromBech32(e.addr)\n\t\t\tif err != nil {\n\t\t\t\tlogger.Error(\"invalid address\", \"addr\", e.addr, \"err\", err)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tamt, ok := sdk.NewIntFromString(e.amount)\n\t\t\tif !ok || !amt.IsPositive() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tbalanceAmt := keepers.BankKeeper.GetBalance(ctx, addr, e.denom).Amount\n\t\t\ttoBurnAmt := sdk.MinInt(balanceAmt, amt)\n\t\t\tif !toBurnAmt.IsPositive() {\n\t\t\t\tprocessedHFREntries++\n\t\t\t\tlogger.Info(\"nothing to burn\", \"addr\", addr.String(), \"denom\", e.denom, \"amount\", e.amount, \"balance\", balanceAmt.String())\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tcoin := sdk.NewCoin(e.denom, toBurnAmt)\n\t\t\tif err := keepers.BankKeeper.SendCoinsFromAccountToModule(ctx, addr, resourcestypes.ResourcesName, sdk.NewCoins(coin)); err != nil {\n\t\t\t\tlogger.Error(\"failed to move coins for burning\", \"addr\", addr.String(), \"coin\", coin.String(), \"err\", err)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := keepers.BankKeeper.BurnCoins(ctx, resourcestypes.ResourcesName, sdk.NewCoins(coin)); err != nil {\n\t\t\t\tlogger.Error(\"failed to burn coins\", \"addr\", addr.String(), \"coin\", coin.String(), \"err\", err)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\texplosionBurned = explosionBurned.Add(coin)\n\t\t\tprocessedHFREntries++\n\t\t}\n\n\t\tlogger.Info(\"exploded HFR recovery completed\", \"entries processed\", processedHFREntries, \"total explosion burned\", explosionBurned.String())\n\n\t\t// manually burn coins from dex pool accounts during HFR break\n\n\t\tdexBurned := sdk.NewCoins()\n\t\tprocessedDEXEntries := 0\n\t\tfor _, e := range dexBurnEntries {\n\t\t\taddr, err := sdk.AccAddressFromBech32(e.addr)\n\t\t\tif err != nil {\n\t\t\t\tlogger.Error(\"invalid address\", \"addr\", e.addr, \"err\", err)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\ttoBurnAmt, ok := sdk.NewIntFromString(e.amount)\n\t\t\tif !ok || !toBurnAmt.IsPositive() {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tcoin := sdk.NewCoin(e.denom, toBurnAmt)\n\t\t\tif err := keepers.BankKeeper.SendCoinsFromAccountToModule(ctx, addr, resourcestypes.ResourcesName, sdk.NewCoins(coin)); err != nil {\n\t\t\t\tlogger.Error(\"failed to move coins for burning\", \"addr\", addr.String(), \"coin\", coin.String(), \"err\", err)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := keepers.BankKeeper.BurnCoins(ctx, resourcestypes.ResourcesName, sdk.NewCoins(coin)); err != nil {\n\t\t\t\tlogger.Error(\"failed to burn coins\", \"addr\", addr.String(), \"coin\", coin.String(), \"err\", err)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tdexBurned = dexBurned.Add(coin)\n\t\t\tprocessedDEXEntries++\n\t\t}\n\n\t\tlogger.Info(\"exploited DEX recovery completed\", \"entries processed\", processedDEXEntries, \"total dex burned\", dexBurned.String())\n\n\t\tafter = time.Now()\n\t\tlogger.Info(\"balances fixed\", \"duration ms\", after.Sub(before).Milliseconds())\n\n\t\ttotalBurned := totalUnvestedBurned.Add(explosionBurned...).Add(dexBurned...)\n\n\t\tvoltSupply = keepers.BankKeeper.GetSupply(ctx, \"millivolt\")\n\t\tampereSupply = keepers.BankKeeper.GetSupply(ctx, \"milliampere\")\n\t\tresourcesSupplyAfter := sdk.NewCoins(voltSupply, ampereSupply)\n\n\t\tlogger.Info(\"resources supply\", \"before\", resourcesSupplyBefore.String(), \"after\", resourcesSupplyAfter.String(), \"total burned\", totalBurned.String())\n\n\t\tbefore = time.Now()\n\t\tfor _, acc := range keepers.AccountKeeper.GetAllAccounts(ctx) {\n\t\t\tkeepers.BandwidthMeter.SetZeroAccountBandwidth(ctx, acc.GetAddress())\n\t\t}\n\t\tlogger.Info(\"set zero bandwidth for all accounts\", \"duration ms\", after.Sub(before).Milliseconds())\n\n\t\tparams := keepers.BandwidthMeter.GetParams(ctx)\n\t\terr = keepers.BandwidthMeter.SetParams(ctx, bandwidthtypes.Params{\n\t\t\tBasePrice:         sdk.OneDec(),\n\t\t\tRecoveryPeriod:    params.RecoveryPeriod,\n\t\t\tAdjustPricePeriod: params.AdjustPricePeriod,\n\t\t\tBaseLoad:          params.BaseLoad,\n\t\t\tMaxBlockBandwidth: params.MaxBlockBandwidth,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tafter = time.Now()\n\n\t\tmillivoltSupply := keepers.BankKeeper.GetSupply(ctx, \"millivolt\")\n\t\tkeepers.BandwidthMeter.SetDesirableBandwidth(ctx, millivoltSupply.Amount.Uint64())\n\n\t\tgiftBoots := sdk.NewCoin(\"boot\", sdkmath.NewInt(603000000000000))\n\t\tgiftTocybs := sdk.NewCoin(\"tocyb\", sdkmath.NewInt(603000000000000))\n\t\tgiftCoins := sdk.NewCoins(giftBoots, giftTocybs)\n\t\tgiftMSAddress, _ := sdk.AccAddressFromBech32(\"bostrom1qs9w7ry45axfxjgxa4jmuhjthzfvj78sxh5p6e\")\n\t\tif err := keepers.BankKeeper.SendCoinsFromAccountToModule(ctx, giftMSAddress, liquiditytypes.ModuleName, giftCoins); err != nil {\n\t\t\tlogger.Error(\"failed to move gift coins for burning\", \"addr\", giftMSAddress.String(), \"coin\", giftCoins.String(), \"err\", err)\n\t\t}\n\t\tif err := keepers.BankKeeper.BurnCoins(ctx, liquiditytypes.ModuleName, giftCoins); err != nil {\n\t\t\tlogger.Error(\"failed to burn gift coins\", \"addr\", giftMSAddress.String(), \"coin\", giftCoins.String(), \"err\", err)\n\t\t}\n\t\tctx.Logger().Info(\"burned gift tokens from multisig\", \"amount\", giftCoins.String())\n\n\t\t// Adjust congress boots burn amount to available balance (burn all existing if less than target)\n\t\tcongressBootsTarget := sdk.NewCoin(\"boot\", sdkmath.NewInt(136963281024834))\n\t\tcongressTocybs := sdk.NewCoin(\"tocyb\", sdkmath.NewInt(115594467532355))\n\t\tcongressMSAddress, _ := sdk.AccAddressFromBech32(\"bostrom1xszmhkfjs3s00z2nvtn7evqxw3dtus6yr8e4pw\")\n\t\tcongressBootBalance := keepers.BankKeeper.GetBalance(ctx, congressMSAddress, \"boot\").Amount\n\t\tcongressBootBurnAmt := sdk.MinInt(congressBootsTarget.Amount, congressBootBalance)\n\t\tcongressCoinsToBurn := sdk.NewCoins(congressTocybs)\n\t\tif congressBootBurnAmt.IsPositive() {\n\t\t\tcongressCoinsToBurn = congressCoinsToBurn.Add(sdk.NewCoin(\"boot\", congressBootBurnAmt))\n\t\t}\n\t\tif congressCoinsToBurn.IsAllPositive() {\n\t\t\tif err := keepers.BankKeeper.SendCoinsFromAccountToModule(ctx, congressMSAddress, liquiditytypes.ModuleName, congressCoinsToBurn); err != nil {\n\t\t\t\tlogger.Error(\"failed to move congress coins for burning\", \"addr\", congressMSAddress.String(), \"coin\", congressCoinsToBurn.String(), \"err\", err)\n\t\t\t} else {\n\t\t\t\tif err := keepers.BankKeeper.BurnCoins(ctx, liquiditytypes.ModuleName, congressCoinsToBurn); err != nil {\n\t\t\t\t\tlogger.Error(\"failed to burn congress coins\", \"addr\", congressMSAddress.String(), \"coin\", congressCoinsToBurn.String(), \"err\", err)\n\t\t\t\t} else {\n\t\t\t\t\tctx.Logger().Info(\"burned congress tokens from multisig\", \"amount\", congressCoinsToBurn.String())\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tlogger.Info(\"nothing to burn for congress multisig\", \"addr\", congressMSAddress.String())\n\t\t}\n\n\t\t// Adjust gift treasury boots burn amount to available balance (burn all existing if less than target)\n\t\tgiftTreasuryBootTarget := sdk.NewInt(58648526573806)\n\t\tgiftTreasuryAddress, _ := sdk.AccAddressFromBech32(\"bostrom182jzjwdyl5fw43yujnlljddgtrkr04dpd30ywp2yn724u7qhtaqstjzlcu\")\n\t\tgiftTreasuryBootBalance := keepers.BankKeeper.GetBalance(ctx, giftTreasuryAddress, \"boot\").Amount\n\t\tgiftTreasuryBootBurnAmt := sdk.MinInt(giftTreasuryBootTarget, giftTreasuryBootBalance)\n\t\tif giftTreasuryBootBurnAmt.IsPositive() {\n\t\t\tgiftTreasuryBurnCoin := sdk.NewCoin(\"boot\", giftTreasuryBootBurnAmt)\n\t\t\tif err := keepers.BankKeeper.SendCoinsFromAccountToModule(ctx, giftTreasuryAddress, liquiditytypes.ModuleName, sdk.NewCoins(giftTreasuryBurnCoin)); err != nil {\n\t\t\t\tlogger.Error(\"failed to move gift treasury coins for burning\", \"addr\", giftTreasuryAddress.String(), \"coin\", giftTreasuryBurnCoin.String(), \"err\", err)\n\t\t\t} else {\n\t\t\t\tif err := keepers.BankKeeper.BurnCoins(ctx, liquiditytypes.ModuleName, sdk.NewCoins(giftTreasuryBurnCoin)); err != nil {\n\t\t\t\t\tlogger.Error(\"failed to burn gift treasury coins\", \"addr\", giftTreasuryAddress.String(), \"coin\", giftTreasuryBurnCoin.String(), \"err\", err)\n\t\t\t\t} else {\n\t\t\t\t\tctx.Logger().Info(\"burned gift tokens from treasury\", \"amount\", giftTreasuryBurnCoin.String())\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tlogger.Info(\"nothing to burn for gift treasury\", \"addr\", giftTreasuryAddress.String())\n\t\t}\n\n\t\tbootSupply = keepers.BankKeeper.GetSupply(ctx, \"boot\")\n\t\thydrogenSupply = keepers.BankKeeper.GetSupply(ctx, \"hydrogen\")\n\t\ttocybSupply = keepers.BankKeeper.GetSupply(ctx, \"tocyb\")\n\t\tbaseSupplyAfter := sdk.NewCoins(bootSupply, hydrogenSupply, tocybSupply)\n\t\tlogger.Info(\"base supply\", \"before\", baseSupplyBefore.String(), \"after\", baseSupplyAfter.String())\n\n\t\treturn versionMap, err\n\t}\n}\n"
  },
  {
    "path": "app/upgrades/v7/constants.go",
    "content": "package v7\n\nimport (\n\tstore \"github.com/cosmos/cosmos-sdk/store/types\"\n\t\"github.com/cybercongress/go-cyber/v7/app/upgrades\"\n)\n\nconst UpgradeName = \"v7\"\n\nvar Upgrade = upgrades.Upgrade{\n\tUpgradeName:          UpgradeName,\n\tCreateUpgradeHandler: CreateV7UpgradeHandler,\n\tStoreUpgrades: store.StoreUpgrades{\n\t\tAdded: []string{},\n\t},\n}\n"
  },
  {
    "path": "app/upgrades/v7/upgrades.go",
    "content": "package v7\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/module\"\n\tupgradetypes \"github.com/cosmos/cosmos-sdk/x/upgrade/types\"\n\t\"github.com/cybercongress/go-cyber/v7/app/keepers\"\n)\n\nfunc CreateV7UpgradeHandler(\n\tmm *module.Manager,\n\tcfg module.Configurator,\n\tkeepers *keepers.AppKeepers,\n) upgradetypes.UpgradeHandler {\n\treturn func(ctx sdk.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) {\n\t\tbefore := time.Now()\n\t\tlogger := ctx.Logger().With(\"upgrade\", UpgradeName)\n\n\t\tlogger.Info(fmt.Sprintf(\"pre migrate version map: %v\", vm))\n\t\tversionMap, err := mm.RunMigrations(ctx, cfg, vm)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tlogger.Info(fmt.Sprintf(\"post migrate version map: %v\", versionMap))\n\n\t\trankParams := keepers.RankKeeper.GetParams(ctx)\n\t\trankParams.CalculationPeriod = 10\n\t\terr = keepers.RankKeeper.SetParams(ctx, rankParams)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tcidCount := keepers.GraphKeeper.GetCidsCount(ctx)\n\t\tkeepers.RankKeeper.SetDebugMerkleTrees(ctx, cidCount)\n\n\t\tafter := time.Now()\n\t\tctx.Logger().Info(\"upgrade time\", \"duration ms\", after.Sub(before).Milliseconds())\n\n\t\treturn versionMap, err\n\t}\n}\n"
  },
  {
    "path": "buf.work.yaml",
    "content": "# Generated by \"buf config migrate-v1beta1\". Edit as necessary, and\n# remove this comment when you're finished.\n#\n# This workspace file points to the roots found in your\n# previous \"buf.yaml\" configuration.\nversion: v1\ndirectories:\n  - proto\n"
  },
  {
    "path": "client/docs/docs.go",
    "content": "package docs\n\nimport (\n\t\"embed\"\n\thttptemplate \"html/template\"\n\t\"net/http\"\n\n\t\"github.com/gorilla/mux\"\n)\n\nconst (\n\tapiFile   = \"/static/openapi.yml\"\n\tindexFile = \"template/index.tpl\"\n)\n\n//go:embed static\nvar Static embed.FS\n\n//go:embed template\nvar template embed.FS\n\nfunc RegisterOpenAPIService(appName string, rtr *mux.Router) {\n\trtr.Handle(apiFile, http.FileServer(http.FS(Static)))\n\trtr.HandleFunc(\"/\", handler(appName))\n}\n\n// handler returns an http handler that servers OpenAPI console for an OpenAPI spec at specURL.\nfunc handler(title string) http.HandlerFunc {\n\tt, _ := httptemplate.ParseFS(template, indexFile)\n\n\treturn func(w http.ResponseWriter, req *http.Request) {\n\t\tt.Execute(w, struct {\n\t\t\tTitle string\n\t\t\tURL   string\n\t\t}{\n\t\t\ttitle,\n\t\t\tapiFile,\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "client/docs/static/openapi.yml",
    "content": "openapi: 3.0.0\ninfo:\n  title: Bostrom network\n  version: v4\npaths:\n  /cosmos/consensus/v1/params:\n    get:\n      summary: Params queries the parameters of x/consensus_param module.\n      operationId: Params_TZPQY\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  params:\n                    description: >-\n                      params are the tendermint consensus params stored in the\n                      consensus module.\n\n                      Please note that `params.version` is not populated in this response, it is\n\n                      tracked separately in the x/upgrade module.\n                    type: object\n                    properties:\n                      block:\n                        type: object\n                        properties:\n                          max_bytes:\n                            type: string\n                            format: int64\n                            title: |-\n                              Max block size, in bytes.\n                              Note: must be greater than 0\n                          max_gas:\n                            type: string\n                            format: int64\n                            title: |-\n                              Max gas per block.\n                              Note: must be greater or equal to -1\n                        description: BlockParams contains limits on the block size.\n                      evidence:\n                        type: object\n                        properties:\n                          max_age_num_blocks:\n                            type: string\n                            format: int64\n                            description: >-\n                              Max age of evidence, in blocks.\n\n\n                              The basic formula for calculating this is: MaxAgeDuration / {average block\n\n                              time}.\n                          max_age_duration:\n                            type: string\n                            description: >-\n                              Max age of evidence, in time.\n\n\n                              It should correspond with an app's \"unbonding period\" or other similar\n\n                              mechanism for handling [Nothing-At-Stake\n\n                              attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed).\n                          max_bytes:\n                            type: string\n                            format: int64\n                            title: >-\n                              This sets the maximum size of total evidence in\n                              bytes that can be committed in a single block.\n\n                              and should fall comfortably under the max block bytes.\n\n                              Default is 1048576 or 1MB\n                        description: EvidenceParams determine how we handle evidence of malfeasance.\n                      validator:\n                        type: object\n                        properties:\n                          pub_key_types:\n                            type: array\n                            items:\n                              type: string\n                        description: >-\n                          ValidatorParams restrict the public key types\n                          validators can use.\n\n                          NOTE: uses ABCI pubkey naming, not Amino names.\n                      version:\n                        type: object\n                        properties:\n                          app:\n                            type: string\n                            format: uint64\n                        description: VersionParams contains the ABCI application version.\n                description: QueryParamsResponse defines the response type for querying\n                  x/consensus parameters.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/feegrant/v1beta1/allowance/{granter}/{grantee}\":\n    get:\n      summary: Allowance returns fee granted to the grantee by the granter.\n      operationId: Allowance_WUEKP\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  allowance:\n                    description: allowance is a allowance granted for grantee by granter.\n                    type: object\n                    properties:\n                      granter:\n                        type: string\n                        description: granter is the address of the user granting an allowance of their\n                          funds.\n                      grantee:\n                        type: string\n                        description: grantee is the address of the user being granted an allowance of\n                          another user's funds.\n                      allowance:\n                        type: object\n                        properties:\n                          type_url:\n                            type: string\n                          value:\n                            type: string\n                            format: byte\n                        description: allowance can be any of basic, periodic, allowed fee allowance.\n                    title: Grant is stored in the KVStore to record a grant with full context\n                description: QueryAllowanceResponse is the response type for the Query/Allowance\n                  RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: granter\n          description: granter is the address of the user granting an allowance of their\n            funds.\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: grantee\n          description: grantee is the address of the user being granted an allowance of\n            another user's funds.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/feegrant/v1beta1/allowances/{grantee}\":\n    get:\n      summary: Allowances returns all the grants for address.\n      operationId: Allowances_2SCGA\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  allowances:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        granter:\n                          type: string\n                          description: granter is the address of the user granting an allowance of their\n                            funds.\n                        grantee:\n                          type: string\n                          description: grantee is the address of the user being granted an allowance of\n                            another user's funds.\n                        allowance:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                          description: allowance can be any of basic, periodic, allowed fee allowance.\n                      title: Grant is stored in the KVStore to record a grant with full context\n                    description: allowances are allowance's granted for grantee by granter.\n                  pagination:\n                    description: pagination defines an pagination for the response.\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                description: QueryAllowancesResponse is the response type for the\n                  Query/Allowances RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: grantee\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/feegrant/v1beta1/issued/{granter}\":\n    get:\n      summary: AllowancesByGranter returns all the grants given by an address\n      description: \"Since: cosmos-sdk 0.46\"\n      operationId: AllowancesByGranter_H5OXI\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  allowances:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        granter:\n                          type: string\n                          description: granter is the address of the user granting an allowance of their\n                            funds.\n                        grantee:\n                          type: string\n                          description: grantee is the address of the user being granted an allowance of\n                            another user's funds.\n                        allowance:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                          description: allowance can be any of basic, periodic, allowed fee allowance.\n                      title: Grant is stored in the KVStore to record a grant with full context\n                    description: allowances that have been issued by the granter.\n                  pagination:\n                    description: pagination defines an pagination for the response.\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                description: >-\n                  QueryAllowancesByGranterResponse is the response type for the\n                  Query/AllowancesByGranter RPC method.\n\n\n                  Since: cosmos-sdk 0.46\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: granter\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/gov/v1/params/{params_type}\":\n    get:\n      summary: Params queries all parameters of the gov module.\n      operationId: Params_RTRPI\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  voting_params:\n                    description: |-\n                      Deprecated: Prefer to use `params` instead.\n                      voting_params defines the parameters related to voting.\n                    type: object\n                    properties:\n                      voting_period:\n                        type: string\n                        description: Duration of the voting period.\n                  deposit_params:\n                    description: |-\n                      Deprecated: Prefer to use `params` instead.\n                      deposit_params defines the parameters related to deposit.\n                    type: object\n                    properties:\n                      min_deposit:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n                        description: Minimum deposit for a proposal to enter voting period.\n                      max_deposit_period:\n                        type: string\n                        description: >-\n                          Maximum period for Atom holders to deposit on a\n                          proposal. Initial value: 2\n\n                          months.\n                  tally_params:\n                    description: |-\n                      Deprecated: Prefer to use `params` instead.\n                      tally_params defines the parameters related to tally.\n                    type: object\n                    properties:\n                      quorum:\n                        type: string\n                        description: >-\n                          Minimum percentage of total stake needed to vote for a\n                          result to be\n\n                          considered valid.\n                      threshold:\n                        type: string\n                        description: \"Minimum proportion of Yes votes for proposal to pass. Default\n                          value: 0.5.\"\n                      veto_threshold:\n                        type: string\n                        description: >-\n                          Minimum value of Veto votes to Total votes ratio for\n                          proposal to be\n\n                          vetoed. Default value: 1/3.\n                  params:\n                    description: |-\n                      params defines all the paramaters of x/gov module.\n\n                      Since: cosmos-sdk 0.47\n                    type: object\n                    properties:\n                      min_deposit:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n                        description: Minimum deposit for a proposal to enter voting period.\n                      max_deposit_period:\n                        type: string\n                        description: >-\n                          Maximum period for Atom holders to deposit on a\n                          proposal. Initial value: 2\n\n                          months.\n                      voting_period:\n                        type: string\n                        description: Duration of the voting period.\n                      quorum:\n                        type: string\n                        description: >-\n                          Minimum percentage of total stake needed to vote for a\n                          result to be\n                           considered valid.\n                      threshold:\n                        type: string\n                        description: \"Minimum proportion of Yes votes for proposal to pass. Default\n                          value: 0.5.\"\n                      veto_threshold:\n                        type: string\n                        description: >-\n                          Minimum value of Veto votes to Total votes ratio for\n                          proposal to be\n                           vetoed. Default value: 1/3.\n                      min_initial_deposit_ratio:\n                        type: string\n                        description: The ratio representing the proportion of the deposit value that\n                          must be paid at proposal submission.\n                      burn_vote_quorum:\n                        type: boolean\n                        title: burn deposits if a proposal does not meet quorum\n                      burn_proposal_deposit_prevote:\n                        type: boolean\n                        title: burn deposits if the proposal does not enter voting period\n                      burn_vote_veto:\n                        type: boolean\n                        title: burn deposits if quorum with vote type no_veto is met\n                description: QueryParamsResponse is the response type for the Query/Params RPC\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: params_type\n          description: >-\n            params_type defines which parameters to query for, can be one of\n            \"voting\",\n\n            \"tallying\" or \"deposit\".\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/gov/v1/proposals:\n    get:\n      summary: Proposals queries all proposals based on given status.\n      operationId: Proposals_MNCBG\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  proposals:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        id:\n                          type: string\n                          format: uint64\n                          description: id defines the unique id of the proposal.\n                        messages:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              type_url:\n                                type: string\n                              value:\n                                type: string\n                                format: byte\n                          description: messages are the arbitrary messages to be executed if the proposal\n                            passes.\n                        status:\n                          description: status defines the proposal status.\n                          type: string\n                          enum:\n                            - PROPOSAL_STATUS_UNSPECIFIED\n                            - PROPOSAL_STATUS_DEPOSIT_PERIOD\n                            - PROPOSAL_STATUS_VOTING_PERIOD\n                            - PROPOSAL_STATUS_PASSED\n                            - PROPOSAL_STATUS_REJECTED\n                            - PROPOSAL_STATUS_FAILED\n                          default: PROPOSAL_STATUS_UNSPECIFIED\n                        final_tally_result:\n                          description: >-\n                            final_tally_result is the final tally result of the\n                            proposal. When\n\n                            querying a proposal via gRPC, this field is not populated until the\n\n                            proposal's voting period has ended.\n                          type: object\n                          properties:\n                            yes_count:\n                              type: string\n                              description: yes_count is the number of yes votes on a proposal.\n                            abstain_count:\n                              type: string\n                              description: abstain_count is the number of abstain votes on a proposal.\n                            no_count:\n                              type: string\n                              description: no_count is the number of no votes on a proposal.\n                            no_with_veto_count:\n                              type: string\n                              description: no_with_veto_count is the number of no with veto votes on a\n                                proposal.\n                        submit_time:\n                          type: string\n                          format: date-time\n                          description: submit_time is the time of proposal submission.\n                        deposit_end_time:\n                          type: string\n                          format: date-time\n                          description: deposit_end_time is the end time for deposition.\n                        total_deposit:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              denom:\n                                type: string\n                              amount:\n                                type: string\n                            description: >-\n                              Coin defines a token with a denomination and an\n                              amount.\n\n\n                              NOTE: The amount field is an Int which implements the custom method\n\n                              signatures required by gogoproto.\n                          description: total_deposit is the total deposit on the proposal.\n                        voting_start_time:\n                          type: string\n                          format: date-time\n                          description: voting_start_time is the starting time to vote on a proposal.\n                        voting_end_time:\n                          type: string\n                          format: date-time\n                          description: voting_end_time is the end time of voting on a proposal.\n                        metadata:\n                          type: string\n                          description: metadata is any arbitrary metadata attached to the proposal.\n                        title:\n                          type: string\n                          description: \"Since: cosmos-sdk 0.47\"\n                          title: title is the title of the proposal\n                        summary:\n                          type: string\n                          description: \"Since: cosmos-sdk 0.47\"\n                          title: summary is a short summary of the proposal\n                        proposer:\n                          type: string\n                          description: \"Since: cosmos-sdk 0.47\"\n                          title: Proposer is the address of the proposal sumbitter\n                      description: Proposal defines the core field members of a governance proposal.\n                    description: proposals defines all the requested governance proposals.\n                  pagination:\n                    description: pagination defines the pagination in the response.\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                description: >-\n                  QueryProposalsResponse is the response type for the\n                  Query/Proposals RPC\n\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: proposal_status\n          description: >-\n            proposal_status defines the status of the proposals.\n\n             - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n             - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\n            period.\n             - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\n            period.\n             - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\n            passed.\n             - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\n            been rejected.\n             - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\n            failed.\n          in: query\n          required: false\n          schema:\n            type: string\n            enum:\n              - PROPOSAL_STATUS_UNSPECIFIED\n              - PROPOSAL_STATUS_DEPOSIT_PERIOD\n              - PROPOSAL_STATUS_VOTING_PERIOD\n              - PROPOSAL_STATUS_PASSED\n              - PROPOSAL_STATUS_REJECTED\n              - PROPOSAL_STATUS_FAILED\n            default: PROPOSAL_STATUS_UNSPECIFIED\n        - name: voter\n          description: voter defines the voter address for the proposals.\n          in: query\n          required: false\n          schema:\n            type: string\n        - name: depositor\n          description: depositor defines the deposit addresses from the proposals.\n          in: query\n          required: false\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/gov/v1/proposals/{proposal_id}\":\n    get:\n      summary: Proposal queries proposal details based on ProposalID.\n      operationId: Proposal_M3ACP\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  proposal:\n                    type: object\n                    properties:\n                      id:\n                        type: string\n                        format: uint64\n                        description: id defines the unique id of the proposal.\n                      messages:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                        description: messages are the arbitrary messages to be executed if the proposal\n                          passes.\n                      status:\n                        description: status defines the proposal status.\n                        type: string\n                        enum:\n                          - PROPOSAL_STATUS_UNSPECIFIED\n                          - PROPOSAL_STATUS_DEPOSIT_PERIOD\n                          - PROPOSAL_STATUS_VOTING_PERIOD\n                          - PROPOSAL_STATUS_PASSED\n                          - PROPOSAL_STATUS_REJECTED\n                          - PROPOSAL_STATUS_FAILED\n                        default: PROPOSAL_STATUS_UNSPECIFIED\n                      final_tally_result:\n                        description: >-\n                          final_tally_result is the final tally result of the\n                          proposal. When\n\n                          querying a proposal via gRPC, this field is not populated until the\n\n                          proposal's voting period has ended.\n                        type: object\n                        properties:\n                          yes_count:\n                            type: string\n                            description: yes_count is the number of yes votes on a proposal.\n                          abstain_count:\n                            type: string\n                            description: abstain_count is the number of abstain votes on a proposal.\n                          no_count:\n                            type: string\n                            description: no_count is the number of no votes on a proposal.\n                          no_with_veto_count:\n                            type: string\n                            description: no_with_veto_count is the number of no with veto votes on a\n                              proposal.\n                      submit_time:\n                        type: string\n                        format: date-time\n                        description: submit_time is the time of proposal submission.\n                      deposit_end_time:\n                        type: string\n                        format: date-time\n                        description: deposit_end_time is the end time for deposition.\n                      total_deposit:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n                        description: total_deposit is the total deposit on the proposal.\n                      voting_start_time:\n                        type: string\n                        format: date-time\n                        description: voting_start_time is the starting time to vote on a proposal.\n                      voting_end_time:\n                        type: string\n                        format: date-time\n                        description: voting_end_time is the end time of voting on a proposal.\n                      metadata:\n                        type: string\n                        description: metadata is any arbitrary metadata attached to the proposal.\n                      title:\n                        type: string\n                        description: \"Since: cosmos-sdk 0.47\"\n                        title: title is the title of the proposal\n                      summary:\n                        type: string\n                        description: \"Since: cosmos-sdk 0.47\"\n                        title: summary is a short summary of the proposal\n                      proposer:\n                        type: string\n                        description: \"Since: cosmos-sdk 0.47\"\n                        title: Proposer is the address of the proposal sumbitter\n                    description: Proposal defines the core field members of a governance proposal.\n                description: QueryProposalResponse is the response type for the Query/Proposal\n                  RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/gov/v1/proposals/{proposal_id}/deposits\":\n    get:\n      summary: Deposits queries all deposits of a single proposal.\n      operationId: Deposits_1TZ1V\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  deposits:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        proposal_id:\n                          type: string\n                          format: uint64\n                          description: proposal_id defines the unique id of the proposal.\n                        depositor:\n                          type: string\n                          description: depositor defines the deposit addresses from the proposals.\n                        amount:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              denom:\n                                type: string\n                              amount:\n                                type: string\n                            description: >-\n                              Coin defines a token with a denomination and an\n                              amount.\n\n\n                              NOTE: The amount field is an Int which implements the custom method\n\n                              signatures required by gogoproto.\n                          description: amount to be deposited by depositor.\n                      description: >-\n                        Deposit defines an amount deposited by an account\n                        address to an active\n\n                        proposal.\n                    description: deposits defines the requested deposits.\n                  pagination:\n                    description: pagination defines the pagination in the response.\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                description: QueryDepositsResponse is the response type for the Query/Deposits\n                  RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/gov/v1/proposals/{proposal_id}/deposits/{depositor}\":\n    get:\n      summary: Deposit queries single deposit information based proposalID, depositAddr.\n      operationId: Deposit_2YBCE\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  deposit:\n                    type: object\n                    properties:\n                      proposal_id:\n                        type: string\n                        format: uint64\n                        description: proposal_id defines the unique id of the proposal.\n                      depositor:\n                        type: string\n                        description: depositor defines the deposit addresses from the proposals.\n                      amount:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n                        description: amount to be deposited by depositor.\n                    description: >-\n                      Deposit defines an amount deposited by an account address\n                      to an active\n\n                      proposal.\n                description: QueryDepositResponse is the response type for the Query/Deposit RPC\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n        - name: depositor\n          description: depositor defines the deposit addresses from the proposals.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/gov/v1/proposals/{proposal_id}/tally\":\n    get:\n      summary: TallyResult queries the tally of a proposal vote.\n      operationId: TallyResult_HD9CX\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  tally:\n                    description: tally defines the requested tally.\n                    type: object\n                    properties:\n                      yes_count:\n                        type: string\n                        description: yes_count is the number of yes votes on a proposal.\n                      abstain_count:\n                        type: string\n                        description: abstain_count is the number of abstain votes on a proposal.\n                      no_count:\n                        type: string\n                        description: no_count is the number of no votes on a proposal.\n                      no_with_veto_count:\n                        type: string\n                        description: no_with_veto_count is the number of no with veto votes on a\n                          proposal.\n                description: QueryTallyResultResponse is the response type for the Query/Tally\n                  RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/gov/v1/proposals/{proposal_id}/votes\":\n    get:\n      summary: Votes queries votes of a given proposal.\n      operationId: Votes_AG3U7\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  votes:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        proposal_id:\n                          type: string\n                          format: uint64\n                          description: proposal_id defines the unique id of the proposal.\n                        voter:\n                          type: string\n                          description: voter is the voter address of the proposal.\n                        options:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              option:\n                                description: option defines the valid vote options, it must not contain\n                                  duplicate vote options.\n                                type: string\n                                enum:\n                                  - VOTE_OPTION_UNSPECIFIED\n                                  - VOTE_OPTION_YES\n                                  - VOTE_OPTION_ABSTAIN\n                                  - VOTE_OPTION_NO\n                                  - VOTE_OPTION_NO_WITH_VETO\n                                default: VOTE_OPTION_UNSPECIFIED\n                              weight:\n                                type: string\n                                description: weight is the vote weight associated with the vote option.\n                            description: WeightedVoteOption defines a unit of vote for vote split.\n                          description: options is the weighted vote options.\n                        metadata:\n                          type: string\n                          description: metadata is any  arbitrary metadata to attached to the vote.\n                      description: >-\n                        Vote defines a vote on a governance proposal.\n\n                        A Vote consists of a proposal ID, the voter, and the vote option.\n                    description: votes defines the queried votes.\n                  pagination:\n                    description: pagination defines the pagination in the response.\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                description: QueryVotesResponse is the response type for the Query/Votes RPC\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/gov/v1/proposals/{proposal_id}/votes/{voter}\":\n    get:\n      summary: Vote queries voted information based on proposalID, voterAddr.\n      operationId: Vote_CJIO5\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  vote:\n                    type: object\n                    properties:\n                      proposal_id:\n                        type: string\n                        format: uint64\n                        description: proposal_id defines the unique id of the proposal.\n                      voter:\n                        type: string\n                        description: voter is the voter address of the proposal.\n                      options:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            option:\n                              description: option defines the valid vote options, it must not contain\n                                duplicate vote options.\n                              type: string\n                              enum:\n                                - VOTE_OPTION_UNSPECIFIED\n                                - VOTE_OPTION_YES\n                                - VOTE_OPTION_ABSTAIN\n                                - VOTE_OPTION_NO\n                                - VOTE_OPTION_NO_WITH_VETO\n                              default: VOTE_OPTION_UNSPECIFIED\n                            weight:\n                              type: string\n                              description: weight is the vote weight associated with the vote option.\n                          description: WeightedVoteOption defines a unit of vote for vote split.\n                        description: options is the weighted vote options.\n                      metadata:\n                        type: string\n                        description: metadata is any  arbitrary metadata to attached to the vote.\n                    description: >-\n                      Vote defines a vote on a governance proposal.\n\n                      A Vote consists of a proposal ID, the voter, and the vote option.\n                description: QueryVoteResponse is the response type for the Query/Vote RPC\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n        - name: voter\n          description: voter defines the voter address for the proposals.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/graph/v1beta1/graph_stats:\n    get:\n      operationId: GraphStats_EIHOL\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  cyberlinks:\n                    type: string\n                    format: uint64\n                  particles:\n                    type: string\n                    format: uint64\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cyber/resources/v1beta1/resources/investmint:\n    get:\n      operationId: Investmint_GWKUV\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  amount:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the custom method\n\n                      signatures required by gogoproto.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: amount.denom\n          in: query\n          required: false\n          schema:\n            type: string\n        - name: amount.amount\n          in: query\n          required: false\n          schema:\n            type: string\n        - name: resource\n          in: query\n          required: false\n          schema:\n            type: string\n        - name: length\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  /cyber/resources/v1beta1/resources/params:\n    get:\n      operationId: Params_KCXBY\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  params:\n                    type: object\n                    properties:\n                      max_slots:\n                        type: integer\n                        format: int64\n                      halving_period_volt_blocks:\n                        type: integer\n                        format: int64\n                      halving_period_ampere_blocks:\n                        type: integer\n                        format: int64\n                      base_investmint_period_volt:\n                        type: integer\n                        format: int64\n                      base_investmint_period_ampere:\n                        type: integer\n                        format: int64\n                      min_investmint_period:\n                        type: integer\n                        format: int64\n                      base_investmint_amount_volt:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the custom method\n\n                          signatures required by gogoproto.\n                      base_investmint_amount_ampere:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the custom method\n\n                          signatures required by gogoproto.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/base/node/v1beta1/config:\n    get:\n      summary: Config queries for the operator configuration.\n      operationId: Config_CWIZ3\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  minimum_gas_price:\n                    type: string\n                description: ConfigResponse defines the response structure for the Config gRPC\n                  query.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/upgrade/v1beta1/applied_plan/{name}\":\n    get:\n      summary: AppliedPlan queries a previously applied upgrade plan by its name.\n      operationId: AppliedPlan_UVH49\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  height:\n                    type: string\n                    format: int64\n                    description: height is the block height at which the plan was applied.\n                description: >-\n                  QueryAppliedPlanResponse is the response type for the\n                  Query/AppliedPlan RPC\n\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: name\n          description: name is the name of the applied plan to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/upgrade/v1beta1/authority:\n    get:\n      summary: Returns the account with authority to conduct upgrades\n      description: \"Since: cosmos-sdk 0.46\"\n      operationId: Authority_2NU82\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  address:\n                    type: string\n                description: \"Since: cosmos-sdk 0.46\"\n                title: QueryAuthorityResponse is the response type for Query/Authority\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/upgrade/v1beta1/current_plan:\n    get:\n      summary: CurrentPlan queries the current upgrade plan.\n      operationId: CurrentPlan_YGRDZ\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  plan:\n                    description: plan is the current upgrade plan.\n                    type: object\n                    properties:\n                      name:\n                        type: string\n                        description: >-\n                          Sets the name for the upgrade. This name will be used\n                          by the upgraded\n\n                          version of the software to apply any special \"on-upgrade\" commands during\n\n                          the first BeginBlock method after the upgrade is applied. It is also used\n\n                          to detect whether a software version can handle a given upgrade. If no\n\n                          upgrade handler with this name has been set in the software, it will be\n\n                          assumed that the software is out-of-date when the upgrade Time or Height is\n\n                          reached and the software will exit.\n                      time:\n                        type: string\n                        format: date-time\n                        description: >-\n                          Deprecated: Time based upgrades have been deprecated.\n                          Time based upgrade logic\n\n                          has been removed from the SDK.\n\n                          If this field is not empty, an error will be thrown.\n                      height:\n                        type: string\n                        format: int64\n                        description: The height at which the upgrade must be performed.\n                      info:\n                        type: string\n                        title: >-\n                          Any application specific upgrade info to be included\n                          on-chain\n\n                          such as a git commit that validators could automatically upgrade to\n                      upgraded_client_state:\n                        type: object\n                        properties:\n                          type_url:\n                            type: string\n                          value:\n                            type: string\n                            format: byte\n                        description: >-\n                          Deprecated: UpgradedClientState field has been\n                          deprecated. IBC upgrade logic has been\n\n                          moved to the IBC module in the sub module 02-client.\n\n                          If this field is not empty, an error will be thrown.\n                description: >-\n                  QueryCurrentPlanResponse is the response type for the\n                  Query/CurrentPlan RPC\n\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/upgrade/v1beta1/module_versions:\n    get:\n      summary: ModuleVersions queries the list of module versions from state.\n      description: \"Since: cosmos-sdk 0.43\"\n      operationId: ModuleVersions_7VRES\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  module_versions:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        name:\n                          type: string\n                          title: name of the app module\n                        version:\n                          type: string\n                          format: uint64\n                          title: consensus version of the app module\n                      description: >-\n                        ModuleVersion specifies a module and its consensus\n                        version.\n\n\n                        Since: cosmos-sdk 0.43\n                    description: module_versions is a list of module names with their consensus\n                      versions.\n                description: >-\n                  QueryModuleVersionsResponse is the response type for the\n                  Query/ModuleVersions\n\n                  RPC method.\n\n\n                  Since: cosmos-sdk 0.43\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: module_name\n          description: |-\n            module_name is a field to query a specific module\n            consensus version from state. Leaving this empty will\n            fetch the full list of module versions from state.\n          in: query\n          required: false\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/upgrade/v1beta1/upgraded_consensus_state/{last_height}\":\n    get:\n      summary: >-\n        UpgradedConsensusState queries the consensus state that will serve\n\n        as a trusted kernel for the next version of this chain. It will only be\n\n        stored at the last height of this chain.\n\n        UpgradedConsensusState RPC not supported with legacy querier\n\n        This rpc is deprecated now that IBC has its own replacement\n\n        (https://github.com/cosmos/ibc-go/blob/2c880a22e9f9cc75f62b527ca94aa75ce1106001/proto/ibc/core/client/v1/query.proto#L54)\n      operationId: UpgradedConsensusState_DG71K\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  upgraded_consensus_state:\n                    type: string\n                    format: byte\n                    title: \"Since: cosmos-sdk 0.43\"\n                description: >-\n                  QueryUpgradedConsensusStateResponse is the response type for\n                  the Query/UpgradedConsensusState\n\n                  RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: last_height\n          description: |-\n            last height of the current chain must be sent in request\n            as this is the height under which next consensus state is stored\n          in: path\n          required: true\n          schema:\n            type: string\n            format: int64\n      tags:\n        - gRPC Gateway API\n  \"/ibc/apps/fee/v1/channels/{channel_id}/ports/{port_id}/fee_enabled\":\n    get:\n      summary: FeeEnabledChannel returns true if the provided port and channel\n        identifiers belong to a fee enabled channel\n      operationId: FeeEnabledChannel_840O1\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  fee_enabled:\n                    type: boolean\n                    title: boolean flag representing the fee enabled channel status\n                title: QueryFeeEnabledChannelResponse defines the response type for the\n                  FeeEnabledChannel rpc\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: channel_id\n          description: unique channel identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: port_id\n          description: unique port identifier\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/ibc/apps/fee/v1/channels/{channel_id}/ports/{port_id}/incentivized_packets\":\n    get:\n      summary: Gets all incentivized packets for a specific channel\n      operationId: IncentivizedPacketsForChannel_YZC9B\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  incentivized_packets:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        packet_id:\n                          title: unique packet identifier comprised of the channel ID, port ID and\n                            sequence\n                          type: object\n                          properties:\n                            port_id:\n                              type: string\n                              title: channel port identifier\n                            channel_id:\n                              type: string\n                              title: channel unique identifier\n                            sequence:\n                              type: string\n                              format: uint64\n                              title: packet sequence\n                        packet_fees:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              fee:\n                                title: fee encapsulates the recv, ack and timeout fees associated with an IBC\n                                  packet\n                                type: object\n                                properties:\n                                  recv_fee:\n                                    type: array\n                                    items:\n                                      type: object\n                                      properties:\n                                        denom:\n                                          type: string\n                                        amount:\n                                          type: string\n                                      description: >-\n                                        Coin defines a token with a denomination\n                                        and an amount.\n\n\n                                        NOTE: The amount field is an Int which implements the custom method\n\n                                        signatures required by gogoproto.\n                                    title: the packet receive fee\n                                  ack_fee:\n                                    type: array\n                                    items:\n                                      type: object\n                                      properties:\n                                        denom:\n                                          type: string\n                                        amount:\n                                          type: string\n                                      description: >-\n                                        Coin defines a token with a denomination\n                                        and an amount.\n\n\n                                        NOTE: The amount field is an Int which implements the custom method\n\n                                        signatures required by gogoproto.\n                                    title: the packet acknowledgement fee\n                                  timeout_fee:\n                                    type: array\n                                    items:\n                                      type: object\n                                      properties:\n                                        denom:\n                                          type: string\n                                        amount:\n                                          type: string\n                                      description: >-\n                                        Coin defines a token with a denomination\n                                        and an amount.\n\n\n                                        NOTE: The amount field is an Int which implements the custom method\n\n                                        signatures required by gogoproto.\n                                    title: the packet timeout fee\n                              refund_address:\n                                type: string\n                                title: the refund address for unspent fees\n                              relayers:\n                                type: array\n                                items:\n                                  type: string\n                                title: optional list of relayers permitted to receive fees\n                            title: PacketFee contains ICS29 relayer fees, refund address and optional list\n                              of permitted relayers\n                          title: list of packet fees\n                      title: IdentifiedPacketFees contains a list of type PacketFee and associated\n                        PacketId\n                    title: Map of all incentivized_packets\n                title: QueryIncentivizedPacketsResponse defines the response type for the\n                  incentivized packets RPC\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: channel_id\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: port_id\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: query_height\n          description: Height to query at.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  \"/ibc/apps/fee/v1/channels/{channel_id}/relayers/{relayer}/counterparty_payee\":\n    get:\n      summary: CounterpartyPayee returns the registered counterparty payee for forward\n        relaying\n      operationId: CounterpartyPayee_OX3D8\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  counterparty_payee:\n                    type: string\n                    title: the counterparty payee address used to compensate forward relaying\n                title: QueryCounterpartyPayeeResponse defines the response type for the\n                  CounterpartyPayee rpc\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: channel_id\n          description: unique channel identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: relayer\n          description: the relayer address to which the counterparty is registered\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/ibc/apps/fee/v1/channels/{channel_id}/relayers/{relayer}/payee\":\n    get:\n      summary: Payee returns the registered payee address for a specific channel given\n        the relayer address\n      operationId: Payee_Y340V\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  payee_address:\n                    type: string\n                    title: the payee address to which packet fees are paid out\n                title: QueryPayeeResponse defines the response type for the Payee rpc\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: channel_id\n          description: unique channel identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: relayer\n          description: the relayer address to which the distribution address is registered\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/{packet_id.sequence}/incentivized_packet\":\n    get:\n      summary: IncentivizedPacket returns all packet fees for a packet given its\n        identifier\n      operationId: IncentivizedPacket_FYWES\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  incentivized_packet:\n                    type: object\n                    properties:\n                      packet_id:\n                        title: unique packet identifier comprised of the channel ID, port ID and\n                          sequence\n                        type: object\n                        properties:\n                          port_id:\n                            type: string\n                            title: channel port identifier\n                          channel_id:\n                            type: string\n                            title: channel unique identifier\n                          sequence:\n                            type: string\n                            format: uint64\n                            title: packet sequence\n                      packet_fees:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            fee:\n                              title: fee encapsulates the recv, ack and timeout fees associated with an IBC\n                                packet\n                              type: object\n                              properties:\n                                recv_fee:\n                                  type: array\n                                  items:\n                                    type: object\n                                    properties:\n                                      denom:\n                                        type: string\n                                      amount:\n                                        type: string\n                                    description: >-\n                                      Coin defines a token with a denomination\n                                      and an amount.\n\n\n                                      NOTE: The amount field is an Int which implements the custom method\n\n                                      signatures required by gogoproto.\n                                  title: the packet receive fee\n                                ack_fee:\n                                  type: array\n                                  items:\n                                    type: object\n                                    properties:\n                                      denom:\n                                        type: string\n                                      amount:\n                                        type: string\n                                    description: >-\n                                      Coin defines a token with a denomination\n                                      and an amount.\n\n\n                                      NOTE: The amount field is an Int which implements the custom method\n\n                                      signatures required by gogoproto.\n                                  title: the packet acknowledgement fee\n                                timeout_fee:\n                                  type: array\n                                  items:\n                                    type: object\n                                    properties:\n                                      denom:\n                                        type: string\n                                      amount:\n                                        type: string\n                                    description: >-\n                                      Coin defines a token with a denomination\n                                      and an amount.\n\n\n                                      NOTE: The amount field is an Int which implements the custom method\n\n                                      signatures required by gogoproto.\n                                  title: the packet timeout fee\n                            refund_address:\n                              type: string\n                              title: the refund address for unspent fees\n                            relayers:\n                              type: array\n                              items:\n                                type: string\n                              title: optional list of relayers permitted to receive fees\n                          title: PacketFee contains ICS29 relayer fees, refund address and optional list\n                            of permitted relayers\n                        title: list of packet fees\n                    title: IdentifiedPacketFees contains a list of type PacketFee and associated\n                      PacketId\n                title: QueryIncentivizedPacketsResponse defines the response type for the\n                  IncentivizedPacket rpc\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: packet_id.channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: packet_id.port_id\n          description: channel port identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: packet_id.sequence\n          description: packet sequence\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n        - name: query_height\n          description: block height at which to query.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  \"/ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/{packet_id.sequence}/total_ack_fees\":\n    get:\n      summary: TotalAckFees returns the total acknowledgement fees for a packet given\n        its identifier\n      operationId: TotalAckFees_SFS3U\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  ack_fees:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the custom method\n\n                        signatures required by gogoproto.\n                    title: the total packet acknowledgement fees\n                title: QueryTotalAckFeesResponse defines the response type for the TotalAckFees\n                  rpc\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: packet_id.channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: packet_id.port_id\n          description: channel port identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: packet_id.sequence\n          description: packet sequence\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  \"/ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/{packet_id.sequence}/total_recv_fees\":\n    get:\n      summary: TotalRecvFees returns the total receive fees for a packet given its\n        identifier\n      operationId: TotalRecvFees_8W02H\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  recv_fees:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the custom method\n\n                        signatures required by gogoproto.\n                    title: the total packet receive fees\n                title: QueryTotalRecvFeesResponse defines the response type for the\n                  TotalRecvFees rpc\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: packet_id.channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: packet_id.port_id\n          description: channel port identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: packet_id.sequence\n          description: packet sequence\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  \"/ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/{packet_id.sequence}/total_timeout_fees\":\n    get:\n      summary: TotalTimeoutFees returns the total timeout fees for a packet given its\n        identifier\n      operationId: TotalTimeoutFees_FQFYL\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  timeout_fees:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the custom method\n\n                        signatures required by gogoproto.\n                    title: the total packet timeout fees\n                title: QueryTotalTimeoutFeesResponse defines the response type for the\n                  TotalTimeoutFees rpc\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: packet_id.channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: packet_id.port_id\n          description: channel port identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: packet_id.sequence\n          description: packet sequence\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  /ibc/apps/fee/v1/fee_enabled:\n    get:\n      summary: FeeEnabledChannels returns a list of all fee enabled channels\n      operationId: FeeEnabledChannels_00UHI\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  fee_enabled_channels:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        port_id:\n                          type: string\n                          title: unique port identifier\n                        channel_id:\n                          type: string\n                          title: unique channel identifier\n                      title: FeeEnabledChannel contains the PortID & ChannelID for a fee enabled\n                        channel\n                    title: list of fee enabled channels\n                title: QueryFeeEnabledChannelsResponse defines the response type for the\n                  FeeEnabledChannels rpc\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: query_height\n          description: block height at which to query.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  /ibc/apps/fee/v1/incentivized_packets:\n    get:\n      summary: IncentivizedPackets returns all incentivized packets and their\n        associated fees\n      operationId: IncentivizedPackets_0KHDP\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  incentivized_packets:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        packet_id:\n                          title: unique packet identifier comprised of the channel ID, port ID and\n                            sequence\n                          type: object\n                          properties:\n                            port_id:\n                              type: string\n                              title: channel port identifier\n                            channel_id:\n                              type: string\n                              title: channel unique identifier\n                            sequence:\n                              type: string\n                              format: uint64\n                              title: packet sequence\n                        packet_fees:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              fee:\n                                title: fee encapsulates the recv, ack and timeout fees associated with an IBC\n                                  packet\n                                type: object\n                                properties:\n                                  recv_fee:\n                                    type: array\n                                    items:\n                                      type: object\n                                      properties:\n                                        denom:\n                                          type: string\n                                        amount:\n                                          type: string\n                                      description: >-\n                                        Coin defines a token with a denomination\n                                        and an amount.\n\n\n                                        NOTE: The amount field is an Int which implements the custom method\n\n                                        signatures required by gogoproto.\n                                    title: the packet receive fee\n                                  ack_fee:\n                                    type: array\n                                    items:\n                                      type: object\n                                      properties:\n                                        denom:\n                                          type: string\n                                        amount:\n                                          type: string\n                                      description: >-\n                                        Coin defines a token with a denomination\n                                        and an amount.\n\n\n                                        NOTE: The amount field is an Int which implements the custom method\n\n                                        signatures required by gogoproto.\n                                    title: the packet acknowledgement fee\n                                  timeout_fee:\n                                    type: array\n                                    items:\n                                      type: object\n                                      properties:\n                                        denom:\n                                          type: string\n                                        amount:\n                                          type: string\n                                      description: >-\n                                        Coin defines a token with a denomination\n                                        and an amount.\n\n\n                                        NOTE: The amount field is an Int which implements the custom method\n\n                                        signatures required by gogoproto.\n                                    title: the packet timeout fee\n                              refund_address:\n                                type: string\n                                title: the refund address for unspent fees\n                              relayers:\n                                type: array\n                                items:\n                                  type: string\n                                title: optional list of relayers permitted to receive fees\n                            title: PacketFee contains ICS29 relayer fees, refund address and optional list\n                              of permitted relayers\n                          title: list of packet fees\n                      title: IdentifiedPacketFees contains a list of type PacketFee and associated\n                        PacketId\n                    title: list of identified fees for incentivized packets\n                title: QueryIncentivizedPacketsResponse defines the response type for the\n                  IncentivizedPackets rpc\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: query_height\n          description: block height at which to query.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  /cosmos/params/v1beta1/params:\n    get:\n      summary: |-\n        Params queries a specific parameter of a module, given its subspace and\n        key.\n      operationId: Params_VQK7H\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  param:\n                    description: param defines the queried parameter.\n                    type: object\n                    properties:\n                      subspace:\n                        type: string\n                      key:\n                        type: string\n                      value:\n                        type: string\n                description: QueryParamsResponse is response type for the Query/Params RPC\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: subspace\n          description: subspace defines the module to query the parameter for.\n          in: query\n          required: false\n          schema:\n            type: string\n        - name: key\n          description: key defines the key of the parameter in the subspace.\n          in: query\n          required: false\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/params/v1beta1/subspaces:\n    get:\n      summary: Subspaces queries for all registered subspaces and all keys for a\n        subspace.\n      description: \"Since: cosmos-sdk 0.46\"\n      operationId: Subspaces_7GKEQ\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  subspaces:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        subspace:\n                          type: string\n                        keys:\n                          type: array\n                          items:\n                            type: string\n                      description: >-\n                        Subspace defines a parameter subspace name and all the\n                        keys that exist for\n\n                        the subspace.\n\n\n                        Since: cosmos-sdk 0.46\n                description: >-\n                  QuerySubspacesResponse defines the response types for querying\n                  for all\n\n                  registered subspaces and all keys for a subspace.\n\n\n                  Since: cosmos-sdk 0.46\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cyber/rank/v1beta1/is_any_link_exist:\n    get:\n      operationId: IsAnyLinkExist_2JCAZ\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  exist:\n                    type: boolean\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: from\n          in: query\n          required: false\n          schema:\n            type: string\n        - name: to\n          in: query\n          required: false\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/rank/v1beta1/is_link_exist:\n    get:\n      operationId: IsLinkExist_T429K\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  exist:\n                    type: boolean\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: from\n          in: query\n          required: false\n          schema:\n            type: string\n        - name: to\n          in: query\n          required: false\n          schema:\n            type: string\n        - name: address\n          in: query\n          required: false\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cyber/rank/v1beta1/karma/{neuron}\":\n    get:\n      operationId: Karma_OCY17\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  karma:\n                    type: string\n                    format: uint64\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: neuron\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/rank/v1beta1/negentropy:\n    get:\n      operationId: Negentropy_I4QNT\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  negentropy:\n                    type: string\n                    format: uint64\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  \"/cyber/rank/v1beta1/negentropy/{particle}\":\n    get:\n      operationId: ParticleNegentropy_9E5ES\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  entropy:\n                    type: string\n                    format: uint64\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: particle\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cyber/rank/v1beta1/rank/backlinks/{particle}\":\n    get:\n      operationId: Backlinks_00QZQ\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  result:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        particle:\n                          type: string\n                        rank:\n                          type: string\n                          format: uint64\n                  pagination:\n                    type: object\n                    properties:\n                      total:\n                        type: integer\n                        format: int64\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: particle\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.page\n          in: query\n          required: false\n          schema:\n            type: integer\n            format: int64\n        - name: pagination.per_page\n          in: query\n          required: false\n          schema:\n            type: integer\n            format: int64\n      tags:\n        - gRPC Gateway API\n  /cyber/rank/v1beta1/rank/params:\n    get:\n      operationId: Params_L259G\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  params:\n                    type: object\n                    properties:\n                      calculation_period:\n                        type: string\n                        format: int64\n                      damping_factor:\n                        type: string\n                      tolerance:\n                        type: string\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  \"/cyber/rank/v1beta1/rank/rank/{particle}\":\n    get:\n      operationId: Rank_U75Y2\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  rank:\n                    type: string\n                    format: uint64\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: particle\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cyber/rank/v1beta1/rank/search/{particle}\":\n    get:\n      operationId: Search_W3CZ3\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  result:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        particle:\n                          type: string\n                        rank:\n                          type: string\n                          format: uint64\n                  pagination:\n                    type: object\n                    properties:\n                      total:\n                        type: integer\n                        format: int64\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: particle\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.page\n          in: query\n          required: false\n          schema:\n            type: integer\n            format: int64\n        - name: pagination.per_page\n          in: query\n          required: false\n          schema:\n            type: integer\n            format: int64\n      tags:\n        - gRPC Gateway API\n  /cyber/rank/v1beta1/rank/top:\n    get:\n      operationId: Top_M5Z8S\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  result:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        particle:\n                          type: string\n                        rank:\n                          type: string\n                          format: uint64\n                  pagination:\n                    type: object\n                    properties:\n                      total:\n                        type: integer\n                        format: int64\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pagination.page\n          in: query\n          required: false\n          schema:\n            type: integer\n            format: int64\n        - name: pagination.per_page\n          in: query\n          required: false\n          schema:\n            type: integer\n            format: int64\n      tags:\n        - gRPC Gateway API\n  /cosmos/distribution/v1beta1/community_pool:\n    get:\n      summary: CommunityPool queries the community pool coins.\n      operationId: CommunityPool_0US6E\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  pool:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        DecCoin defines a token with a denomination and a\n                        decimal amount.\n\n\n                        NOTE: The amount field is an Dec which implements the custom method\n\n                        signatures required by gogoproto.\n                    description: pool defines community pool's coins.\n                description: >-\n                  QueryCommunityPoolResponse is the response type for the\n                  Query/CommunityPool\n\n                  RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards\":\n    get:\n      summary: |-\n        DelegationTotalRewards queries the total rewards accrued by a each\n        validator.\n      operationId: DelegationTotalRewards_WYSIY\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  rewards:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        validator_address:\n                          type: string\n                        reward:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              denom:\n                                type: string\n                              amount:\n                                type: string\n                            description: >-\n                              DecCoin defines a token with a denomination and a\n                              decimal amount.\n\n\n                              NOTE: The amount field is an Dec which implements the custom method\n\n                              signatures required by gogoproto.\n                      description: |-\n                        DelegationDelegatorReward represents the properties\n                        of a delegator's delegation reward.\n                    description: rewards defines all the rewards accrued by a delegator.\n                  total:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        DecCoin defines a token with a denomination and a\n                        decimal amount.\n\n\n                        NOTE: The amount field is an Dec which implements the custom method\n\n                        signatures required by gogoproto.\n                    description: total defines the sum of all the rewards.\n                description: >-\n                  QueryDelegationTotalRewardsResponse is the response type for\n                  the\n\n                  Query/DelegationTotalRewards RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: delegator_address\n          description: delegator_address defines the delegator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/{validator_address}\":\n    get:\n      summary: DelegationRewards queries the total rewards accrued by a delegation.\n      operationId: DelegationRewards_AZKQ1\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  rewards:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        DecCoin defines a token with a denomination and a\n                        decimal amount.\n\n\n                        NOTE: The amount field is an Dec which implements the custom method\n\n                        signatures required by gogoproto.\n                    description: rewards defines the rewards accrued by a delegation.\n                description: |-\n                  QueryDelegationRewardsResponse is the response type for the\n                  Query/DelegationRewards RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: delegator_address\n          description: delegator_address defines the delegator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: validator_address\n          description: validator_address defines the validator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/distribution/v1beta1/delegators/{delegator_address}/validators\":\n    get:\n      summary: DelegatorValidators queries the validators of a delegator.\n      operationId: DelegatorValidators_86WPX\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  validators:\n                    type: array\n                    items:\n                      type: string\n                    description: validators defines the validators a delegator is delegating for.\n                description: |-\n                  QueryDelegatorValidatorsResponse is the response type for the\n                  Query/DelegatorValidators RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: delegator_address\n          description: delegator_address defines the delegator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/distribution/v1beta1/delegators/{delegator_address}/withdraw_address\":\n    get:\n      summary: DelegatorWithdrawAddress queries withdraw address of a delegator.\n      operationId: DelegatorWithdrawAddress_YB7EI\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  withdraw_address:\n                    type: string\n                    description: withdraw_address defines the delegator address to query for.\n                description: >-\n                  QueryDelegatorWithdrawAddressResponse is the response type for\n                  the\n\n                  Query/DelegatorWithdrawAddress RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: delegator_address\n          description: delegator_address defines the delegator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/distribution/v1beta1/params:\n    get:\n      summary: Params queries params of the distribution module.\n      operationId: Params_T3DPP\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  params:\n                    description: params defines the parameters of the module.\n                    type: object\n                    properties:\n                      community_tax:\n                        type: string\n                      base_proposer_reward:\n                        type: string\n                        description: >-\n                          Deprecated: The base_proposer_reward field is\n                          deprecated and is no longer used\n\n                          in the x/distribution module's reward mechanism.\n                      bonus_proposer_reward:\n                        type: string\n                        description: >-\n                          Deprecated: The bonus_proposer_reward field is\n                          deprecated and is no longer used\n\n                          in the x/distribution module's reward mechanism.\n                      withdraw_addr_enabled:\n                        type: boolean\n                description: QueryParamsResponse is the response type for the Query/Params RPC\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/distribution/v1beta1/validators/{validator_address}\":\n    get:\n      summary: ValidatorDistributionInfo queries validator commission and\n        self-delegation rewards for validator\n      operationId: ValidatorDistributionInfo_FWO9U\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  operator_address:\n                    type: string\n                    description: operator_address defines the validator operator address.\n                  self_bond_rewards:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        DecCoin defines a token with a denomination and a\n                        decimal amount.\n\n\n                        NOTE: The amount field is an Dec which implements the custom method\n\n                        signatures required by gogoproto.\n                    description: self_bond_rewards defines the self delegations rewards.\n                  commission:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        DecCoin defines a token with a denomination and a\n                        decimal amount.\n\n\n                        NOTE: The amount field is an Dec which implements the custom method\n\n                        signatures required by gogoproto.\n                    description: commission defines the commission the validator received.\n                description: QueryValidatorDistributionInfoResponse is the response type for the\n                  Query/ValidatorDistributionInfo RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: validator_address\n          description: validator_address defines the validator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/distribution/v1beta1/validators/{validator_address}/commission\":\n    get:\n      summary: ValidatorCommission queries accumulated commission for a validator.\n      operationId: ValidatorCommission_BK3UA\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  commission:\n                    description: commission defines the commission the validator received.\n                    type: object\n                    properties:\n                      commission:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            DecCoin defines a token with a denomination and a\n                            decimal amount.\n\n\n                            NOTE: The amount field is an Dec which implements the custom method\n\n                            signatures required by gogoproto.\n                title: |-\n                  QueryValidatorCommissionResponse is the response type for the\n                  Query/ValidatorCommission RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: validator_address\n          description: validator_address defines the validator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/distribution/v1beta1/validators/{validator_address}/outstanding_rewards\":\n    get:\n      summary: ValidatorOutstandingRewards queries rewards of a validator address.\n      operationId: ValidatorOutstandingRewards_GBZ1A\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  rewards:\n                    type: object\n                    properties:\n                      rewards:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            DecCoin defines a token with a denomination and a\n                            decimal amount.\n\n\n                            NOTE: The amount field is an Dec which implements the custom method\n\n                            signatures required by gogoproto.\n                    description: >-\n                      ValidatorOutstandingRewards represents outstanding\n                      (un-withdrawn) rewards\n\n                      for a validator inexpensive to track, allows simple sanity checks.\n                description: >-\n                  QueryValidatorOutstandingRewardsResponse is the response type\n                  for the\n\n                  Query/ValidatorOutstandingRewards RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: validator_address\n          description: validator_address defines the validator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/distribution/v1beta1/validators/{validator_address}/slashes\":\n    get:\n      summary: ValidatorSlashes queries slash events of a validator.\n      operationId: ValidatorSlashes_ZIX0V\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  slashes:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        validator_period:\n                          type: string\n                          format: uint64\n                        fraction:\n                          type: string\n                      description: >-\n                        ValidatorSlashEvent represents a validator slash event.\n\n                        Height is implicit within the store key.\n\n                        This is needed to calculate appropriate amount of staking tokens\n\n                        for delegations which are withdrawn after a slash has occurred.\n                    description: slashes defines the slashes the validator received.\n                  pagination:\n                    description: pagination defines the pagination in the response.\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                description: |-\n                  QueryValidatorSlashesResponse is the response type for the\n                  Query/ValidatorSlashes RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: validator_address\n          description: validator_address defines the validator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: starting_height\n          description: starting_height defines the optional starting height to query the\n            slashes.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: ending_height\n          description: starting_height defines the optional ending height to query the\n            slashes.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/bank/v1beta1/balances/{address}\":\n    get:\n      summary: AllBalances queries the balance of all coins for a single account.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n      operationId: AllBalances_SB2JJ\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  balances:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the custom method\n\n                        signatures required by gogoproto.\n                    description: balances is the balances of all the coins.\n                  pagination:\n                    description: pagination defines the pagination in the response.\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                description: >-\n                  QueryAllBalancesResponse is the response type for the\n                  Query/AllBalances RPC\n\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: address\n          description: address is the address to query balances for.\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/bank/v1beta1/balances/{address}/by_denom\":\n    get:\n      summary: Balance queries the balance of a single coin for a single account.\n      operationId: Balance_3DIWH\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  balance:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the custom method\n\n                      signatures required by gogoproto.\n                description: QueryBalanceResponse is the response type for the Query/Balance RPC\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: address\n          description: address is the address to query balances for.\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: denom\n          description: denom is the coin denom to query balances for.\n          in: query\n          required: false\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/bank/v1beta1/denom_owners/{denom}\":\n    get:\n      summary: >-\n        DenomOwners queries for all account addresses that own a particular\n        token\n\n        denomination.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n\n\n        Since: cosmos-sdk 0.46\n      operationId: DenomOwners_MVQ6C\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  denom_owners:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        address:\n                          type: string\n                          description: address defines the address that owns a particular denomination.\n                        balance:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n                      description: >-\n                        DenomOwner defines structure representing an account\n                        that owns or holds a\n\n                        particular denominated token. It contains the account address and account\n\n                        balance of the denominated token.\n\n\n                        Since: cosmos-sdk 0.46\n                  pagination:\n                    description: pagination defines the pagination in the response.\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                description: >-\n                  QueryDenomOwnersResponse defines the RPC response of a\n                  DenomOwners RPC query.\n\n\n                  Since: cosmos-sdk 0.46\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: denom\n          description: denom defines the coin denomination to query all account holders for.\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/bank/v1beta1/denoms_metadata:\n    get:\n      summary: |-\n        DenomsMetadata queries the client metadata for all registered coin\n        denominations.\n      operationId: DenomsMetadata_1QGQ2\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  metadatas:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        description:\n                          type: string\n                        denom_units:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              denom:\n                                type: string\n                                description: denom represents the string name of the given denom unit (e.g\n                                  uatom).\n                              exponent:\n                                type: integer\n                                format: int64\n                                description: >-\n                                  exponent represents power of 10 exponent that\n                                  one must\n\n                                  raise the base_denom to in order to equal the given DenomUnit's denom\n\n                                  1 denom = 10^exponent base_denom\n\n                                  (e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' with\n\n                                  exponent = 6, thus: 1 atom = 10^6 uatom).\n                              aliases:\n                                type: array\n                                items:\n                                  type: string\n                                title: aliases is a list of string aliases for the given denom\n                            description: >-\n                              DenomUnit represents a struct that describes a\n                              given\n\n                              denomination unit of the basic token.\n                          title: denom_units represents the list of DenomUnit's for a given coin\n                        base:\n                          type: string\n                          description: base represents the base denom (should be the DenomUnit with\n                            exponent = 0).\n                        display:\n                          type: string\n                          description: |-\n                            display indicates the suggested denom that should be\n                            displayed in clients.\n                        name:\n                          type: string\n                          description: \"Since: cosmos-sdk 0.43\"\n                          title: \"name defines the name of the token (eg: Cosmos Atom)\"\n                        symbol:\n                          type: string\n                          description: >-\n                            symbol is the token symbol usually shown on\n                            exchanges (eg: ATOM). This can\n\n                            be the same as the display.\n\n\n                            Since: cosmos-sdk 0.43\n                        uri:\n                          type: string\n                          description: >-\n                            URI to a document (on or off-chain) that contains\n                            additional information. Optional.\n\n\n                            Since: cosmos-sdk 0.46\n                        uri_hash:\n                          type: string\n                          description: >-\n                            URIHash is a sha256 hash of a document pointed by\n                            URI. It's used to verify that\n\n                            the document didn't change. Optional.\n\n\n                            Since: cosmos-sdk 0.46\n                      description: |-\n                        Metadata represents a struct that describes\n                        a basic token.\n                    description: metadata provides the client information for all the registered\n                      tokens.\n                  pagination:\n                    description: pagination defines the pagination in the response.\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                description: >-\n                  QueryDenomsMetadataResponse is the response type for the\n                  Query/DenomsMetadata RPC\n\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/bank/v1beta1/denoms_metadata/{denom}\":\n    get:\n      summary: DenomsMetadata queries the client metadata of a given coin denomination.\n      operationId: DenomMetadata_IWNXK\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  metadata:\n                    type: object\n                    properties:\n                      description:\n                        type: string\n                      denom_units:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                              description: denom represents the string name of the given denom unit (e.g\n                                uatom).\n                            exponent:\n                              type: integer\n                              format: int64\n                              description: >-\n                                exponent represents power of 10 exponent that\n                                one must\n\n                                raise the base_denom to in order to equal the given DenomUnit's denom\n\n                                1 denom = 10^exponent base_denom\n\n                                (e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' with\n\n                                exponent = 6, thus: 1 atom = 10^6 uatom).\n                            aliases:\n                              type: array\n                              items:\n                                type: string\n                              title: aliases is a list of string aliases for the given denom\n                          description: |-\n                            DenomUnit represents a struct that describes a given\n                            denomination unit of the basic token.\n                        title: denom_units represents the list of DenomUnit's for a given coin\n                      base:\n                        type: string\n                        description: base represents the base denom (should be the DenomUnit with\n                          exponent = 0).\n                      display:\n                        type: string\n                        description: |-\n                          display indicates the suggested denom that should be\n                          displayed in clients.\n                      name:\n                        type: string\n                        description: \"Since: cosmos-sdk 0.43\"\n                        title: \"name defines the name of the token (eg: Cosmos Atom)\"\n                      symbol:\n                        type: string\n                        description: >-\n                          symbol is the token symbol usually shown on exchanges\n                          (eg: ATOM). This can\n\n                          be the same as the display.\n\n\n                          Since: cosmos-sdk 0.43\n                      uri:\n                        type: string\n                        description: >-\n                          URI to a document (on or off-chain) that contains\n                          additional information. Optional.\n\n\n                          Since: cosmos-sdk 0.46\n                      uri_hash:\n                        type: string\n                        description: >-\n                          URIHash is a sha256 hash of a document pointed by URI.\n                          It's used to verify that\n\n                          the document didn't change. Optional.\n\n\n                          Since: cosmos-sdk 0.46\n                    description: |-\n                      Metadata represents a struct that describes\n                      a basic token.\n                description: >-\n                  QueryDenomMetadataResponse is the response type for the\n                  Query/DenomMetadata RPC\n\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: denom\n          description: denom is the coin denom to query the metadata for.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/bank/v1beta1/params:\n    get:\n      summary: Params queries the parameters of x/bank module.\n      operationId: Params_UPITY\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  params:\n                    type: object\n                    properties:\n                      send_enabled:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            enabled:\n                              type: boolean\n                          description: >-\n                            SendEnabled maps coin denom to a send_enabled status\n                            (whether a denom is\n\n                            sendable).\n                        description: >-\n                          Deprecated: Use of SendEnabled in params is\n                          deprecated.\n\n                          For genesis, use the newly added send_enabled field in the genesis object.\n\n                          Storage, lookup, and manipulation of this information is now in the keeper.\n\n\n                          As of cosmos-sdk 0.47, this only exists for backwards compatibility of genesis files.\n                      default_send_enabled:\n                        type: boolean\n                    description: Params defines the parameters for the bank module.\n                description: QueryParamsResponse defines the response type for querying x/bank\n                  parameters.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/bank/v1beta1/send_enabled:\n    get:\n      summary: SendEnabled queries for SendEnabled entries.\n      description: >-\n        This query only returns denominations that have specific SendEnabled\n        settings.\n\n        Any denomination that does not have a specific setting will use the default\n\n        params.default_send_enabled, and will not be returned by this query.\n\n\n        Since: cosmos-sdk 0.47\n      operationId: SendEnabled_V2SG0\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  send_enabled:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        enabled:\n                          type: boolean\n                      description: >-\n                        SendEnabled maps coin denom to a send_enabled status\n                        (whether a denom is\n\n                        sendable).\n                  pagination:\n                    description: >-\n                      pagination defines the pagination in the response. This\n                      field is only\n\n                      populated if the denoms field in the request is empty.\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                description: >-\n                  QuerySendEnabledResponse defines the RPC response of a\n                  SendEnable query.\n\n\n                  Since: cosmos-sdk 0.47\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: denoms\n          description: denoms is the specific denoms you want look up. Leave empty to get\n            all entries.\n          in: query\n          required: false\n          explode: true\n          schema:\n            type: array\n            items:\n              type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/bank/v1beta1/spendable_balances/{address}\":\n    get:\n      summary: >-\n        SpendableBalances queries the spendable balance of all coins for a\n        single\n\n        account.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n\n\n        Since: cosmos-sdk 0.46\n      operationId: SpendableBalances_NOU7D\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  balances:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the custom method\n\n                        signatures required by gogoproto.\n                    description: balances is the spendable balances of all the coins.\n                  pagination:\n                    description: pagination defines the pagination in the response.\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                description: >-\n                  QuerySpendableBalancesResponse defines the gRPC response\n                  structure for querying\n\n                  an account's spendable balances.\n\n\n                  Since: cosmos-sdk 0.46\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: address\n          description: address is the address to query spendable balances for.\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/bank/v1beta1/spendable_balances/{address}/by_denom\":\n    get:\n      summary: >-\n        SpendableBalanceByDenom queries the spendable balance of a single denom\n        for\n\n        a single account.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n\n\n        Since: cosmos-sdk 0.47\n      operationId: SpendableBalanceByDenom_IY25V\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  balance:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the custom method\n\n                      signatures required by gogoproto.\n                description: >-\n                  QuerySpendableBalanceByDenomResponse defines the gRPC response\n                  structure for\n\n                  querying an account's spendable balance for a specific denom.\n\n\n                  Since: cosmos-sdk 0.47\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: address\n          description: address is the address to query balances for.\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: denom\n          description: denom is the coin denom to query balances for.\n          in: query\n          required: false\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/bank/v1beta1/supply:\n    get:\n      summary: TotalSupply queries the total supply of all coins.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n      operationId: TotalSupply_LCA37\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  supply:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the custom method\n\n                        signatures required by gogoproto.\n                    title: supply is the supply of the coins\n                  pagination:\n                    description: |-\n                      pagination defines the pagination in the response.\n\n                      Since: cosmos-sdk 0.43\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                title: >-\n                  QueryTotalSupplyResponse is the response type for the\n                  Query/TotalSupply RPC\n\n                  method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/bank/v1beta1/supply/by_denom:\n    get:\n      summary: SupplyOf queries the supply of a single coin.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n      operationId: SupplyOf_PD96O\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  amount:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the custom method\n\n                      signatures required by gogoproto.\n                description: QuerySupplyOfResponse is the response type for the Query/SupplyOf\n                  RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: denom\n          description: denom is the coin denom to query balances for.\n          in: query\n          required: false\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/ibc/core/connection/v1/client_connections/{client_id}\":\n    get:\n      summary: |-\n        ClientConnections queries the connection paths associated with a client\n        state.\n      operationId: ClientConnections_ULSVA\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  connection_paths:\n                    type: array\n                    items:\n                      type: string\n                    description: slice of all the connection paths associated with a client.\n                  proof:\n                    type: string\n                    format: byte\n                    title: merkle proof of existence\n                  proof_height:\n                    title: height at which the proof was generated\n                    type: object\n                    properties:\n                      revision_number:\n                        type: string\n                        format: uint64\n                        title: the revision that the client is currently on\n                      revision_height:\n                        type: string\n                        format: uint64\n                        title: the height within the given revision\n                    description: >-\n                      Normally the RevisionHeight is incremented at each height\n                      while keeping\n\n                      RevisionNumber the same. However some consensus algorithms may choose to\n\n                      reset the height in certain conditions e.g. hard forks, state-machine\n\n                      breaking changes In these cases, the RevisionNumber is incremented so that\n\n                      height continues to be monitonically increasing even as the RevisionHeight\n\n                      gets reset\n                title: |-\n                  QueryClientConnectionsResponse is the response type for the\n                  Query/ClientConnections RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: client_id\n          description: client identifier associated with a connection\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /ibc/core/connection/v1/connections:\n    get:\n      summary: Connections queries all the IBC connections of a chain.\n      operationId: Connections_KUGQB\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  connections:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        id:\n                          type: string\n                          description: connection identifier.\n                        client_id:\n                          type: string\n                          description: client associated with this connection.\n                        versions:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              identifier:\n                                type: string\n                                title: unique version identifier\n                              features:\n                                type: array\n                                items:\n                                  type: string\n                                title: list of features compatible with the specified identifier\n                            description: >-\n                              Version defines the versioning scheme used to\n                              negotiate the IBC verison in\n\n                              the connection handshake.\n                          title: >-\n                            IBC version which can be utilised to determine\n                            encodings or protocols for\n\n                            channels or packets utilising this connection\n                        state:\n                          description: current state of the connection end.\n                          type: string\n                          enum:\n                            - STATE_UNINITIALIZED_UNSPECIFIED\n                            - STATE_INIT\n                            - STATE_TRYOPEN\n                            - STATE_OPEN\n                          default: STATE_UNINITIALIZED_UNSPECIFIED\n                        counterparty:\n                          description: counterparty chain associated with this connection.\n                          type: object\n                          properties:\n                            client_id:\n                              type: string\n                              description: >-\n                                identifies the client on the counterparty chain\n                                associated with a given\n\n                                connection.\n                            connection_id:\n                              type: string\n                              description: >-\n                                identifies the connection end on the\n                                counterparty chain associated with a\n\n                                given connection.\n                            prefix:\n                              description: commitment merkle prefix of the counterparty chain.\n                              type: object\n                              properties:\n                                key_prefix:\n                                  type: string\n                                  format: byte\n                              title: >-\n                                MerklePrefix is merkle path prefixed to the key.\n\n                                The constructed key from the Path and the key will be append(Path.KeyPath,\n\n                                append(Path.KeyPrefix, key...))\n                        delay_period:\n                          type: string\n                          format: uint64\n                          description: delay period associated with this connection.\n                      description: >-\n                        IdentifiedConnection defines a connection with\n                        additional connection\n\n                        identifier field.\n                    description: list of stored connections of the chain.\n                  pagination:\n                    title: pagination response\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                  height:\n                    title: query block height\n                    type: object\n                    properties:\n                      revision_number:\n                        type: string\n                        format: uint64\n                        title: the revision that the client is currently on\n                      revision_height:\n                        type: string\n                        format: uint64\n                        title: the height within the given revision\n                    description: >-\n                      Normally the RevisionHeight is incremented at each height\n                      while keeping\n\n                      RevisionNumber the same. However some consensus algorithms may choose to\n\n                      reset the height in certain conditions e.g. hard forks, state-machine\n\n                      breaking changes In these cases, the RevisionNumber is incremented so that\n\n                      height continues to be monitonically increasing even as the RevisionHeight\n\n                      gets reset\n                description: >-\n                  QueryConnectionsResponse is the response type for the\n                  Query/Connections RPC\n\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/ibc/core/connection/v1/connections/{connection_id}\":\n    get:\n      summary: Connection queries an IBC connection end.\n      operationId: Connection_OOALY\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  connection:\n                    title: connection associated with the request identifier\n                    type: object\n                    properties:\n                      client_id:\n                        type: string\n                        description: client associated with this connection.\n                      versions:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            identifier:\n                              type: string\n                              title: unique version identifier\n                            features:\n                              type: array\n                              items:\n                                type: string\n                              title: list of features compatible with the specified identifier\n                          description: >-\n                            Version defines the versioning scheme used to\n                            negotiate the IBC verison in\n\n                            the connection handshake.\n                        description: >-\n                          IBC version which can be utilised to determine\n                          encodings or protocols for\n\n                          channels or packets utilising this connection.\n                      state:\n                        description: current state of the connection end.\n                        type: string\n                        enum:\n                          - STATE_UNINITIALIZED_UNSPECIFIED\n                          - STATE_INIT\n                          - STATE_TRYOPEN\n                          - STATE_OPEN\n                        default: STATE_UNINITIALIZED_UNSPECIFIED\n                      counterparty:\n                        description: counterparty chain associated with this connection.\n                        type: object\n                        properties:\n                          client_id:\n                            type: string\n                            description: >-\n                              identifies the client on the counterparty chain\n                              associated with a given\n\n                              connection.\n                          connection_id:\n                            type: string\n                            description: >-\n                              identifies the connection end on the counterparty\n                              chain associated with a\n\n                              given connection.\n                          prefix:\n                            description: commitment merkle prefix of the counterparty chain.\n                            type: object\n                            properties:\n                              key_prefix:\n                                type: string\n                                format: byte\n                            title: >-\n                              MerklePrefix is merkle path prefixed to the key.\n\n                              The constructed key from the Path and the key will be append(Path.KeyPath,\n\n                              append(Path.KeyPrefix, key...))\n                      delay_period:\n                        type: string\n                        format: uint64\n                        description: >-\n                          delay period that must pass before a consensus state\n                          can be used for\n\n                          packet-verification NOTE: delay period logic is only implemented by some\n\n                          clients.\n                    description: >-\n                      ConnectionEnd defines a stateful object on a chain\n                      connected to another\n\n                      separate one.\n\n                      NOTE: there must only be 2 defined ConnectionEnds to establish\n\n                      a connection between two chains.\n                  proof:\n                    type: string\n                    format: byte\n                    title: merkle proof of existence\n                  proof_height:\n                    title: height at which the proof was retrieved\n                    type: object\n                    properties:\n                      revision_number:\n                        type: string\n                        format: uint64\n                        title: the revision that the client is currently on\n                      revision_height:\n                        type: string\n                        format: uint64\n                        title: the height within the given revision\n                    description: >-\n                      Normally the RevisionHeight is incremented at each height\n                      while keeping\n\n                      RevisionNumber the same. However some consensus algorithms may choose to\n\n                      reset the height in certain conditions e.g. hard forks, state-machine\n\n                      breaking changes In these cases, the RevisionNumber is incremented so that\n\n                      height continues to be monitonically increasing even as the RevisionHeight\n\n                      gets reset\n                description: >-\n                  QueryConnectionResponse is the response type for the\n                  Query/Connection RPC\n\n                  method. Besides the connection end, it includes a proof and the height from\n\n                  which the proof was retrieved.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: connection_id\n          description: connection unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/ibc/core/connection/v1/connections/{connection_id}/client_state\":\n    get:\n      summary: |-\n        ConnectionClientState queries the client state associated with the\n        connection.\n      operationId: ConnectionClientState_E50ZS\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  identified_client_state:\n                    title: client state associated with the channel\n                    type: object\n                    properties:\n                      client_id:\n                        type: string\n                        title: client identifier\n                      client_state:\n                        type: object\n                        properties:\n                          type_url:\n                            type: string\n                          value:\n                            type: string\n                            format: byte\n                        title: client state\n                    description: >-\n                      IdentifiedClientState defines a client state with an\n                      additional client\n\n                      identifier field.\n                  proof:\n                    type: string\n                    format: byte\n                    title: merkle proof of existence\n                  proof_height:\n                    title: height at which the proof was retrieved\n                    type: object\n                    properties:\n                      revision_number:\n                        type: string\n                        format: uint64\n                        title: the revision that the client is currently on\n                      revision_height:\n                        type: string\n                        format: uint64\n                        title: the height within the given revision\n                    description: >-\n                      Normally the RevisionHeight is incremented at each height\n                      while keeping\n\n                      RevisionNumber the same. However some consensus algorithms may choose to\n\n                      reset the height in certain conditions e.g. hard forks, state-machine\n\n                      breaking changes In these cases, the RevisionNumber is incremented so that\n\n                      height continues to be monitonically increasing even as the RevisionHeight\n\n                      gets reset\n                title: >-\n                  QueryConnectionClientStateResponse is the response type for\n                  the\n\n                  Query/ConnectionClientState RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: connection_id\n          description: connection identifier\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/ibc/core/connection/v1/connections/{connection_id}/consensus_state/revision/{revision_number}/height/{revision_height}\":\n    get:\n      summary: |-\n        ConnectionConsensusState queries the consensus state associated with the\n        connection.\n      operationId: ConnectionConsensusState_R48NV\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  consensus_state:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                    title: consensus state associated with the channel\n                  client_id:\n                    type: string\n                    title: client ID associated with the consensus state\n                  proof:\n                    type: string\n                    format: byte\n                    title: merkle proof of existence\n                  proof_height:\n                    title: height at which the proof was retrieved\n                    type: object\n                    properties:\n                      revision_number:\n                        type: string\n                        format: uint64\n                        title: the revision that the client is currently on\n                      revision_height:\n                        type: string\n                        format: uint64\n                        title: the height within the given revision\n                    description: >-\n                      Normally the RevisionHeight is incremented at each height\n                      while keeping\n\n                      RevisionNumber the same. However some consensus algorithms may choose to\n\n                      reset the height in certain conditions e.g. hard forks, state-machine\n\n                      breaking changes In these cases, the RevisionNumber is incremented so that\n\n                      height continues to be monitonically increasing even as the RevisionHeight\n\n                      gets reset\n                title: >-\n                  QueryConnectionConsensusStateResponse is the response type for\n                  the\n\n                  Query/ConnectionConsensusState RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: connection_id\n          description: connection identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: revision_number\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n        - name: revision_height\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  /ibc/core/connection/v1/params:\n    get:\n      summary: ConnectionParams queries all parameters of the ibc connection submodule.\n      operationId: ConnectionParams_FN616\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  params:\n                    description: params defines the parameters of the module.\n                    type: object\n                    properties:\n                      max_expected_time_per_block:\n                        type: string\n                        format: uint64\n                        description: >-\n                          maximum expected time per block (in nanoseconds), used\n                          to enforce block delay. This parameter should reflect\n                          the\n\n                          largest amount of time that the chain might reasonably take to produce the next block under normal operating\n\n                          conditions. A safe choice is 3-5x the expected time per block.\n                description: QueryConnectionParamsResponse is the response type for the\n                  Query/ConnectionParams RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cyber/grid/v1beta1/grid/destination_routed_energy:\n    get:\n      operationId: DestinationRoutedEnergy_1UWZP\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  value:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the custom method\n\n                        signatures required by gogoproto.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: destination\n          in: query\n          required: false\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/grid/v1beta1/grid/destination_routes:\n    get:\n      operationId: DestinationRoutes_DSHVX\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  routes:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        source:\n                          type: string\n                        destination:\n                          type: string\n                        name:\n                          type: string\n                        value:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              denom:\n                                type: string\n                              amount:\n                                type: string\n                            description: >-\n                              Coin defines a token with a denomination and an\n                              amount.\n\n\n                              NOTE: The amount field is an Int which implements the custom method\n\n                              signatures required by gogoproto.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: destination\n          in: query\n          required: false\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/grid/v1beta1/grid/params:\n    get:\n      operationId: Params_JC8T4\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  params:\n                    type: object\n                    properties:\n                      max_routes:\n                        type: integer\n                        format: int64\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cyber/grid/v1beta1/grid/route:\n    get:\n      operationId: Route_DJV9M\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  route:\n                    type: object\n                    properties:\n                      source:\n                        type: string\n                      destination:\n                        type: string\n                      name:\n                        type: string\n                      value:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: source\n          in: query\n          required: false\n          schema:\n            type: string\n        - name: destination\n          in: query\n          required: false\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/grid/v1beta1/grid/routes:\n    get:\n      operationId: Routes_NX6XT\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  routes:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        source:\n                          type: string\n                        destination:\n                          type: string\n                        name:\n                          type: string\n                        value:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              denom:\n                                type: string\n                              amount:\n                                type: string\n                            description: >-\n                              Coin defines a token with a denomination and an\n                              amount.\n\n\n                              NOTE: The amount field is an Int which implements the custom method\n\n                              signatures required by gogoproto.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  /cyber/grid/v1beta1/grid/source_routed_energy:\n    get:\n      operationId: SourceRoutedEnergy_15BGT\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  value:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the custom method\n\n                        signatures required by gogoproto.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: source\n          in: query\n          required: false\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/grid/v1beta1/grid/source_routes:\n    get:\n      operationId: SourceRoutes_0YJSZ\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  routes:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        source:\n                          type: string\n                        destination:\n                          type: string\n                        name:\n                          type: string\n                        value:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              denom:\n                                type: string\n                              amount:\n                                type: string\n                            description: >-\n                              Coin defines a token with a denomination and an\n                              amount.\n\n\n                              NOTE: The amount field is an Int which implements the custom method\n\n                              signatures required by gogoproto.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: source\n          in: query\n          required: false\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/dmn/v1beta1/dmn/params:\n    get:\n      operationId: Params_KSBWO\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  params:\n                    type: object\n                    properties:\n                      max_slots:\n                        type: integer\n                        format: int64\n                      max_gas:\n                        type: integer\n                        format: int64\n                      fee_ttl:\n                        type: integer\n                        format: int64\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cyber/dmn/v1beta1/dmn/thought:\n    get:\n      operationId: Thought_N9WGE\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  thought:\n                    type: object\n                    properties:\n                      program:\n                        type: string\n                      trigger:\n                        type: object\n                        properties:\n                          period:\n                            type: string\n                            format: uint64\n                          block:\n                            type: string\n                            format: uint64\n                      load:\n                        type: object\n                        properties:\n                          input:\n                            type: string\n                          gas_price:\n                            type: object\n                            properties:\n                              denom:\n                                type: string\n                              amount:\n                                type: string\n                            description: >-\n                              Coin defines a token with a denomination and an\n                              amount.\n\n\n                              NOTE: The amount field is an Int which implements the custom method\n\n                              signatures required by gogoproto.\n                      name:\n                        type: string\n                      particle:\n                        type: string\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: program\n          in: query\n          required: false\n          schema:\n            type: string\n        - name: name\n          in: query\n          required: false\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/dmn/v1beta1/dmn/thought_stats:\n    get:\n      operationId: ThoughtStats_N3IA1\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  thought_stats:\n                    type: object\n                    properties:\n                      program:\n                        type: string\n                      name:\n                        type: string\n                      calls:\n                        type: string\n                        format: uint64\n                      fees:\n                        type: string\n                        format: uint64\n                      gas:\n                        type: string\n                        format: uint64\n                      last_block:\n                        type: string\n                        format: uint64\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: program\n          in: query\n          required: false\n          schema:\n            type: string\n        - name: name\n          in: query\n          required: false\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/dmn/v1beta1/dmn/thoughts:\n    get:\n      operationId: Thoughts_U2UB0\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  thoughts:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        program:\n                          type: string\n                        trigger:\n                          type: object\n                          properties:\n                            period:\n                              type: string\n                              format: uint64\n                            block:\n                              type: string\n                              format: uint64\n                        load:\n                          type: object\n                          properties:\n                            input:\n                              type: string\n                            gas_price:\n                              type: object\n                              properties:\n                                denom:\n                                  type: string\n                                amount:\n                                  type: string\n                              description: >-\n                                Coin defines a token with a denomination and an\n                                amount.\n\n\n                                NOTE: The amount field is an Int which implements the custom method\n\n                                signatures required by gogoproto.\n                        name:\n                          type: string\n                        particle:\n                          type: string\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cyber/dmn/v1beta1/dmn/thoughts_fees:\n    get:\n      operationId: ThoughtsFees_WJZMQ\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  fees:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the custom method\n\n                        signatures required by gogoproto.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cyber/dmn/v1beta1/dmn/thoughts_stats:\n    get:\n      operationId: ThoughtsStats_FOF22\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  thoughts_stats:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        program:\n                          type: string\n                        name:\n                          type: string\n                        calls:\n                          type: string\n                          format: uint64\n                        fees:\n                          type: string\n                          format: uint64\n                        gas:\n                          type: string\n                          format: uint64\n                        last_block:\n                          type: string\n                          format: uint64\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/staking/v1beta1/delegations/{delegator_addr}\":\n    get:\n      summary: DelegatorDelegations queries all delegations of a given delegator\n        address.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n      operationId: DelegatorDelegations_5SDKK\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  delegation_responses:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        delegation:\n                          type: object\n                          properties:\n                            delegator_address:\n                              type: string\n                              description: delegator_address is the bech32-encoded address of the delegator.\n                            validator_address:\n                              type: string\n                              description: validator_address is the bech32-encoded address of the validator.\n                            shares:\n                              type: string\n                              description: shares define the delegation shares received.\n                          description: >-\n                            Delegation represents the bond with tokens held by\n                            an account. It is\n\n                            owned by one delegator, and is associated with the voting power of one\n\n                            validator.\n                        balance:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n                      description: >-\n                        DelegationResponse is equivalent to Delegation except\n                        that it contains a\n\n                        balance in addition to shares which is more suitable for client responses.\n                    description: delegation_responses defines all the delegations' info of a\n                      delegator.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: |-\n                  QueryDelegatorDelegationsResponse is response type for the\n                  Query/DelegatorDelegations RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: delegator_addr\n          description: delegator_addr defines the delegator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations\":\n    get:\n      summary: Redelegations queries redelegations of given address.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n      operationId: Redelegations_V11SE\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  redelegation_responses:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        redelegation:\n                          type: object\n                          properties:\n                            delegator_address:\n                              type: string\n                              description: delegator_address is the bech32-encoded address of the delegator.\n                            validator_src_address:\n                              type: string\n                              description: validator_src_address is the validator redelegation source operator\n                                address.\n                            validator_dst_address:\n                              type: string\n                              description: validator_dst_address is the validator redelegation destination\n                                operator address.\n                            entries:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  creation_height:\n                                    type: string\n                                    format: int64\n                                    description: creation_height  defines the height which the redelegation took\n                                      place.\n                                  completion_time:\n                                    type: string\n                                    format: date-time\n                                    description: completion_time defines the unix time for redelegation completion.\n                                  initial_balance:\n                                    type: string\n                                    description: initial_balance defines the initial balance when redelegation\n                                      started.\n                                  shares_dst:\n                                    type: string\n                                    description: shares_dst is the amount of destination-validator shares created by\n                                      redelegation.\n                                  unbonding_id:\n                                    type: string\n                                    format: uint64\n                                    title: Incrementing id that uniquely identifies this entry\n                                  unbonding_on_hold_ref_count:\n                                    type: string\n                                    format: int64\n                                    title: Strictly positive if this entry's unbonding has been stopped by external\n                                      modules\n                                description: RedelegationEntry defines a redelegation object with relevant\n                                  metadata.\n                              description: entries are the redelegation entries.\n                          description: >-\n                            Redelegation contains the list of a particular\n                            delegator's redelegating bonds\n\n                            from a particular source validator to a particular destination validator.\n                        entries:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              redelegation_entry:\n                                type: object\n                                properties:\n                                  creation_height:\n                                    type: string\n                                    format: int64\n                                    description: creation_height  defines the height which the redelegation took\n                                      place.\n                                  completion_time:\n                                    type: string\n                                    format: date-time\n                                    description: completion_time defines the unix time for redelegation completion.\n                                  initial_balance:\n                                    type: string\n                                    description: initial_balance defines the initial balance when redelegation\n                                      started.\n                                  shares_dst:\n                                    type: string\n                                    description: shares_dst is the amount of destination-validator shares created by\n                                      redelegation.\n                                  unbonding_id:\n                                    type: string\n                                    format: uint64\n                                    title: Incrementing id that uniquely identifies this entry\n                                  unbonding_on_hold_ref_count:\n                                    type: string\n                                    format: int64\n                                    title: Strictly positive if this entry's unbonding has been stopped by external\n                                      modules\n                                description: RedelegationEntry defines a redelegation object with relevant\n                                  metadata.\n                              balance:\n                                type: string\n                            description: >-\n                              RedelegationEntryResponse is equivalent to a\n                              RedelegationEntry except that it\n\n                              contains a balance in addition to shares which is more suitable for client\n\n                              responses.\n                      description: >-\n                        RedelegationResponse is equivalent to a Redelegation\n                        except that its entries\n\n                        contain a balance in addition to shares which is more suitable for client\n\n                        responses.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: >-\n                  QueryRedelegationsResponse is response type for the\n                  Query/Redelegations RPC\n\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: delegator_addr\n          description: delegator_addr defines the delegator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: src_validator_addr\n          description: src_validator_addr defines the validator address to redelegate from.\n          in: query\n          required: false\n          schema:\n            type: string\n        - name: dst_validator_addr\n          description: dst_validator_addr defines the validator address to redelegate to.\n          in: query\n          required: false\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/staking/v1beta1/delegators/{delegator_addr}/unbonding_delegations\":\n    get:\n      summary: >-\n        DelegatorUnbondingDelegations queries all unbonding delegations of a\n        given\n\n        delegator address.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n      operationId: DelegatorUnbondingDelegations_PWG9M\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  unbonding_responses:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        delegator_address:\n                          type: string\n                          description: delegator_address is the bech32-encoded address of the delegator.\n                        validator_address:\n                          type: string\n                          description: validator_address is the bech32-encoded address of the validator.\n                        entries:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              creation_height:\n                                type: string\n                                format: int64\n                                description: creation_height is the height which the unbonding took place.\n                              completion_time:\n                                type: string\n                                format: date-time\n                                description: completion_time is the unix time for unbonding completion.\n                              initial_balance:\n                                type: string\n                                description: initial_balance defines the tokens initially scheduled to receive\n                                  at completion.\n                              balance:\n                                type: string\n                                description: balance defines the tokens to receive at completion.\n                              unbonding_id:\n                                type: string\n                                format: uint64\n                                title: Incrementing id that uniquely identifies this entry\n                              unbonding_on_hold_ref_count:\n                                type: string\n                                format: int64\n                                title: Strictly positive if this entry's unbonding has been stopped by external\n                                  modules\n                            description: UnbondingDelegationEntry defines an unbonding object with relevant\n                              metadata.\n                          description: entries are the unbonding delegation entries.\n                      description: >-\n                        UnbondingDelegation stores all of a single delegator's\n                        unbonding bonds\n\n                        for a single validator in an time-ordered list.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: >-\n                  QueryUnbondingDelegatorDelegationsResponse is response type\n                  for the\n\n                  Query/UnbondingDelegatorDelegations RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: delegator_addr\n          description: delegator_addr defines the delegator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators\":\n    get:\n      summary: |-\n        DelegatorValidators queries all validators info for given delegator\n        address.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n      operationId: DelegatorValidators_ODLEN\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  validators:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        operator_address:\n                          type: string\n                          description: operator_address defines the address of the validator's operator;\n                            bech encoded in JSON.\n                        consensus_pubkey:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                          description: consensus_pubkey is the consensus public key of the validator, as a\n                            Protobuf Any.\n                        jailed:\n                          type: boolean\n                          description: jailed defined whether the validator has been jailed from bonded\n                            status or not.\n                        status:\n                          description: status is the validator status (bonded/unbonding/unbonded).\n                          type: string\n                          enum:\n                            - BOND_STATUS_UNSPECIFIED\n                            - BOND_STATUS_UNBONDED\n                            - BOND_STATUS_UNBONDING\n                            - BOND_STATUS_BONDED\n                          default: BOND_STATUS_UNSPECIFIED\n                        tokens:\n                          type: string\n                          description: tokens define the delegated tokens (incl. self-delegation).\n                        delegator_shares:\n                          type: string\n                          description: delegator_shares defines total shares issued to a validator's\n                            delegators.\n                        description:\n                          description: description defines the description terms for the validator.\n                          type: object\n                          properties:\n                            moniker:\n                              type: string\n                              description: moniker defines a human-readable name for the validator.\n                            identity:\n                              type: string\n                              description: identity defines an optional identity signature (ex. UPort or\n                                Keybase).\n                            website:\n                              type: string\n                              description: website defines an optional website link.\n                            security_contact:\n                              type: string\n                              description: security_contact defines an optional email for security contact.\n                            details:\n                              type: string\n                              description: details define other optional details.\n                        unbonding_height:\n                          type: string\n                          format: int64\n                          description: unbonding_height defines, if unbonding, the height at which this\n                            validator has begun unbonding.\n                        unbonding_time:\n                          type: string\n                          format: date-time\n                          description: unbonding_time defines, if unbonding, the min time for the\n                            validator to complete unbonding.\n                        commission:\n                          description: commission defines the commission parameters.\n                          type: object\n                          properties:\n                            commission_rates:\n                              description: commission_rates defines the initial commission rates to be used\n                                for creating a validator.\n                              type: object\n                              properties:\n                                rate:\n                                  type: string\n                                  description: rate is the commission rate charged to delegators, as a fraction.\n                                max_rate:\n                                  type: string\n                                  description: max_rate defines the maximum commission rate which validator can\n                                    ever charge, as a fraction.\n                                max_change_rate:\n                                  type: string\n                                  description: max_change_rate defines the maximum daily increase of the validator\n                                    commission, as a fraction.\n                            update_time:\n                              type: string\n                              format: date-time\n                              description: update_time is the last time the commission rate was changed.\n                        min_self_delegation:\n                          type: string\n                          description: >-\n                            min_self_delegation is the validator's self declared\n                            minimum self delegation.\n\n\n                            Since: cosmos-sdk 0.46\n                        unbonding_on_hold_ref_count:\n                          type: string\n                          format: int64\n                          title: strictly positive if this validator's unbonding has been stopped by\n                            external modules\n                        unbonding_ids:\n                          type: array\n                          items:\n                            type: string\n                            format: uint64\n                          title: list of unbonding ids, each uniquely identifing an unbonding of this\n                            validator\n                      description: >-\n                        Validator defines a validator, together with the total\n                        amount of the\n\n                        Validator's bond shares and their exchange rate to coins. Slashing results in\n\n                        a decrease in the exchange rate, allowing correct calculation of future\n\n                        undelegations without iterating over delegators. When coins are delegated to\n\n                        this validator, the validator is credited with a delegation whose number of\n\n                        bond shares is based on the amount of coins delegated divided by the current\n\n                        exchange rate. Voting power can be calculated as total bonded shares\n\n                        multiplied by exchange rate.\n                    description: validators defines the validators' info of a delegator.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: |-\n                  QueryDelegatorValidatorsResponse is response type for the\n                  Query/DelegatorValidators RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: delegator_addr\n          description: delegator_addr defines the delegator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/{validator_addr}\":\n    get:\n      summary: |-\n        DelegatorValidator queries validator info for given delegator validator\n        pair.\n      operationId: DelegatorValidator_4VGVV\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  validator:\n                    type: object\n                    properties:\n                      operator_address:\n                        type: string\n                        description: operator_address defines the address of the validator's operator;\n                          bech encoded in JSON.\n                      consensus_pubkey:\n                        type: object\n                        properties:\n                          type_url:\n                            type: string\n                          value:\n                            type: string\n                            format: byte\n                        description: consensus_pubkey is the consensus public key of the validator, as a\n                          Protobuf Any.\n                      jailed:\n                        type: boolean\n                        description: jailed defined whether the validator has been jailed from bonded\n                          status or not.\n                      status:\n                        description: status is the validator status (bonded/unbonding/unbonded).\n                        type: string\n                        enum:\n                          - BOND_STATUS_UNSPECIFIED\n                          - BOND_STATUS_UNBONDED\n                          - BOND_STATUS_UNBONDING\n                          - BOND_STATUS_BONDED\n                        default: BOND_STATUS_UNSPECIFIED\n                      tokens:\n                        type: string\n                        description: tokens define the delegated tokens (incl. self-delegation).\n                      delegator_shares:\n                        type: string\n                        description: delegator_shares defines total shares issued to a validator's\n                          delegators.\n                      description:\n                        description: description defines the description terms for the validator.\n                        type: object\n                        properties:\n                          moniker:\n                            type: string\n                            description: moniker defines a human-readable name for the validator.\n                          identity:\n                            type: string\n                            description: identity defines an optional identity signature (ex. UPort or\n                              Keybase).\n                          website:\n                            type: string\n                            description: website defines an optional website link.\n                          security_contact:\n                            type: string\n                            description: security_contact defines an optional email for security contact.\n                          details:\n                            type: string\n                            description: details define other optional details.\n                      unbonding_height:\n                        type: string\n                        format: int64\n                        description: unbonding_height defines, if unbonding, the height at which this\n                          validator has begun unbonding.\n                      unbonding_time:\n                        type: string\n                        format: date-time\n                        description: unbonding_time defines, if unbonding, the min time for the\n                          validator to complete unbonding.\n                      commission:\n                        description: commission defines the commission parameters.\n                        type: object\n                        properties:\n                          commission_rates:\n                            description: commission_rates defines the initial commission rates to be used\n                              for creating a validator.\n                            type: object\n                            properties:\n                              rate:\n                                type: string\n                                description: rate is the commission rate charged to delegators, as a fraction.\n                              max_rate:\n                                type: string\n                                description: max_rate defines the maximum commission rate which validator can\n                                  ever charge, as a fraction.\n                              max_change_rate:\n                                type: string\n                                description: max_change_rate defines the maximum daily increase of the validator\n                                  commission, as a fraction.\n                          update_time:\n                            type: string\n                            format: date-time\n                            description: update_time is the last time the commission rate was changed.\n                      min_self_delegation:\n                        type: string\n                        description: >-\n                          min_self_delegation is the validator's self declared\n                          minimum self delegation.\n\n\n                          Since: cosmos-sdk 0.46\n                      unbonding_on_hold_ref_count:\n                        type: string\n                        format: int64\n                        title: strictly positive if this validator's unbonding has been stopped by\n                          external modules\n                      unbonding_ids:\n                        type: array\n                        items:\n                          type: string\n                          format: uint64\n                        title: list of unbonding ids, each uniquely identifing an unbonding of this\n                          validator\n                    description: >-\n                      Validator defines a validator, together with the total\n                      amount of the\n\n                      Validator's bond shares and their exchange rate to coins. Slashing results in\n\n                      a decrease in the exchange rate, allowing correct calculation of future\n\n                      undelegations without iterating over delegators. When coins are delegated to\n\n                      this validator, the validator is credited with a delegation whose number of\n\n                      bond shares is based on the amount of coins delegated divided by the current\n\n                      exchange rate. Voting power can be calculated as total bonded shares\n\n                      multiplied by exchange rate.\n                description: |-\n                  QueryDelegatorValidatorResponse response type for the\n                  Query/DelegatorValidator RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: delegator_addr\n          description: delegator_addr defines the delegator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: validator_addr\n          description: validator_addr defines the validator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/staking/v1beta1/historical_info/{height}\":\n    get:\n      summary: HistoricalInfo queries the historical info for given height.\n      operationId: HistoricalInfo_5WZCR\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  hist:\n                    description: hist defines the historical info at the given height.\n                    type: object\n                    properties:\n                      header:\n                        type: object\n                        properties:\n                          version:\n                            title: basic block info\n                            type: object\n                            properties:\n                              block:\n                                type: string\n                                format: uint64\n                              app:\n                                type: string\n                                format: uint64\n                            description: >-\n                              Consensus captures the consensus rules for\n                              processing a block in the blockchain,\n\n                              including all blockchain data structures and the rules of the application's\n\n                              state transition machine.\n                          chain_id:\n                            type: string\n                          height:\n                            type: string\n                            format: int64\n                          time:\n                            type: string\n                            format: date-time\n                          last_block_id:\n                            title: prev block info\n                            type: object\n                            properties:\n                              hash:\n                                type: string\n                                format: byte\n                              part_set_header:\n                                type: object\n                                properties:\n                                  total:\n                                    type: integer\n                                    format: int64\n                                  hash:\n                                    type: string\n                                    format: byte\n                                title: PartsetHeader\n                          last_commit_hash:\n                            type: string\n                            format: byte\n                            title: hashes of block data\n                          data_hash:\n                            type: string\n                            format: byte\n                          validators_hash:\n                            type: string\n                            format: byte\n                            title: hashes from the app output from the prev block\n                          next_validators_hash:\n                            type: string\n                            format: byte\n                          consensus_hash:\n                            type: string\n                            format: byte\n                          app_hash:\n                            type: string\n                            format: byte\n                          last_results_hash:\n                            type: string\n                            format: byte\n                          evidence_hash:\n                            type: string\n                            format: byte\n                            title: consensus info\n                          proposer_address:\n                            type: string\n                            format: byte\n                        description: Header defines the structure of a block header.\n                      valset:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            operator_address:\n                              type: string\n                              description: operator_address defines the address of the validator's operator;\n                                bech encoded in JSON.\n                            consensus_pubkey:\n                              type: object\n                              properties:\n                                type_url:\n                                  type: string\n                                value:\n                                  type: string\n                                  format: byte\n                              description: consensus_pubkey is the consensus public key of the validator, as a\n                                Protobuf Any.\n                            jailed:\n                              type: boolean\n                              description: jailed defined whether the validator has been jailed from bonded\n                                status or not.\n                            status:\n                              description: status is the validator status (bonded/unbonding/unbonded).\n                              type: string\n                              enum:\n                                - BOND_STATUS_UNSPECIFIED\n                                - BOND_STATUS_UNBONDED\n                                - BOND_STATUS_UNBONDING\n                                - BOND_STATUS_BONDED\n                              default: BOND_STATUS_UNSPECIFIED\n                            tokens:\n                              type: string\n                              description: tokens define the delegated tokens (incl. self-delegation).\n                            delegator_shares:\n                              type: string\n                              description: delegator_shares defines total shares issued to a validator's\n                                delegators.\n                            description:\n                              description: description defines the description terms for the validator.\n                              type: object\n                              properties:\n                                moniker:\n                                  type: string\n                                  description: moniker defines a human-readable name for the validator.\n                                identity:\n                                  type: string\n                                  description: identity defines an optional identity signature (ex. UPort or\n                                    Keybase).\n                                website:\n                                  type: string\n                                  description: website defines an optional website link.\n                                security_contact:\n                                  type: string\n                                  description: security_contact defines an optional email for security contact.\n                                details:\n                                  type: string\n                                  description: details define other optional details.\n                            unbonding_height:\n                              type: string\n                              format: int64\n                              description: unbonding_height defines, if unbonding, the height at which this\n                                validator has begun unbonding.\n                            unbonding_time:\n                              type: string\n                              format: date-time\n                              description: unbonding_time defines, if unbonding, the min time for the\n                                validator to complete unbonding.\n                            commission:\n                              description: commission defines the commission parameters.\n                              type: object\n                              properties:\n                                commission_rates:\n                                  description: commission_rates defines the initial commission rates to be used\n                                    for creating a validator.\n                                  type: object\n                                  properties:\n                                    rate:\n                                      type: string\n                                      description: rate is the commission rate charged to delegators, as a fraction.\n                                    max_rate:\n                                      type: string\n                                      description: max_rate defines the maximum commission rate which validator can\n                                        ever charge, as a fraction.\n                                    max_change_rate:\n                                      type: string\n                                      description: max_change_rate defines the maximum daily increase of the validator\n                                        commission, as a fraction.\n                                update_time:\n                                  type: string\n                                  format: date-time\n                                  description: update_time is the last time the commission rate was changed.\n                            min_self_delegation:\n                              type: string\n                              description: >-\n                                min_self_delegation is the validator's self\n                                declared minimum self delegation.\n\n\n                                Since: cosmos-sdk 0.46\n                            unbonding_on_hold_ref_count:\n                              type: string\n                              format: int64\n                              title: strictly positive if this validator's unbonding has been stopped by\n                                external modules\n                            unbonding_ids:\n                              type: array\n                              items:\n                                type: string\n                                format: uint64\n                              title: list of unbonding ids, each uniquely identifing an unbonding of this\n                                validator\n                          description: >-\n                            Validator defines a validator, together with the\n                            total amount of the\n\n                            Validator's bond shares and their exchange rate to coins. Slashing results in\n\n                            a decrease in the exchange rate, allowing correct calculation of future\n\n                            undelegations without iterating over delegators. When coins are delegated to\n\n                            this validator, the validator is credited with a delegation whose number of\n\n                            bond shares is based on the amount of coins delegated divided by the current\n\n                            exchange rate. Voting power can be calculated as total bonded shares\n\n                            multiplied by exchange rate.\n                description: >-\n                  QueryHistoricalInfoResponse is response type for the\n                  Query/HistoricalInfo RPC\n\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: height\n          description: height defines at which height to query the historical info.\n          in: path\n          required: true\n          schema:\n            type: string\n            format: int64\n      tags:\n        - gRPC Gateway API\n  /cosmos/staking/v1beta1/params:\n    get:\n      summary: Parameters queries the staking parameters.\n      operationId: Params_2OHI6\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  params:\n                    description: params holds all the parameters of this module.\n                    type: object\n                    properties:\n                      unbonding_time:\n                        type: string\n                        description: unbonding_time is the time duration of unbonding.\n                      max_validators:\n                        type: integer\n                        format: int64\n                        description: max_validators is the maximum number of validators.\n                      max_entries:\n                        type: integer\n                        format: int64\n                        description: max_entries is the max entries for either unbonding delegation or\n                          redelegation (per pair/trio).\n                      historical_entries:\n                        type: integer\n                        format: int64\n                        description: historical_entries is the number of historical entries to persist.\n                      bond_denom:\n                        type: string\n                        description: bond_denom defines the bondable coin denomination.\n                      min_commission_rate:\n                        type: string\n                        title: min_commission_rate is the chain-wide minimum commission rate that a\n                          validator can charge their delegators\n                description: QueryParamsResponse is response type for the Query/Params RPC\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/staking/v1beta1/pool:\n    get:\n      summary: Pool queries the pool info.\n      operationId: Pool_YT1XX\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  pool:\n                    description: pool defines the pool info.\n                    type: object\n                    properties:\n                      not_bonded_tokens:\n                        type: string\n                      bonded_tokens:\n                        type: string\n                description: QueryPoolResponse is response type for the Query/Pool RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/staking/v1beta1/validators:\n    get:\n      summary: Validators queries all validators that match the given status.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n      operationId: Validators_8C5VK\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  validators:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        operator_address:\n                          type: string\n                          description: operator_address defines the address of the validator's operator;\n                            bech encoded in JSON.\n                        consensus_pubkey:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                          description: consensus_pubkey is the consensus public key of the validator, as a\n                            Protobuf Any.\n                        jailed:\n                          type: boolean\n                          description: jailed defined whether the validator has been jailed from bonded\n                            status or not.\n                        status:\n                          description: status is the validator status (bonded/unbonding/unbonded).\n                          type: string\n                          enum:\n                            - BOND_STATUS_UNSPECIFIED\n                            - BOND_STATUS_UNBONDED\n                            - BOND_STATUS_UNBONDING\n                            - BOND_STATUS_BONDED\n                          default: BOND_STATUS_UNSPECIFIED\n                        tokens:\n                          type: string\n                          description: tokens define the delegated tokens (incl. self-delegation).\n                        delegator_shares:\n                          type: string\n                          description: delegator_shares defines total shares issued to a validator's\n                            delegators.\n                        description:\n                          description: description defines the description terms for the validator.\n                          type: object\n                          properties:\n                            moniker:\n                              type: string\n                              description: moniker defines a human-readable name for the validator.\n                            identity:\n                              type: string\n                              description: identity defines an optional identity signature (ex. UPort or\n                                Keybase).\n                            website:\n                              type: string\n                              description: website defines an optional website link.\n                            security_contact:\n                              type: string\n                              description: security_contact defines an optional email for security contact.\n                            details:\n                              type: string\n                              description: details define other optional details.\n                        unbonding_height:\n                          type: string\n                          format: int64\n                          description: unbonding_height defines, if unbonding, the height at which this\n                            validator has begun unbonding.\n                        unbonding_time:\n                          type: string\n                          format: date-time\n                          description: unbonding_time defines, if unbonding, the min time for the\n                            validator to complete unbonding.\n                        commission:\n                          description: commission defines the commission parameters.\n                          type: object\n                          properties:\n                            commission_rates:\n                              description: commission_rates defines the initial commission rates to be used\n                                for creating a validator.\n                              type: object\n                              properties:\n                                rate:\n                                  type: string\n                                  description: rate is the commission rate charged to delegators, as a fraction.\n                                max_rate:\n                                  type: string\n                                  description: max_rate defines the maximum commission rate which validator can\n                                    ever charge, as a fraction.\n                                max_change_rate:\n                                  type: string\n                                  description: max_change_rate defines the maximum daily increase of the validator\n                                    commission, as a fraction.\n                            update_time:\n                              type: string\n                              format: date-time\n                              description: update_time is the last time the commission rate was changed.\n                        min_self_delegation:\n                          type: string\n                          description: >-\n                            min_self_delegation is the validator's self declared\n                            minimum self delegation.\n\n\n                            Since: cosmos-sdk 0.46\n                        unbonding_on_hold_ref_count:\n                          type: string\n                          format: int64\n                          title: strictly positive if this validator's unbonding has been stopped by\n                            external modules\n                        unbonding_ids:\n                          type: array\n                          items:\n                            type: string\n                            format: uint64\n                          title: list of unbonding ids, each uniquely identifing an unbonding of this\n                            validator\n                      description: >-\n                        Validator defines a validator, together with the total\n                        amount of the\n\n                        Validator's bond shares and their exchange rate to coins. Slashing results in\n\n                        a decrease in the exchange rate, allowing correct calculation of future\n\n                        undelegations without iterating over delegators. When coins are delegated to\n\n                        this validator, the validator is credited with a delegation whose number of\n\n                        bond shares is based on the amount of coins delegated divided by the current\n\n                        exchange rate. Voting power can be calculated as total bonded shares\n\n                        multiplied by exchange rate.\n                    description: validators contains all the queried validators.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                title: QueryValidatorsResponse is response type for the Query/Validators RPC\n                  method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: status\n          description: status enables to query for validators matching a given status.\n          in: query\n          required: false\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/staking/v1beta1/validators/{validator_addr}\":\n    get:\n      summary: Validator queries validator info for given validator address.\n      operationId: Validator_50V8E\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  validator:\n                    type: object\n                    properties:\n                      operator_address:\n                        type: string\n                        description: operator_address defines the address of the validator's operator;\n                          bech encoded in JSON.\n                      consensus_pubkey:\n                        type: object\n                        properties:\n                          type_url:\n                            type: string\n                          value:\n                            type: string\n                            format: byte\n                        description: consensus_pubkey is the consensus public key of the validator, as a\n                          Protobuf Any.\n                      jailed:\n                        type: boolean\n                        description: jailed defined whether the validator has been jailed from bonded\n                          status or not.\n                      status:\n                        description: status is the validator status (bonded/unbonding/unbonded).\n                        type: string\n                        enum:\n                          - BOND_STATUS_UNSPECIFIED\n                          - BOND_STATUS_UNBONDED\n                          - BOND_STATUS_UNBONDING\n                          - BOND_STATUS_BONDED\n                        default: BOND_STATUS_UNSPECIFIED\n                      tokens:\n                        type: string\n                        description: tokens define the delegated tokens (incl. self-delegation).\n                      delegator_shares:\n                        type: string\n                        description: delegator_shares defines total shares issued to a validator's\n                          delegators.\n                      description:\n                        description: description defines the description terms for the validator.\n                        type: object\n                        properties:\n                          moniker:\n                            type: string\n                            description: moniker defines a human-readable name for the validator.\n                          identity:\n                            type: string\n                            description: identity defines an optional identity signature (ex. UPort or\n                              Keybase).\n                          website:\n                            type: string\n                            description: website defines an optional website link.\n                          security_contact:\n                            type: string\n                            description: security_contact defines an optional email for security contact.\n                          details:\n                            type: string\n                            description: details define other optional details.\n                      unbonding_height:\n                        type: string\n                        format: int64\n                        description: unbonding_height defines, if unbonding, the height at which this\n                          validator has begun unbonding.\n                      unbonding_time:\n                        type: string\n                        format: date-time\n                        description: unbonding_time defines, if unbonding, the min time for the\n                          validator to complete unbonding.\n                      commission:\n                        description: commission defines the commission parameters.\n                        type: object\n                        properties:\n                          commission_rates:\n                            description: commission_rates defines the initial commission rates to be used\n                              for creating a validator.\n                            type: object\n                            properties:\n                              rate:\n                                type: string\n                                description: rate is the commission rate charged to delegators, as a fraction.\n                              max_rate:\n                                type: string\n                                description: max_rate defines the maximum commission rate which validator can\n                                  ever charge, as a fraction.\n                              max_change_rate:\n                                type: string\n                                description: max_change_rate defines the maximum daily increase of the validator\n                                  commission, as a fraction.\n                          update_time:\n                            type: string\n                            format: date-time\n                            description: update_time is the last time the commission rate was changed.\n                      min_self_delegation:\n                        type: string\n                        description: >-\n                          min_self_delegation is the validator's self declared\n                          minimum self delegation.\n\n\n                          Since: cosmos-sdk 0.46\n                      unbonding_on_hold_ref_count:\n                        type: string\n                        format: int64\n                        title: strictly positive if this validator's unbonding has been stopped by\n                          external modules\n                      unbonding_ids:\n                        type: array\n                        items:\n                          type: string\n                          format: uint64\n                        title: list of unbonding ids, each uniquely identifing an unbonding of this\n                          validator\n                    description: >-\n                      Validator defines a validator, together with the total\n                      amount of the\n\n                      Validator's bond shares and their exchange rate to coins. Slashing results in\n\n                      a decrease in the exchange rate, allowing correct calculation of future\n\n                      undelegations without iterating over delegators. When coins are delegated to\n\n                      this validator, the validator is credited with a delegation whose number of\n\n                      bond shares is based on the amount of coins delegated divided by the current\n\n                      exchange rate. Voting power can be calculated as total bonded shares\n\n                      multiplied by exchange rate.\n                title: QueryValidatorResponse is response type for the Query/Validator RPC\n                  method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: validator_addr\n          description: validator_addr defines the validator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations\":\n    get:\n      summary: ValidatorDelegations queries delegate info for given validator.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n      operationId: ValidatorDelegations_WQPT6\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  delegation_responses:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        delegation:\n                          type: object\n                          properties:\n                            delegator_address:\n                              type: string\n                              description: delegator_address is the bech32-encoded address of the delegator.\n                            validator_address:\n                              type: string\n                              description: validator_address is the bech32-encoded address of the validator.\n                            shares:\n                              type: string\n                              description: shares define the delegation shares received.\n                          description: >-\n                            Delegation represents the bond with tokens held by\n                            an account. It is\n\n                            owned by one delegator, and is associated with the voting power of one\n\n                            validator.\n                        balance:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n                      description: >-\n                        DelegationResponse is equivalent to Delegation except\n                        that it contains a\n\n                        balance in addition to shares which is more suitable for client responses.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                title: |-\n                  QueryValidatorDelegationsResponse is response type for the\n                  Query/ValidatorDelegations RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: validator_addr\n          description: validator_addr defines the validator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}\":\n    get:\n      summary: Delegation queries delegate info for given validator delegator pair.\n      operationId: Delegation_KEKGD\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  delegation_response:\n                    type: object\n                    properties:\n                      delegation:\n                        type: object\n                        properties:\n                          delegator_address:\n                            type: string\n                            description: delegator_address is the bech32-encoded address of the delegator.\n                          validator_address:\n                            type: string\n                            description: validator_address is the bech32-encoded address of the validator.\n                          shares:\n                            type: string\n                            description: shares define the delegation shares received.\n                        description: >-\n                          Delegation represents the bond with tokens held by an\n                          account. It is\n\n                          owned by one delegator, and is associated with the voting power of one\n\n                          validator.\n                      balance:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the custom method\n\n                          signatures required by gogoproto.\n                    description: >-\n                      DelegationResponse is equivalent to Delegation except that\n                      it contains a\n\n                      balance in addition to shares which is more suitable for client responses.\n                description: QueryDelegationResponse is response type for the Query/Delegation\n                  RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: validator_addr\n          description: validator_addr defines the validator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: delegator_addr\n          description: delegator_addr defines the delegator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}/unbonding_delegation\":\n    get:\n      summary: |-\n        UnbondingDelegation queries unbonding info for given validator delegator\n        pair.\n      operationId: UnbondingDelegation_ZYWZV\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  unbond:\n                    type: object\n                    properties:\n                      delegator_address:\n                        type: string\n                        description: delegator_address is the bech32-encoded address of the delegator.\n                      validator_address:\n                        type: string\n                        description: validator_address is the bech32-encoded address of the validator.\n                      entries:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            creation_height:\n                              type: string\n                              format: int64\n                              description: creation_height is the height which the unbonding took place.\n                            completion_time:\n                              type: string\n                              format: date-time\n                              description: completion_time is the unix time for unbonding completion.\n                            initial_balance:\n                              type: string\n                              description: initial_balance defines the tokens initially scheduled to receive\n                                at completion.\n                            balance:\n                              type: string\n                              description: balance defines the tokens to receive at completion.\n                            unbonding_id:\n                              type: string\n                              format: uint64\n                              title: Incrementing id that uniquely identifies this entry\n                            unbonding_on_hold_ref_count:\n                              type: string\n                              format: int64\n                              title: Strictly positive if this entry's unbonding has been stopped by external\n                                modules\n                          description: UnbondingDelegationEntry defines an unbonding object with relevant\n                            metadata.\n                        description: entries are the unbonding delegation entries.\n                    description: >-\n                      UnbondingDelegation stores all of a single delegator's\n                      unbonding bonds\n\n                      for a single validator in an time-ordered list.\n                description: >-\n                  QueryDelegationResponse is response type for the\n                  Query/UnbondingDelegation\n\n                  RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: validator_addr\n          description: validator_addr defines the validator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: delegator_addr\n          description: delegator_addr defines the delegator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/staking/v1beta1/validators/{validator_addr}/unbonding_delegations\":\n    get:\n      summary: ValidatorUnbondingDelegations queries unbonding delegations of a\n        validator.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n      operationId: ValidatorUnbondingDelegations_2MTRI\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  unbonding_responses:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        delegator_address:\n                          type: string\n                          description: delegator_address is the bech32-encoded address of the delegator.\n                        validator_address:\n                          type: string\n                          description: validator_address is the bech32-encoded address of the validator.\n                        entries:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              creation_height:\n                                type: string\n                                format: int64\n                                description: creation_height is the height which the unbonding took place.\n                              completion_time:\n                                type: string\n                                format: date-time\n                                description: completion_time is the unix time for unbonding completion.\n                              initial_balance:\n                                type: string\n                                description: initial_balance defines the tokens initially scheduled to receive\n                                  at completion.\n                              balance:\n                                type: string\n                                description: balance defines the tokens to receive at completion.\n                              unbonding_id:\n                                type: string\n                                format: uint64\n                                title: Incrementing id that uniquely identifies this entry\n                              unbonding_on_hold_ref_count:\n                                type: string\n                                format: int64\n                                title: Strictly positive if this entry's unbonding has been stopped by external\n                                  modules\n                            description: UnbondingDelegationEntry defines an unbonding object with relevant\n                              metadata.\n                          description: entries are the unbonding delegation entries.\n                      description: >-\n                        UnbondingDelegation stores all of a single delegator's\n                        unbonding bonds\n\n                        for a single validator in an time-ordered list.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: >-\n                  QueryValidatorUnbondingDelegationsResponse is response type\n                  for the\n\n                  Query/ValidatorUnbondingDelegations RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: validator_addr\n          description: validator_addr defines the validator address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/ibc/apps/transfer/v1/channels/{channel_id}/ports/{port_id}/escrow_address\":\n    get:\n      summary: EscrowAddress returns the escrow address for a particular port and\n        channel id.\n      operationId: EscrowAddress_H4ZU3\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  escrow_address:\n                    type: string\n                    title: the escrow account address\n                description: QueryEscrowAddressResponse is the response type of the\n                  EscrowAddress RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: channel_id\n          description: unique channel identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: port_id\n          description: unique port identifier\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/ibc/apps/transfer/v1/denom_hashes/{trace}\":\n    get:\n      summary: DenomHash queries a denomination hash information.\n      operationId: DenomHash_BMCJ0\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  hash:\n                    type: string\n                    description: hash (in hex format) of the denomination trace information.\n                description: >-\n                  QueryDenomHashResponse is the response type for the\n                  Query/DenomHash RPC\n\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: trace\n          description: The denomination trace ([port_id]/[channel_id])+/[denom]\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /ibc/apps/transfer/v1/denom_traces:\n    get:\n      summary: DenomTraces queries all denomination traces.\n      operationId: DenomTraces_UYI2F\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  denom_traces:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        path:\n                          type: string\n                          description: >-\n                            path defines the chain of port/channel identifiers\n                            used for tracing the\n\n                            source of the fungible token.\n                        base_denom:\n                          type: string\n                          description: base denomination of the relayed fungible token.\n                      description: >-\n                        DenomTrace contains the base denomination for ICS20\n                        fungible tokens and the\n\n                        source tracing information path.\n                    description: denom_traces returns all denominations trace information.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: >-\n                  QueryConnectionsResponse is the response type for the\n                  Query/DenomTraces RPC\n\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/ibc/apps/transfer/v1/denom_traces/{hash}\":\n    get:\n      summary: DenomTrace queries a denomination trace information.\n      operationId: DenomTrace_3PQDP\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  denom_trace:\n                    type: object\n                    properties:\n                      path:\n                        type: string\n                        description: >-\n                          path defines the chain of port/channel identifiers\n                          used for tracing the\n\n                          source of the fungible token.\n                      base_denom:\n                        type: string\n                        description: base denomination of the relayed fungible token.\n                    description: >-\n                      DenomTrace contains the base denomination for ICS20\n                      fungible tokens and the\n\n                      source tracing information path.\n                description: >-\n                  QueryDenomTraceResponse is the response type for the\n                  Query/DenomTrace RPC\n\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: hash\n          description: hash (in hex format) or denom (full denom with ibc prefix) of the\n            denomination trace information.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/ibc/apps/transfer/v1/denoms/{denom}/total_escrow\":\n    get:\n      summary: TotalEscrowForDenom returns the total amount of tokens in escrow based\n        on the denom.\n      operationId: TotalEscrowForDenom_GBGAA\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  amount:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the custom method\n\n                      signatures required by gogoproto.\n                description: QueryTotalEscrowForDenomResponse is the response type for\n                  TotalEscrowForDenom RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: denom\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /ibc/apps/transfer/v1/params:\n    get:\n      summary: Params queries all parameters of the ibc-transfer module.\n      operationId: Params_4CJ8D\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  params:\n                    description: params defines the parameters of the module.\n                    type: object\n                    properties:\n                      send_enabled:\n                        type: boolean\n                        description: >-\n                          send_enabled enables or disables all cross-chain token\n                          transfers from this\n\n                          chain.\n                      receive_enabled:\n                        type: boolean\n                        description: >-\n                          receive_enabled enables or disables all cross-chain\n                          token transfers to this\n\n                          chain.\n                description: QueryParamsResponse is the response type for the Query/Params RPC\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/tx/v1beta1/decode:\n    post:\n      summary: TxDecode decodes the transaction.\n      description: \"Since: cosmos-sdk 0.47\"\n      operationId: TxDecode_08PMV\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  tx:\n                    description: tx is the decoded transaction.\n                    type: object\n                    properties:\n                      body:\n                        title: body is the processable content of the transaction\n                        type: object\n                        properties:\n                          messages:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                type_url:\n                                  type: string\n                                value:\n                                  type: string\n                                  format: byte\n                            description: >-\n                              messages is a list of messages to be executed. The\n                              required signers of\n\n                              those messages define the number and order of elements in AuthInfo's\n\n                              signer_infos and Tx's signatures. Each required signer address is added to\n\n                              the list only the first time it occurs.\n\n                              By convention, the first required signer (usually from the first message)\n\n                              is referred to as the primary signer and pays the fee for the whole\n\n                              transaction.\n                          memo:\n                            type: string\n                            description: >-\n                              memo is any arbitrary note/comment to be added to\n                              the transaction.\n\n                              WARNING: in clients, any publicly exposed text should not be called memo,\n\n                              but should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122).\n                          timeout_height:\n                            type: string\n                            format: uint64\n                            title: >-\n                              timeout is the block height after which this\n                              transaction will not\n\n                              be processed by the chain\n                          extension_options:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                type_url:\n                                  type: string\n                                value:\n                                  type: string\n                                  format: byte\n                            title: >-\n                              extension_options are arbitrary options that can\n                              be added by chains\n\n                              when the default options are not sufficient. If any of these are present\n\n                              and can't be handled, the transaction will be rejected\n                          non_critical_extension_options:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                type_url:\n                                  type: string\n                                value:\n                                  type: string\n                                  format: byte\n                            title: >-\n                              extension_options are arbitrary options that can\n                              be added by chains\n\n                              when the default options are not sufficient. If any of these are present\n\n                              and can't be handled, they will be ignored\n                        description: TxBody is the body of a transaction that all signers sign over.\n                      auth_info:\n                        title: >-\n                          auth_info is the authorization related content of the\n                          transaction,\n\n                          specifically signers, signer modes and fee\n                        type: object\n                        properties:\n                          signer_infos:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                public_key:\n                                  type: object\n                                  properties:\n                                    type_url:\n                                      type: string\n                                    value:\n                                      type: string\n                                      format: byte\n                                  description: >-\n                                    public_key is the public key of the signer.\n                                    It is optional for accounts\n\n                                    that already exist in state. If unset, the verifier can use the required \\\n\n                                    signer address for this position and lookup the public key.\n                                mode_info:\n                                  title: >-\n                                    mode_info describes the signing mode of the\n                                    signer and is a nested\n\n                                    structure to support nested multisig pubkey's\n                                  type: object\n                                  properties:\n                                    single:\n                                      title: single represents a single signer\n                                      type: object\n                                      properties:\n                                        mode:\n                                          title: mode is the signing mode of the single signer\n                                          type: string\n                                          enum:\n                                            - SIGN_MODE_UNSPECIFIED\n                                            - SIGN_MODE_DIRECT\n                                            - SIGN_MODE_TEXTUAL\n                                            - SIGN_MODE_DIRECT_AUX\n                                            - SIGN_MODE_LEGACY_AMINO_JSON\n                                            - SIGN_MODE_EIP_191\n                                          default: SIGN_MODE_UNSPECIFIED\n                                          description: >-\n                                            SignMode represents a signing mode\n                                            with its own security guarantees.\n\n\n                                            This enum should be considered a registry of all known sign modes\n\n                                            in the Cosmos ecosystem. Apps are not expected to support all known\n\n                                            sign modes. Apps that would like to support custom  sign modes are\n\n                                            encouraged to open a small PR against this file to add a new case\n\n                                            to this SignMode enum describing their sign mode so that different\n\n                                            apps have a consistent version of this enum.\n\n                                             - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                            rejected.\n                                             - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                            verified with raw bytes from Tx.\n                                             - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                            human-readable textual representation on top of the binary representation\n\n                                            from SIGN_MODE_DIRECT. It is currently not supported.\n                                             - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                            SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\n\n                                            require signers signing over other signers' `signer_info`. It also allows\n\n                                            for adding Tips in transactions.\n\n\n                                            Since: cosmos-sdk 0.46\n                                             - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                            Amino JSON and will be removed in the future.\n                                             - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                            SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                                            Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\n\n                                            but is not implemented on the SDK by default. To enable EIP-191, you need\n\n                                            to pass a custom `TxConfig` that has an implementation of\n\n                                            `SignModeHandler` for EIP-191. The SDK may decide to fully support\n\n                                            EIP-191 in the future.\n\n\n                                            Since: cosmos-sdk 0.45.2\n                                    multi:\n                                      title: multi represents a nested multisig signer\n                                      type: object\n                                      properties:\n                                        bitarray:\n                                          title: bitarray specifies which keys within the multisig are signing\n                                          type: object\n                                          properties:\n                                            extra_bits_stored:\n                                              type: integer\n                                              format: int64\n                                            elems:\n                                              type: string\n                                              format: byte\n                                          description: >-\n                                            CompactBitArray is an implementation\n                                            of a space efficient bit array.\n\n                                            This is used to ensure that the encoded data takes up a minimal amount of\n\n                                            space after proto encoding.\n\n                                            This is not thread safe, and is not intended for concurrent usage.\n                                        mode_infos:\n                                          type: array\n                                          items: {}\n                                          title: >-\n                                            mode_infos is the corresponding\n                                            modes of the signers of the multisig\n\n                                            which could include nested multisig public keys\n                                  description: ModeInfo describes the signing mode of a single or nested multisig\n                                    signer.\n                                sequence:\n                                  type: string\n                                  format: uint64\n                                  description: >-\n                                    sequence is the sequence of the account,\n                                    which describes the\n\n                                    number of committed transactions signed by a given address. It is used to\n\n                                    prevent replay attacks.\n                              description: >-\n                                SignerInfo describes the public key and signing\n                                mode of a single top-level\n\n                                signer.\n                            description: >-\n                              signer_infos defines the signing modes for the\n                              required signers. The number\n\n                              and order of elements must match the required signers from TxBody's\n\n                              messages. The first element is the primary signer and the one which pays\n\n                              the fee.\n                          fee:\n                            description: >-\n                              Fee is the fee and gas limit for the transaction.\n                              The first signer is the\n\n                              primary signer and the one which pays the fee. The fee can be calculated\n\n                              based on the cost of evaluating the body and doing signature verification\n\n                              of the signers. This can be estimated via simulation.\n                            type: object\n                            properties:\n                              amount:\n                                type: array\n                                items:\n                                  type: object\n                                  properties:\n                                    denom:\n                                      type: string\n                                    amount:\n                                      type: string\n                                  description: >-\n                                    Coin defines a token with a denomination and\n                                    an amount.\n\n\n                                    NOTE: The amount field is an Int which implements the custom method\n\n                                    signatures required by gogoproto.\n                                title: amount is the amount of coins to be paid as a fee\n                              gas_limit:\n                                type: string\n                                format: uint64\n                                title: >-\n                                  gas_limit is the maximum gas that can be used\n                                  in transaction processing\n\n                                  before an out of gas error occurs\n                              payer:\n                                type: string\n                                description: >-\n                                  if unset, the first signer is responsible for\n                                  paying the fees. If set, the specified account\n                                  must pay the fees.\n\n                                  the payer must be a tx signer (and thus have signed this field in AuthInfo).\n\n                                  setting this field does *not* change the ordering of required signers for the transaction.\n                              granter:\n                                type: string\n                                title: >-\n                                  if set, the fee payer (either the first signer\n                                  or the value of the payer field) requests that\n                                  a fee grant be used\n\n                                  to pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\n\n                                  not support fee grants, this will fail\n                          tip:\n                            description: >-\n                              Tip is the optional tip used for transactions fees\n                              paid in another denom.\n\n\n                              This field is ignored if the chain didn't enable tips, i.e. didn't add the\n\n                              `TipDecorator` in its posthandler.\n\n\n                              Since: cosmos-sdk 0.46\n                            type: object\n                            properties:\n                              amount:\n                                type: array\n                                items:\n                                  type: object\n                                  properties:\n                                    denom:\n                                      type: string\n                                    amount:\n                                      type: string\n                                  description: >-\n                                    Coin defines a token with a denomination and\n                                    an amount.\n\n\n                                    NOTE: The amount field is an Int which implements the custom method\n\n                                    signatures required by gogoproto.\n                                title: amount is the amount of the tip\n                              tipper:\n                                type: string\n                                title: tipper is the address of the account paying for the tip\n                        description: >-\n                          AuthInfo describes the fee and signer modes that are\n                          used to sign a\n\n                          transaction.\n                      signatures:\n                        type: array\n                        items:\n                          type: string\n                          format: byte\n                        description: >-\n                          signatures is a list of signatures that matches the\n                          length and order of\n\n                          AuthInfo's signer_infos to allow connecting signature meta information like\n\n                          public key and signing mode by position.\n                description: |-\n                  TxDecodeResponse is the response type for the\n                  Service.TxDecode method.\n\n                  Since: cosmos-sdk 0.47\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      requestBody:\n        content:\n          application/json:\n            schema:\n              type: object\n              properties:\n                tx_bytes:\n                  type: string\n                  format: byte\n                  description: tx_bytes is the raw transaction.\n              description: |-\n                TxDecodeRequest is the request type for the Service.TxDecode\n                RPC method.\n\n                Since: cosmos-sdk 0.47\n        required: true\n      tags:\n        - gRPC Gateway API\n  /cosmos/tx/v1beta1/decode/amino:\n    post:\n      summary: TxDecodeAmino decodes an Amino transaction from encoded bytes to JSON.\n      description: \"Since: cosmos-sdk 0.47\"\n      operationId: TxDecodeAmino_AUUEJ\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  amino_json:\n                    type: string\n                description: >-\n                  TxDecodeAminoResponse is the response type for the\n                  Service.TxDecodeAmino\n\n                  RPC method.\n\n\n                  Since: cosmos-sdk 0.47\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      requestBody:\n        content:\n          application/json:\n            schema:\n              type: object\n              properties:\n                amino_binary:\n                  type: string\n                  format: byte\n              description: >-\n                TxDecodeAminoRequest is the request type for the\n                Service.TxDecodeAmino\n\n                RPC method.\n\n\n                Since: cosmos-sdk 0.47\n        required: true\n      tags:\n        - gRPC Gateway API\n  /cosmos/tx/v1beta1/encode:\n    post:\n      summary: TxEncode encodes the transaction.\n      description: \"Since: cosmos-sdk 0.47\"\n      operationId: TxEncode_SOL4O\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  tx_bytes:\n                    type: string\n                    format: byte\n                    description: tx_bytes is the encoded transaction bytes.\n                description: |-\n                  TxEncodeResponse is the response type for the\n                  Service.TxEncode method.\n\n                  Since: cosmos-sdk 0.47\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      requestBody:\n        content:\n          application/json:\n            schema:\n              type: object\n              properties:\n                tx:\n                  description: tx is the transaction to encode.\n                  type: object\n                  properties:\n                    body:\n                      title: body is the processable content of the transaction\n                      type: object\n                      properties:\n                        messages:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              type_url:\n                                type: string\n                              value:\n                                type: string\n                                format: byte\n                          description: >-\n                            messages is a list of messages to be executed. The\n                            required signers of\n\n                            those messages define the number and order of elements in AuthInfo's\n\n                            signer_infos and Tx's signatures. Each required signer address is added to\n\n                            the list only the first time it occurs.\n\n                            By convention, the first required signer (usually from the first message)\n\n                            is referred to as the primary signer and pays the fee for the whole\n\n                            transaction.\n                        memo:\n                          type: string\n                          description: >-\n                            memo is any arbitrary note/comment to be added to\n                            the transaction.\n\n                            WARNING: in clients, any publicly exposed text should not be called memo,\n\n                            but should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122).\n                        timeout_height:\n                          type: string\n                          format: uint64\n                          title: >-\n                            timeout is the block height after which this\n                            transaction will not\n\n                            be processed by the chain\n                        extension_options:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              type_url:\n                                type: string\n                              value:\n                                type: string\n                                format: byte\n                          title: >-\n                            extension_options are arbitrary options that can be\n                            added by chains\n\n                            when the default options are not sufficient. If any of these are present\n\n                            and can't be handled, the transaction will be rejected\n                        non_critical_extension_options:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              type_url:\n                                type: string\n                              value:\n                                type: string\n                                format: byte\n                          title: >-\n                            extension_options are arbitrary options that can be\n                            added by chains\n\n                            when the default options are not sufficient. If any of these are present\n\n                            and can't be handled, they will be ignored\n                      description: TxBody is the body of a transaction that all signers sign over.\n                    auth_info:\n                      title: >-\n                        auth_info is the authorization related content of the\n                        transaction,\n\n                        specifically signers, signer modes and fee\n                      type: object\n                      properties:\n                        signer_infos:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              public_key:\n                                type: object\n                                properties:\n                                  type_url:\n                                    type: string\n                                  value:\n                                    type: string\n                                    format: byte\n                                description: >-\n                                  public_key is the public key of the signer. It\n                                  is optional for accounts\n\n                                  that already exist in state. If unset, the verifier can use the required \\\n\n                                  signer address for this position and lookup the public key.\n                              mode_info:\n                                title: >-\n                                  mode_info describes the signing mode of the\n                                  signer and is a nested\n\n                                  structure to support nested multisig pubkey's\n                                type: object\n                                properties:\n                                  single:\n                                    title: single represents a single signer\n                                    type: object\n                                    properties:\n                                      mode:\n                                        title: mode is the signing mode of the single signer\n                                        type: string\n                                        enum:\n                                          - SIGN_MODE_UNSPECIFIED\n                                          - SIGN_MODE_DIRECT\n                                          - SIGN_MODE_TEXTUAL\n                                          - SIGN_MODE_DIRECT_AUX\n                                          - SIGN_MODE_LEGACY_AMINO_JSON\n                                          - SIGN_MODE_EIP_191\n                                        default: SIGN_MODE_UNSPECIFIED\n                                        description: >-\n                                          SignMode represents a signing mode\n                                          with its own security guarantees.\n\n\n                                          This enum should be considered a registry of all known sign modes\n\n                                          in the Cosmos ecosystem. Apps are not expected to support all known\n\n                                          sign modes. Apps that would like to support custom  sign modes are\n\n                                          encouraged to open a small PR against this file to add a new case\n\n                                          to this SignMode enum describing their sign mode so that different\n\n                                          apps have a consistent version of this enum.\n\n                                           - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                          rejected.\n                                           - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                          verified with raw bytes from Tx.\n                                           - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                          human-readable textual representation on top of the binary representation\n\n                                          from SIGN_MODE_DIRECT. It is currently not supported.\n                                           - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                          SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\n\n                                          require signers signing over other signers' `signer_info`. It also allows\n\n                                          for adding Tips in transactions.\n\n\n                                          Since: cosmos-sdk 0.46\n                                           - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                          Amino JSON and will be removed in the future.\n                                           - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                          SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                                          Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\n\n                                          but is not implemented on the SDK by default. To enable EIP-191, you need\n\n                                          to pass a custom `TxConfig` that has an implementation of\n\n                                          `SignModeHandler` for EIP-191. The SDK may decide to fully support\n\n                                          EIP-191 in the future.\n\n\n                                          Since: cosmos-sdk 0.45.2\n                                  multi:\n                                    title: multi represents a nested multisig signer\n                                    type: object\n                                    properties:\n                                      bitarray:\n                                        title: bitarray specifies which keys within the multisig are signing\n                                        type: object\n                                        properties:\n                                          extra_bits_stored:\n                                            type: integer\n                                            format: int64\n                                          elems:\n                                            type: string\n                                            format: byte\n                                        description: >-\n                                          CompactBitArray is an implementation\n                                          of a space efficient bit array.\n\n                                          This is used to ensure that the encoded data takes up a minimal amount of\n\n                                          space after proto encoding.\n\n                                          This is not thread safe, and is not intended for concurrent usage.\n                                      mode_infos:\n                                        type: array\n                                        items: {}\n                                        title: >-\n                                          mode_infos is the corresponding modes\n                                          of the signers of the multisig\n\n                                          which could include nested multisig public keys\n                                description: ModeInfo describes the signing mode of a single or nested multisig\n                                  signer.\n                              sequence:\n                                type: string\n                                format: uint64\n                                description: >-\n                                  sequence is the sequence of the account, which\n                                  describes the\n\n                                  number of committed transactions signed by a given address. It is used to\n\n                                  prevent replay attacks.\n                            description: >-\n                              SignerInfo describes the public key and signing\n                              mode of a single top-level\n\n                              signer.\n                          description: >-\n                            signer_infos defines the signing modes for the\n                            required signers. The number\n\n                            and order of elements must match the required signers from TxBody's\n\n                            messages. The first element is the primary signer and the one which pays\n\n                            the fee.\n                        fee:\n                          description: >-\n                            Fee is the fee and gas limit for the transaction.\n                            The first signer is the\n\n                            primary signer and the one which pays the fee. The fee can be calculated\n\n                            based on the cost of evaluating the body and doing signature verification\n\n                            of the signers. This can be estimated via simulation.\n                          type: object\n                          properties:\n                            amount:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  denom:\n                                    type: string\n                                  amount:\n                                    type: string\n                                description: >-\n                                  Coin defines a token with a denomination and\n                                  an amount.\n\n\n                                  NOTE: The amount field is an Int which implements the custom method\n\n                                  signatures required by gogoproto.\n                              title: amount is the amount of coins to be paid as a fee\n                            gas_limit:\n                              type: string\n                              format: uint64\n                              title: >-\n                                gas_limit is the maximum gas that can be used in\n                                transaction processing\n\n                                before an out of gas error occurs\n                            payer:\n                              type: string\n                              description: >-\n                                if unset, the first signer is responsible for\n                                paying the fees. If set, the specified account\n                                must pay the fees.\n\n                                the payer must be a tx signer (and thus have signed this field in AuthInfo).\n\n                                setting this field does *not* change the ordering of required signers for the transaction.\n                            granter:\n                              type: string\n                              title: >-\n                                if set, the fee payer (either the first signer\n                                or the value of the payer field) requests that a\n                                fee grant be used\n\n                                to pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\n\n                                not support fee grants, this will fail\n                        tip:\n                          description: >-\n                            Tip is the optional tip used for transactions fees\n                            paid in another denom.\n\n\n                            This field is ignored if the chain didn't enable tips, i.e. didn't add the\n\n                            `TipDecorator` in its posthandler.\n\n\n                            Since: cosmos-sdk 0.46\n                          type: object\n                          properties:\n                            amount:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  denom:\n                                    type: string\n                                  amount:\n                                    type: string\n                                description: >-\n                                  Coin defines a token with a denomination and\n                                  an amount.\n\n\n                                  NOTE: The amount field is an Int which implements the custom method\n\n                                  signatures required by gogoproto.\n                              title: amount is the amount of the tip\n                            tipper:\n                              type: string\n                              title: tipper is the address of the account paying for the tip\n                      description: >-\n                        AuthInfo describes the fee and signer modes that are\n                        used to sign a\n\n                        transaction.\n                    signatures:\n                      type: array\n                      items:\n                        type: string\n                        format: byte\n                      description: >-\n                        signatures is a list of signatures that matches the\n                        length and order of\n\n                        AuthInfo's signer_infos to allow connecting signature meta information like\n\n                        public key and signing mode by position.\n              description: |-\n                TxEncodeRequest is the request type for the Service.TxEncode\n                RPC method.\n\n                Since: cosmos-sdk 0.47\n        required: true\n      tags:\n        - gRPC Gateway API\n  /cosmos/tx/v1beta1/encode/amino:\n    post:\n      summary: TxEncodeAmino encodes an Amino transaction from JSON to encoded bytes.\n      description: \"Since: cosmos-sdk 0.47\"\n      operationId: TxEncodeAmino_4NFNG\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  amino_binary:\n                    type: string\n                    format: byte\n                description: >-\n                  TxEncodeAminoResponse is the response type for the\n                  Service.TxEncodeAmino\n\n                  RPC method.\n\n\n                  Since: cosmos-sdk 0.47\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      requestBody:\n        content:\n          application/json:\n            schema:\n              type: object\n              properties:\n                amino_json:\n                  type: string\n              description: >-\n                TxEncodeAminoRequest is the request type for the\n                Service.TxEncodeAmino\n\n                RPC method.\n\n\n                Since: cosmos-sdk 0.47\n        required: true\n      tags:\n        - gRPC Gateway API\n  /cosmos/tx/v1beta1/simulate:\n    post:\n      summary: Simulate simulates executing a transaction for estimating gas usage.\n      operationId: Simulate_UY2GZ\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  gas_info:\n                    description: gas_info is the information about gas used in the simulation.\n                    type: object\n                    properties:\n                      gas_wanted:\n                        type: string\n                        format: uint64\n                        description: GasWanted is the maximum units of work we allow this tx to perform.\n                      gas_used:\n                        type: string\n                        format: uint64\n                        description: GasUsed is the amount of gas actually consumed.\n                  result:\n                    description: result is the result of the simulation.\n                    type: object\n                    properties:\n                      data:\n                        type: string\n                        format: byte\n                        description: >-\n                          Data is any data returned from message or handler\n                          execution. It MUST be\n\n                          length prefixed in order to separate data from multiple message executions.\n\n                          Deprecated. This field is still populated, but prefer msg_response instead\n\n                          because it also contains the Msg response typeURL.\n                      log:\n                        type: string\n                        description: Log contains the log information from message or handler execution.\n                      events:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            type:\n                              type: string\n                            attributes:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  key:\n                                    type: string\n                                  value:\n                                    type: string\n                                  index:\n                                    type: boolean\n                                description: EventAttribute is a single key-value pair, associated with an\n                                  event.\n                          description: >-\n                            Event allows application developers to attach\n                            additional information to\n\n                            ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and ResponseDeliverTx.\n\n                            Later, transactions may be queried using these events.\n                        description: >-\n                          Events contains a slice of Event objects that were\n                          emitted during message\n\n                          or handler execution.\n                      msg_responses:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                        description: >-\n                          msg_responses contains the Msg handler responses type\n                          packed in Anys.\n\n\n                          Since: cosmos-sdk 0.46\n                description: |-\n                  SimulateResponse is the response type for the\n                  Service.SimulateRPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      requestBody:\n        content:\n          application/json:\n            schema:\n              type: object\n              properties:\n                tx:\n                  description: |-\n                    tx is the transaction to simulate.\n                    Deprecated. Send raw tx bytes instead.\n                  type: object\n                  properties:\n                    body:\n                      title: body is the processable content of the transaction\n                      type: object\n                      properties:\n                        messages:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              type_url:\n                                type: string\n                              value:\n                                type: string\n                                format: byte\n                          description: >-\n                            messages is a list of messages to be executed. The\n                            required signers of\n\n                            those messages define the number and order of elements in AuthInfo's\n\n                            signer_infos and Tx's signatures. Each required signer address is added to\n\n                            the list only the first time it occurs.\n\n                            By convention, the first required signer (usually from the first message)\n\n                            is referred to as the primary signer and pays the fee for the whole\n\n                            transaction.\n                        memo:\n                          type: string\n                          description: >-\n                            memo is any arbitrary note/comment to be added to\n                            the transaction.\n\n                            WARNING: in clients, any publicly exposed text should not be called memo,\n\n                            but should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122).\n                        timeout_height:\n                          type: string\n                          format: uint64\n                          title: >-\n                            timeout is the block height after which this\n                            transaction will not\n\n                            be processed by the chain\n                        extension_options:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              type_url:\n                                type: string\n                              value:\n                                type: string\n                                format: byte\n                          title: >-\n                            extension_options are arbitrary options that can be\n                            added by chains\n\n                            when the default options are not sufficient. If any of these are present\n\n                            and can't be handled, the transaction will be rejected\n                        non_critical_extension_options:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              type_url:\n                                type: string\n                              value:\n                                type: string\n                                format: byte\n                          title: >-\n                            extension_options are arbitrary options that can be\n                            added by chains\n\n                            when the default options are not sufficient. If any of these are present\n\n                            and can't be handled, they will be ignored\n                      description: TxBody is the body of a transaction that all signers sign over.\n                    auth_info:\n                      title: >-\n                        auth_info is the authorization related content of the\n                        transaction,\n\n                        specifically signers, signer modes and fee\n                      type: object\n                      properties:\n                        signer_infos:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              public_key:\n                                type: object\n                                properties:\n                                  type_url:\n                                    type: string\n                                  value:\n                                    type: string\n                                    format: byte\n                                description: >-\n                                  public_key is the public key of the signer. It\n                                  is optional for accounts\n\n                                  that already exist in state. If unset, the verifier can use the required \\\n\n                                  signer address for this position and lookup the public key.\n                              mode_info:\n                                title: >-\n                                  mode_info describes the signing mode of the\n                                  signer and is a nested\n\n                                  structure to support nested multisig pubkey's\n                                type: object\n                                properties:\n                                  single:\n                                    title: single represents a single signer\n                                    type: object\n                                    properties:\n                                      mode:\n                                        title: mode is the signing mode of the single signer\n                                        type: string\n                                        enum:\n                                          - SIGN_MODE_UNSPECIFIED\n                                          - SIGN_MODE_DIRECT\n                                          - SIGN_MODE_TEXTUAL\n                                          - SIGN_MODE_DIRECT_AUX\n                                          - SIGN_MODE_LEGACY_AMINO_JSON\n                                          - SIGN_MODE_EIP_191\n                                        default: SIGN_MODE_UNSPECIFIED\n                                        description: >-\n                                          SignMode represents a signing mode\n                                          with its own security guarantees.\n\n\n                                          This enum should be considered a registry of all known sign modes\n\n                                          in the Cosmos ecosystem. Apps are not expected to support all known\n\n                                          sign modes. Apps that would like to support custom  sign modes are\n\n                                          encouraged to open a small PR against this file to add a new case\n\n                                          to this SignMode enum describing their sign mode so that different\n\n                                          apps have a consistent version of this enum.\n\n                                           - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                          rejected.\n                                           - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                          verified with raw bytes from Tx.\n                                           - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                          human-readable textual representation on top of the binary representation\n\n                                          from SIGN_MODE_DIRECT. It is currently not supported.\n                                           - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                          SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\n\n                                          require signers signing over other signers' `signer_info`. It also allows\n\n                                          for adding Tips in transactions.\n\n\n                                          Since: cosmos-sdk 0.46\n                                           - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                          Amino JSON and will be removed in the future.\n                                           - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                          SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                                          Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\n\n                                          but is not implemented on the SDK by default. To enable EIP-191, you need\n\n                                          to pass a custom `TxConfig` that has an implementation of\n\n                                          `SignModeHandler` for EIP-191. The SDK may decide to fully support\n\n                                          EIP-191 in the future.\n\n\n                                          Since: cosmos-sdk 0.45.2\n                                  multi:\n                                    title: multi represents a nested multisig signer\n                                    type: object\n                                    properties:\n                                      bitarray:\n                                        title: bitarray specifies which keys within the multisig are signing\n                                        type: object\n                                        properties:\n                                          extra_bits_stored:\n                                            type: integer\n                                            format: int64\n                                          elems:\n                                            type: string\n                                            format: byte\n                                        description: >-\n                                          CompactBitArray is an implementation\n                                          of a space efficient bit array.\n\n                                          This is used to ensure that the encoded data takes up a minimal amount of\n\n                                          space after proto encoding.\n\n                                          This is not thread safe, and is not intended for concurrent usage.\n                                      mode_infos:\n                                        type: array\n                                        items: {}\n                                        title: >-\n                                          mode_infos is the corresponding modes\n                                          of the signers of the multisig\n\n                                          which could include nested multisig public keys\n                                description: ModeInfo describes the signing mode of a single or nested multisig\n                                  signer.\n                              sequence:\n                                type: string\n                                format: uint64\n                                description: >-\n                                  sequence is the sequence of the account, which\n                                  describes the\n\n                                  number of committed transactions signed by a given address. It is used to\n\n                                  prevent replay attacks.\n                            description: >-\n                              SignerInfo describes the public key and signing\n                              mode of a single top-level\n\n                              signer.\n                          description: >-\n                            signer_infos defines the signing modes for the\n                            required signers. The number\n\n                            and order of elements must match the required signers from TxBody's\n\n                            messages. The first element is the primary signer and the one which pays\n\n                            the fee.\n                        fee:\n                          description: >-\n                            Fee is the fee and gas limit for the transaction.\n                            The first signer is the\n\n                            primary signer and the one which pays the fee. The fee can be calculated\n\n                            based on the cost of evaluating the body and doing signature verification\n\n                            of the signers. This can be estimated via simulation.\n                          type: object\n                          properties:\n                            amount:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  denom:\n                                    type: string\n                                  amount:\n                                    type: string\n                                description: >-\n                                  Coin defines a token with a denomination and\n                                  an amount.\n\n\n                                  NOTE: The amount field is an Int which implements the custom method\n\n                                  signatures required by gogoproto.\n                              title: amount is the amount of coins to be paid as a fee\n                            gas_limit:\n                              type: string\n                              format: uint64\n                              title: >-\n                                gas_limit is the maximum gas that can be used in\n                                transaction processing\n\n                                before an out of gas error occurs\n                            payer:\n                              type: string\n                              description: >-\n                                if unset, the first signer is responsible for\n                                paying the fees. If set, the specified account\n                                must pay the fees.\n\n                                the payer must be a tx signer (and thus have signed this field in AuthInfo).\n\n                                setting this field does *not* change the ordering of required signers for the transaction.\n                            granter:\n                              type: string\n                              title: >-\n                                if set, the fee payer (either the first signer\n                                or the value of the payer field) requests that a\n                                fee grant be used\n\n                                to pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\n\n                                not support fee grants, this will fail\n                        tip:\n                          description: >-\n                            Tip is the optional tip used for transactions fees\n                            paid in another denom.\n\n\n                            This field is ignored if the chain didn't enable tips, i.e. didn't add the\n\n                            `TipDecorator` in its posthandler.\n\n\n                            Since: cosmos-sdk 0.46\n                          type: object\n                          properties:\n                            amount:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  denom:\n                                    type: string\n                                  amount:\n                                    type: string\n                                description: >-\n                                  Coin defines a token with a denomination and\n                                  an amount.\n\n\n                                  NOTE: The amount field is an Int which implements the custom method\n\n                                  signatures required by gogoproto.\n                              title: amount is the amount of the tip\n                            tipper:\n                              type: string\n                              title: tipper is the address of the account paying for the tip\n                      description: >-\n                        AuthInfo describes the fee and signer modes that are\n                        used to sign a\n\n                        transaction.\n                    signatures:\n                      type: array\n                      items:\n                        type: string\n                        format: byte\n                      description: >-\n                        signatures is a list of signatures that matches the\n                        length and order of\n\n                        AuthInfo's signer_infos to allow connecting signature meta information like\n\n                        public key and signing mode by position.\n                tx_bytes:\n                  type: string\n                  format: byte\n                  description: |-\n                    tx_bytes is the raw transaction.\n\n                    Since: cosmos-sdk 0.43\n              description: |-\n                SimulateRequest is the request type for the Service.Simulate\n                RPC method.\n        required: true\n      tags:\n        - gRPC Gateway API\n  /cosmos/tx/v1beta1/txs:\n    get:\n      summary: GetTxsEvent fetches txs by event.\n      operationId: GetTxsEvent_KWYMH\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  txs:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        body:\n                          title: body is the processable content of the transaction\n                          type: object\n                          properties:\n                            messages:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  type_url:\n                                    type: string\n                                  value:\n                                    type: string\n                                    format: byte\n                              description: >-\n                                messages is a list of messages to be executed.\n                                The required signers of\n\n                                those messages define the number and order of elements in AuthInfo's\n\n                                signer_infos and Tx's signatures. Each required signer address is added to\n\n                                the list only the first time it occurs.\n\n                                By convention, the first required signer (usually from the first message)\n\n                                is referred to as the primary signer and pays the fee for the whole\n\n                                transaction.\n                            memo:\n                              type: string\n                              description: >-\n                                memo is any arbitrary note/comment to be added\n                                to the transaction.\n\n                                WARNING: in clients, any publicly exposed text should not be called memo,\n\n                                but should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122).\n                            timeout_height:\n                              type: string\n                              format: uint64\n                              title: >-\n                                timeout is the block height after which this\n                                transaction will not\n\n                                be processed by the chain\n                            extension_options:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  type_url:\n                                    type: string\n                                  value:\n                                    type: string\n                                    format: byte\n                              title: >-\n                                extension_options are arbitrary options that can\n                                be added by chains\n\n                                when the default options are not sufficient. If any of these are present\n\n                                and can't be handled, the transaction will be rejected\n                            non_critical_extension_options:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  type_url:\n                                    type: string\n                                  value:\n                                    type: string\n                                    format: byte\n                              title: >-\n                                extension_options are arbitrary options that can\n                                be added by chains\n\n                                when the default options are not sufficient. If any of these are present\n\n                                and can't be handled, they will be ignored\n                          description: TxBody is the body of a transaction that all signers sign over.\n                        auth_info:\n                          title: >-\n                            auth_info is the authorization related content of\n                            the transaction,\n\n                            specifically signers, signer modes and fee\n                          type: object\n                          properties:\n                            signer_infos:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  public_key:\n                                    type: object\n                                    properties:\n                                      type_url:\n                                        type: string\n                                      value:\n                                        type: string\n                                        format: byte\n                                    description: >-\n                                      public_key is the public key of the\n                                      signer. It is optional for accounts\n\n                                      that already exist in state. If unset, the verifier can use the required \\\n\n                                      signer address for this position and lookup the public key.\n                                  mode_info:\n                                    title: >-\n                                      mode_info describes the signing mode of\n                                      the signer and is a nested\n\n                                      structure to support nested multisig pubkey's\n                                    type: object\n                                    properties:\n                                      single:\n                                        title: single represents a single signer\n                                        type: object\n                                        properties:\n                                          mode:\n                                            title: mode is the signing mode of the single signer\n                                            type: string\n                                            enum:\n                                              - SIGN_MODE_UNSPECIFIED\n                                              - SIGN_MODE_DIRECT\n                                              - SIGN_MODE_TEXTUAL\n                                              - SIGN_MODE_DIRECT_AUX\n                                              - SIGN_MODE_LEGACY_AMINO_JSON\n                                              - SIGN_MODE_EIP_191\n                                            default: SIGN_MODE_UNSPECIFIED\n                                            description: >-\n                                              SignMode represents a signing mode\n                                              with its own security guarantees.\n\n\n                                              This enum should be considered a registry of all known sign modes\n\n                                              in the Cosmos ecosystem. Apps are not expected to support all known\n\n                                              sign modes. Apps that would like to support custom  sign modes are\n\n                                              encouraged to open a small PR against this file to add a new case\n\n                                              to this SignMode enum describing their sign mode so that different\n\n                                              apps have a consistent version of this enum.\n\n                                               - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                              rejected.\n                                               - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                              verified with raw bytes from Tx.\n                                               - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                              human-readable textual representation on top of the binary representation\n\n                                              from SIGN_MODE_DIRECT. It is currently not supported.\n                                               - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                              SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\n\n                                              require signers signing over other signers' `signer_info`. It also allows\n\n                                              for adding Tips in transactions.\n\n\n                                              Since: cosmos-sdk 0.46\n                                               - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                              Amino JSON and will be removed in the future.\n                                               - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                              SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                                              Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\n\n                                              but is not implemented on the SDK by default. To enable EIP-191, you need\n\n                                              to pass a custom `TxConfig` that has an implementation of\n\n                                              `SignModeHandler` for EIP-191. The SDK may decide to fully support\n\n                                              EIP-191 in the future.\n\n\n                                              Since: cosmos-sdk 0.45.2\n                                      multi:\n                                        title: multi represents a nested multisig signer\n                                        type: object\n                                        properties:\n                                          bitarray:\n                                            title: bitarray specifies which keys within the multisig are signing\n                                            type: object\n                                            properties:\n                                              extra_bits_stored:\n                                                type: integer\n                                                format: int64\n                                              elems:\n                                                type: string\n                                                format: byte\n                                            description: >-\n                                              CompactBitArray is an\n                                              implementation of a space\n                                              efficient bit array.\n\n                                              This is used to ensure that the encoded data takes up a minimal amount of\n\n                                              space after proto encoding.\n\n                                              This is not thread safe, and is not intended for concurrent usage.\n                                          mode_infos:\n                                            type: array\n                                            items: {}\n                                            title: >-\n                                              mode_infos is the corresponding\n                                              modes of the signers of the\n                                              multisig\n\n                                              which could include nested multisig public keys\n                                    description: ModeInfo describes the signing mode of a single or nested multisig\n                                      signer.\n                                  sequence:\n                                    type: string\n                                    format: uint64\n                                    description: >-\n                                      sequence is the sequence of the account,\n                                      which describes the\n\n                                      number of committed transactions signed by a given address. It is used to\n\n                                      prevent replay attacks.\n                                description: >-\n                                  SignerInfo describes the public key and\n                                  signing mode of a single top-level\n\n                                  signer.\n                              description: >-\n                                signer_infos defines the signing modes for the\n                                required signers. The number\n\n                                and order of elements must match the required signers from TxBody's\n\n                                messages. The first element is the primary signer and the one which pays\n\n                                the fee.\n                            fee:\n                              description: >-\n                                Fee is the fee and gas limit for the\n                                transaction. The first signer is the\n\n                                primary signer and the one which pays the fee. The fee can be calculated\n\n                                based on the cost of evaluating the body and doing signature verification\n\n                                of the signers. This can be estimated via simulation.\n                              type: object\n                              properties:\n                                amount:\n                                  type: array\n                                  items:\n                                    type: object\n                                    properties:\n                                      denom:\n                                        type: string\n                                      amount:\n                                        type: string\n                                    description: >-\n                                      Coin defines a token with a denomination\n                                      and an amount.\n\n\n                                      NOTE: The amount field is an Int which implements the custom method\n\n                                      signatures required by gogoproto.\n                                  title: amount is the amount of coins to be paid as a fee\n                                gas_limit:\n                                  type: string\n                                  format: uint64\n                                  title: >-\n                                    gas_limit is the maximum gas that can be\n                                    used in transaction processing\n\n                                    before an out of gas error occurs\n                                payer:\n                                  type: string\n                                  description: >-\n                                    if unset, the first signer is responsible\n                                    for paying the fees. If set, the specified\n                                    account must pay the fees.\n\n                                    the payer must be a tx signer (and thus have signed this field in AuthInfo).\n\n                                    setting this field does *not* change the ordering of required signers for the transaction.\n                                granter:\n                                  type: string\n                                  title: >-\n                                    if set, the fee payer (either the first\n                                    signer or the value of the payer field)\n                                    requests that a fee grant be used\n\n                                    to pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\n\n                                    not support fee grants, this will fail\n                            tip:\n                              description: >-\n                                Tip is the optional tip used for transactions\n                                fees paid in another denom.\n\n\n                                This field is ignored if the chain didn't enable tips, i.e. didn't add the\n\n                                `TipDecorator` in its posthandler.\n\n\n                                Since: cosmos-sdk 0.46\n                              type: object\n                              properties:\n                                amount:\n                                  type: array\n                                  items:\n                                    type: object\n                                    properties:\n                                      denom:\n                                        type: string\n                                      amount:\n                                        type: string\n                                    description: >-\n                                      Coin defines a token with a denomination\n                                      and an amount.\n\n\n                                      NOTE: The amount field is an Int which implements the custom method\n\n                                      signatures required by gogoproto.\n                                  title: amount is the amount of the tip\n                                tipper:\n                                  type: string\n                                  title: tipper is the address of the account paying for the tip\n                          description: >-\n                            AuthInfo describes the fee and signer modes that are\n                            used to sign a\n\n                            transaction.\n                        signatures:\n                          type: array\n                          items:\n                            type: string\n                            format: byte\n                          description: >-\n                            signatures is a list of signatures that matches the\n                            length and order of\n\n                            AuthInfo's signer_infos to allow connecting signature meta information like\n\n                            public key and signing mode by position.\n                      description: Tx is the standard type used for broadcasting transactions.\n                    description: txs is the list of queried transactions.\n                  tx_responses:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        height:\n                          type: string\n                          format: int64\n                          title: The block height\n                        txhash:\n                          type: string\n                          description: The transaction hash.\n                        codespace:\n                          type: string\n                          title: Namespace for the Code\n                        code:\n                          type: integer\n                          format: int64\n                          description: Response code.\n                        data:\n                          type: string\n                          description: Result bytes, if any.\n                        raw_log:\n                          type: string\n                          description: >-\n                            The output of the application's logger (raw string).\n                            May be\n\n                            non-deterministic.\n                        logs:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              msg_index:\n                                type: integer\n                                format: int64\n                              log:\n                                type: string\n                              events:\n                                type: array\n                                items:\n                                  type: object\n                                  properties:\n                                    type:\n                                      type: string\n                                    attributes:\n                                      type: array\n                                      items:\n                                        type: object\n                                        properties:\n                                          key:\n                                            type: string\n                                          value:\n                                            type: string\n                                        description: >-\n                                          Attribute defines an attribute wrapper\n                                          where the key and value are\n\n                                          strings instead of raw bytes.\n                                  description: >-\n                                    StringEvent defines en Event object wrapper\n                                    where all the attributes\n\n                                    contain key/value pairs that are strings instead of raw bytes.\n                                description: >-\n                                  Events contains a slice of Event objects that\n                                  were emitted during some\n\n                                  execution.\n                            description: ABCIMessageLog defines a structure containing an indexed tx ABCI\n                              message log.\n                          description: The output of the application's logger (typed). May be\n                            non-deterministic.\n                        info:\n                          type: string\n                          description: Additional information. May be non-deterministic.\n                        gas_wanted:\n                          type: string\n                          format: int64\n                          description: Amount of gas requested for transaction.\n                        gas_used:\n                          type: string\n                          format: int64\n                          description: Amount of gas consumed by transaction.\n                        tx:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                          description: The request transaction bytes.\n                        timestamp:\n                          type: string\n                          description: >-\n                            Time of the previous block. For heights > 1, it's\n                            the weighted median of\n\n                            the timestamps of the valid votes in the block.LastCommit. For height == 1,\n\n                            it's genesis time.\n                        events:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              type:\n                                type: string\n                              attributes:\n                                type: array\n                                items:\n                                  type: object\n                                  properties:\n                                    key:\n                                      type: string\n                                    value:\n                                      type: string\n                                    index:\n                                      type: boolean\n                                  description: EventAttribute is a single key-value pair, associated with an\n                                    event.\n                            description: >-\n                              Event allows application developers to attach\n                              additional information to\n\n                              ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and ResponseDeliverTx.\n\n                              Later, transactions may be queried using these events.\n                          description: >-\n                            Events defines all the events emitted by processing\n                            a transaction. Note,\n\n                            these events include those emitted by processing all the messages and those\n\n                            emitted from the ante. Whereas Logs contains the events, with\n\n                            additional metadata, emitted only by processing the messages.\n\n\n                            Since: cosmos-sdk 0.42.11, 0.44.5, 0.45\n                      description: >-\n                        TxResponse defines a structure containing relevant tx\n                        data and metadata. The\n\n                        tags are stringified and the log is JSON decoded.\n                    description: tx_responses is the list of queried TxResponses.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                  total:\n                    type: string\n                    format: uint64\n                    title: total is total number of results available\n                description: >-\n                  GetTxsEventResponse is the response type for the\n                  Service.TxsByEvents\n\n                  RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: events\n          description: events is the list of transaction event type.\n          in: query\n          required: false\n          explode: true\n          schema:\n            type: array\n            items:\n              type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: order_by\n          description: >-2\n             - ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults to ASC in this case.\n             - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order\n             - ORDER_BY_DESC: ORDER_BY_DESC defines descending order\n          in: query\n          required: false\n          schema:\n            type: string\n            enum:\n              - ORDER_BY_UNSPECIFIED\n              - ORDER_BY_ASC\n              - ORDER_BY_DESC\n            default: ORDER_BY_UNSPECIFIED\n        - name: page\n          description: page is the page number to query, starts at 1. If not provided,\n            will default to first page.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n    post:\n      summary: BroadcastTx broadcast transaction.\n      operationId: BroadcastTx_N4T1X\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  tx_response:\n                    type: object\n                    properties:\n                      height:\n                        type: string\n                        format: int64\n                        title: The block height\n                      txhash:\n                        type: string\n                        description: The transaction hash.\n                      codespace:\n                        type: string\n                        title: Namespace for the Code\n                      code:\n                        type: integer\n                        format: int64\n                        description: Response code.\n                      data:\n                        type: string\n                        description: Result bytes, if any.\n                      raw_log:\n                        type: string\n                        description: >-\n                          The output of the application's logger (raw string).\n                          May be\n\n                          non-deterministic.\n                      logs:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            msg_index:\n                              type: integer\n                              format: int64\n                            log:\n                              type: string\n                            events:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  type:\n                                    type: string\n                                  attributes:\n                                    type: array\n                                    items:\n                                      type: object\n                                      properties:\n                                        key:\n                                          type: string\n                                        value:\n                                          type: string\n                                      description: >-\n                                        Attribute defines an attribute wrapper\n                                        where the key and value are\n\n                                        strings instead of raw bytes.\n                                description: >-\n                                  StringEvent defines en Event object wrapper\n                                  where all the attributes\n\n                                  contain key/value pairs that are strings instead of raw bytes.\n                              description: >-\n                                Events contains a slice of Event objects that\n                                were emitted during some\n\n                                execution.\n                          description: ABCIMessageLog defines a structure containing an indexed tx ABCI\n                            message log.\n                        description: The output of the application's logger (typed). May be\n                          non-deterministic.\n                      info:\n                        type: string\n                        description: Additional information. May be non-deterministic.\n                      gas_wanted:\n                        type: string\n                        format: int64\n                        description: Amount of gas requested for transaction.\n                      gas_used:\n                        type: string\n                        format: int64\n                        description: Amount of gas consumed by transaction.\n                      tx:\n                        type: object\n                        properties:\n                          type_url:\n                            type: string\n                          value:\n                            type: string\n                            format: byte\n                        description: The request transaction bytes.\n                      timestamp:\n                        type: string\n                        description: >-\n                          Time of the previous block. For heights > 1, it's the\n                          weighted median of\n\n                          the timestamps of the valid votes in the block.LastCommit. For height == 1,\n\n                          it's genesis time.\n                      events:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            type:\n                              type: string\n                            attributes:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  key:\n                                    type: string\n                                  value:\n                                    type: string\n                                  index:\n                                    type: boolean\n                                description: EventAttribute is a single key-value pair, associated with an\n                                  event.\n                          description: >-\n                            Event allows application developers to attach\n                            additional information to\n\n                            ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and ResponseDeliverTx.\n\n                            Later, transactions may be queried using these events.\n                        description: >-\n                          Events defines all the events emitted by processing a\n                          transaction. Note,\n\n                          these events include those emitted by processing all the messages and those\n\n                          emitted from the ante. Whereas Logs contains the events, with\n\n                          additional metadata, emitted only by processing the messages.\n\n\n                          Since: cosmos-sdk 0.42.11, 0.44.5, 0.45\n                    description: >-\n                      TxResponse defines a structure containing relevant tx data\n                      and metadata. The\n\n                      tags are stringified and the log is JSON decoded.\n                description: |-\n                  BroadcastTxResponse is the response type for the\n                  Service.BroadcastTx method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      requestBody:\n        content:\n          application/json:\n            schema:\n              type: object\n              properties:\n                tx_bytes:\n                  type: string\n                  format: byte\n                  description: tx_bytes is the raw transaction.\n                mode:\n                  type: string\n                  enum:\n                    - BROADCAST_MODE_UNSPECIFIED\n                    - BROADCAST_MODE_BLOCK\n                    - BROADCAST_MODE_SYNC\n                    - BROADCAST_MODE_ASYNC\n                  default: BROADCAST_MODE_UNSPECIFIED\n                  description: >-\n                    BroadcastMode specifies the broadcast mode for the\n                    TxService.Broadcast RPC method.\n\n                     - BROADCAST_MODE_UNSPECIFIED: zero-value for mode ordering\n                     - BROADCAST_MODE_BLOCK: DEPRECATED: use BROADCAST_MODE_SYNC instead,\n                    BROADCAST_MODE_BLOCK is not supported by the SDK from v0.47.x onwards.\n                     - BROADCAST_MODE_SYNC: BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits for\n                    a CheckTx execution response only.\n                     - BROADCAST_MODE_ASYNC: BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client returns\n                    immediately.\n              description: >-\n                BroadcastTxRequest is the request type for the\n                Service.BroadcastTxRequest\n\n                RPC method.\n        required: true\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/tx/v1beta1/txs/block/{height}\":\n    get:\n      summary: GetBlockWithTxs fetches a block with decoded txs.\n      description: \"Since: cosmos-sdk 0.45.2\"\n      operationId: GetBlockWithTxs_1EZ44\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  txs:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        body:\n                          title: body is the processable content of the transaction\n                          type: object\n                          properties:\n                            messages:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  type_url:\n                                    type: string\n                                  value:\n                                    type: string\n                                    format: byte\n                              description: >-\n                                messages is a list of messages to be executed.\n                                The required signers of\n\n                                those messages define the number and order of elements in AuthInfo's\n\n                                signer_infos and Tx's signatures. Each required signer address is added to\n\n                                the list only the first time it occurs.\n\n                                By convention, the first required signer (usually from the first message)\n\n                                is referred to as the primary signer and pays the fee for the whole\n\n                                transaction.\n                            memo:\n                              type: string\n                              description: >-\n                                memo is any arbitrary note/comment to be added\n                                to the transaction.\n\n                                WARNING: in clients, any publicly exposed text should not be called memo,\n\n                                but should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122).\n                            timeout_height:\n                              type: string\n                              format: uint64\n                              title: >-\n                                timeout is the block height after which this\n                                transaction will not\n\n                                be processed by the chain\n                            extension_options:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  type_url:\n                                    type: string\n                                  value:\n                                    type: string\n                                    format: byte\n                              title: >-\n                                extension_options are arbitrary options that can\n                                be added by chains\n\n                                when the default options are not sufficient. If any of these are present\n\n                                and can't be handled, the transaction will be rejected\n                            non_critical_extension_options:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  type_url:\n                                    type: string\n                                  value:\n                                    type: string\n                                    format: byte\n                              title: >-\n                                extension_options are arbitrary options that can\n                                be added by chains\n\n                                when the default options are not sufficient. If any of these are present\n\n                                and can't be handled, they will be ignored\n                          description: TxBody is the body of a transaction that all signers sign over.\n                        auth_info:\n                          title: >-\n                            auth_info is the authorization related content of\n                            the transaction,\n\n                            specifically signers, signer modes and fee\n                          type: object\n                          properties:\n                            signer_infos:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  public_key:\n                                    type: object\n                                    properties:\n                                      type_url:\n                                        type: string\n                                      value:\n                                        type: string\n                                        format: byte\n                                    description: >-\n                                      public_key is the public key of the\n                                      signer. It is optional for accounts\n\n                                      that already exist in state. If unset, the verifier can use the required \\\n\n                                      signer address for this position and lookup the public key.\n                                  mode_info:\n                                    title: >-\n                                      mode_info describes the signing mode of\n                                      the signer and is a nested\n\n                                      structure to support nested multisig pubkey's\n                                    type: object\n                                    properties:\n                                      single:\n                                        title: single represents a single signer\n                                        type: object\n                                        properties:\n                                          mode:\n                                            title: mode is the signing mode of the single signer\n                                            type: string\n                                            enum:\n                                              - SIGN_MODE_UNSPECIFIED\n                                              - SIGN_MODE_DIRECT\n                                              - SIGN_MODE_TEXTUAL\n                                              - SIGN_MODE_DIRECT_AUX\n                                              - SIGN_MODE_LEGACY_AMINO_JSON\n                                              - SIGN_MODE_EIP_191\n                                            default: SIGN_MODE_UNSPECIFIED\n                                            description: >-\n                                              SignMode represents a signing mode\n                                              with its own security guarantees.\n\n\n                                              This enum should be considered a registry of all known sign modes\n\n                                              in the Cosmos ecosystem. Apps are not expected to support all known\n\n                                              sign modes. Apps that would like to support custom  sign modes are\n\n                                              encouraged to open a small PR against this file to add a new case\n\n                                              to this SignMode enum describing their sign mode so that different\n\n                                              apps have a consistent version of this enum.\n\n                                               - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                              rejected.\n                                               - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                              verified with raw bytes from Tx.\n                                               - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                              human-readable textual representation on top of the binary representation\n\n                                              from SIGN_MODE_DIRECT. It is currently not supported.\n                                               - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                              SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\n\n                                              require signers signing over other signers' `signer_info`. It also allows\n\n                                              for adding Tips in transactions.\n\n\n                                              Since: cosmos-sdk 0.46\n                                               - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                              Amino JSON and will be removed in the future.\n                                               - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                              SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                                              Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\n\n                                              but is not implemented on the SDK by default. To enable EIP-191, you need\n\n                                              to pass a custom `TxConfig` that has an implementation of\n\n                                              `SignModeHandler` for EIP-191. The SDK may decide to fully support\n\n                                              EIP-191 in the future.\n\n\n                                              Since: cosmos-sdk 0.45.2\n                                      multi:\n                                        title: multi represents a nested multisig signer\n                                        type: object\n                                        properties:\n                                          bitarray:\n                                            title: bitarray specifies which keys within the multisig are signing\n                                            type: object\n                                            properties:\n                                              extra_bits_stored:\n                                                type: integer\n                                                format: int64\n                                              elems:\n                                                type: string\n                                                format: byte\n                                            description: >-\n                                              CompactBitArray is an\n                                              implementation of a space\n                                              efficient bit array.\n\n                                              This is used to ensure that the encoded data takes up a minimal amount of\n\n                                              space after proto encoding.\n\n                                              This is not thread safe, and is not intended for concurrent usage.\n                                          mode_infos:\n                                            type: array\n                                            items: {}\n                                            title: >-\n                                              mode_infos is the corresponding\n                                              modes of the signers of the\n                                              multisig\n\n                                              which could include nested multisig public keys\n                                    description: ModeInfo describes the signing mode of a single or nested multisig\n                                      signer.\n                                  sequence:\n                                    type: string\n                                    format: uint64\n                                    description: >-\n                                      sequence is the sequence of the account,\n                                      which describes the\n\n                                      number of committed transactions signed by a given address. It is used to\n\n                                      prevent replay attacks.\n                                description: >-\n                                  SignerInfo describes the public key and\n                                  signing mode of a single top-level\n\n                                  signer.\n                              description: >-\n                                signer_infos defines the signing modes for the\n                                required signers. The number\n\n                                and order of elements must match the required signers from TxBody's\n\n                                messages. The first element is the primary signer and the one which pays\n\n                                the fee.\n                            fee:\n                              description: >-\n                                Fee is the fee and gas limit for the\n                                transaction. The first signer is the\n\n                                primary signer and the one which pays the fee. The fee can be calculated\n\n                                based on the cost of evaluating the body and doing signature verification\n\n                                of the signers. This can be estimated via simulation.\n                              type: object\n                              properties:\n                                amount:\n                                  type: array\n                                  items:\n                                    type: object\n                                    properties:\n                                      denom:\n                                        type: string\n                                      amount:\n                                        type: string\n                                    description: >-\n                                      Coin defines a token with a denomination\n                                      and an amount.\n\n\n                                      NOTE: The amount field is an Int which implements the custom method\n\n                                      signatures required by gogoproto.\n                                  title: amount is the amount of coins to be paid as a fee\n                                gas_limit:\n                                  type: string\n                                  format: uint64\n                                  title: >-\n                                    gas_limit is the maximum gas that can be\n                                    used in transaction processing\n\n                                    before an out of gas error occurs\n                                payer:\n                                  type: string\n                                  description: >-\n                                    if unset, the first signer is responsible\n                                    for paying the fees. If set, the specified\n                                    account must pay the fees.\n\n                                    the payer must be a tx signer (and thus have signed this field in AuthInfo).\n\n                                    setting this field does *not* change the ordering of required signers for the transaction.\n                                granter:\n                                  type: string\n                                  title: >-\n                                    if set, the fee payer (either the first\n                                    signer or the value of the payer field)\n                                    requests that a fee grant be used\n\n                                    to pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\n\n                                    not support fee grants, this will fail\n                            tip:\n                              description: >-\n                                Tip is the optional tip used for transactions\n                                fees paid in another denom.\n\n\n                                This field is ignored if the chain didn't enable tips, i.e. didn't add the\n\n                                `TipDecorator` in its posthandler.\n\n\n                                Since: cosmos-sdk 0.46\n                              type: object\n                              properties:\n                                amount:\n                                  type: array\n                                  items:\n                                    type: object\n                                    properties:\n                                      denom:\n                                        type: string\n                                      amount:\n                                        type: string\n                                    description: >-\n                                      Coin defines a token with a denomination\n                                      and an amount.\n\n\n                                      NOTE: The amount field is an Int which implements the custom method\n\n                                      signatures required by gogoproto.\n                                  title: amount is the amount of the tip\n                                tipper:\n                                  type: string\n                                  title: tipper is the address of the account paying for the tip\n                          description: >-\n                            AuthInfo describes the fee and signer modes that are\n                            used to sign a\n\n                            transaction.\n                        signatures:\n                          type: array\n                          items:\n                            type: string\n                            format: byte\n                          description: >-\n                            signatures is a list of signatures that matches the\n                            length and order of\n\n                            AuthInfo's signer_infos to allow connecting signature meta information like\n\n                            public key and signing mode by position.\n                      description: Tx is the standard type used for broadcasting transactions.\n                    description: txs are the transactions in the block.\n                  block_id:\n                    type: object\n                    properties:\n                      hash:\n                        type: string\n                        format: byte\n                      part_set_header:\n                        type: object\n                        properties:\n                          total:\n                            type: integer\n                            format: int64\n                          hash:\n                            type: string\n                            format: byte\n                        title: PartsetHeader\n                    title: BlockID\n                  block:\n                    type: object\n                    properties:\n                      header:\n                        type: object\n                        properties:\n                          version:\n                            title: basic block info\n                            type: object\n                            properties:\n                              block:\n                                type: string\n                                format: uint64\n                              app:\n                                type: string\n                                format: uint64\n                            description: >-\n                              Consensus captures the consensus rules for\n                              processing a block in the blockchain,\n\n                              including all blockchain data structures and the rules of the application's\n\n                              state transition machine.\n                          chain_id:\n                            type: string\n                          height:\n                            type: string\n                            format: int64\n                          time:\n                            type: string\n                            format: date-time\n                          last_block_id:\n                            title: prev block info\n                            type: object\n                            properties:\n                              hash:\n                                type: string\n                                format: byte\n                              part_set_header:\n                                type: object\n                                properties:\n                                  total:\n                                    type: integer\n                                    format: int64\n                                  hash:\n                                    type: string\n                                    format: byte\n                                title: PartsetHeader\n                          last_commit_hash:\n                            type: string\n                            format: byte\n                            title: hashes of block data\n                          data_hash:\n                            type: string\n                            format: byte\n                          validators_hash:\n                            type: string\n                            format: byte\n                            title: hashes from the app output from the prev block\n                          next_validators_hash:\n                            type: string\n                            format: byte\n                          consensus_hash:\n                            type: string\n                            format: byte\n                          app_hash:\n                            type: string\n                            format: byte\n                          last_results_hash:\n                            type: string\n                            format: byte\n                          evidence_hash:\n                            type: string\n                            format: byte\n                            title: consensus info\n                          proposer_address:\n                            type: string\n                            format: byte\n                        description: Header defines the structure of a block header.\n                      data:\n                        type: object\n                        properties:\n                          txs:\n                            type: array\n                            items:\n                              type: string\n                              format: byte\n                            description: >-\n                              Txs that will be applied by state @\n                              block.Height+1.\n\n                              NOTE: not all txs here are valid.  We're just agreeing on the order first.\n\n                              This means that block.AppHash does not include these txs.\n                        title: Data contains the set of transactions included in the block\n                      evidence:\n                        type: object\n                        properties:\n                          evidence:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                duplicate_vote_evidence:\n                                  type: object\n                                  properties:\n                                    vote_a:\n                                      type: object\n                                      properties:\n                                        type:\n                                          type: string\n                                          enum:\n                                            - SIGNED_MSG_TYPE_UNKNOWN\n                                            - SIGNED_MSG_TYPE_PREVOTE\n                                            - SIGNED_MSG_TYPE_PRECOMMIT\n                                            - SIGNED_MSG_TYPE_PROPOSAL\n                                          default: SIGNED_MSG_TYPE_UNKNOWN\n                                          description: >-\n                                            SignedMsgType is a type of signed\n                                            message in the consensus.\n\n                                             - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                             - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                                        height:\n                                          type: string\n                                          format: int64\n                                        round:\n                                          type: integer\n                                          format: int32\n                                        block_id:\n                                          type: object\n                                          properties:\n                                            hash:\n                                              type: string\n                                              format: byte\n                                            part_set_header:\n                                              type: object\n                                              properties:\n                                                total:\n                                                  type: integer\n                                                  format: int64\n                                                hash:\n                                                  type: string\n                                                  format: byte\n                                              title: PartsetHeader\n                                          title: BlockID\n                                        timestamp:\n                                          type: string\n                                          format: date-time\n                                        validator_address:\n                                          type: string\n                                          format: byte\n                                        validator_index:\n                                          type: integer\n                                          format: int32\n                                        signature:\n                                          type: string\n                                          format: byte\n                                      description: >-\n                                        Vote represents a prevote, precommit, or\n                                        commit vote from validators for\n\n                                        consensus.\n                                    vote_b:\n                                      type: object\n                                      properties:\n                                        type:\n                                          type: string\n                                          enum:\n                                            - SIGNED_MSG_TYPE_UNKNOWN\n                                            - SIGNED_MSG_TYPE_PREVOTE\n                                            - SIGNED_MSG_TYPE_PRECOMMIT\n                                            - SIGNED_MSG_TYPE_PROPOSAL\n                                          default: SIGNED_MSG_TYPE_UNKNOWN\n                                          description: >-\n                                            SignedMsgType is a type of signed\n                                            message in the consensus.\n\n                                             - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                             - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                                        height:\n                                          type: string\n                                          format: int64\n                                        round:\n                                          type: integer\n                                          format: int32\n                                        block_id:\n                                          type: object\n                                          properties:\n                                            hash:\n                                              type: string\n                                              format: byte\n                                            part_set_header:\n                                              type: object\n                                              properties:\n                                                total:\n                                                  type: integer\n                                                  format: int64\n                                                hash:\n                                                  type: string\n                                                  format: byte\n                                              title: PartsetHeader\n                                          title: BlockID\n                                        timestamp:\n                                          type: string\n                                          format: date-time\n                                        validator_address:\n                                          type: string\n                                          format: byte\n                                        validator_index:\n                                          type: integer\n                                          format: int32\n                                        signature:\n                                          type: string\n                                          format: byte\n                                      description: >-\n                                        Vote represents a prevote, precommit, or\n                                        commit vote from validators for\n\n                                        consensus.\n                                    total_voting_power:\n                                      type: string\n                                      format: int64\n                                    validator_power:\n                                      type: string\n                                      format: int64\n                                    timestamp:\n                                      type: string\n                                      format: date-time\n                                  description: DuplicateVoteEvidence contains evidence of a validator signed two\n                                    conflicting votes.\n                                light_client_attack_evidence:\n                                  type: object\n                                  properties:\n                                    conflicting_block:\n                                      type: object\n                                      properties:\n                                        signed_header:\n                                          type: object\n                                          properties:\n                                            header:\n                                              type: object\n                                              properties:\n                                                version:\n                                                  title: basic block info\n                                                  type: object\n                                                  properties:\n                                                    block:\n                                                      type: string\n                                                      format: uint64\n                                                    app:\n                                                      type: string\n                                                      format: uint64\n                                                  description: >-\n                                                    Consensus captures the\n                                                    consensus rules for\n                                                    processing a block in the\n                                                    blockchain,\n\n                                                    including all blockchain data structures and the rules of the application's\n\n                                                    state transition machine.\n                                                chain_id:\n                                                  type: string\n                                                height:\n                                                  type: string\n                                                  format: int64\n                                                time:\n                                                  type: string\n                                                  format: date-time\n                                                last_block_id:\n                                                  title: prev block info\n                                                  type: object\n                                                  properties:\n                                                    hash:\n                                                      type: string\n                                                      format: byte\n                                                    part_set_header:\n                                                      type: object\n                                                      properties:\n                                                        total:\n                                                          type: integer\n                                                          format: int64\n                                                        hash:\n                                                          type: string\n                                                          format: byte\n                                                      title: PartsetHeader\n                                                last_commit_hash:\n                                                  type: string\n                                                  format: byte\n                                                  title: hashes of block data\n                                                data_hash:\n                                                  type: string\n                                                  format: byte\n                                                validators_hash:\n                                                  type: string\n                                                  format: byte\n                                                  title: hashes from the app output from the prev block\n                                                next_validators_hash:\n                                                  type: string\n                                                  format: byte\n                                                consensus_hash:\n                                                  type: string\n                                                  format: byte\n                                                app_hash:\n                                                  type: string\n                                                  format: byte\n                                                last_results_hash:\n                                                  type: string\n                                                  format: byte\n                                                evidence_hash:\n                                                  type: string\n                                                  format: byte\n                                                  title: consensus info\n                                                proposer_address:\n                                                  type: string\n                                                  format: byte\n                                              description: Header defines the structure of a block header.\n                                            commit:\n                                              type: object\n                                              properties:\n                                                height:\n                                                  type: string\n                                                  format: int64\n                                                round:\n                                                  type: integer\n                                                  format: int32\n                                                block_id:\n                                                  type: object\n                                                  properties:\n                                                    hash:\n                                                      type: string\n                                                      format: byte\n                                                    part_set_header:\n                                                      type: object\n                                                      properties:\n                                                        total:\n                                                          type: integer\n                                                          format: int64\n                                                        hash:\n                                                          type: string\n                                                          format: byte\n                                                      title: PartsetHeader\n                                                  title: BlockID\n                                                signatures:\n                                                  type: array\n                                                  items:\n                                                    type: object\n                                                    properties:\n                                                      block_id_flag:\n                                                        type: string\n                                                        enum:\n                                                          - BLOCK_ID_FLAG_UNKNOWN\n                                                          - BLOCK_ID_FLAG_ABSENT\n                                                          - BLOCK_ID_FLAG_COMMIT\n                                                          - BLOCK_ID_FLAG_NIL\n                                                        default: BLOCK_ID_FLAG_UNKNOWN\n                                                        title: BlockIdFlag indicates which BlcokID the signature is for\n                                                      validator_address:\n                                                        type: string\n                                                        format: byte\n                                                      timestamp:\n                                                        type: string\n                                                        format: date-time\n                                                      signature:\n                                                        type: string\n                                                        format: byte\n                                                    description: CommitSig is a part of the Vote included in a Commit.\n                                              description: Commit contains the evidence that a block was committed by a set of\n                                                validators.\n                                        validator_set:\n                                          type: object\n                                          properties:\n                                            validators:\n                                              type: array\n                                              items:\n                                                type: object\n                                                properties:\n                                                  address:\n                                                    type: string\n                                                    format: byte\n                                                  pub_key:\n                                                    type: object\n                                                    properties:\n                                                      ed25519:\n                                                        type: string\n                                                        format: byte\n                                                      secp256k1:\n                                                        type: string\n                                                        format: byte\n                                                    title: PublicKey defines the keys available for use with Validators\n                                                  voting_power:\n                                                    type: string\n                                                    format: int64\n                                                  proposer_priority:\n                                                    type: string\n                                                    format: int64\n                                            proposer:\n                                              type: object\n                                              properties:\n                                                address:\n                                                  type: string\n                                                  format: byte\n                                                pub_key:\n                                                  type: object\n                                                  properties:\n                                                    ed25519:\n                                                      type: string\n                                                      format: byte\n                                                    secp256k1:\n                                                      type: string\n                                                      format: byte\n                                                  title: PublicKey defines the keys available for use with Validators\n                                                voting_power:\n                                                  type: string\n                                                  format: int64\n                                                proposer_priority:\n                                                  type: string\n                                                  format: int64\n                                            total_voting_power:\n                                              type: string\n                                              format: int64\n                                    common_height:\n                                      type: string\n                                      format: int64\n                                    byzantine_validators:\n                                      type: array\n                                      items:\n                                        type: object\n                                        properties:\n                                          address:\n                                            type: string\n                                            format: byte\n                                          pub_key:\n                                            type: object\n                                            properties:\n                                              ed25519:\n                                                type: string\n                                                format: byte\n                                              secp256k1:\n                                                type: string\n                                                format: byte\n                                            title: PublicKey defines the keys available for use with Validators\n                                          voting_power:\n                                            type: string\n                                            format: int64\n                                          proposer_priority:\n                                            type: string\n                                            format: int64\n                                    total_voting_power:\n                                      type: string\n                                      format: int64\n                                    timestamp:\n                                      type: string\n                                      format: date-time\n                                  description: LightClientAttackEvidence contains evidence of a set of validators\n                                    attempting to mislead a light client.\n                      last_commit:\n                        type: object\n                        properties:\n                          height:\n                            type: string\n                            format: int64\n                          round:\n                            type: integer\n                            format: int32\n                          block_id:\n                            type: object\n                            properties:\n                              hash:\n                                type: string\n                                format: byte\n                              part_set_header:\n                                type: object\n                                properties:\n                                  total:\n                                    type: integer\n                                    format: int64\n                                  hash:\n                                    type: string\n                                    format: byte\n                                title: PartsetHeader\n                            title: BlockID\n                          signatures:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                block_id_flag:\n                                  type: string\n                                  enum:\n                                    - BLOCK_ID_FLAG_UNKNOWN\n                                    - BLOCK_ID_FLAG_ABSENT\n                                    - BLOCK_ID_FLAG_COMMIT\n                                    - BLOCK_ID_FLAG_NIL\n                                  default: BLOCK_ID_FLAG_UNKNOWN\n                                  title: BlockIdFlag indicates which BlcokID the signature is for\n                                validator_address:\n                                  type: string\n                                  format: byte\n                                timestamp:\n                                  type: string\n                                  format: date-time\n                                signature:\n                                  type: string\n                                  format: byte\n                              description: CommitSig is a part of the Vote included in a Commit.\n                        description: Commit contains the evidence that a block was committed by a set of\n                          validators.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: >-\n                  GetBlockWithTxsResponse is the response type for the\n                  Service.GetBlockWithTxs method.\n\n\n                  Since: cosmos-sdk 0.45.2\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: height\n          description: height is the height of the block to query.\n          in: path\n          required: true\n          schema:\n            type: string\n            format: int64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/tx/v1beta1/txs/{hash}\":\n    get:\n      summary: GetTx fetches a tx by hash.\n      operationId: GetTx_71CB4\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  tx:\n                    type: object\n                    properties:\n                      body:\n                        title: body is the processable content of the transaction\n                        type: object\n                        properties:\n                          messages:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                type_url:\n                                  type: string\n                                value:\n                                  type: string\n                                  format: byte\n                            description: >-\n                              messages is a list of messages to be executed. The\n                              required signers of\n\n                              those messages define the number and order of elements in AuthInfo's\n\n                              signer_infos and Tx's signatures. Each required signer address is added to\n\n                              the list only the first time it occurs.\n\n                              By convention, the first required signer (usually from the first message)\n\n                              is referred to as the primary signer and pays the fee for the whole\n\n                              transaction.\n                          memo:\n                            type: string\n                            description: >-\n                              memo is any arbitrary note/comment to be added to\n                              the transaction.\n\n                              WARNING: in clients, any publicly exposed text should not be called memo,\n\n                              but should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122).\n                          timeout_height:\n                            type: string\n                            format: uint64\n                            title: >-\n                              timeout is the block height after which this\n                              transaction will not\n\n                              be processed by the chain\n                          extension_options:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                type_url:\n                                  type: string\n                                value:\n                                  type: string\n                                  format: byte\n                            title: >-\n                              extension_options are arbitrary options that can\n                              be added by chains\n\n                              when the default options are not sufficient. If any of these are present\n\n                              and can't be handled, the transaction will be rejected\n                          non_critical_extension_options:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                type_url:\n                                  type: string\n                                value:\n                                  type: string\n                                  format: byte\n                            title: >-\n                              extension_options are arbitrary options that can\n                              be added by chains\n\n                              when the default options are not sufficient. If any of these are present\n\n                              and can't be handled, they will be ignored\n                        description: TxBody is the body of a transaction that all signers sign over.\n                      auth_info:\n                        title: >-\n                          auth_info is the authorization related content of the\n                          transaction,\n\n                          specifically signers, signer modes and fee\n                        type: object\n                        properties:\n                          signer_infos:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                public_key:\n                                  type: object\n                                  properties:\n                                    type_url:\n                                      type: string\n                                    value:\n                                      type: string\n                                      format: byte\n                                  description: >-\n                                    public_key is the public key of the signer.\n                                    It is optional for accounts\n\n                                    that already exist in state. If unset, the verifier can use the required \\\n\n                                    signer address for this position and lookup the public key.\n                                mode_info:\n                                  title: >-\n                                    mode_info describes the signing mode of the\n                                    signer and is a nested\n\n                                    structure to support nested multisig pubkey's\n                                  type: object\n                                  properties:\n                                    single:\n                                      title: single represents a single signer\n                                      type: object\n                                      properties:\n                                        mode:\n                                          title: mode is the signing mode of the single signer\n                                          type: string\n                                          enum:\n                                            - SIGN_MODE_UNSPECIFIED\n                                            - SIGN_MODE_DIRECT\n                                            - SIGN_MODE_TEXTUAL\n                                            - SIGN_MODE_DIRECT_AUX\n                                            - SIGN_MODE_LEGACY_AMINO_JSON\n                                            - SIGN_MODE_EIP_191\n                                          default: SIGN_MODE_UNSPECIFIED\n                                          description: >-\n                                            SignMode represents a signing mode\n                                            with its own security guarantees.\n\n\n                                            This enum should be considered a registry of all known sign modes\n\n                                            in the Cosmos ecosystem. Apps are not expected to support all known\n\n                                            sign modes. Apps that would like to support custom  sign modes are\n\n                                            encouraged to open a small PR against this file to add a new case\n\n                                            to this SignMode enum describing their sign mode so that different\n\n                                            apps have a consistent version of this enum.\n\n                                             - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                            rejected.\n                                             - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                            verified with raw bytes from Tx.\n                                             - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                            human-readable textual representation on top of the binary representation\n\n                                            from SIGN_MODE_DIRECT. It is currently not supported.\n                                             - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                            SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\n\n                                            require signers signing over other signers' `signer_info`. It also allows\n\n                                            for adding Tips in transactions.\n\n\n                                            Since: cosmos-sdk 0.46\n                                             - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                            Amino JSON and will be removed in the future.\n                                             - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                            SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                                            Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\n\n                                            but is not implemented on the SDK by default. To enable EIP-191, you need\n\n                                            to pass a custom `TxConfig` that has an implementation of\n\n                                            `SignModeHandler` for EIP-191. The SDK may decide to fully support\n\n                                            EIP-191 in the future.\n\n\n                                            Since: cosmos-sdk 0.45.2\n                                    multi:\n                                      title: multi represents a nested multisig signer\n                                      type: object\n                                      properties:\n                                        bitarray:\n                                          title: bitarray specifies which keys within the multisig are signing\n                                          type: object\n                                          properties:\n                                            extra_bits_stored:\n                                              type: integer\n                                              format: int64\n                                            elems:\n                                              type: string\n                                              format: byte\n                                          description: >-\n                                            CompactBitArray is an implementation\n                                            of a space efficient bit array.\n\n                                            This is used to ensure that the encoded data takes up a minimal amount of\n\n                                            space after proto encoding.\n\n                                            This is not thread safe, and is not intended for concurrent usage.\n                                        mode_infos:\n                                          type: array\n                                          items: {}\n                                          title: >-\n                                            mode_infos is the corresponding\n                                            modes of the signers of the multisig\n\n                                            which could include nested multisig public keys\n                                  description: ModeInfo describes the signing mode of a single or nested multisig\n                                    signer.\n                                sequence:\n                                  type: string\n                                  format: uint64\n                                  description: >-\n                                    sequence is the sequence of the account,\n                                    which describes the\n\n                                    number of committed transactions signed by a given address. It is used to\n\n                                    prevent replay attacks.\n                              description: >-\n                                SignerInfo describes the public key and signing\n                                mode of a single top-level\n\n                                signer.\n                            description: >-\n                              signer_infos defines the signing modes for the\n                              required signers. The number\n\n                              and order of elements must match the required signers from TxBody's\n\n                              messages. The first element is the primary signer and the one which pays\n\n                              the fee.\n                          fee:\n                            description: >-\n                              Fee is the fee and gas limit for the transaction.\n                              The first signer is the\n\n                              primary signer and the one which pays the fee. The fee can be calculated\n\n                              based on the cost of evaluating the body and doing signature verification\n\n                              of the signers. This can be estimated via simulation.\n                            type: object\n                            properties:\n                              amount:\n                                type: array\n                                items:\n                                  type: object\n                                  properties:\n                                    denom:\n                                      type: string\n                                    amount:\n                                      type: string\n                                  description: >-\n                                    Coin defines a token with a denomination and\n                                    an amount.\n\n\n                                    NOTE: The amount field is an Int which implements the custom method\n\n                                    signatures required by gogoproto.\n                                title: amount is the amount of coins to be paid as a fee\n                              gas_limit:\n                                type: string\n                                format: uint64\n                                title: >-\n                                  gas_limit is the maximum gas that can be used\n                                  in transaction processing\n\n                                  before an out of gas error occurs\n                              payer:\n                                type: string\n                                description: >-\n                                  if unset, the first signer is responsible for\n                                  paying the fees. If set, the specified account\n                                  must pay the fees.\n\n                                  the payer must be a tx signer (and thus have signed this field in AuthInfo).\n\n                                  setting this field does *not* change the ordering of required signers for the transaction.\n                              granter:\n                                type: string\n                                title: >-\n                                  if set, the fee payer (either the first signer\n                                  or the value of the payer field) requests that\n                                  a fee grant be used\n\n                                  to pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\n\n                                  not support fee grants, this will fail\n                          tip:\n                            description: >-\n                              Tip is the optional tip used for transactions fees\n                              paid in another denom.\n\n\n                              This field is ignored if the chain didn't enable tips, i.e. didn't add the\n\n                              `TipDecorator` in its posthandler.\n\n\n                              Since: cosmos-sdk 0.46\n                            type: object\n                            properties:\n                              amount:\n                                type: array\n                                items:\n                                  type: object\n                                  properties:\n                                    denom:\n                                      type: string\n                                    amount:\n                                      type: string\n                                  description: >-\n                                    Coin defines a token with a denomination and\n                                    an amount.\n\n\n                                    NOTE: The amount field is an Int which implements the custom method\n\n                                    signatures required by gogoproto.\n                                title: amount is the amount of the tip\n                              tipper:\n                                type: string\n                                title: tipper is the address of the account paying for the tip\n                        description: >-\n                          AuthInfo describes the fee and signer modes that are\n                          used to sign a\n\n                          transaction.\n                      signatures:\n                        type: array\n                        items:\n                          type: string\n                          format: byte\n                        description: >-\n                          signatures is a list of signatures that matches the\n                          length and order of\n\n                          AuthInfo's signer_infos to allow connecting signature meta information like\n\n                          public key and signing mode by position.\n                    description: Tx is the standard type used for broadcasting transactions.\n                  tx_response:\n                    type: object\n                    properties:\n                      height:\n                        type: string\n                        format: int64\n                        title: The block height\n                      txhash:\n                        type: string\n                        description: The transaction hash.\n                      codespace:\n                        type: string\n                        title: Namespace for the Code\n                      code:\n                        type: integer\n                        format: int64\n                        description: Response code.\n                      data:\n                        type: string\n                        description: Result bytes, if any.\n                      raw_log:\n                        type: string\n                        description: >-\n                          The output of the application's logger (raw string).\n                          May be\n\n                          non-deterministic.\n                      logs:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            msg_index:\n                              type: integer\n                              format: int64\n                            log:\n                              type: string\n                            events:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  type:\n                                    type: string\n                                  attributes:\n                                    type: array\n                                    items:\n                                      type: object\n                                      properties:\n                                        key:\n                                          type: string\n                                        value:\n                                          type: string\n                                      description: >-\n                                        Attribute defines an attribute wrapper\n                                        where the key and value are\n\n                                        strings instead of raw bytes.\n                                description: >-\n                                  StringEvent defines en Event object wrapper\n                                  where all the attributes\n\n                                  contain key/value pairs that are strings instead of raw bytes.\n                              description: >-\n                                Events contains a slice of Event objects that\n                                were emitted during some\n\n                                execution.\n                          description: ABCIMessageLog defines a structure containing an indexed tx ABCI\n                            message log.\n                        description: The output of the application's logger (typed). May be\n                          non-deterministic.\n                      info:\n                        type: string\n                        description: Additional information. May be non-deterministic.\n                      gas_wanted:\n                        type: string\n                        format: int64\n                        description: Amount of gas requested for transaction.\n                      gas_used:\n                        type: string\n                        format: int64\n                        description: Amount of gas consumed by transaction.\n                      tx:\n                        type: object\n                        properties:\n                          type_url:\n                            type: string\n                          value:\n                            type: string\n                            format: byte\n                        description: The request transaction bytes.\n                      timestamp:\n                        type: string\n                        description: >-\n                          Time of the previous block. For heights > 1, it's the\n                          weighted median of\n\n                          the timestamps of the valid votes in the block.LastCommit. For height == 1,\n\n                          it's genesis time.\n                      events:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            type:\n                              type: string\n                            attributes:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  key:\n                                    type: string\n                                  value:\n                                    type: string\n                                  index:\n                                    type: boolean\n                                description: EventAttribute is a single key-value pair, associated with an\n                                  event.\n                          description: >-\n                            Event allows application developers to attach\n                            additional information to\n\n                            ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and ResponseDeliverTx.\n\n                            Later, transactions may be queried using these events.\n                        description: >-\n                          Events defines all the events emitted by processing a\n                          transaction. Note,\n\n                          these events include those emitted by processing all the messages and those\n\n                          emitted from the ante. Whereas Logs contains the events, with\n\n                          additional metadata, emitted only by processing the messages.\n\n\n                          Since: cosmos-sdk 0.42.11, 0.44.5, 0.45\n                    description: >-\n                      TxResponse defines a structure containing relevant tx data\n                      and metadata. The\n\n                      tags are stringified and the log is JSON decoded.\n                description: GetTxResponse is the response type for the Service.GetTx method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: hash\n          description: hash is the tx hash to query, encoded as a hex string.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/clock/v1/contracts:\n    get:\n      summary: ClockContracts\n      operationId: ClockContracts_R3OXP\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  clock_contracts:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        contract_address:\n                          type: string\n                          description: The address of the contract.\n                        is_jailed:\n                          type: boolean\n                          description: The jail status of the contract.\n                      description: >-\n                        This object is used to store the contract address and\n                        the\n\n                        jail status of the contract.\n                    description: clock_contracts are the clock contracts.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: >-\n                  QueryClockContractsResponse is the response type for the\n                  Query/ClockContracts\n\n                  RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cyber/clock/v1/contracts/{contract_address}\":\n    get:\n      summary: ClockContract\n      operationId: ClockContract_U8RUX\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  clock_contract:\n                    type: object\n                    properties:\n                      contract_address:\n                        type: string\n                        description: The address of the contract.\n                      is_jailed:\n                        type: boolean\n                        description: The jail status of the contract.\n                    description: |-\n                      This object is used to store the contract address and the\n                      jail status of the contract.\n                description: >-\n                  QueryClockContractResponse is the response type for the\n                  Query/ClockContract\n\n                  RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: contract_address\n          description: contract_address is the address of the contract to query.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/clock/v1/params:\n    get:\n      summary: Params\n      operationId: Params_7NU4D\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  params:\n                    type: object\n                    properties:\n                      contract_gas_limit:\n                        type: string\n                        format: uint64\n                        description: >-\n                          contract_gas_limit defines the maximum amount of gas\n                          that can be used by a\n\n                          contract.\n                    description: Params defines the set of module parameters.\n                description: >-\n                  QueryClockContractsResponse is the response type for the\n                  Query/ClockContracts\n\n                  RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /ibc/core/channel/v1/channels:\n    get:\n      summary: Channels queries all the IBC channels of a chain.\n      operationId: Channels_XUUVY\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  channels:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        state:\n                          title: current state of the channel end\n                          type: string\n                          enum:\n                            - STATE_UNINITIALIZED_UNSPECIFIED\n                            - STATE_INIT\n                            - STATE_TRYOPEN\n                            - STATE_OPEN\n                            - STATE_CLOSED\n                          default: STATE_UNINITIALIZED_UNSPECIFIED\n                          description: >-\n                            State defines if a channel is in one of the\n                            following states:\n\n                            CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n                             - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n                             - STATE_INIT: A channel has just started the opening handshake.\n                             - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n                             - STATE_OPEN: A channel has completed the handshake. Open channels are\n                            ready to send and receive packets.\n                             - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\n                            packets.\n                        ordering:\n                          title: whether the channel is ordered or unordered\n                          type: string\n                          enum:\n                            - ORDER_NONE_UNSPECIFIED\n                            - ORDER_UNORDERED\n                            - ORDER_ORDERED\n                          default: ORDER_NONE_UNSPECIFIED\n                          description: >-\n                            - ORDER_NONE_UNSPECIFIED: zero-value for channel\n                            ordering\n                             - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\n                            which they were sent.\n                             - ORDER_ORDERED: packets are delivered exactly in the order which they were sent\n                        counterparty:\n                          title: counterparty channel end\n                          type: object\n                          properties:\n                            port_id:\n                              type: string\n                              description: port on the counterparty chain which owns the other end of the\n                                channel.\n                            channel_id:\n                              type: string\n                              title: channel end on the counterparty chain\n                        connection_hops:\n                          type: array\n                          items:\n                            type: string\n                          title: >-\n                            list of connection identifiers, in order, along\n                            which packets sent on\n\n                            this channel will travel\n                        version:\n                          type: string\n                          title: opaque channel version, which is agreed upon during the handshake\n                        port_id:\n                          type: string\n                          title: port identifier\n                        channel_id:\n                          type: string\n                          title: channel identifier\n                      description: >-\n                        IdentifiedChannel defines a channel with additional port\n                        and channel\n\n                        identifier fields.\n                    description: list of stored channels of the chain.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                    title: pagination response\n                  height:\n                    title: query block height\n                    type: object\n                    properties:\n                      revision_number:\n                        type: string\n                        format: uint64\n                        title: the revision that the client is currently on\n                      revision_height:\n                        type: string\n                        format: uint64\n                        title: the height within the given revision\n                    description: >-\n                      Normally the RevisionHeight is incremented at each height\n                      while keeping\n\n                      RevisionNumber the same. However some consensus algorithms may choose to\n\n                      reset the height in certain conditions e.g. hard forks, state-machine\n\n                      breaking changes In these cases, the RevisionNumber is incremented so that\n\n                      height continues to be monitonically increasing even as the RevisionHeight\n\n                      gets reset\n                description: QueryChannelsResponse is the response type for the Query/Channels\n                  RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}\":\n    get:\n      summary: Channel queries an IBC Channel.\n      operationId: Channel_ENVYK\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  channel:\n                    title: channel associated with the request identifiers\n                    type: object\n                    properties:\n                      state:\n                        title: current state of the channel end\n                        type: string\n                        enum:\n                          - STATE_UNINITIALIZED_UNSPECIFIED\n                          - STATE_INIT\n                          - STATE_TRYOPEN\n                          - STATE_OPEN\n                          - STATE_CLOSED\n                        default: STATE_UNINITIALIZED_UNSPECIFIED\n                        description: >-\n                          State defines if a channel is in one of the following\n                          states:\n\n                          CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n                           - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n                           - STATE_INIT: A channel has just started the opening handshake.\n                           - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n                           - STATE_OPEN: A channel has completed the handshake. Open channels are\n                          ready to send and receive packets.\n                           - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\n                          packets.\n                      ordering:\n                        title: whether the channel is ordered or unordered\n                        type: string\n                        enum:\n                          - ORDER_NONE_UNSPECIFIED\n                          - ORDER_UNORDERED\n                          - ORDER_ORDERED\n                        default: ORDER_NONE_UNSPECIFIED\n                        description: >-\n                          - ORDER_NONE_UNSPECIFIED: zero-value for channel\n                          ordering\n                           - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\n                          which they were sent.\n                           - ORDER_ORDERED: packets are delivered exactly in the order which they were sent\n                      counterparty:\n                        title: counterparty channel end\n                        type: object\n                        properties:\n                          port_id:\n                            type: string\n                            description: port on the counterparty chain which owns the other end of the\n                              channel.\n                          channel_id:\n                            type: string\n                            title: channel end on the counterparty chain\n                      connection_hops:\n                        type: array\n                        items:\n                          type: string\n                        title: >-\n                          list of connection identifiers, in order, along which\n                          packets sent on\n\n                          this channel will travel\n                      version:\n                        type: string\n                        title: opaque channel version, which is agreed upon during the handshake\n                    description: >-\n                      Channel defines pipeline for exactly-once packet delivery\n                      between specific\n\n                      modules on separate blockchains, which has at least one end capable of\n\n                      sending packets and one end capable of receiving packets.\n                  proof:\n                    type: string\n                    format: byte\n                    title: merkle proof of existence\n                  proof_height:\n                    title: height at which the proof was retrieved\n                    type: object\n                    properties:\n                      revision_number:\n                        type: string\n                        format: uint64\n                        title: the revision that the client is currently on\n                      revision_height:\n                        type: string\n                        format: uint64\n                        title: the height within the given revision\n                    description: >-\n                      Normally the RevisionHeight is incremented at each height\n                      while keeping\n\n                      RevisionNumber the same. However some consensus algorithms may choose to\n\n                      reset the height in certain conditions e.g. hard forks, state-machine\n\n                      breaking changes In these cases, the RevisionNumber is incremented so that\n\n                      height continues to be monitonically increasing even as the RevisionHeight\n\n                      gets reset\n                description: >-\n                  QueryChannelResponse is the response type for the\n                  Query/Channel RPC method.\n\n                  Besides the Channel end, it includes a proof and the height from which the\n\n                  proof was retrieved.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/client_state\":\n    get:\n      summary: >-\n        ChannelClientState queries for the client state for the channel\n        associated\n\n        with the provided channel identifiers.\n      operationId: ChannelClientState_928AQ\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  identified_client_state:\n                    title: client state associated with the channel\n                    type: object\n                    properties:\n                      client_id:\n                        type: string\n                        title: client identifier\n                      client_state:\n                        type: object\n                        properties:\n                          type_url:\n                            type: string\n                          value:\n                            type: string\n                            format: byte\n                        title: client state\n                    description: >-\n                      IdentifiedClientState defines a client state with an\n                      additional client\n\n                      identifier field.\n                  proof:\n                    type: string\n                    format: byte\n                    title: merkle proof of existence\n                  proof_height:\n                    title: height at which the proof was retrieved\n                    type: object\n                    properties:\n                      revision_number:\n                        type: string\n                        format: uint64\n                        title: the revision that the client is currently on\n                      revision_height:\n                        type: string\n                        format: uint64\n                        title: the height within the given revision\n                    description: >-\n                      Normally the RevisionHeight is incremented at each height\n                      while keeping\n\n                      RevisionNumber the same. However some consensus algorithms may choose to\n\n                      reset the height in certain conditions e.g. hard forks, state-machine\n\n                      breaking changes In these cases, the RevisionNumber is incremented so that\n\n                      height continues to be monitonically increasing even as the RevisionHeight\n\n                      gets reset\n                title: |-\n                  QueryChannelClientStateResponse is the Response type for the\n                  Query/QueryChannelClientState RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/consensus_state/revision/{revision_number}/height/{revision_height}\":\n    get:\n      summary: |-\n        ChannelConsensusState queries for the consensus state for the channel\n        associated with the provided channel identifiers.\n      operationId: ChannelConsensusState_TYNC0\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  consensus_state:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                    title: consensus state associated with the channel\n                  client_id:\n                    type: string\n                    title: client ID associated with the consensus state\n                  proof:\n                    type: string\n                    format: byte\n                    title: merkle proof of existence\n                  proof_height:\n                    title: height at which the proof was retrieved\n                    type: object\n                    properties:\n                      revision_number:\n                        type: string\n                        format: uint64\n                        title: the revision that the client is currently on\n                      revision_height:\n                        type: string\n                        format: uint64\n                        title: the height within the given revision\n                    description: >-\n                      Normally the RevisionHeight is incremented at each height\n                      while keeping\n\n                      RevisionNumber the same. However some consensus algorithms may choose to\n\n                      reset the height in certain conditions e.g. hard forks, state-machine\n\n                      breaking changes In these cases, the RevisionNumber is incremented so that\n\n                      height continues to be monitonically increasing even as the RevisionHeight\n\n                      gets reset\n                title: |-\n                  QueryChannelClientStateResponse is the Response type for the\n                  Query/QueryChannelClientState RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: revision_number\n          description: revision number of the consensus state\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n        - name: revision_height\n          description: revision height of the consensus state\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  \"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence\":\n    get:\n      summary: NextSequenceReceive returns the next receive sequence for a given\n        channel.\n      operationId: NextSequenceReceive_GMBZC\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  next_sequence_receive:\n                    type: string\n                    format: uint64\n                    title: next sequence receive number\n                  proof:\n                    type: string\n                    format: byte\n                    title: merkle proof of existence\n                  proof_height:\n                    title: height at which the proof was retrieved\n                    type: object\n                    properties:\n                      revision_number:\n                        type: string\n                        format: uint64\n                        title: the revision that the client is currently on\n                      revision_height:\n                        type: string\n                        format: uint64\n                        title: the height within the given revision\n                    description: >-\n                      Normally the RevisionHeight is incremented at each height\n                      while keeping\n\n                      RevisionNumber the same. However some consensus algorithms may choose to\n\n                      reset the height in certain conditions e.g. hard forks, state-machine\n\n                      breaking changes In these cases, the RevisionNumber is incremented so that\n\n                      height continues to be monitonically increasing even as the RevisionHeight\n\n                      gets reset\n                title: |-\n                  QuerySequenceResponse is the request type for the\n                  Query/QueryNextSequenceReceiveResponse RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements\":\n    get:\n      summary: >-\n        PacketAcknowledgements returns all the packet acknowledgements\n        associated\n\n        with a channel.\n      operationId: PacketAcknowledgements_L275E\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  acknowledgements:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        port_id:\n                          type: string\n                          description: channel port identifier.\n                        channel_id:\n                          type: string\n                          description: channel unique identifier.\n                        sequence:\n                          type: string\n                          format: uint64\n                          description: packet sequence.\n                        data:\n                          type: string\n                          format: byte\n                          description: embedded data that represents packet state.\n                      description: >-\n                        PacketState defines the generic type necessary to\n                        retrieve and store\n\n                        packet commitments, acknowledgements, and receipts.\n\n                        Caller is responsible for knowing the context necessary to interpret this\n\n                        state as a commitment, acknowledgement, or a receipt.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                    title: pagination response\n                  height:\n                    title: query block height\n                    type: object\n                    properties:\n                      revision_number:\n                        type: string\n                        format: uint64\n                        title: the revision that the client is currently on\n                      revision_height:\n                        type: string\n                        format: uint64\n                        title: the height within the given revision\n                    description: >-\n                      Normally the RevisionHeight is incremented at each height\n                      while keeping\n\n                      RevisionNumber the same. However some consensus algorithms may choose to\n\n                      reset the height in certain conditions e.g. hard forks, state-machine\n\n                      breaking changes In these cases, the RevisionNumber is incremented so that\n\n                      height continues to be monitonically increasing even as the RevisionHeight\n\n                      gets reset\n                title: |-\n                  QueryPacketAcknowledgemetsResponse is the request type for the\n                  Query/QueryPacketAcknowledgements RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: packet_commitment_sequences\n          description: list of packet sequences.\n          in: query\n          required: false\n          explode: true\n          schema:\n            type: array\n            items:\n              type: string\n              format: uint64\n      tags:\n        - gRPC Gateway API\n  \"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}\":\n    get:\n      summary: PacketAcknowledgement queries a stored packet acknowledgement hash.\n      operationId: PacketAcknowledgement_ZZJJ8\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  acknowledgement:\n                    type: string\n                    format: byte\n                    title: packet associated with the request fields\n                  proof:\n                    type: string\n                    format: byte\n                    title: merkle proof of existence\n                  proof_height:\n                    title: height at which the proof was retrieved\n                    type: object\n                    properties:\n                      revision_number:\n                        type: string\n                        format: uint64\n                        title: the revision that the client is currently on\n                      revision_height:\n                        type: string\n                        format: uint64\n                        title: the height within the given revision\n                    description: >-\n                      Normally the RevisionHeight is incremented at each height\n                      while keeping\n\n                      RevisionNumber the same. However some consensus algorithms may choose to\n\n                      reset the height in certain conditions e.g. hard forks, state-machine\n\n                      breaking changes In these cases, the RevisionNumber is incremented so that\n\n                      height continues to be monitonically increasing even as the RevisionHeight\n\n                      gets reset\n                title: >-\n                  QueryPacketAcknowledgementResponse defines the client query\n                  response for a\n\n                  packet which also includes a proof and the height from which the\n\n                  proof was retrieved\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: sequence\n          description: packet sequence\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  \"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments\":\n    get:\n      summary: |-\n        PacketCommitments returns all the packet commitments hashes associated\n        with a channel.\n      operationId: PacketCommitments_LZDD2\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  commitments:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        port_id:\n                          type: string\n                          description: channel port identifier.\n                        channel_id:\n                          type: string\n                          description: channel unique identifier.\n                        sequence:\n                          type: string\n                          format: uint64\n                          description: packet sequence.\n                        data:\n                          type: string\n                          format: byte\n                          description: embedded data that represents packet state.\n                      description: >-\n                        PacketState defines the generic type necessary to\n                        retrieve and store\n\n                        packet commitments, acknowledgements, and receipts.\n\n                        Caller is responsible for knowing the context necessary to interpret this\n\n                        state as a commitment, acknowledgement, or a receipt.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                    title: pagination response\n                  height:\n                    title: query block height\n                    type: object\n                    properties:\n                      revision_number:\n                        type: string\n                        format: uint64\n                        title: the revision that the client is currently on\n                      revision_height:\n                        type: string\n                        format: uint64\n                        title: the height within the given revision\n                    description: >-\n                      Normally the RevisionHeight is incremented at each height\n                      while keeping\n\n                      RevisionNumber the same. However some consensus algorithms may choose to\n\n                      reset the height in certain conditions e.g. hard forks, state-machine\n\n                      breaking changes In these cases, the RevisionNumber is incremented so that\n\n                      height continues to be monitonically increasing even as the RevisionHeight\n\n                      gets reset\n                title: |-\n                  QueryPacketCommitmentsResponse is the request type for the\n                  Query/QueryPacketCommitments RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks\":\n    get:\n      summary: >-\n        UnreceivedAcks returns all the unreceived IBC acknowledgements\n        associated\n\n        with a channel and sequences.\n      operationId: UnreceivedAcks_GU76R\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  sequences:\n                    type: array\n                    items:\n                      type: string\n                      format: uint64\n                    title: list of unreceived acknowledgement sequences\n                  height:\n                    title: query block height\n                    type: object\n                    properties:\n                      revision_number:\n                        type: string\n                        format: uint64\n                        title: the revision that the client is currently on\n                      revision_height:\n                        type: string\n                        format: uint64\n                        title: the height within the given revision\n                    description: >-\n                      Normally the RevisionHeight is incremented at each height\n                      while keeping\n\n                      RevisionNumber the same. However some consensus algorithms may choose to\n\n                      reset the height in certain conditions e.g. hard forks, state-machine\n\n                      breaking changes In these cases, the RevisionNumber is incremented so that\n\n                      height continues to be monitonically increasing even as the RevisionHeight\n\n                      gets reset\n                title: |-\n                  QueryUnreceivedAcksResponse is the response type for the\n                  Query/UnreceivedAcks RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: packet_ack_sequences\n          description: list of acknowledgement sequences\n          in: path\n          required: true\n          style: simple\n          schema:\n            type: array\n            items:\n              type: string\n              format: uint64\n            minItems: 1\n      tags:\n        - gRPC Gateway API\n  \"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/unreceived_packets\":\n    get:\n      summary: >-\n        UnreceivedPackets returns all the unreceived IBC packets associated with\n        a\n\n        channel and sequences.\n      operationId: UnreceivedPackets_13T8R\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  sequences:\n                    type: array\n                    items:\n                      type: string\n                      format: uint64\n                    title: list of unreceived packet sequences\n                  height:\n                    title: query block height\n                    type: object\n                    properties:\n                      revision_number:\n                        type: string\n                        format: uint64\n                        title: the revision that the client is currently on\n                      revision_height:\n                        type: string\n                        format: uint64\n                        title: the height within the given revision\n                    description: >-\n                      Normally the RevisionHeight is incremented at each height\n                      while keeping\n\n                      RevisionNumber the same. However some consensus algorithms may choose to\n\n                      reset the height in certain conditions e.g. hard forks, state-machine\n\n                      breaking changes In these cases, the RevisionNumber is incremented so that\n\n                      height continues to be monitonically increasing even as the RevisionHeight\n\n                      gets reset\n                title: |-\n                  QueryUnreceivedPacketsResponse is the response type for the\n                  Query/UnreceivedPacketCommitments RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: packet_commitment_sequences\n          description: list of packet sequences\n          in: path\n          required: true\n          style: simple\n          schema:\n            type: array\n            items:\n              type: string\n              format: uint64\n            minItems: 1\n      tags:\n        - gRPC Gateway API\n  \"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence}\":\n    get:\n      summary: PacketCommitment queries a stored packet commitment hash.\n      operationId: PacketCommitment_4UP5U\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  commitment:\n                    type: string\n                    format: byte\n                    title: packet associated with the request fields\n                  proof:\n                    type: string\n                    format: byte\n                    title: merkle proof of existence\n                  proof_height:\n                    title: height at which the proof was retrieved\n                    type: object\n                    properties:\n                      revision_number:\n                        type: string\n                        format: uint64\n                        title: the revision that the client is currently on\n                      revision_height:\n                        type: string\n                        format: uint64\n                        title: the height within the given revision\n                    description: >-\n                      Normally the RevisionHeight is incremented at each height\n                      while keeping\n\n                      RevisionNumber the same. However some consensus algorithms may choose to\n\n                      reset the height in certain conditions e.g. hard forks, state-machine\n\n                      breaking changes In these cases, the RevisionNumber is incremented so that\n\n                      height continues to be monitonically increasing even as the RevisionHeight\n\n                      gets reset\n                title: >-\n                  QueryPacketCommitmentResponse defines the client query\n                  response for a packet\n\n                  which also includes a proof and the height from which the proof was\n\n                  retrieved\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: sequence\n          description: packet sequence\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  \"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence}\":\n    get:\n      summary: >-\n        PacketReceipt queries if a given packet sequence has been received on\n        the\n\n        queried chain\n      operationId: PacketReceipt_907ZV\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  received:\n                    type: boolean\n                    title: success flag for if receipt exists\n                  proof:\n                    type: string\n                    format: byte\n                    title: merkle proof of existence\n                  proof_height:\n                    title: height at which the proof was retrieved\n                    type: object\n                    properties:\n                      revision_number:\n                        type: string\n                        format: uint64\n                        title: the revision that the client is currently on\n                      revision_height:\n                        type: string\n                        format: uint64\n                        title: the height within the given revision\n                    description: >-\n                      Normally the RevisionHeight is incremented at each height\n                      while keeping\n\n                      RevisionNumber the same. However some consensus algorithms may choose to\n\n                      reset the height in certain conditions e.g. hard forks, state-machine\n\n                      breaking changes In these cases, the RevisionNumber is incremented so that\n\n                      height continues to be monitonically increasing even as the RevisionHeight\n\n                      gets reset\n                title: >-\n                  QueryPacketReceiptResponse defines the client query response\n                  for a packet\n\n                  receipt which also includes a proof, and the height from which the proof was\n\n                  retrieved\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: sequence\n          description: packet sequence\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  \"/ibc/core/channel/v1/connections/{connection}/channels\":\n    get:\n      summary: |-\n        ConnectionChannels queries all the channels associated with a connection\n        end.\n      operationId: ConnectionChannels_DKEMY\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  channels:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        state:\n                          title: current state of the channel end\n                          type: string\n                          enum:\n                            - STATE_UNINITIALIZED_UNSPECIFIED\n                            - STATE_INIT\n                            - STATE_TRYOPEN\n                            - STATE_OPEN\n                            - STATE_CLOSED\n                          default: STATE_UNINITIALIZED_UNSPECIFIED\n                          description: >-\n                            State defines if a channel is in one of the\n                            following states:\n\n                            CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n                             - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n                             - STATE_INIT: A channel has just started the opening handshake.\n                             - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n                             - STATE_OPEN: A channel has completed the handshake. Open channels are\n                            ready to send and receive packets.\n                             - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\n                            packets.\n                        ordering:\n                          title: whether the channel is ordered or unordered\n                          type: string\n                          enum:\n                            - ORDER_NONE_UNSPECIFIED\n                            - ORDER_UNORDERED\n                            - ORDER_ORDERED\n                          default: ORDER_NONE_UNSPECIFIED\n                          description: >-\n                            - ORDER_NONE_UNSPECIFIED: zero-value for channel\n                            ordering\n                             - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\n                            which they were sent.\n                             - ORDER_ORDERED: packets are delivered exactly in the order which they were sent\n                        counterparty:\n                          title: counterparty channel end\n                          type: object\n                          properties:\n                            port_id:\n                              type: string\n                              description: port on the counterparty chain which owns the other end of the\n                                channel.\n                            channel_id:\n                              type: string\n                              title: channel end on the counterparty chain\n                        connection_hops:\n                          type: array\n                          items:\n                            type: string\n                          title: >-\n                            list of connection identifiers, in order, along\n                            which packets sent on\n\n                            this channel will travel\n                        version:\n                          type: string\n                          title: opaque channel version, which is agreed upon during the handshake\n                        port_id:\n                          type: string\n                          title: port identifier\n                        channel_id:\n                          type: string\n                          title: channel identifier\n                      description: >-\n                        IdentifiedChannel defines a channel with additional port\n                        and channel\n\n                        identifier fields.\n                    description: list of channels associated with a connection.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                    title: pagination response\n                  height:\n                    title: query block height\n                    type: object\n                    properties:\n                      revision_number:\n                        type: string\n                        format: uint64\n                        title: the revision that the client is currently on\n                      revision_height:\n                        type: string\n                        format: uint64\n                        title: the height within the given revision\n                    description: >-\n                      Normally the RevisionHeight is incremented at each height\n                      while keeping\n\n                      RevisionNumber the same. However some consensus algorithms may choose to\n\n                      reset the height in certain conditions e.g. hard forks, state-machine\n\n                      breaking changes In these cases, the RevisionNumber is incremented so that\n\n                      height continues to be monitonically increasing even as the RevisionHeight\n\n                      gets reset\n                title: |-\n                  QueryConnectionChannelsResponse is the Response type for the\n                  Query/QueryConnectionChannels RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: connection\n          description: connection unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/auth/v1beta1/account_info/{address}\":\n    get:\n      summary: AccountInfo queries account info which is common to all account types.\n      description: \"Since: cosmos-sdk 0.47\"\n      operationId: AccountInfo_J8GK9\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  info:\n                    description: info is the account info which is represented by BaseAccount.\n                    type: object\n                    properties:\n                      address:\n                        type: string\n                      pub_key:\n                        type: object\n                        properties:\n                          type_url:\n                            type: string\n                          value:\n                            type: string\n                            format: byte\n                      account_number:\n                        type: string\n                        format: uint64\n                      sequence:\n                        type: string\n                        format: uint64\n                description: >-\n                  QueryAccountInfoResponse is the Query/AccountInfo response\n                  type.\n\n\n                  Since: cosmos-sdk 0.47\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: address\n          description: address is the account address string.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/auth/v1beta1/accounts:\n    get:\n      summary: Accounts returns all the existing accounts.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n\n\n        Since: cosmos-sdk 0.43\n      operationId: Accounts_EI4FZ\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  accounts:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                    title: accounts are the existing accounts\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: >-\n                  QueryAccountsResponse is the response type for the\n                  Query/Accounts RPC method.\n\n\n                  Since: cosmos-sdk 0.43\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/auth/v1beta1/accounts/{address}\":\n    get:\n      summary: Account returns account details based on address.\n      operationId: Account_GVO8V\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  account:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                    description: account defines the account of the corresponding address.\n                description: QueryAccountResponse is the response type for the Query/Account RPC\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: address\n          description: address defines the address to query for.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/auth/v1beta1/address_by_id/{id}\":\n    get:\n      summary: AccountAddressByID returns account address based on account number.\n      description: \"Since: cosmos-sdk 0.46.2\"\n      operationId: AccountAddressByID_OE1HP\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  account_address:\n                    type: string\n                description: \"Since: cosmos-sdk 0.46.2\"\n                title: QueryAccountAddressByIDResponse is the response type for\n                  AccountAddressByID rpc method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: id\n          description: |-\n            Deprecated, use account_id instead\n\n            id is the account number of the address to be queried. This field\n            should have been an uint64 (like all account numbers), and will be\n            updated to uint64 in a future version of the auth query.\n          in: path\n          required: true\n          schema:\n            type: string\n            format: int64\n        - name: account_id\n          description: |-\n            account_id is the account number of the address to be queried.\n\n            Since: cosmos-sdk 0.47\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  /cosmos/auth/v1beta1/bech32:\n    get:\n      summary: Bech32Prefix queries bech32Prefix\n      description: \"Since: cosmos-sdk 0.46\"\n      operationId: Bech32Prefix_1OIJM\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  bech32_prefix:\n                    type: string\n                description: >-\n                  Bech32PrefixResponse is the response type for Bech32Prefix rpc\n                  method.\n\n\n                  Since: cosmos-sdk 0.46\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/auth/v1beta1/bech32/{address_bytes}\":\n    get:\n      summary: AddressBytesToString converts Account Address bytes to string\n      description: \"Since: cosmos-sdk 0.46\"\n      operationId: AddressBytesToString_P2TYK\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  address_string:\n                    type: string\n                description: >-\n                  AddressBytesToStringResponse is the response type for\n                  AddressString rpc method.\n\n\n                  Since: cosmos-sdk 0.46\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: address_bytes\n          in: path\n          required: true\n          schema:\n            type: string\n            format: byte\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/auth/v1beta1/bech32/{address_string}\":\n    get:\n      summary: AddressStringToBytes converts Address string to bytes\n      description: \"Since: cosmos-sdk 0.46\"\n      operationId: AddressStringToBytes_2ADP0\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  address_bytes:\n                    type: string\n                    format: byte\n                description: >-\n                  AddressStringToBytesResponse is the response type for\n                  AddressBytes rpc method.\n\n\n                  Since: cosmos-sdk 0.46\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: address_string\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/auth/v1beta1/module_accounts:\n    get:\n      summary: ModuleAccounts returns all the existing module accounts.\n      description: \"Since: cosmos-sdk 0.46\"\n      operationId: ModuleAccounts_A46V7\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  accounts:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                description: >-\n                  QueryModuleAccountsResponse is the response type for the\n                  Query/ModuleAccounts RPC method.\n\n\n                  Since: cosmos-sdk 0.46\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/auth/v1beta1/module_accounts/{name}\":\n    get:\n      summary: ModuleAccountByName returns the module account info by module name\n      operationId: ModuleAccountByName_R830P\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  account:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                description: QueryModuleAccountByNameResponse is the response type for the\n                  Query/ModuleAccountByName RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: name\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/auth/v1beta1/params:\n    get:\n      summary: Params queries all parameters.\n      operationId: Params_NV54V\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  params:\n                    description: params defines the parameters of the module.\n                    type: object\n                    properties:\n                      max_memo_characters:\n                        type: string\n                        format: uint64\n                      tx_sig_limit:\n                        type: string\n                        format: uint64\n                      tx_size_cost_per_byte:\n                        type: string\n                        format: uint64\n                      sig_verify_cost_ed25519:\n                        type: string\n                        format: uint64\n                      sig_verify_cost_secp256k1:\n                        type: string\n                        format: uint64\n                description: QueryParamsResponse is the response type for the Query/Params RPC\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/evidence/v1beta1/evidence:\n    get:\n      summary: AllEvidence queries all evidence.\n      operationId: AllEvidence_WTNNZ\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  evidence:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                    description: evidence returns all evidences.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: >-\n                  QueryAllEvidenceResponse is the response type for the\n                  Query/AllEvidence RPC\n\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/evidence/v1beta1/evidence/{hash}\":\n    get:\n      summary: Evidence queries evidence based on evidence hash.\n      operationId: Evidence_VCI4U\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  evidence:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                    description: evidence returns the requested evidence.\n                description: QueryEvidenceResponse is the response type for the Query/Evidence\n                  RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: hash\n          description: |-\n            hash defines the evidence hash of the requested evidence.\n\n            Since: cosmos-sdk 0.47\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: evidence_hash\n          description: |-\n            evidence_hash defines the hash of the requested evidence.\n            Deprecated: Use hash, a HEX encoded string, instead.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n      tags:\n        - gRPC Gateway API\n  /ibc/core/client/v1/client_states:\n    get:\n      summary: ClientStates queries all the IBC light clients of a chain.\n      operationId: ClientStates_G5T1X\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  client_states:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        client_id:\n                          type: string\n                          title: client identifier\n                        client_state:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                          title: client state\n                      description: >-\n                        IdentifiedClientState defines a client state with an\n                        additional client\n\n                        identifier field.\n                    description: list of stored ClientStates of the chain.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                    title: pagination response\n                description: >-\n                  QueryClientStatesResponse is the response type for the\n                  Query/ClientStates RPC\n\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/ibc/core/client/v1/client_states/{client_id}\":\n    get:\n      summary: ClientState queries an IBC light client.\n      operationId: ClientState_ET75Z\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  client_state:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                    title: client state associated with the request identifier\n                  proof:\n                    type: string\n                    format: byte\n                    title: merkle proof of existence\n                  proof_height:\n                    title: height at which the proof was retrieved\n                    type: object\n                    properties:\n                      revision_number:\n                        type: string\n                        format: uint64\n                        title: the revision that the client is currently on\n                      revision_height:\n                        type: string\n                        format: uint64\n                        title: the height within the given revision\n                    description: >-\n                      Normally the RevisionHeight is incremented at each height\n                      while keeping\n\n                      RevisionNumber the same. However some consensus algorithms may choose to\n\n                      reset the height in certain conditions e.g. hard forks, state-machine\n\n                      breaking changes In these cases, the RevisionNumber is incremented so that\n\n                      height continues to be monitonically increasing even as the RevisionHeight\n\n                      gets reset\n                description: >-\n                  QueryClientStateResponse is the response type for the\n                  Query/ClientState RPC\n\n                  method. Besides the client state, it includes a proof and the height from\n\n                  which the proof was retrieved.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: client_id\n          description: client state unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/ibc/core/client/v1/client_status/{client_id}\":\n    get:\n      summary: Status queries the status of an IBC client.\n      operationId: ClientStatus_I48L1\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  status:\n                    type: string\n                description: >-\n                  QueryClientStatusResponse is the response type for the\n                  Query/ClientStatus RPC\n\n                  method. It returns the current status of the IBC client.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: client_id\n          description: client unique identifier\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/ibc/core/client/v1/consensus_states/{client_id}\":\n    get:\n      summary: |-\n        ConsensusStates queries all the consensus state associated with a given\n        client.\n      operationId: ConsensusStates_OEIZR\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  consensus_states:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        height:\n                          title: consensus state height\n                          type: object\n                          properties:\n                            revision_number:\n                              type: string\n                              format: uint64\n                              title: the revision that the client is currently on\n                            revision_height:\n                              type: string\n                              format: uint64\n                              title: the height within the given revision\n                          description: >-\n                            Normally the RevisionHeight is incremented at each\n                            height while keeping\n\n                            RevisionNumber the same. However some consensus algorithms may choose to\n\n                            reset the height in certain conditions e.g. hard forks, state-machine\n\n                            breaking changes In these cases, the RevisionNumber is incremented so that\n\n                            height continues to be monitonically increasing even as the RevisionHeight\n\n                            gets reset\n                        consensus_state:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                          title: consensus state\n                      description: >-\n                        ConsensusStateWithHeight defines a consensus state with\n                        an additional height\n\n                        field.\n                    title: consensus states associated with the identifier\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                    title: pagination response\n                title: |-\n                  QueryConsensusStatesResponse is the response type for the\n                  Query/ConsensusStates RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: client_id\n          description: client identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/ibc/core/client/v1/consensus_states/{client_id}/heights\":\n    get:\n      summary: ConsensusStateHeights queries the height of every consensus states\n        associated with a given client.\n      operationId: ConsensusStateHeights_03B71\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  consensus_state_heights:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        revision_number:\n                          type: string\n                          format: uint64\n                          title: the revision that the client is currently on\n                        revision_height:\n                          type: string\n                          format: uint64\n                          title: the height within the given revision\n                      description: >-\n                        Normally the RevisionHeight is incremented at each\n                        height while keeping\n\n                        RevisionNumber the same. However some consensus algorithms may choose to\n\n                        reset the height in certain conditions e.g. hard forks, state-machine\n\n                        breaking changes In these cases, the RevisionNumber is incremented so that\n\n                        height continues to be monitonically increasing even as the RevisionHeight\n\n                        gets reset\n                      title: >-\n                        Height is a monotonically increasing data type\n\n                        that can be compared against another Height for the purposes of updating and\n\n                        freezing clients\n                    title: consensus state heights\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                    title: pagination response\n                title: >-\n                  QueryConsensusStateHeightsResponse is the response type for\n                  the\n\n                  Query/ConsensusStateHeights RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: client_id\n          description: client identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/ibc/core/client/v1/consensus_states/{client_id}/revision/{revision_number}/height/{revision_height}\":\n    get:\n      summary: >-\n        ConsensusState queries a consensus state associated with a client state\n        at\n\n        a given height.\n      operationId: ConsensusState_AYG3G\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  consensus_state:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                    title: consensus state associated with the client identifier at the given height\n                  proof:\n                    type: string\n                    format: byte\n                    title: merkle proof of existence\n                  proof_height:\n                    type: object\n                    properties:\n                      revision_number:\n                        type: string\n                        format: uint64\n                        title: the revision that the client is currently on\n                      revision_height:\n                        type: string\n                        format: uint64\n                        title: the height within the given revision\n                    description: >-\n                      Normally the RevisionHeight is incremented at each height\n                      while keeping\n\n                      RevisionNumber the same. However some consensus algorithms may choose to\n\n                      reset the height in certain conditions e.g. hard forks, state-machine\n\n                      breaking changes In these cases, the RevisionNumber is incremented so that\n\n                      height continues to be monitonically increasing even as the RevisionHeight\n\n                      gets reset\n                    title: >-\n                      Height is a monotonically increasing data type\n\n                      that can be compared against another Height for the purposes of updating and\n\n                      freezing clients\n                title: >-\n                  QueryConsensusStateResponse is the response type for the\n                  Query/ConsensusState\n\n                  RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: client_id\n          description: client identifier\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: revision_number\n          description: consensus state revision number\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n        - name: revision_height\n          description: consensus state revision height\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n        - name: latest_height\n          description: >-\n            latest_height overrrides the height field and queries the latest\n            stored\n\n            ConsensusState.\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  /ibc/core/client/v1/params:\n    get:\n      summary: ClientParams queries all parameters of the ibc client submodule.\n      operationId: ClientParams_XMXO9\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  params:\n                    description: params defines the parameters of the module.\n                    type: object\n                    properties:\n                      allowed_clients:\n                        type: array\n                        items:\n                          type: string\n                        description: >-\n                          allowed_clients defines the list of allowed client\n                          state types which can be created\n\n                          and interacted with. If a client type is removed from the allowed clients list, usage\n\n                          of this client will be disabled until it is added again to the list.\n                description: >-\n                  QueryClientParamsResponse is the response type for the\n                  Query/ClientParams RPC\n\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /ibc/core/client/v1/upgraded_client_states:\n    get:\n      summary: UpgradedClientState queries an Upgraded IBC light client.\n      operationId: UpgradedClientState_0T6RN\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  upgraded_client_state:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                    title: client state associated with the request identifier\n                description: |-\n                  QueryUpgradedClientStateResponse is the response type for the\n                  Query/UpgradedClientState RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /ibc/core/client/v1/upgraded_consensus_states:\n    get:\n      summary: UpgradedConsensusState queries an Upgraded IBC consensus state.\n      operationId: UpgradedConsensusState_T13SE\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  upgraded_consensus_state:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                    title: Consensus state associated with the request identifier\n                description: >-\n                  QueryUpgradedConsensusStateResponse is the response type for\n                  the\n\n                  Query/UpgradedConsensusState RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/authz/v1beta1/grants:\n    get:\n      summary: Returns list of `Authorization`, granted to the grantee by the granter.\n      operationId: Grants_OHMNO\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  grants:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        authorization:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                        expiration:\n                          type: string\n                          format: date-time\n                          title: >-\n                            time when the grant will expire and will be pruned.\n                            If null, then the grant\n\n                            doesn't have a time expiration (other conditions  in `authorization`\n\n                            may apply to invalidate the grant)\n                      description: |-\n                        Grant gives permissions to execute\n                        the provide method with expiration time.\n                    description: authorizations is a list of grants granted for grantee by granter.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: QueryGrantsResponse is the response type for the\n                  Query/Authorizations RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: granter\n          in: query\n          required: false\n          schema:\n            type: string\n        - name: grantee\n          in: query\n          required: false\n          schema:\n            type: string\n        - name: msg_type_url\n          description: Optional, msg_type_url, when set, will query only grants matching\n            given msg type.\n          in: query\n          required: false\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/authz/v1beta1/grants/grantee/{grantee}\":\n    get:\n      summary: GranteeGrants returns a list of `GrantAuthorization` by grantee.\n      description: \"Since: cosmos-sdk 0.46\"\n      operationId: GranteeGrants_2HZ2F\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  grants:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        granter:\n                          type: string\n                        grantee:\n                          type: string\n                        authorization:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                        expiration:\n                          type: string\n                          format: date-time\n                      title: >-\n                        GrantAuthorization extends a grant with both the\n                        addresses of the grantee and granter.\n\n                        It is used in genesis.proto and query.proto\n                    description: grants is a list of grants granted to the grantee.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: QueryGranteeGrantsResponse is the response type for the\n                  Query/GranteeGrants RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: grantee\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/authz/v1beta1/grants/granter/{granter}\":\n    get:\n      summary: GranterGrants returns list of `GrantAuthorization`, granted by granter.\n      description: \"Since: cosmos-sdk 0.46\"\n      operationId: GranterGrants_5J801\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  grants:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        granter:\n                          type: string\n                        grantee:\n                          type: string\n                        authorization:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                        expiration:\n                          type: string\n                          format: date-time\n                      title: >-\n                        GrantAuthorization extends a grant with both the\n                        addresses of the grantee and granter.\n\n                        It is used in genesis.proto and query.proto\n                    description: grants is a list of grants granted by the granter.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: QueryGranterGrantsResponse is the response type for the\n                  Query/GranterGrants RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: granter\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/liquidity/v1beta1/params:\n    get:\n      summary: Get all parameters of the liquidity module.\n      operationId: Params_PSZ1M\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  params:\n                    description: params holds all the parameters of this module.\n                    type: object\n                    properties:\n                      pool_types:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            id:\n                              type: integer\n                              format: int64\n                              title: >-\n                                This is the id of the pool_type that is used as\n                                pool_type_id for pool\n\n                                creation. In this version, only pool-type-id 1 is supported.\n\n                                {\"id\":1,\"name\":\"ConstantProductLiquidityPool\",\"min_reserve_coin_num\":2,\"max_reserve_coin_num\":2,\"description\":\"\"}\n                            name:\n                              type: string\n                              description: name of the pool type.\n                            min_reserve_coin_num:\n                              type: integer\n                              format: int64\n                              description: >-\n                                minimum number of reserveCoins for\n                                LiquidityPoolType, only 2 reserve coins\n\n                                are supported.\n                            max_reserve_coin_num:\n                              type: integer\n                              format: int64\n                              description: >-\n                                maximum number of reserveCoins for\n                                LiquidityPoolType, only 2 reserve coins\n\n                                are supported.\n                            description:\n                              type: string\n                              description: description of the pool type.\n                          description: >-\n                            Structure for the pool type to distinguish the\n                            characteristics of the reserve\n\n                            pools.\n                        title: list of available pool types\n                      min_init_deposit_amount:\n                        type: string\n                        description: >-\n                          Minimum number of coins to be deposited to the\n                          liquidity pool on pool\n\n                          creation.\n                      init_pool_coin_mint_amount:\n                        type: string\n                        description: Initial mint amount of pool coins upon pool creation.\n                      max_reserve_coin_amount:\n                        type: string\n                        description: >-\n                          Limit the size of each liquidity pool to minimize\n                          risk. In development, set\n\n                          to 0 for no limit. In production, set a limit.\n                      pool_creation_fee:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n                        description: Fee paid to create a Liquidity Pool. Set a fee to prevent spamming.\n                      swap_fee_rate:\n                        type: string\n                        description: Swap fee rate for every executed swap.\n                      withdraw_fee_rate:\n                        type: string\n                        description: Reserve coin withdrawal with less proportion by withdrawFeeRate.\n                      max_order_amount_ratio:\n                        type: string\n                        description: Maximum ratio of reserve coins that can be ordered at a swap order.\n                      unit_batch_height:\n                        type: integer\n                        format: int64\n                        description: The smallest unit batch height for every liquidity pool.\n                      circuit_breaker_enabled:\n                        type: boolean\n                        description: >-\n                          Circuit breaker enables or disables transaction\n                          messages in liquidity\n\n                          module.\n                description: >-\n                  the response type for the QueryParamsResponse RPC method. This\n                  includes\n\n                  current parameter of the liquidity module.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/liquidity/v1beta1/pools:\n    get:\n      summary: Get existing liquidity pools.\n      operationId: LiquidityPools_W7CWM\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  pools:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        id:\n                          type: string\n                          format: uint64\n                          title: id of the pool\n                        type_id:\n                          type: integer\n                          format: int64\n                          title: id of the pool_type\n                        reserve_coin_denoms:\n                          type: array\n                          items:\n                            type: string\n                          title: denoms of reserve coin pair of the pool\n                        reserve_account_address:\n                          type: string\n                          title: reserve account address of the pool\n                        pool_coin_denom:\n                          type: string\n                          title: denom of pool coin of the pool\n                      description: Pool defines the liquidity pool that contains pool information.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: >-\n                  the response type for the QueryLiquidityPoolsResponse RPC\n                  method. This\n\n                  includes a list of all existing liquidity pools and paging results that\n\n                  contain next_key and total count.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/liquidity/v1beta1/pools/pool_coin_denom/{pool_coin_denom}\":\n    get:\n      summary: Get specific liquidity pool corresponding to the pool_coin_denom.\n      operationId: LiquidityPoolByPoolCoinDenom_90R2T\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  pool:\n                    type: object\n                    properties:\n                      id:\n                        type: string\n                        format: uint64\n                        title: id of the pool\n                      type_id:\n                        type: integer\n                        format: int64\n                        title: id of the pool_type\n                      reserve_coin_denoms:\n                        type: array\n                        items:\n                          type: string\n                        title: denoms of reserve coin pair of the pool\n                      reserve_account_address:\n                        type: string\n                        title: reserve account address of the pool\n                      pool_coin_denom:\n                        type: string\n                        title: denom of pool coin of the pool\n                    description: Pool defines the liquidity pool that contains pool information.\n                description: >-\n                  the response type for the QueryLiquidityPoolResponse RPC\n                  method. Returns the\n\n                  liquidity pool that corresponds to the requested pool_id.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pool_coin_denom\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/liquidity/v1beta1/pools/reserve_acc/{reserve_acc}\":\n    get:\n      summary: Get specific liquidity pool corresponding to the reserve account.\n      operationId: LiquidityPoolByReserveAcc_824YS\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  pool:\n                    type: object\n                    properties:\n                      id:\n                        type: string\n                        format: uint64\n                        title: id of the pool\n                      type_id:\n                        type: integer\n                        format: int64\n                        title: id of the pool_type\n                      reserve_coin_denoms:\n                        type: array\n                        items:\n                          type: string\n                        title: denoms of reserve coin pair of the pool\n                      reserve_account_address:\n                        type: string\n                        title: reserve account address of the pool\n                      pool_coin_denom:\n                        type: string\n                        title: denom of pool coin of the pool\n                    description: Pool defines the liquidity pool that contains pool information.\n                description: >-\n                  the response type for the QueryLiquidityPoolResponse RPC\n                  method. Returns the\n\n                  liquidity pool that corresponds to the requested pool_id.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: reserve_acc\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/liquidity/v1beta1/pools/{pool_id}\":\n    get:\n      summary: Get specific liquidity pool.\n      operationId: LiquidityPool_GVMM2\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  pool:\n                    type: object\n                    properties:\n                      id:\n                        type: string\n                        format: uint64\n                        title: id of the pool\n                      type_id:\n                        type: integer\n                        format: int64\n                        title: id of the pool_type\n                      reserve_coin_denoms:\n                        type: array\n                        items:\n                          type: string\n                        title: denoms of reserve coin pair of the pool\n                      reserve_account_address:\n                        type: string\n                        title: reserve account address of the pool\n                      pool_coin_denom:\n                        type: string\n                        title: denom of pool coin of the pool\n                    description: Pool defines the liquidity pool that contains pool information.\n                description: >-\n                  the response type for the QueryLiquidityPoolResponse RPC\n                  method. Returns the\n\n                  liquidity pool that corresponds to the requested pool_id.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pool_id\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/liquidity/v1beta1/pools/{pool_id}/batch\":\n    get:\n      summary: Get the pool's current batch.\n      operationId: LiquidityPoolBatch_80103\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  batch:\n                    type: object\n                    properties:\n                      pool_id:\n                        type: string\n                        format: uint64\n                        title: id of the pool\n                      index:\n                        type: string\n                        format: uint64\n                        title: index of this batch\n                      begin_height:\n                        type: string\n                        format: int64\n                        title: height where this batch is started\n                      deposit_msg_index:\n                        type: string\n                        format: uint64\n                        title: last index of DepositMsgStates\n                      withdraw_msg_index:\n                        type: string\n                        format: uint64\n                        title: last index of WithdrawMsgStates\n                      swap_msg_index:\n                        type: string\n                        format: uint64\n                        title: last index of SwapMsgStates\n                      executed:\n                        type: boolean\n                        title: true if executed, false if not executed\n                    description: >-\n                      PoolBatch defines the batch or batches of a given\n                      liquidity pool that\n\n                      contains indexes of deposit, withdraw, and swap messages. Index param\n\n                      increments by 1 if the pool id is same.\n                description: >-\n                  the response type for the QueryLiquidityPoolBatchResponse RPC\n                  method. Returns\n\n                  the liquidity pool batch that corresponds to the requested pool_id.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pool_id\n          description: id of the target pool for query\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/liquidity/v1beta1/pools/{pool_id}/batch/deposits\":\n    get:\n      summary: Get all deposit messages in the pool's current batch.\n      operationId: PoolBatchDepositMsgs_POD1A\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  deposits:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        msg_height:\n                          type: string\n                          format: int64\n                          title: height where this message is appended to the batch\n                        msg_index:\n                          type: string\n                          format: uint64\n                          title: index of this deposit message in this liquidity pool\n                        executed:\n                          type: boolean\n                          title: true if executed on this batch, false if not executed\n                        succeeded:\n                          type: boolean\n                          title: true if executed successfully on this batch, false if failed\n                        to_be_deleted:\n                          type: boolean\n                          title: true if ready to be deleted on kvstore, false if not ready to be deleted\n                        msg:\n                          title: MsgDepositWithinBatch\n                          type: object\n                          properties:\n                            depositor_address:\n                              type: string\n                            pool_id:\n                              type: string\n                              format: uint64\n                              title: id of the target pool\n                            deposit_coins:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  denom:\n                                    type: string\n                                  amount:\n                                    type: string\n                                description: >-\n                                  Coin defines a token with a denomination and\n                                  an amount.\n\n\n                                  NOTE: The amount field is an Int which implements the custom method\n\n                                  signatures required by gogoproto.\n                              title: reserve coin pair of the pool to deposit\n                          description: >-\n                            `MsgDepositWithinBatch defines` an `sdk.Msg` type\n                            that supports submitting\n\n                            a deposit request to the batch of the liquidity pool.\n\n                            Deposit is submitted to the batch of the Liquidity pool with the specified\n\n                            `pool_id`, `deposit_coins` for reserve.\n\n                            This request is stacked in the batch of the liquidity pool, is not processed\n\n                            immediately, and is processed in the `endblock` at the same time as other\n\n                            requests.\n\n\n                            See:\n\n                            https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n                      description: >-\n                        DepositMsgState defines the state of deposit message\n                        that contains state\n\n                        information as it is processed in the next batch or batches.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: >-\n                  the response type for the QueryPoolBatchDeposit RPC method.\n                  This includes a\n\n                  list of all currently existing deposit messages of the batch and paging\n\n                  results that contain next_key and total count.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pool_id\n          description: id of the target pool for query\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/liquidity/v1beta1/pools/{pool_id}/batch/deposits/{msg_index}\":\n    get:\n      summary: Get a specific deposit message in the pool's current batch.\n      operationId: PoolBatchDepositMsg_DLP6J\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  deposit:\n                    type: object\n                    properties:\n                      msg_height:\n                        type: string\n                        format: int64\n                        title: height where this message is appended to the batch\n                      msg_index:\n                        type: string\n                        format: uint64\n                        title: index of this deposit message in this liquidity pool\n                      executed:\n                        type: boolean\n                        title: true if executed on this batch, false if not executed\n                      succeeded:\n                        type: boolean\n                        title: true if executed successfully on this batch, false if failed\n                      to_be_deleted:\n                        type: boolean\n                        title: true if ready to be deleted on kvstore, false if not ready to be deleted\n                      msg:\n                        title: MsgDepositWithinBatch\n                        type: object\n                        properties:\n                          depositor_address:\n                            type: string\n                          pool_id:\n                            type: string\n                            format: uint64\n                            title: id of the target pool\n                          deposit_coins:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                denom:\n                                  type: string\n                                amount:\n                                  type: string\n                              description: >-\n                                Coin defines a token with a denomination and an\n                                amount.\n\n\n                                NOTE: The amount field is an Int which implements the custom method\n\n                                signatures required by gogoproto.\n                            title: reserve coin pair of the pool to deposit\n                        description: >-\n                          `MsgDepositWithinBatch defines` an `sdk.Msg` type that\n                          supports submitting\n\n                          a deposit request to the batch of the liquidity pool.\n\n                          Deposit is submitted to the batch of the Liquidity pool with the specified\n\n                          `pool_id`, `deposit_coins` for reserve.\n\n                          This request is stacked in the batch of the liquidity pool, is not processed\n\n                          immediately, and is processed in the `endblock` at the same time as other\n\n                          requests.\n\n\n                          See:\n\n                          https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n                    description: >-\n                      DepositMsgState defines the state of deposit message that\n                      contains state\n\n                      information as it is processed in the next batch or batches.\n                description: >-\n                  the response type for the QueryPoolBatchDepositMsg RPC method.\n                  This includes\n\n                  a batch swap message of the batch.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pool_id\n          description: id of the target pool for query\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n        - name: msg_index\n          description: target msg_index of the pool\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/liquidity/v1beta1/pools/{pool_id}/batch/swaps\":\n    get:\n      summary: Get all swap messages in the pool's current batch.\n      operationId: PoolBatchSwapMsgs_YUF1Y\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  swaps:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        msg_height:\n                          type: string\n                          format: int64\n                          title: height where this message is appended to the batch\n                        msg_index:\n                          type: string\n                          format: uint64\n                          title: index of this swap message in this liquidity pool\n                        executed:\n                          type: boolean\n                          title: true if executed on this batch, false if not executed\n                        succeeded:\n                          type: boolean\n                          title: true if executed successfully on this batch, false if failed\n                        to_be_deleted:\n                          type: boolean\n                          title: true if ready to be deleted on kvstore, false if not ready to be deleted\n                        order_expiry_height:\n                          type: string\n                          format: int64\n                          title: >-\n                            swap orders are cancelled when current height is\n                            equal to or higher than\n\n                            ExpiryHeight\n                        exchanged_offer_coin:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n                          title: offer coin exchanged until now\n                        remaining_offer_coin:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n                          title: offer coin currently remaining to be exchanged\n                        reserved_offer_coin_fee:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n                          title: reserve fee for pays fee in half offer coin\n                        msg:\n                          title: MsgSwapWithinBatch\n                          type: object\n                          properties:\n                            swap_requester_address:\n                              type: string\n                              title: address of swap requester\n                            pool_id:\n                              type: string\n                              format: uint64\n                              description: >-\n                                id of swap type, must match the value in the\n                                pool. Only `swap_type_id` 1 is\n\n                                supported.\n                            swap_type_id:\n                              type: integer\n                              format: int64\n                              description: id of swap type. Must match the value in the pool.\n                            offer_coin:\n                              type: object\n                              properties:\n                                denom:\n                                  type: string\n                                amount:\n                                  type: string\n                              description: >-\n                                Coin defines a token with a denomination and an\n                                amount.\n\n\n                                NOTE: The amount field is an Int which implements the custom method\n\n                                signatures required by gogoproto.\n                            demand_coin_denom:\n                              type: string\n                              description: >-\n                                denom of demand coin to be exchanged on the swap\n                                request, must match the\n\n                                denom in the pool.\n                            offer_coin_fee:\n                              type: object\n                              properties:\n                                denom:\n                                  type: string\n                                amount:\n                                  type: string\n                              description: >-\n                                Coin defines a token with a denomination and an\n                                amount.\n\n\n                                NOTE: The amount field is an Int which implements the custom method\n\n                                signatures required by gogoproto.\n                            order_price:\n                              type: string\n                              description: >-\n                                limit order price for the order, the price is\n                                the exchange ratio of X/Y\n\n                                where X is the amount of the first coin and Y is the amount\n\n                                of the second coin when their denoms are sorted alphabetically.\n                          description: >-\n                            `MsgSwapWithinBatch` defines an sdk.Msg type that\n                            supports submitting a swap\n\n                            offer request to the batch of the liquidity pool. Submit swap offer to the\n\n                            liquidity pool batch with the specified the `pool_id`, `swap_type_id`,\n\n                            `demand_coin_denom` with the coin and the price you're offering\n\n                            and `offer_coin_fee` must be half of offer coin amount * current\n\n                            `params.swap_fee_rate` and ceil for reservation to pay fees. This request is\n\n                            stacked in the batch of the liquidity pool, is not processed immediately, and\n\n                            is processed in the `endblock` at the same time as other requests. You must\n\n                            request the same fields as the pool. Only the default `swap_type_id` 1 is\n\n                            supported.\n\n\n                            See: https://github.com/gravity-devs/liquidity/tree/develop/doc\n\n                            https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n                      description: >-\n                        SwapMsgState defines the state of the swap message that\n                        contains state\n\n                        information as the message is processed in the next batch or batches.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: >-\n                  the response type for the QueryPoolBatchSwapMsgs RPC method.\n                  This includes\n\n                  list of all currently existing swap messages of the batch and paging results\n\n                  that contain next_key and total count.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pool_id\n          description: id of the target pool for query\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/liquidity/v1beta1/pools/{pool_id}/batch/swaps/{msg_index}\":\n    get:\n      summary: Get a specific swap message in the pool's current batch.\n      operationId: PoolBatchSwapMsg_X08QJ\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  swap:\n                    type: object\n                    properties:\n                      msg_height:\n                        type: string\n                        format: int64\n                        title: height where this message is appended to the batch\n                      msg_index:\n                        type: string\n                        format: uint64\n                        title: index of this swap message in this liquidity pool\n                      executed:\n                        type: boolean\n                        title: true if executed on this batch, false if not executed\n                      succeeded:\n                        type: boolean\n                        title: true if executed successfully on this batch, false if failed\n                      to_be_deleted:\n                        type: boolean\n                        title: true if ready to be deleted on kvstore, false if not ready to be deleted\n                      order_expiry_height:\n                        type: string\n                        format: int64\n                        title: >-\n                          swap orders are cancelled when current height is equal\n                          to or higher than\n\n                          ExpiryHeight\n                      exchanged_offer_coin:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the custom method\n\n                          signatures required by gogoproto.\n                        title: offer coin exchanged until now\n                      remaining_offer_coin:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the custom method\n\n                          signatures required by gogoproto.\n                        title: offer coin currently remaining to be exchanged\n                      reserved_offer_coin_fee:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the custom method\n\n                          signatures required by gogoproto.\n                        title: reserve fee for pays fee in half offer coin\n                      msg:\n                        title: MsgSwapWithinBatch\n                        type: object\n                        properties:\n                          swap_requester_address:\n                            type: string\n                            title: address of swap requester\n                          pool_id:\n                            type: string\n                            format: uint64\n                            description: >-\n                              id of swap type, must match the value in the pool.\n                              Only `swap_type_id` 1 is\n\n                              supported.\n                          swap_type_id:\n                            type: integer\n                            format: int64\n                            description: id of swap type. Must match the value in the pool.\n                          offer_coin:\n                            type: object\n                            properties:\n                              denom:\n                                type: string\n                              amount:\n                                type: string\n                            description: >-\n                              Coin defines a token with a denomination and an\n                              amount.\n\n\n                              NOTE: The amount field is an Int which implements the custom method\n\n                              signatures required by gogoproto.\n                          demand_coin_denom:\n                            type: string\n                            description: >-\n                              denom of demand coin to be exchanged on the swap\n                              request, must match the\n\n                              denom in the pool.\n                          offer_coin_fee:\n                            type: object\n                            properties:\n                              denom:\n                                type: string\n                              amount:\n                                type: string\n                            description: >-\n                              Coin defines a token with a denomination and an\n                              amount.\n\n\n                              NOTE: The amount field is an Int which implements the custom method\n\n                              signatures required by gogoproto.\n                          order_price:\n                            type: string\n                            description: >-\n                              limit order price for the order, the price is the\n                              exchange ratio of X/Y\n\n                              where X is the amount of the first coin and Y is the amount\n\n                              of the second coin when their denoms are sorted alphabetically.\n                        description: >-\n                          `MsgSwapWithinBatch` defines an sdk.Msg type that\n                          supports submitting a swap\n\n                          offer request to the batch of the liquidity pool. Submit swap offer to the\n\n                          liquidity pool batch with the specified the `pool_id`, `swap_type_id`,\n\n                          `demand_coin_denom` with the coin and the price you're offering\n\n                          and `offer_coin_fee` must be half of offer coin amount * current\n\n                          `params.swap_fee_rate` and ceil for reservation to pay fees. This request is\n\n                          stacked in the batch of the liquidity pool, is not processed immediately, and\n\n                          is processed in the `endblock` at the same time as other requests. You must\n\n                          request the same fields as the pool. Only the default `swap_type_id` 1 is\n\n                          supported.\n\n\n                          See: https://github.com/gravity-devs/liquidity/tree/develop/doc\n\n                          https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n                    description: >-\n                      SwapMsgState defines the state of the swap message that\n                      contains state\n\n                      information as the message is processed in the next batch or batches.\n                description: >-\n                  the response type for the QueryPoolBatchSwapMsg RPC method.\n                  This includes a\n\n                  batch swap message of the batch.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pool_id\n          description: id of the target pool for query\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n        - name: msg_index\n          description: target msg_index of the pool\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/liquidity/v1beta1/pools/{pool_id}/batch/withdraws\":\n    get:\n      summary: Get all withdraw messages in the pool's current batch.\n      operationId: PoolBatchWithdrawMsgs_605RT\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  withdraws:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        msg_height:\n                          type: string\n                          format: int64\n                          title: height where this message is appended to the batch\n                        msg_index:\n                          type: string\n                          format: uint64\n                          title: index of this withdraw message in this liquidity pool\n                        executed:\n                          type: boolean\n                          title: true if executed on this batch, false if not executed\n                        succeeded:\n                          type: boolean\n                          title: true if executed successfully on this batch, false if failed\n                        to_be_deleted:\n                          type: boolean\n                          title: true if ready to be deleted on kvstore, false if not ready to be deleted\n                        msg:\n                          title: MsgWithdrawWithinBatch\n                          type: object\n                          properties:\n                            withdrawer_address:\n                              type: string\n                            pool_id:\n                              type: string\n                              format: uint64\n                              title: id of the target pool\n                            pool_coin:\n                              type: object\n                              properties:\n                                denom:\n                                  type: string\n                                amount:\n                                  type: string\n                              description: >-\n                                Coin defines a token with a denomination and an\n                                amount.\n\n\n                                NOTE: The amount field is an Int which implements the custom method\n\n                                signatures required by gogoproto.\n                          description: >-\n                            `MsgWithdrawWithinBatch` defines an `sdk.Msg` type\n                            that supports submitting\n\n                            a withdraw request to the batch of the liquidity pool.\n\n                            Withdraw is submitted to the batch from the Liquidity pool with the\n\n                            specified `pool_id`, `pool_coin` of the pool.\n\n                            This request is stacked in the batch of the liquidity pool, is not processed\n\n                            immediately, and is processed in the `endblock` at the same time as other\n\n                            requests.\n\n\n                            See:\n\n                            https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n                      description: >-\n                        WithdrawMsgState defines the state of the withdraw\n                        message that contains\n\n                        state information as the message is processed in the next batch or batches.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: >-\n                  the response type for the QueryPoolBatchWithdraw RPC method.\n                  This includes a\n\n                  list of all currently existing withdraw messages of the batch and paging\n\n                  results that contain next_key and total count.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pool_id\n          description: id of the target pool for query\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/liquidity/v1beta1/pools/{pool_id}/batch/withdraws/{msg_index}\":\n    get:\n      summary: Get a specific withdraw message in the pool's current batch.\n      operationId: PoolBatchWithdrawMsg_84SDG\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  withdraw:\n                    type: object\n                    properties:\n                      msg_height:\n                        type: string\n                        format: int64\n                        title: height where this message is appended to the batch\n                      msg_index:\n                        type: string\n                        format: uint64\n                        title: index of this withdraw message in this liquidity pool\n                      executed:\n                        type: boolean\n                        title: true if executed on this batch, false if not executed\n                      succeeded:\n                        type: boolean\n                        title: true if executed successfully on this batch, false if failed\n                      to_be_deleted:\n                        type: boolean\n                        title: true if ready to be deleted on kvstore, false if not ready to be deleted\n                      msg:\n                        title: MsgWithdrawWithinBatch\n                        type: object\n                        properties:\n                          withdrawer_address:\n                            type: string\n                          pool_id:\n                            type: string\n                            format: uint64\n                            title: id of the target pool\n                          pool_coin:\n                            type: object\n                            properties:\n                              denom:\n                                type: string\n                              amount:\n                                type: string\n                            description: >-\n                              Coin defines a token with a denomination and an\n                              amount.\n\n\n                              NOTE: The amount field is an Int which implements the custom method\n\n                              signatures required by gogoproto.\n                        description: >-\n                          `MsgWithdrawWithinBatch` defines an `sdk.Msg` type\n                          that supports submitting\n\n                          a withdraw request to the batch of the liquidity pool.\n\n                          Withdraw is submitted to the batch from the Liquidity pool with the\n\n                          specified `pool_id`, `pool_coin` of the pool.\n\n                          This request is stacked in the batch of the liquidity pool, is not processed\n\n                          immediately, and is processed in the `endblock` at the same time as other\n\n                          requests.\n\n\n                          See:\n\n                          https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n                    description: >-\n                      WithdrawMsgState defines the state of the withdraw message\n                      that contains\n\n                      state information as the message is processed in the next batch or batches.\n                description: >-\n                  the response type for the QueryPoolBatchWithdrawMsg RPC\n                  method. This includes\n\n                  a batch swap message of the batch.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pool_id\n          description: id of the target pool for query\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n        - name: msg_index\n          description: target msg_index of the pool\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  /cosmwasm/wasm/v1/code:\n    get:\n      summary: Codes gets the metadata for all stored wasm codes\n      operationId: Codes_7UDV9\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  code_infos:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        code_id:\n                          type: string\n                          format: uint64\n                        creator:\n                          type: string\n                        data_hash:\n                          type: string\n                          format: byte\n                        instantiate_permission:\n                          type: object\n                          properties:\n                            permission:\n                              type: string\n                              enum:\n                                - ACCESS_TYPE_UNSPECIFIED\n                                - ACCESS_TYPE_NOBODY\n                                - ACCESS_TYPE_EVERYBODY\n                                - ACCESS_TYPE_ANY_OF_ADDRESSES\n                              default: ACCESS_TYPE_UNSPECIFIED\n                              description: >-\n                                - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified\n                                placeholder for empty value\n                                 - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n                                 - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n                                 - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n                              title: AccessType permission types\n                            addresses:\n                              type: array\n                              items:\n                                type: string\n                          description: AccessConfig access control type.\n                      title: CodeInfoResponse contains code meta data from CodeInfo\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                title: QueryCodesResponse is the response type for the Query/Codes RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmwasm/wasm/v1/code/{code_id}\":\n    get:\n      summary: Code gets the binary code and metadata for a singe wasm code\n      operationId: Code_2D1PE\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  code_info:\n                    type: object\n                    properties:\n                      code_id:\n                        type: string\n                        format: uint64\n                      creator:\n                        type: string\n                      data_hash:\n                        type: string\n                        format: byte\n                      instantiate_permission:\n                        type: object\n                        properties:\n                          permission:\n                            type: string\n                            enum:\n                              - ACCESS_TYPE_UNSPECIFIED\n                              - ACCESS_TYPE_NOBODY\n                              - ACCESS_TYPE_EVERYBODY\n                              - ACCESS_TYPE_ANY_OF_ADDRESSES\n                            default: ACCESS_TYPE_UNSPECIFIED\n                            description: >-\n                              - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified\n                              placeholder for empty value\n                               - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n                               - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n                               - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n                            title: AccessType permission types\n                          addresses:\n                            type: array\n                            items:\n                              type: string\n                        description: AccessConfig access control type.\n                    title: CodeInfoResponse contains code meta data from CodeInfo\n                  data:\n                    type: string\n                    format: byte\n                title: QueryCodeResponse is the response type for the Query/Code RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: code_id\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  \"/cosmwasm/wasm/v1/code/{code_id}/contracts\":\n    get:\n      summary: ContractsByCode lists all smart contracts for a code id\n      operationId: ContractsByCode_DCS9B\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  contracts:\n                    type: array\n                    items:\n                      type: string\n                    title: contracts are a set of contract addresses\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                title: |-\n                  QueryContractsByCodeResponse is the response type for the\n                  Query/ContractsByCode RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: code_id\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmwasm/wasm/v1/codes/params:\n    get:\n      summary: Params gets the module params\n      operationId: Params_0NI93\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  params:\n                    description: params defines the parameters of the module.\n                    type: object\n                    properties:\n                      code_upload_access:\n                        type: object\n                        properties:\n                          permission:\n                            type: string\n                            enum:\n                              - ACCESS_TYPE_UNSPECIFIED\n                              - ACCESS_TYPE_NOBODY\n                              - ACCESS_TYPE_EVERYBODY\n                              - ACCESS_TYPE_ANY_OF_ADDRESSES\n                            default: ACCESS_TYPE_UNSPECIFIED\n                            description: >-\n                              - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified\n                              placeholder for empty value\n                               - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n                               - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n                               - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n                            title: AccessType permission types\n                          addresses:\n                            type: array\n                            items:\n                              type: string\n                        description: AccessConfig access control type.\n                      instantiate_default_permission:\n                        type: string\n                        enum:\n                          - ACCESS_TYPE_UNSPECIFIED\n                          - ACCESS_TYPE_NOBODY\n                          - ACCESS_TYPE_EVERYBODY\n                          - ACCESS_TYPE_ANY_OF_ADDRESSES\n                        default: ACCESS_TYPE_UNSPECIFIED\n                        description: >-\n                          - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified\n                          placeholder for empty value\n                           - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n                           - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n                           - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n                        title: AccessType permission types\n                description: QueryParamsResponse is the response type for the Query/Params RPC\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmwasm/wasm/v1/codes/pinned:\n    get:\n      summary: PinnedCodes gets the pinned code ids\n      operationId: PinnedCodes_W6G74\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  code_ids:\n                    type: array\n                    items:\n                      type: string\n                      format: uint64\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                title: |-\n                  QueryPinnedCodesResponse is the response type for the\n                  Query/PinnedCodes RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmwasm/wasm/v1/contract/{address}\":\n    get:\n      summary: ContractInfo gets the contract meta data\n      operationId: ContractInfo_6MJBN\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  address:\n                    type: string\n                    title: address is the address of the contract\n                  contract_info:\n                    type: object\n                    properties:\n                      code_id:\n                        type: string\n                        format: uint64\n                        title: CodeID is the reference to the stored Wasm code\n                      creator:\n                        type: string\n                        title: Creator address who initially instantiated the contract\n                      admin:\n                        type: string\n                        title: Admin is an optional address that can execute migrations\n                      label:\n                        type: string\n                        description: Label is optional metadata to be stored with a contract instance.\n                      created:\n                        description: Created Tx position when the contract was instantiated.\n                        type: object\n                        properties:\n                          block_height:\n                            type: string\n                            format: uint64\n                            title: BlockHeight is the block the contract was created at\n                          tx_index:\n                            type: string\n                            format: uint64\n                            title: >-\n                              TxIndex is a monotonic counter within the block\n                              (actual transaction index,\n\n                              or gas consumed)\n                      ibc_port_id:\n                        type: string\n                      extension:\n                        type: object\n                        properties:\n                          type_url:\n                            type: string\n                          value:\n                            type: string\n                            format: byte\n                        description: >-\n                          Extension is an extension point to store custom\n                          metadata within the\n\n                          persistence model.\n                    title: ContractInfo stores a WASM contract instance\n                title: >-\n                  QueryContractInfoResponse is the response type for the\n                  Query/ContractInfo RPC\n\n                  method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: address\n          description: address is the address of the contract to query\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cosmwasm/wasm/v1/contract/{address}/history\":\n    get:\n      summary: ContractHistory gets the contract code history\n      operationId: ContractHistory_5CXKC\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  entries:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        operation:\n                          type: string\n                          enum:\n                            - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED\n                            - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT\n                            - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE\n                            - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS\n                          default: CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED\n                          description: >-\n                            - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED:\n                            ContractCodeHistoryOperationTypeUnspecified\n                            placeholder for empty value\n                             - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT: ContractCodeHistoryOperationTypeInit on chain contract instantiation\n                             - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE: ContractCodeHistoryOperationTypeMigrate code migration\n                             - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS: ContractCodeHistoryOperationTypeGenesis based on genesis data\n                          title: ContractCodeHistoryOperationType actions that caused a code change\n                        code_id:\n                          type: string\n                          format: uint64\n                          title: CodeID is the reference to the stored WASM code\n                        updated:\n                          description: Updated Tx position when the operation was executed.\n                          type: object\n                          properties:\n                            block_height:\n                              type: string\n                              format: uint64\n                              title: BlockHeight is the block the contract was created at\n                            tx_index:\n                              type: string\n                              format: uint64\n                              title: >-\n                                TxIndex is a monotonic counter within the block\n                                (actual transaction index,\n\n                                or gas consumed)\n                        msg:\n                          type: string\n                          format: byte\n                      description: ContractCodeHistoryEntry metadata to a contract.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                title: |-\n                  QueryContractHistoryResponse is the response type for the\n                  Query/ContractHistory RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: address\n          description: address is the address of the contract to query\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmwasm/wasm/v1/contract/{address}/raw/{query_data}\":\n    get:\n      summary: RawContractState gets single key from the raw store data of a contract\n      operationId: RawContractState_HN7KQ\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  data:\n                    type: string\n                    format: byte\n                    title: Data contains the raw store data\n                title: |-\n                  QueryRawContractStateResponse is the response type for the\n                  Query/RawContractState RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: address\n          description: address is the address of the contract\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: query_data\n          in: path\n          required: true\n          schema:\n            type: string\n            format: byte\n      tags:\n        - gRPC Gateway API\n  \"/cosmwasm/wasm/v1/contract/{address}/smart/{query_data}\":\n    get:\n      summary: SmartContractState get smart query result from the contract\n      operationId: SmartContractState_7RZK1\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  data:\n                    type: string\n                    format: byte\n                    title: Data contains the json data returned from the smart contract\n                title: |-\n                  QuerySmartContractStateResponse is the response type for the\n                  Query/SmartContractState RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: address\n          description: address is the address of the contract\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: query_data\n          description: QueryData contains the query data passed to the contract\n          in: path\n          required: true\n          schema:\n            type: string\n            format: byte\n      tags:\n        - gRPC Gateway API\n  \"/cosmwasm/wasm/v1/contract/{address}/state\":\n    get:\n      summary: AllContractState gets all raw store data for a single contract\n      operationId: AllContractState_8F65W\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  models:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        key:\n                          type: string\n                          format: byte\n                          title: hex-encode key to read it better (this is often ascii)\n                        value:\n                          type: string\n                          format: byte\n                          title: base64-encode raw value\n                      title: Model is a struct that holds a KV pair\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                title: |-\n                  QueryAllContractStateResponse is the response type for the\n                  Query/AllContractState RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: address\n          description: address is the address of the contract\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmwasm/wasm/v1/contracts/creator/{creator_address}\":\n    get:\n      summary: ContractsByCreator gets the contracts by creator\n      operationId: ContractsByCreator_Y148N\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  contract_addresses:\n                    type: array\n                    items:\n                      type: string\n                    title: ContractAddresses result set\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: |-\n                  QueryContractsByCreatorResponse is the response type for the\n                  Query/ContractsByCreator RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: creator_address\n          description: CreatorAddress is the address of contract creator\n          in: path\n          required: true\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  /cyber/bandwidth/v1beta1/bandwidth/load:\n    get:\n      operationId: Load_3QI57\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  load:\n                    type: string\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  \"/cyber/bandwidth/v1beta1/bandwidth/neuron/{neuron}\":\n    get:\n      operationId: NeuronBandwidth_1DGP1\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  neuron_bandwidth:\n                    type: object\n                    properties:\n                      neuron:\n                        type: string\n                      remained_value:\n                        type: string\n                        format: uint64\n                      last_updated_block:\n                        type: string\n                        format: uint64\n                      max_value:\n                        type: string\n                        format: uint64\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: neuron\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/bandwidth/v1beta1/bandwidth/params:\n    get:\n      operationId: Params_B8C0X\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  params:\n                    type: object\n                    properties:\n                      recovery_period:\n                        type: string\n                        format: uint64\n                      adjust_price_period:\n                        type: string\n                        format: uint64\n                      base_price:\n                        type: string\n                      base_load:\n                        type: string\n                      max_block_bandwidth:\n                        type: string\n                        format: uint64\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cyber/bandwidth/v1beta1/bandwidth/price:\n    get:\n      operationId: Price_LCDUB\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  price:\n                    type: string\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cyber/bandwidth/v1beta1/bandwidth/total:\n    get:\n      operationId: TotalBandwidth_7HIK3\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  total_bandwidth:\n                    type: string\n                    format: uint64\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/base/tendermint/v1beta1/abci_query:\n    get:\n      summary: >-\n        ABCIQuery defines a query handler that supports ABCI queries directly to\n        the\n\n        application, bypassing Tendermint completely. The ABCI query must contain\n\n        a valid and supported path, including app, custom, p2p, and store.\n      description: \"Since: cosmos-sdk 0.46\"\n      operationId: ABCIQuery_5ACTN\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  code:\n                    type: integer\n                    format: int64\n                  log:\n                    type: string\n                  info:\n                    type: string\n                  index:\n                    type: string\n                    format: int64\n                  key:\n                    type: string\n                    format: byte\n                  value:\n                    type: string\n                    format: byte\n                  proof_ops:\n                    type: object\n                    properties:\n                      ops:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            type:\n                              type: string\n                            key:\n                              type: string\n                              format: byte\n                            data:\n                              type: string\n                              format: byte\n                          description: >-\n                            ProofOp defines an operation used for calculating\n                            Merkle root. The data could\n\n                            be arbitrary format, providing necessary data for example neighbouring node\n\n                            hash.\n\n\n                            Note: This type is a duplicate of the ProofOp proto type defined in Tendermint.\n                    description: >-\n                      ProofOps is Merkle proof defined by the list of ProofOps.\n\n\n                      Note: This type is a duplicate of the ProofOps proto type defined in Tendermint.\n                  height:\n                    type: string\n                    format: int64\n                  codespace:\n                    type: string\n                description: >-\n                  ABCIQueryResponse defines the response structure for the\n                  ABCIQuery gRPC query.\n\n\n                  Note: This type is a duplicate of the ResponseQuery proto type defined in\n\n                  Tendermint.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: data\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: path\n          in: query\n          required: false\n          schema:\n            type: string\n        - name: height\n          in: query\n          required: false\n          schema:\n            type: string\n            format: int64\n        - name: prove\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/base/tendermint/v1beta1/blocks/latest:\n    get:\n      summary: GetLatestBlock returns the latest block.\n      operationId: GetLatestBlock_QLNC7\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  block_id:\n                    type: object\n                    properties:\n                      hash:\n                        type: string\n                        format: byte\n                      part_set_header:\n                        type: object\n                        properties:\n                          total:\n                            type: integer\n                            format: int64\n                          hash:\n                            type: string\n                            format: byte\n                        title: PartsetHeader\n                    title: BlockID\n                  block:\n                    type: object\n                    properties:\n                      header:\n                        type: object\n                        properties:\n                          version:\n                            title: basic block info\n                            type: object\n                            properties:\n                              block:\n                                type: string\n                                format: uint64\n                              app:\n                                type: string\n                                format: uint64\n                            description: >-\n                              Consensus captures the consensus rules for\n                              processing a block in the blockchain,\n\n                              including all blockchain data structures and the rules of the application's\n\n                              state transition machine.\n                          chain_id:\n                            type: string\n                          height:\n                            type: string\n                            format: int64\n                          time:\n                            type: string\n                            format: date-time\n                          last_block_id:\n                            title: prev block info\n                            type: object\n                            properties:\n                              hash:\n                                type: string\n                                format: byte\n                              part_set_header:\n                                type: object\n                                properties:\n                                  total:\n                                    type: integer\n                                    format: int64\n                                  hash:\n                                    type: string\n                                    format: byte\n                                title: PartsetHeader\n                          last_commit_hash:\n                            type: string\n                            format: byte\n                            title: hashes of block data\n                          data_hash:\n                            type: string\n                            format: byte\n                          validators_hash:\n                            type: string\n                            format: byte\n                            title: hashes from the app output from the prev block\n                          next_validators_hash:\n                            type: string\n                            format: byte\n                          consensus_hash:\n                            type: string\n                            format: byte\n                          app_hash:\n                            type: string\n                            format: byte\n                          last_results_hash:\n                            type: string\n                            format: byte\n                          evidence_hash:\n                            type: string\n                            format: byte\n                            title: consensus info\n                          proposer_address:\n                            type: string\n                            format: byte\n                        description: Header defines the structure of a block header.\n                      data:\n                        type: object\n                        properties:\n                          txs:\n                            type: array\n                            items:\n                              type: string\n                              format: byte\n                            description: >-\n                              Txs that will be applied by state @\n                              block.Height+1.\n\n                              NOTE: not all txs here are valid.  We're just agreeing on the order first.\n\n                              This means that block.AppHash does not include these txs.\n                        title: Data contains the set of transactions included in the block\n                      evidence:\n                        type: object\n                        properties:\n                          evidence:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                duplicate_vote_evidence:\n                                  type: object\n                                  properties:\n                                    vote_a:\n                                      type: object\n                                      properties:\n                                        type:\n                                          type: string\n                                          enum:\n                                            - SIGNED_MSG_TYPE_UNKNOWN\n                                            - SIGNED_MSG_TYPE_PREVOTE\n                                            - SIGNED_MSG_TYPE_PRECOMMIT\n                                            - SIGNED_MSG_TYPE_PROPOSAL\n                                          default: SIGNED_MSG_TYPE_UNKNOWN\n                                          description: >-\n                                            SignedMsgType is a type of signed\n                                            message in the consensus.\n\n                                             - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                             - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                                        height:\n                                          type: string\n                                          format: int64\n                                        round:\n                                          type: integer\n                                          format: int32\n                                        block_id:\n                                          type: object\n                                          properties:\n                                            hash:\n                                              type: string\n                                              format: byte\n                                            part_set_header:\n                                              type: object\n                                              properties:\n                                                total:\n                                                  type: integer\n                                                  format: int64\n                                                hash:\n                                                  type: string\n                                                  format: byte\n                                              title: PartsetHeader\n                                          title: BlockID\n                                        timestamp:\n                                          type: string\n                                          format: date-time\n                                        validator_address:\n                                          type: string\n                                          format: byte\n                                        validator_index:\n                                          type: integer\n                                          format: int32\n                                        signature:\n                                          type: string\n                                          format: byte\n                                      description: >-\n                                        Vote represents a prevote, precommit, or\n                                        commit vote from validators for\n\n                                        consensus.\n                                    vote_b:\n                                      type: object\n                                      properties:\n                                        type:\n                                          type: string\n                                          enum:\n                                            - SIGNED_MSG_TYPE_UNKNOWN\n                                            - SIGNED_MSG_TYPE_PREVOTE\n                                            - SIGNED_MSG_TYPE_PRECOMMIT\n                                            - SIGNED_MSG_TYPE_PROPOSAL\n                                          default: SIGNED_MSG_TYPE_UNKNOWN\n                                          description: >-\n                                            SignedMsgType is a type of signed\n                                            message in the consensus.\n\n                                             - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                             - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                                        height:\n                                          type: string\n                                          format: int64\n                                        round:\n                                          type: integer\n                                          format: int32\n                                        block_id:\n                                          type: object\n                                          properties:\n                                            hash:\n                                              type: string\n                                              format: byte\n                                            part_set_header:\n                                              type: object\n                                              properties:\n                                                total:\n                                                  type: integer\n                                                  format: int64\n                                                hash:\n                                                  type: string\n                                                  format: byte\n                                              title: PartsetHeader\n                                          title: BlockID\n                                        timestamp:\n                                          type: string\n                                          format: date-time\n                                        validator_address:\n                                          type: string\n                                          format: byte\n                                        validator_index:\n                                          type: integer\n                                          format: int32\n                                        signature:\n                                          type: string\n                                          format: byte\n                                      description: >-\n                                        Vote represents a prevote, precommit, or\n                                        commit vote from validators for\n\n                                        consensus.\n                                    total_voting_power:\n                                      type: string\n                                      format: int64\n                                    validator_power:\n                                      type: string\n                                      format: int64\n                                    timestamp:\n                                      type: string\n                                      format: date-time\n                                  description: DuplicateVoteEvidence contains evidence of a validator signed two\n                                    conflicting votes.\n                                light_client_attack_evidence:\n                                  type: object\n                                  properties:\n                                    conflicting_block:\n                                      type: object\n                                      properties:\n                                        signed_header:\n                                          type: object\n                                          properties:\n                                            header:\n                                              type: object\n                                              properties:\n                                                version:\n                                                  title: basic block info\n                                                  type: object\n                                                  properties:\n                                                    block:\n                                                      type: string\n                                                      format: uint64\n                                                    app:\n                                                      type: string\n                                                      format: uint64\n                                                  description: >-\n                                                    Consensus captures the\n                                                    consensus rules for\n                                                    processing a block in the\n                                                    blockchain,\n\n                                                    including all blockchain data structures and the rules of the application's\n\n                                                    state transition machine.\n                                                chain_id:\n                                                  type: string\n                                                height:\n                                                  type: string\n                                                  format: int64\n                                                time:\n                                                  type: string\n                                                  format: date-time\n                                                last_block_id:\n                                                  title: prev block info\n                                                  type: object\n                                                  properties:\n                                                    hash:\n                                                      type: string\n                                                      format: byte\n                                                    part_set_header:\n                                                      type: object\n                                                      properties:\n                                                        total:\n                                                          type: integer\n                                                          format: int64\n                                                        hash:\n                                                          type: string\n                                                          format: byte\n                                                      title: PartsetHeader\n                                                last_commit_hash:\n                                                  type: string\n                                                  format: byte\n                                                  title: hashes of block data\n                                                data_hash:\n                                                  type: string\n                                                  format: byte\n                                                validators_hash:\n                                                  type: string\n                                                  format: byte\n                                                  title: hashes from the app output from the prev block\n                                                next_validators_hash:\n                                                  type: string\n                                                  format: byte\n                                                consensus_hash:\n                                                  type: string\n                                                  format: byte\n                                                app_hash:\n                                                  type: string\n                                                  format: byte\n                                                last_results_hash:\n                                                  type: string\n                                                  format: byte\n                                                evidence_hash:\n                                                  type: string\n                                                  format: byte\n                                                  title: consensus info\n                                                proposer_address:\n                                                  type: string\n                                                  format: byte\n                                              description: Header defines the structure of a block header.\n                                            commit:\n                                              type: object\n                                              properties:\n                                                height:\n                                                  type: string\n                                                  format: int64\n                                                round:\n                                                  type: integer\n                                                  format: int32\n                                                block_id:\n                                                  type: object\n                                                  properties:\n                                                    hash:\n                                                      type: string\n                                                      format: byte\n                                                    part_set_header:\n                                                      type: object\n                                                      properties:\n                                                        total:\n                                                          type: integer\n                                                          format: int64\n                                                        hash:\n                                                          type: string\n                                                          format: byte\n                                                      title: PartsetHeader\n                                                  title: BlockID\n                                                signatures:\n                                                  type: array\n                                                  items:\n                                                    type: object\n                                                    properties:\n                                                      block_id_flag:\n                                                        type: string\n                                                        enum:\n                                                          - BLOCK_ID_FLAG_UNKNOWN\n                                                          - BLOCK_ID_FLAG_ABSENT\n                                                          - BLOCK_ID_FLAG_COMMIT\n                                                          - BLOCK_ID_FLAG_NIL\n                                                        default: BLOCK_ID_FLAG_UNKNOWN\n                                                        title: BlockIdFlag indicates which BlcokID the signature is for\n                                                      validator_address:\n                                                        type: string\n                                                        format: byte\n                                                      timestamp:\n                                                        type: string\n                                                        format: date-time\n                                                      signature:\n                                                        type: string\n                                                        format: byte\n                                                    description: CommitSig is a part of the Vote included in a Commit.\n                                              description: Commit contains the evidence that a block was committed by a set of\n                                                validators.\n                                        validator_set:\n                                          type: object\n                                          properties:\n                                            validators:\n                                              type: array\n                                              items:\n                                                type: object\n                                                properties:\n                                                  address:\n                                                    type: string\n                                                    format: byte\n                                                  pub_key:\n                                                    type: object\n                                                    properties:\n                                                      ed25519:\n                                                        type: string\n                                                        format: byte\n                                                      secp256k1:\n                                                        type: string\n                                                        format: byte\n                                                    title: PublicKey defines the keys available for use with Validators\n                                                  voting_power:\n                                                    type: string\n                                                    format: int64\n                                                  proposer_priority:\n                                                    type: string\n                                                    format: int64\n                                            proposer:\n                                              type: object\n                                              properties:\n                                                address:\n                                                  type: string\n                                                  format: byte\n                                                pub_key:\n                                                  type: object\n                                                  properties:\n                                                    ed25519:\n                                                      type: string\n                                                      format: byte\n                                                    secp256k1:\n                                                      type: string\n                                                      format: byte\n                                                  title: PublicKey defines the keys available for use with Validators\n                                                voting_power:\n                                                  type: string\n                                                  format: int64\n                                                proposer_priority:\n                                                  type: string\n                                                  format: int64\n                                            total_voting_power:\n                                              type: string\n                                              format: int64\n                                    common_height:\n                                      type: string\n                                      format: int64\n                                    byzantine_validators:\n                                      type: array\n                                      items:\n                                        type: object\n                                        properties:\n                                          address:\n                                            type: string\n                                            format: byte\n                                          pub_key:\n                                            type: object\n                                            properties:\n                                              ed25519:\n                                                type: string\n                                                format: byte\n                                              secp256k1:\n                                                type: string\n                                                format: byte\n                                            title: PublicKey defines the keys available for use with Validators\n                                          voting_power:\n                                            type: string\n                                            format: int64\n                                          proposer_priority:\n                                            type: string\n                                            format: int64\n                                    total_voting_power:\n                                      type: string\n                                      format: int64\n                                    timestamp:\n                                      type: string\n                                      format: date-time\n                                  description: LightClientAttackEvidence contains evidence of a set of validators\n                                    attempting to mislead a light client.\n                      last_commit:\n                        type: object\n                        properties:\n                          height:\n                            type: string\n                            format: int64\n                          round:\n                            type: integer\n                            format: int32\n                          block_id:\n                            type: object\n                            properties:\n                              hash:\n                                type: string\n                                format: byte\n                              part_set_header:\n                                type: object\n                                properties:\n                                  total:\n                                    type: integer\n                                    format: int64\n                                  hash:\n                                    type: string\n                                    format: byte\n                                title: PartsetHeader\n                            title: BlockID\n                          signatures:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                block_id_flag:\n                                  type: string\n                                  enum:\n                                    - BLOCK_ID_FLAG_UNKNOWN\n                                    - BLOCK_ID_FLAG_ABSENT\n                                    - BLOCK_ID_FLAG_COMMIT\n                                    - BLOCK_ID_FLAG_NIL\n                                  default: BLOCK_ID_FLAG_UNKNOWN\n                                  title: BlockIdFlag indicates which BlcokID the signature is for\n                                validator_address:\n                                  type: string\n                                  format: byte\n                                timestamp:\n                                  type: string\n                                  format: date-time\n                                signature:\n                                  type: string\n                                  format: byte\n                              description: CommitSig is a part of the Vote included in a Commit.\n                        description: Commit contains the evidence that a block was committed by a set of\n                          validators.\n                    title: \"Deprecated: please use `sdk_block` instead\"\n                  sdk_block:\n                    title: \"Since: cosmos-sdk 0.47\"\n                    type: object\n                    properties:\n                      header:\n                        type: object\n                        properties:\n                          version:\n                            title: basic block info\n                            type: object\n                            properties:\n                              block:\n                                type: string\n                                format: uint64\n                              app:\n                                type: string\n                                format: uint64\n                            description: >-\n                              Consensus captures the consensus rules for\n                              processing a block in the blockchain,\n\n                              including all blockchain data structures and the rules of the application's\n\n                              state transition machine.\n                          chain_id:\n                            type: string\n                          height:\n                            type: string\n                            format: int64\n                          time:\n                            type: string\n                            format: date-time\n                          last_block_id:\n                            type: object\n                            properties:\n                              hash:\n                                type: string\n                                format: byte\n                              part_set_header:\n                                type: object\n                                properties:\n                                  total:\n                                    type: integer\n                                    format: int64\n                                  hash:\n                                    type: string\n                                    format: byte\n                                title: PartsetHeader\n                            title: BlockID\n                          last_commit_hash:\n                            type: string\n                            format: byte\n                            title: hashes of block data\n                          data_hash:\n                            type: string\n                            format: byte\n                          validators_hash:\n                            type: string\n                            format: byte\n                            title: hashes from the app output from the prev block\n                          next_validators_hash:\n                            type: string\n                            format: byte\n                          consensus_hash:\n                            type: string\n                            format: byte\n                          app_hash:\n                            type: string\n                            format: byte\n                          last_results_hash:\n                            type: string\n                            format: byte\n                          evidence_hash:\n                            type: string\n                            format: byte\n                            title: consensus info\n                          proposer_address:\n                            type: string\n                            description: >-\n                              proposer_address is the original block proposer\n                              address, formatted as a Bech32 string.\n\n                              In Tendermint, this type is `bytes`, but in the SDK, we convert it to a Bech32 string\n\n                              for better UX.\n                        description: Header defines the structure of a Tendermint block header.\n                      data:\n                        type: object\n                        properties:\n                          txs:\n                            type: array\n                            items:\n                              type: string\n                              format: byte\n                            description: >-\n                              Txs that will be applied by state @\n                              block.Height+1.\n\n                              NOTE: not all txs here are valid.  We're just agreeing on the order first.\n\n                              This means that block.AppHash does not include these txs.\n                        title: Data contains the set of transactions included in the block\n                      evidence:\n                        type: object\n                        properties:\n                          evidence:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                duplicate_vote_evidence:\n                                  type: object\n                                  properties:\n                                    vote_a:\n                                      type: object\n                                      properties:\n                                        type:\n                                          type: string\n                                          enum:\n                                            - SIGNED_MSG_TYPE_UNKNOWN\n                                            - SIGNED_MSG_TYPE_PREVOTE\n                                            - SIGNED_MSG_TYPE_PRECOMMIT\n                                            - SIGNED_MSG_TYPE_PROPOSAL\n                                          default: SIGNED_MSG_TYPE_UNKNOWN\n                                          description: >-\n                                            SignedMsgType is a type of signed\n                                            message in the consensus.\n\n                                             - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                             - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                                        height:\n                                          type: string\n                                          format: int64\n                                        round:\n                                          type: integer\n                                          format: int32\n                                        block_id:\n                                          type: object\n                                          properties:\n                                            hash:\n                                              type: string\n                                              format: byte\n                                            part_set_header:\n                                              type: object\n                                              properties:\n                                                total:\n                                                  type: integer\n                                                  format: int64\n                                                hash:\n                                                  type: string\n                                                  format: byte\n                                              title: PartsetHeader\n                                          title: BlockID\n                                        timestamp:\n                                          type: string\n                                          format: date-time\n                                        validator_address:\n                                          type: string\n                                          format: byte\n                                        validator_index:\n                                          type: integer\n                                          format: int32\n                                        signature:\n                                          type: string\n                                          format: byte\n                                      description: >-\n                                        Vote represents a prevote, precommit, or\n                                        commit vote from validators for\n\n                                        consensus.\n                                    vote_b:\n                                      type: object\n                                      properties:\n                                        type:\n                                          type: string\n                                          enum:\n                                            - SIGNED_MSG_TYPE_UNKNOWN\n                                            - SIGNED_MSG_TYPE_PREVOTE\n                                            - SIGNED_MSG_TYPE_PRECOMMIT\n                                            - SIGNED_MSG_TYPE_PROPOSAL\n                                          default: SIGNED_MSG_TYPE_UNKNOWN\n                                          description: >-\n                                            SignedMsgType is a type of signed\n                                            message in the consensus.\n\n                                             - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                             - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                                        height:\n                                          type: string\n                                          format: int64\n                                        round:\n                                          type: integer\n                                          format: int32\n                                        block_id:\n                                          type: object\n                                          properties:\n                                            hash:\n                                              type: string\n                                              format: byte\n                                            part_set_header:\n                                              type: object\n                                              properties:\n                                                total:\n                                                  type: integer\n                                                  format: int64\n                                                hash:\n                                                  type: string\n                                                  format: byte\n                                              title: PartsetHeader\n                                          title: BlockID\n                                        timestamp:\n                                          type: string\n                                          format: date-time\n                                        validator_address:\n                                          type: string\n                                          format: byte\n                                        validator_index:\n                                          type: integer\n                                          format: int32\n                                        signature:\n                                          type: string\n                                          format: byte\n                                      description: >-\n                                        Vote represents a prevote, precommit, or\n                                        commit vote from validators for\n\n                                        consensus.\n                                    total_voting_power:\n                                      type: string\n                                      format: int64\n                                    validator_power:\n                                      type: string\n                                      format: int64\n                                    timestamp:\n                                      type: string\n                                      format: date-time\n                                  description: DuplicateVoteEvidence contains evidence of a validator signed two\n                                    conflicting votes.\n                                light_client_attack_evidence:\n                                  type: object\n                                  properties:\n                                    conflicting_block:\n                                      type: object\n                                      properties:\n                                        signed_header:\n                                          type: object\n                                          properties:\n                                            header:\n                                              type: object\n                                              properties:\n                                                version:\n                                                  title: basic block info\n                                                  type: object\n                                                  properties:\n                                                    block:\n                                                      type: string\n                                                      format: uint64\n                                                    app:\n                                                      type: string\n                                                      format: uint64\n                                                  description: >-\n                                                    Consensus captures the\n                                                    consensus rules for\n                                                    processing a block in the\n                                                    blockchain,\n\n                                                    including all blockchain data structures and the rules of the application's\n\n                                                    state transition machine.\n                                                chain_id:\n                                                  type: string\n                                                height:\n                                                  type: string\n                                                  format: int64\n                                                time:\n                                                  type: string\n                                                  format: date-time\n                                                last_block_id:\n                                                  title: prev block info\n                                                  type: object\n                                                  properties:\n                                                    hash:\n                                                      type: string\n                                                      format: byte\n                                                    part_set_header:\n                                                      type: object\n                                                      properties:\n                                                        total:\n                                                          type: integer\n                                                          format: int64\n                                                        hash:\n                                                          type: string\n                                                          format: byte\n                                                      title: PartsetHeader\n                                                last_commit_hash:\n                                                  type: string\n                                                  format: byte\n                                                  title: hashes of block data\n                                                data_hash:\n                                                  type: string\n                                                  format: byte\n                                                validators_hash:\n                                                  type: string\n                                                  format: byte\n                                                  title: hashes from the app output from the prev block\n                                                next_validators_hash:\n                                                  type: string\n                                                  format: byte\n                                                consensus_hash:\n                                                  type: string\n                                                  format: byte\n                                                app_hash:\n                                                  type: string\n                                                  format: byte\n                                                last_results_hash:\n                                                  type: string\n                                                  format: byte\n                                                evidence_hash:\n                                                  type: string\n                                                  format: byte\n                                                  title: consensus info\n                                                proposer_address:\n                                                  type: string\n                                                  format: byte\n                                              description: Header defines the structure of a block header.\n                                            commit:\n                                              type: object\n                                              properties:\n                                                height:\n                                                  type: string\n                                                  format: int64\n                                                round:\n                                                  type: integer\n                                                  format: int32\n                                                block_id:\n                                                  type: object\n                                                  properties:\n                                                    hash:\n                                                      type: string\n                                                      format: byte\n                                                    part_set_header:\n                                                      type: object\n                                                      properties:\n                                                        total:\n                                                          type: integer\n                                                          format: int64\n                                                        hash:\n                                                          type: string\n                                                          format: byte\n                                                      title: PartsetHeader\n                                                  title: BlockID\n                                                signatures:\n                                                  type: array\n                                                  items:\n                                                    type: object\n                                                    properties:\n                                                      block_id_flag:\n                                                        type: string\n                                                        enum:\n                                                          - BLOCK_ID_FLAG_UNKNOWN\n                                                          - BLOCK_ID_FLAG_ABSENT\n                                                          - BLOCK_ID_FLAG_COMMIT\n                                                          - BLOCK_ID_FLAG_NIL\n                                                        default: BLOCK_ID_FLAG_UNKNOWN\n                                                        title: BlockIdFlag indicates which BlcokID the signature is for\n                                                      validator_address:\n                                                        type: string\n                                                        format: byte\n                                                      timestamp:\n                                                        type: string\n                                                        format: date-time\n                                                      signature:\n                                                        type: string\n                                                        format: byte\n                                                    description: CommitSig is a part of the Vote included in a Commit.\n                                              description: Commit contains the evidence that a block was committed by a set of\n                                                validators.\n                                        validator_set:\n                                          type: object\n                                          properties:\n                                            validators:\n                                              type: array\n                                              items:\n                                                type: object\n                                                properties:\n                                                  address:\n                                                    type: string\n                                                    format: byte\n                                                  pub_key:\n                                                    type: object\n                                                    properties:\n                                                      ed25519:\n                                                        type: string\n                                                        format: byte\n                                                      secp256k1:\n                                                        type: string\n                                                        format: byte\n                                                    title: PublicKey defines the keys available for use with Validators\n                                                  voting_power:\n                                                    type: string\n                                                    format: int64\n                                                  proposer_priority:\n                                                    type: string\n                                                    format: int64\n                                            proposer:\n                                              type: object\n                                              properties:\n                                                address:\n                                                  type: string\n                                                  format: byte\n                                                pub_key:\n                                                  type: object\n                                                  properties:\n                                                    ed25519:\n                                                      type: string\n                                                      format: byte\n                                                    secp256k1:\n                                                      type: string\n                                                      format: byte\n                                                  title: PublicKey defines the keys available for use with Validators\n                                                voting_power:\n                                                  type: string\n                                                  format: int64\n                                                proposer_priority:\n                                                  type: string\n                                                  format: int64\n                                            total_voting_power:\n                                              type: string\n                                              format: int64\n                                    common_height:\n                                      type: string\n                                      format: int64\n                                    byzantine_validators:\n                                      type: array\n                                      items:\n                                        type: object\n                                        properties:\n                                          address:\n                                            type: string\n                                            format: byte\n                                          pub_key:\n                                            type: object\n                                            properties:\n                                              ed25519:\n                                                type: string\n                                                format: byte\n                                              secp256k1:\n                                                type: string\n                                                format: byte\n                                            title: PublicKey defines the keys available for use with Validators\n                                          voting_power:\n                                            type: string\n                                            format: int64\n                                          proposer_priority:\n                                            type: string\n                                            format: int64\n                                    total_voting_power:\n                                      type: string\n                                      format: int64\n                                    timestamp:\n                                      type: string\n                                      format: date-time\n                                  description: LightClientAttackEvidence contains evidence of a set of validators\n                                    attempting to mislead a light client.\n                      last_commit:\n                        type: object\n                        properties:\n                          height:\n                            type: string\n                            format: int64\n                          round:\n                            type: integer\n                            format: int32\n                          block_id:\n                            type: object\n                            properties:\n                              hash:\n                                type: string\n                                format: byte\n                              part_set_header:\n                                type: object\n                                properties:\n                                  total:\n                                    type: integer\n                                    format: int64\n                                  hash:\n                                    type: string\n                                    format: byte\n                                title: PartsetHeader\n                            title: BlockID\n                          signatures:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                block_id_flag:\n                                  type: string\n                                  enum:\n                                    - BLOCK_ID_FLAG_UNKNOWN\n                                    - BLOCK_ID_FLAG_ABSENT\n                                    - BLOCK_ID_FLAG_COMMIT\n                                    - BLOCK_ID_FLAG_NIL\n                                  default: BLOCK_ID_FLAG_UNKNOWN\n                                  title: BlockIdFlag indicates which BlcokID the signature is for\n                                validator_address:\n                                  type: string\n                                  format: byte\n                                timestamp:\n                                  type: string\n                                  format: date-time\n                                signature:\n                                  type: string\n                                  format: byte\n                              description: CommitSig is a part of the Vote included in a Commit.\n                        description: Commit contains the evidence that a block was committed by a set of\n                          validators.\n                    description: >-\n                      Block is tendermint type Block, with the Header proposer\n                      address\n\n                      field converted to bech32 string.\n                description: GetLatestBlockResponse is the response type for the\n                  Query/GetLatestBlock RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/base/tendermint/v1beta1/blocks/{height}\":\n    get:\n      summary: GetBlockByHeight queries block for given height.\n      operationId: GetBlockByHeight_FSKO8\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  block_id:\n                    type: object\n                    properties:\n                      hash:\n                        type: string\n                        format: byte\n                      part_set_header:\n                        type: object\n                        properties:\n                          total:\n                            type: integer\n                            format: int64\n                          hash:\n                            type: string\n                            format: byte\n                        title: PartsetHeader\n                    title: BlockID\n                  block:\n                    type: object\n                    properties:\n                      header:\n                        type: object\n                        properties:\n                          version:\n                            title: basic block info\n                            type: object\n                            properties:\n                              block:\n                                type: string\n                                format: uint64\n                              app:\n                                type: string\n                                format: uint64\n                            description: >-\n                              Consensus captures the consensus rules for\n                              processing a block in the blockchain,\n\n                              including all blockchain data structures and the rules of the application's\n\n                              state transition machine.\n                          chain_id:\n                            type: string\n                          height:\n                            type: string\n                            format: int64\n                          time:\n                            type: string\n                            format: date-time\n                          last_block_id:\n                            title: prev block info\n                            type: object\n                            properties:\n                              hash:\n                                type: string\n                                format: byte\n                              part_set_header:\n                                type: object\n                                properties:\n                                  total:\n                                    type: integer\n                                    format: int64\n                                  hash:\n                                    type: string\n                                    format: byte\n                                title: PartsetHeader\n                          last_commit_hash:\n                            type: string\n                            format: byte\n                            title: hashes of block data\n                          data_hash:\n                            type: string\n                            format: byte\n                          validators_hash:\n                            type: string\n                            format: byte\n                            title: hashes from the app output from the prev block\n                          next_validators_hash:\n                            type: string\n                            format: byte\n                          consensus_hash:\n                            type: string\n                            format: byte\n                          app_hash:\n                            type: string\n                            format: byte\n                          last_results_hash:\n                            type: string\n                            format: byte\n                          evidence_hash:\n                            type: string\n                            format: byte\n                            title: consensus info\n                          proposer_address:\n                            type: string\n                            format: byte\n                        description: Header defines the structure of a block header.\n                      data:\n                        type: object\n                        properties:\n                          txs:\n                            type: array\n                            items:\n                              type: string\n                              format: byte\n                            description: >-\n                              Txs that will be applied by state @\n                              block.Height+1.\n\n                              NOTE: not all txs here are valid.  We're just agreeing on the order first.\n\n                              This means that block.AppHash does not include these txs.\n                        title: Data contains the set of transactions included in the block\n                      evidence:\n                        type: object\n                        properties:\n                          evidence:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                duplicate_vote_evidence:\n                                  type: object\n                                  properties:\n                                    vote_a:\n                                      type: object\n                                      properties:\n                                        type:\n                                          type: string\n                                          enum:\n                                            - SIGNED_MSG_TYPE_UNKNOWN\n                                            - SIGNED_MSG_TYPE_PREVOTE\n                                            - SIGNED_MSG_TYPE_PRECOMMIT\n                                            - SIGNED_MSG_TYPE_PROPOSAL\n                                          default: SIGNED_MSG_TYPE_UNKNOWN\n                                          description: >-\n                                            SignedMsgType is a type of signed\n                                            message in the consensus.\n\n                                             - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                             - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                                        height:\n                                          type: string\n                                          format: int64\n                                        round:\n                                          type: integer\n                                          format: int32\n                                        block_id:\n                                          type: object\n                                          properties:\n                                            hash:\n                                              type: string\n                                              format: byte\n                                            part_set_header:\n                                              type: object\n                                              properties:\n                                                total:\n                                                  type: integer\n                                                  format: int64\n                                                hash:\n                                                  type: string\n                                                  format: byte\n                                              title: PartsetHeader\n                                          title: BlockID\n                                        timestamp:\n                                          type: string\n                                          format: date-time\n                                        validator_address:\n                                          type: string\n                                          format: byte\n                                        validator_index:\n                                          type: integer\n                                          format: int32\n                                        signature:\n                                          type: string\n                                          format: byte\n                                      description: >-\n                                        Vote represents a prevote, precommit, or\n                                        commit vote from validators for\n\n                                        consensus.\n                                    vote_b:\n                                      type: object\n                                      properties:\n                                        type:\n                                          type: string\n                                          enum:\n                                            - SIGNED_MSG_TYPE_UNKNOWN\n                                            - SIGNED_MSG_TYPE_PREVOTE\n                                            - SIGNED_MSG_TYPE_PRECOMMIT\n                                            - SIGNED_MSG_TYPE_PROPOSAL\n                                          default: SIGNED_MSG_TYPE_UNKNOWN\n                                          description: >-\n                                            SignedMsgType is a type of signed\n                                            message in the consensus.\n\n                                             - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                             - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                                        height:\n                                          type: string\n                                          format: int64\n                                        round:\n                                          type: integer\n                                          format: int32\n                                        block_id:\n                                          type: object\n                                          properties:\n                                            hash:\n                                              type: string\n                                              format: byte\n                                            part_set_header:\n                                              type: object\n                                              properties:\n                                                total:\n                                                  type: integer\n                                                  format: int64\n                                                hash:\n                                                  type: string\n                                                  format: byte\n                                              title: PartsetHeader\n                                          title: BlockID\n                                        timestamp:\n                                          type: string\n                                          format: date-time\n                                        validator_address:\n                                          type: string\n                                          format: byte\n                                        validator_index:\n                                          type: integer\n                                          format: int32\n                                        signature:\n                                          type: string\n                                          format: byte\n                                      description: >-\n                                        Vote represents a prevote, precommit, or\n                                        commit vote from validators for\n\n                                        consensus.\n                                    total_voting_power:\n                                      type: string\n                                      format: int64\n                                    validator_power:\n                                      type: string\n                                      format: int64\n                                    timestamp:\n                                      type: string\n                                      format: date-time\n                                  description: DuplicateVoteEvidence contains evidence of a validator signed two\n                                    conflicting votes.\n                                light_client_attack_evidence:\n                                  type: object\n                                  properties:\n                                    conflicting_block:\n                                      type: object\n                                      properties:\n                                        signed_header:\n                                          type: object\n                                          properties:\n                                            header:\n                                              type: object\n                                              properties:\n                                                version:\n                                                  title: basic block info\n                                                  type: object\n                                                  properties:\n                                                    block:\n                                                      type: string\n                                                      format: uint64\n                                                    app:\n                                                      type: string\n                                                      format: uint64\n                                                  description: >-\n                                                    Consensus captures the\n                                                    consensus rules for\n                                                    processing a block in the\n                                                    blockchain,\n\n                                                    including all blockchain data structures and the rules of the application's\n\n                                                    state transition machine.\n                                                chain_id:\n                                                  type: string\n                                                height:\n                                                  type: string\n                                                  format: int64\n                                                time:\n                                                  type: string\n                                                  format: date-time\n                                                last_block_id:\n                                                  title: prev block info\n                                                  type: object\n                                                  properties:\n                                                    hash:\n                                                      type: string\n                                                      format: byte\n                                                    part_set_header:\n                                                      type: object\n                                                      properties:\n                                                        total:\n                                                          type: integer\n                                                          format: int64\n                                                        hash:\n                                                          type: string\n                                                          format: byte\n                                                      title: PartsetHeader\n                                                last_commit_hash:\n                                                  type: string\n                                                  format: byte\n                                                  title: hashes of block data\n                                                data_hash:\n                                                  type: string\n                                                  format: byte\n                                                validators_hash:\n                                                  type: string\n                                                  format: byte\n                                                  title: hashes from the app output from the prev block\n                                                next_validators_hash:\n                                                  type: string\n                                                  format: byte\n                                                consensus_hash:\n                                                  type: string\n                                                  format: byte\n                                                app_hash:\n                                                  type: string\n                                                  format: byte\n                                                last_results_hash:\n                                                  type: string\n                                                  format: byte\n                                                evidence_hash:\n                                                  type: string\n                                                  format: byte\n                                                  title: consensus info\n                                                proposer_address:\n                                                  type: string\n                                                  format: byte\n                                              description: Header defines the structure of a block header.\n                                            commit:\n                                              type: object\n                                              properties:\n                                                height:\n                                                  type: string\n                                                  format: int64\n                                                round:\n                                                  type: integer\n                                                  format: int32\n                                                block_id:\n                                                  type: object\n                                                  properties:\n                                                    hash:\n                                                      type: string\n                                                      format: byte\n                                                    part_set_header:\n                                                      type: object\n                                                      properties:\n                                                        total:\n                                                          type: integer\n                                                          format: int64\n                                                        hash:\n                                                          type: string\n                                                          format: byte\n                                                      title: PartsetHeader\n                                                  title: BlockID\n                                                signatures:\n                                                  type: array\n                                                  items:\n                                                    type: object\n                                                    properties:\n                                                      block_id_flag:\n                                                        type: string\n                                                        enum:\n                                                          - BLOCK_ID_FLAG_UNKNOWN\n                                                          - BLOCK_ID_FLAG_ABSENT\n                                                          - BLOCK_ID_FLAG_COMMIT\n                                                          - BLOCK_ID_FLAG_NIL\n                                                        default: BLOCK_ID_FLAG_UNKNOWN\n                                                        title: BlockIdFlag indicates which BlcokID the signature is for\n                                                      validator_address:\n                                                        type: string\n                                                        format: byte\n                                                      timestamp:\n                                                        type: string\n                                                        format: date-time\n                                                      signature:\n                                                        type: string\n                                                        format: byte\n                                                    description: CommitSig is a part of the Vote included in a Commit.\n                                              description: Commit contains the evidence that a block was committed by a set of\n                                                validators.\n                                        validator_set:\n                                          type: object\n                                          properties:\n                                            validators:\n                                              type: array\n                                              items:\n                                                type: object\n                                                properties:\n                                                  address:\n                                                    type: string\n                                                    format: byte\n                                                  pub_key:\n                                                    type: object\n                                                    properties:\n                                                      ed25519:\n                                                        type: string\n                                                        format: byte\n                                                      secp256k1:\n                                                        type: string\n                                                        format: byte\n                                                    title: PublicKey defines the keys available for use with Validators\n                                                  voting_power:\n                                                    type: string\n                                                    format: int64\n                                                  proposer_priority:\n                                                    type: string\n                                                    format: int64\n                                            proposer:\n                                              type: object\n                                              properties:\n                                                address:\n                                                  type: string\n                                                  format: byte\n                                                pub_key:\n                                                  type: object\n                                                  properties:\n                                                    ed25519:\n                                                      type: string\n                                                      format: byte\n                                                    secp256k1:\n                                                      type: string\n                                                      format: byte\n                                                  title: PublicKey defines the keys available for use with Validators\n                                                voting_power:\n                                                  type: string\n                                                  format: int64\n                                                proposer_priority:\n                                                  type: string\n                                                  format: int64\n                                            total_voting_power:\n                                              type: string\n                                              format: int64\n                                    common_height:\n                                      type: string\n                                      format: int64\n                                    byzantine_validators:\n                                      type: array\n                                      items:\n                                        type: object\n                                        properties:\n                                          address:\n                                            type: string\n                                            format: byte\n                                          pub_key:\n                                            type: object\n                                            properties:\n                                              ed25519:\n                                                type: string\n                                                format: byte\n                                              secp256k1:\n                                                type: string\n                                                format: byte\n                                            title: PublicKey defines the keys available for use with Validators\n                                          voting_power:\n                                            type: string\n                                            format: int64\n                                          proposer_priority:\n                                            type: string\n                                            format: int64\n                                    total_voting_power:\n                                      type: string\n                                      format: int64\n                                    timestamp:\n                                      type: string\n                                      format: date-time\n                                  description: LightClientAttackEvidence contains evidence of a set of validators\n                                    attempting to mislead a light client.\n                      last_commit:\n                        type: object\n                        properties:\n                          height:\n                            type: string\n                            format: int64\n                          round:\n                            type: integer\n                            format: int32\n                          block_id:\n                            type: object\n                            properties:\n                              hash:\n                                type: string\n                                format: byte\n                              part_set_header:\n                                type: object\n                                properties:\n                                  total:\n                                    type: integer\n                                    format: int64\n                                  hash:\n                                    type: string\n                                    format: byte\n                                title: PartsetHeader\n                            title: BlockID\n                          signatures:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                block_id_flag:\n                                  type: string\n                                  enum:\n                                    - BLOCK_ID_FLAG_UNKNOWN\n                                    - BLOCK_ID_FLAG_ABSENT\n                                    - BLOCK_ID_FLAG_COMMIT\n                                    - BLOCK_ID_FLAG_NIL\n                                  default: BLOCK_ID_FLAG_UNKNOWN\n                                  title: BlockIdFlag indicates which BlcokID the signature is for\n                                validator_address:\n                                  type: string\n                                  format: byte\n                                timestamp:\n                                  type: string\n                                  format: date-time\n                                signature:\n                                  type: string\n                                  format: byte\n                              description: CommitSig is a part of the Vote included in a Commit.\n                        description: Commit contains the evidence that a block was committed by a set of\n                          validators.\n                    title: \"Deprecated: please use `sdk_block` instead\"\n                  sdk_block:\n                    title: \"Since: cosmos-sdk 0.47\"\n                    type: object\n                    properties:\n                      header:\n                        type: object\n                        properties:\n                          version:\n                            title: basic block info\n                            type: object\n                            properties:\n                              block:\n                                type: string\n                                format: uint64\n                              app:\n                                type: string\n                                format: uint64\n                            description: >-\n                              Consensus captures the consensus rules for\n                              processing a block in the blockchain,\n\n                              including all blockchain data structures and the rules of the application's\n\n                              state transition machine.\n                          chain_id:\n                            type: string\n                          height:\n                            type: string\n                            format: int64\n                          time:\n                            type: string\n                            format: date-time\n                          last_block_id:\n                            type: object\n                            properties:\n                              hash:\n                                type: string\n                                format: byte\n                              part_set_header:\n                                type: object\n                                properties:\n                                  total:\n                                    type: integer\n                                    format: int64\n                                  hash:\n                                    type: string\n                                    format: byte\n                                title: PartsetHeader\n                            title: BlockID\n                          last_commit_hash:\n                            type: string\n                            format: byte\n                            title: hashes of block data\n                          data_hash:\n                            type: string\n                            format: byte\n                          validators_hash:\n                            type: string\n                            format: byte\n                            title: hashes from the app output from the prev block\n                          next_validators_hash:\n                            type: string\n                            format: byte\n                          consensus_hash:\n                            type: string\n                            format: byte\n                          app_hash:\n                            type: string\n                            format: byte\n                          last_results_hash:\n                            type: string\n                            format: byte\n                          evidence_hash:\n                            type: string\n                            format: byte\n                            title: consensus info\n                          proposer_address:\n                            type: string\n                            description: >-\n                              proposer_address is the original block proposer\n                              address, formatted as a Bech32 string.\n\n                              In Tendermint, this type is `bytes`, but in the SDK, we convert it to a Bech32 string\n\n                              for better UX.\n                        description: Header defines the structure of a Tendermint block header.\n                      data:\n                        type: object\n                        properties:\n                          txs:\n                            type: array\n                            items:\n                              type: string\n                              format: byte\n                            description: >-\n                              Txs that will be applied by state @\n                              block.Height+1.\n\n                              NOTE: not all txs here are valid.  We're just agreeing on the order first.\n\n                              This means that block.AppHash does not include these txs.\n                        title: Data contains the set of transactions included in the block\n                      evidence:\n                        type: object\n                        properties:\n                          evidence:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                duplicate_vote_evidence:\n                                  type: object\n                                  properties:\n                                    vote_a:\n                                      type: object\n                                      properties:\n                                        type:\n                                          type: string\n                                          enum:\n                                            - SIGNED_MSG_TYPE_UNKNOWN\n                                            - SIGNED_MSG_TYPE_PREVOTE\n                                            - SIGNED_MSG_TYPE_PRECOMMIT\n                                            - SIGNED_MSG_TYPE_PROPOSAL\n                                          default: SIGNED_MSG_TYPE_UNKNOWN\n                                          description: >-\n                                            SignedMsgType is a type of signed\n                                            message in the consensus.\n\n                                             - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                             - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                                        height:\n                                          type: string\n                                          format: int64\n                                        round:\n                                          type: integer\n                                          format: int32\n                                        block_id:\n                                          type: object\n                                          properties:\n                                            hash:\n                                              type: string\n                                              format: byte\n                                            part_set_header:\n                                              type: object\n                                              properties:\n                                                total:\n                                                  type: integer\n                                                  format: int64\n                                                hash:\n                                                  type: string\n                                                  format: byte\n                                              title: PartsetHeader\n                                          title: BlockID\n                                        timestamp:\n                                          type: string\n                                          format: date-time\n                                        validator_address:\n                                          type: string\n                                          format: byte\n                                        validator_index:\n                                          type: integer\n                                          format: int32\n                                        signature:\n                                          type: string\n                                          format: byte\n                                      description: >-\n                                        Vote represents a prevote, precommit, or\n                                        commit vote from validators for\n\n                                        consensus.\n                                    vote_b:\n                                      type: object\n                                      properties:\n                                        type:\n                                          type: string\n                                          enum:\n                                            - SIGNED_MSG_TYPE_UNKNOWN\n                                            - SIGNED_MSG_TYPE_PREVOTE\n                                            - SIGNED_MSG_TYPE_PRECOMMIT\n                                            - SIGNED_MSG_TYPE_PROPOSAL\n                                          default: SIGNED_MSG_TYPE_UNKNOWN\n                                          description: >-\n                                            SignedMsgType is a type of signed\n                                            message in the consensus.\n\n                                             - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                             - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                                        height:\n                                          type: string\n                                          format: int64\n                                        round:\n                                          type: integer\n                                          format: int32\n                                        block_id:\n                                          type: object\n                                          properties:\n                                            hash:\n                                              type: string\n                                              format: byte\n                                            part_set_header:\n                                              type: object\n                                              properties:\n                                                total:\n                                                  type: integer\n                                                  format: int64\n                                                hash:\n                                                  type: string\n                                                  format: byte\n                                              title: PartsetHeader\n                                          title: BlockID\n                                        timestamp:\n                                          type: string\n                                          format: date-time\n                                        validator_address:\n                                          type: string\n                                          format: byte\n                                        validator_index:\n                                          type: integer\n                                          format: int32\n                                        signature:\n                                          type: string\n                                          format: byte\n                                      description: >-\n                                        Vote represents a prevote, precommit, or\n                                        commit vote from validators for\n\n                                        consensus.\n                                    total_voting_power:\n                                      type: string\n                                      format: int64\n                                    validator_power:\n                                      type: string\n                                      format: int64\n                                    timestamp:\n                                      type: string\n                                      format: date-time\n                                  description: DuplicateVoteEvidence contains evidence of a validator signed two\n                                    conflicting votes.\n                                light_client_attack_evidence:\n                                  type: object\n                                  properties:\n                                    conflicting_block:\n                                      type: object\n                                      properties:\n                                        signed_header:\n                                          type: object\n                                          properties:\n                                            header:\n                                              type: object\n                                              properties:\n                                                version:\n                                                  title: basic block info\n                                                  type: object\n                                                  properties:\n                                                    block:\n                                                      type: string\n                                                      format: uint64\n                                                    app:\n                                                      type: string\n                                                      format: uint64\n                                                  description: >-\n                                                    Consensus captures the\n                                                    consensus rules for\n                                                    processing a block in the\n                                                    blockchain,\n\n                                                    including all blockchain data structures and the rules of the application's\n\n                                                    state transition machine.\n                                                chain_id:\n                                                  type: string\n                                                height:\n                                                  type: string\n                                                  format: int64\n                                                time:\n                                                  type: string\n                                                  format: date-time\n                                                last_block_id:\n                                                  title: prev block info\n                                                  type: object\n                                                  properties:\n                                                    hash:\n                                                      type: string\n                                                      format: byte\n                                                    part_set_header:\n                                                      type: object\n                                                      properties:\n                                                        total:\n                                                          type: integer\n                                                          format: int64\n                                                        hash:\n                                                          type: string\n                                                          format: byte\n                                                      title: PartsetHeader\n                                                last_commit_hash:\n                                                  type: string\n                                                  format: byte\n                                                  title: hashes of block data\n                                                data_hash:\n                                                  type: string\n                                                  format: byte\n                                                validators_hash:\n                                                  type: string\n                                                  format: byte\n                                                  title: hashes from the app output from the prev block\n                                                next_validators_hash:\n                                                  type: string\n                                                  format: byte\n                                                consensus_hash:\n                                                  type: string\n                                                  format: byte\n                                                app_hash:\n                                                  type: string\n                                                  format: byte\n                                                last_results_hash:\n                                                  type: string\n                                                  format: byte\n                                                evidence_hash:\n                                                  type: string\n                                                  format: byte\n                                                  title: consensus info\n                                                proposer_address:\n                                                  type: string\n                                                  format: byte\n                                              description: Header defines the structure of a block header.\n                                            commit:\n                                              type: object\n                                              properties:\n                                                height:\n                                                  type: string\n                                                  format: int64\n                                                round:\n                                                  type: integer\n                                                  format: int32\n                                                block_id:\n                                                  type: object\n                                                  properties:\n                                                    hash:\n                                                      type: string\n                                                      format: byte\n                                                    part_set_header:\n                                                      type: object\n                                                      properties:\n                                                        total:\n                                                          type: integer\n                                                          format: int64\n                                                        hash:\n                                                          type: string\n                                                          format: byte\n                                                      title: PartsetHeader\n                                                  title: BlockID\n                                                signatures:\n                                                  type: array\n                                                  items:\n                                                    type: object\n                                                    properties:\n                                                      block_id_flag:\n                                                        type: string\n                                                        enum:\n                                                          - BLOCK_ID_FLAG_UNKNOWN\n                                                          - BLOCK_ID_FLAG_ABSENT\n                                                          - BLOCK_ID_FLAG_COMMIT\n                                                          - BLOCK_ID_FLAG_NIL\n                                                        default: BLOCK_ID_FLAG_UNKNOWN\n                                                        title: BlockIdFlag indicates which BlcokID the signature is for\n                                                      validator_address:\n                                                        type: string\n                                                        format: byte\n                                                      timestamp:\n                                                        type: string\n                                                        format: date-time\n                                                      signature:\n                                                        type: string\n                                                        format: byte\n                                                    description: CommitSig is a part of the Vote included in a Commit.\n                                              description: Commit contains the evidence that a block was committed by a set of\n                                                validators.\n                                        validator_set:\n                                          type: object\n                                          properties:\n                                            validators:\n                                              type: array\n                                              items:\n                                                type: object\n                                                properties:\n                                                  address:\n                                                    type: string\n                                                    format: byte\n                                                  pub_key:\n                                                    type: object\n                                                    properties:\n                                                      ed25519:\n                                                        type: string\n                                                        format: byte\n                                                      secp256k1:\n                                                        type: string\n                                                        format: byte\n                                                    title: PublicKey defines the keys available for use with Validators\n                                                  voting_power:\n                                                    type: string\n                                                    format: int64\n                                                  proposer_priority:\n                                                    type: string\n                                                    format: int64\n                                            proposer:\n                                              type: object\n                                              properties:\n                                                address:\n                                                  type: string\n                                                  format: byte\n                                                pub_key:\n                                                  type: object\n                                                  properties:\n                                                    ed25519:\n                                                      type: string\n                                                      format: byte\n                                                    secp256k1:\n                                                      type: string\n                                                      format: byte\n                                                  title: PublicKey defines the keys available for use with Validators\n                                                voting_power:\n                                                  type: string\n                                                  format: int64\n                                                proposer_priority:\n                                                  type: string\n                                                  format: int64\n                                            total_voting_power:\n                                              type: string\n                                              format: int64\n                                    common_height:\n                                      type: string\n                                      format: int64\n                                    byzantine_validators:\n                                      type: array\n                                      items:\n                                        type: object\n                                        properties:\n                                          address:\n                                            type: string\n                                            format: byte\n                                          pub_key:\n                                            type: object\n                                            properties:\n                                              ed25519:\n                                                type: string\n                                                format: byte\n                                              secp256k1:\n                                                type: string\n                                                format: byte\n                                            title: PublicKey defines the keys available for use with Validators\n                                          voting_power:\n                                            type: string\n                                            format: int64\n                                          proposer_priority:\n                                            type: string\n                                            format: int64\n                                    total_voting_power:\n                                      type: string\n                                      format: int64\n                                    timestamp:\n                                      type: string\n                                      format: date-time\n                                  description: LightClientAttackEvidence contains evidence of a set of validators\n                                    attempting to mislead a light client.\n                      last_commit:\n                        type: object\n                        properties:\n                          height:\n                            type: string\n                            format: int64\n                          round:\n                            type: integer\n                            format: int32\n                          block_id:\n                            type: object\n                            properties:\n                              hash:\n                                type: string\n                                format: byte\n                              part_set_header:\n                                type: object\n                                properties:\n                                  total:\n                                    type: integer\n                                    format: int64\n                                  hash:\n                                    type: string\n                                    format: byte\n                                title: PartsetHeader\n                            title: BlockID\n                          signatures:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                block_id_flag:\n                                  type: string\n                                  enum:\n                                    - BLOCK_ID_FLAG_UNKNOWN\n                                    - BLOCK_ID_FLAG_ABSENT\n                                    - BLOCK_ID_FLAG_COMMIT\n                                    - BLOCK_ID_FLAG_NIL\n                                  default: BLOCK_ID_FLAG_UNKNOWN\n                                  title: BlockIdFlag indicates which BlcokID the signature is for\n                                validator_address:\n                                  type: string\n                                  format: byte\n                                timestamp:\n                                  type: string\n                                  format: date-time\n                                signature:\n                                  type: string\n                                  format: byte\n                              description: CommitSig is a part of the Vote included in a Commit.\n                        description: Commit contains the evidence that a block was committed by a set of\n                          validators.\n                    description: >-\n                      Block is tendermint type Block, with the Header proposer\n                      address\n\n                      field converted to bech32 string.\n                description: GetBlockByHeightResponse is the response type for the\n                  Query/GetBlockByHeight RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: height\n          in: path\n          required: true\n          schema:\n            type: string\n            format: int64\n      tags:\n        - gRPC Gateway API\n  /cosmos/base/tendermint/v1beta1/node_info:\n    get:\n      summary: GetNodeInfo queries the current node info.\n      operationId: GetNodeInfo_IVP7S\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  default_node_info:\n                    type: object\n                    properties:\n                      protocol_version:\n                        type: object\n                        properties:\n                          p2p:\n                            type: string\n                            format: uint64\n                          block:\n                            type: string\n                            format: uint64\n                          app:\n                            type: string\n                            format: uint64\n                      default_node_id:\n                        type: string\n                      listen_addr:\n                        type: string\n                      network:\n                        type: string\n                      version:\n                        type: string\n                      channels:\n                        type: string\n                        format: byte\n                      moniker:\n                        type: string\n                      other:\n                        type: object\n                        properties:\n                          tx_index:\n                            type: string\n                          rpc_address:\n                            type: string\n                  application_version:\n                    type: object\n                    properties:\n                      name:\n                        type: string\n                      app_name:\n                        type: string\n                      version:\n                        type: string\n                      git_commit:\n                        type: string\n                      build_tags:\n                        type: string\n                      go_version:\n                        type: string\n                      build_deps:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            path:\n                              type: string\n                              title: module path\n                            version:\n                              type: string\n                              title: module version\n                            sum:\n                              type: string\n                              title: checksum\n                          title: Module is the type for VersionInfo\n                      cosmos_sdk_version:\n                        type: string\n                        title: \"Since: cosmos-sdk 0.43\"\n                    description: VersionInfo is the type for the GetNodeInfoResponse message.\n                description: GetNodeInfoResponse is the response type for the Query/GetNodeInfo\n                  RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/base/tendermint/v1beta1/syncing:\n    get:\n      summary: GetSyncing queries node syncing.\n      operationId: GetSyncing_9SHWP\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  syncing:\n                    type: boolean\n                description: GetSyncingResponse is the response type for the Query/GetSyncing\n                  RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/base/tendermint/v1beta1/validatorsets/latest:\n    get:\n      summary: GetLatestValidatorSet queries latest validator-set.\n      operationId: GetLatestValidatorSet_Y0S55\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  block_height:\n                    type: string\n                    format: int64\n                  validators:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        address:\n                          type: string\n                        pub_key:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                        voting_power:\n                          type: string\n                          format: int64\n                        proposer_priority:\n                          type: string\n                          format: int64\n                      description: Validator is the type for the validator-set.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: GetLatestValidatorSetResponse is the response type for the\n                  Query/GetValidatorSetByHeight RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/base/tendermint/v1beta1/validatorsets/{height}\":\n    get:\n      summary: GetValidatorSetByHeight queries validator-set at a given height.\n      operationId: GetValidatorSetByHeight_WR03D\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  block_height:\n                    type: string\n                    format: int64\n                  validators:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        address:\n                          type: string\n                        pub_key:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                        voting_power:\n                          type: string\n                          format: int64\n                        proposer_priority:\n                          type: string\n                          format: int64\n                      description: Validator is the type for the validator-set.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: GetValidatorSetByHeightResponse is the response type for the\n                  Query/GetValidatorSetByHeight RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: height\n          in: path\n          required: true\n          schema:\n            type: string\n            format: int64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/slashing/v1beta1/params:\n    get:\n      summary: Params queries the parameters of slashing module\n      operationId: Params_MFGZ0\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  params:\n                    type: object\n                    properties:\n                      signed_blocks_window:\n                        type: string\n                        format: int64\n                      min_signed_per_window:\n                        type: string\n                        format: byte\n                      downtime_jail_duration:\n                        type: string\n                      slash_fraction_double_sign:\n                        type: string\n                        format: byte\n                      slash_fraction_downtime:\n                        type: string\n                        format: byte\n                    description: Params represents the parameters used for by the slashing module.\n                title: QueryParamsResponse is the response type for the Query/Params RPC method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/slashing/v1beta1/signing_infos:\n    get:\n      summary: SigningInfos queries signing info of all validators\n      operationId: SigningInfos_SD3H8\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  info:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        address:\n                          type: string\n                        start_height:\n                          type: string\n                          format: int64\n                          title: Height at which validator was first a candidate OR was unjailed\n                        index_offset:\n                          type: string\n                          format: int64\n                          description: >-\n                            Index which is incremented each time the validator\n                            was a bonded\n\n                            in a block and may have signed a precommit or not. This in conjunction with the\n\n                            `SignedBlocksWindow` param determines the index in the `MissedBlocksBitArray`.\n                        jailed_until:\n                          type: string\n                          format: date-time\n                          description: Timestamp until which the validator is jailed due to liveness\n                            downtime.\n                        tombstoned:\n                          type: boolean\n                          description: >-\n                            Whether or not a validator has been tombstoned\n                            (killed out of validator set). It is set\n\n                            once the validator commits an equivocation or for any other configured misbehiavor.\n                        missed_blocks_counter:\n                          type: string\n                          format: int64\n                          description: >-\n                            A counter kept to avoid unnecessary array reads.\n\n                            Note that `Sum(MissedBlocksBitArray)` always equals `MissedBlocksCounter`.\n                      description: >-\n                        ValidatorSigningInfo defines a validator's signing info\n                        for monitoring their\n\n                        liveness activity.\n                    title: info is the signing info of all validators\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                title: >-\n                  QuerySigningInfosResponse is the response type for the\n                  Query/SigningInfos RPC\n\n                  method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/slashing/v1beta1/signing_infos/{cons_address}\":\n    get:\n      summary: SigningInfo queries the signing info of given cons address\n      operationId: SigningInfo_2HQ8N\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  val_signing_info:\n                    type: object\n                    properties:\n                      address:\n                        type: string\n                      start_height:\n                        type: string\n                        format: int64\n                        title: Height at which validator was first a candidate OR was unjailed\n                      index_offset:\n                        type: string\n                        format: int64\n                        description: >-\n                          Index which is incremented each time the validator was\n                          a bonded\n\n                          in a block and may have signed a precommit or not. This in conjunction with the\n\n                          `SignedBlocksWindow` param determines the index in the `MissedBlocksBitArray`.\n                      jailed_until:\n                        type: string\n                        format: date-time\n                        description: Timestamp until which the validator is jailed due to liveness\n                          downtime.\n                      tombstoned:\n                        type: boolean\n                        description: >-\n                          Whether or not a validator has been tombstoned (killed\n                          out of validator set). It is set\n\n                          once the validator commits an equivocation or for any other configured misbehiavor.\n                      missed_blocks_counter:\n                        type: string\n                        format: int64\n                        description: >-\n                          A counter kept to avoid unnecessary array reads.\n\n                          Note that `Sum(MissedBlocksBitArray)` always equals `MissedBlocksCounter`.\n                    description: >-\n                      ValidatorSigningInfo defines a validator's signing info\n                      for monitoring their\n\n                      liveness activity.\n                    title: val_signing_info is the signing info of requested val cons address\n                title: >-\n                  QuerySigningInfoResponse is the response type for the\n                  Query/SigningInfo RPC\n\n                  method\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: cons_address\n          description: cons_address is the address to query signing info of\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/gov/v1beta1/params/{params_type}\":\n    get:\n      summary: Params queries all parameters of the gov module.\n      operationId: Params_PJJN8\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  voting_params:\n                    description: voting_params defines the parameters related to voting.\n                    type: object\n                    properties:\n                      voting_period:\n                        type: string\n                        description: Duration of the voting period.\n                  deposit_params:\n                    description: deposit_params defines the parameters related to deposit.\n                    type: object\n                    properties:\n                      min_deposit:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n                        description: Minimum deposit for a proposal to enter voting period.\n                      max_deposit_period:\n                        type: string\n                        description: >-\n                          Maximum period for Atom holders to deposit on a\n                          proposal. Initial value: 2\n\n                          months.\n                  tally_params:\n                    description: tally_params defines the parameters related to tally.\n                    type: object\n                    properties:\n                      quorum:\n                        type: string\n                        format: byte\n                        description: >-\n                          Minimum percentage of total stake needed to vote for a\n                          result to be\n\n                          considered valid.\n                      threshold:\n                        type: string\n                        format: byte\n                        description: \"Minimum proportion of Yes votes for proposal to pass. Default\n                          value: 0.5.\"\n                      veto_threshold:\n                        type: string\n                        format: byte\n                        description: >-\n                          Minimum value of Veto votes to Total votes ratio for\n                          proposal to be\n\n                          vetoed. Default value: 1/3.\n                description: QueryParamsResponse is the response type for the Query/Params RPC\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: params_type\n          description: >-\n            params_type defines which parameters to query for, can be one of\n            \"voting\",\n\n            \"tallying\" or \"deposit\".\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/gov/v1beta1/proposals:\n    get:\n      summary: Proposals queries all proposals based on given status.\n      operationId: Proposals_XD66Y\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  proposals:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        proposal_id:\n                          type: string\n                          format: uint64\n                          description: proposal_id defines the unique id of the proposal.\n                        content:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                          description: content is the proposal's content.\n                        status:\n                          description: status defines the proposal status.\n                          type: string\n                          enum:\n                            - PROPOSAL_STATUS_UNSPECIFIED\n                            - PROPOSAL_STATUS_DEPOSIT_PERIOD\n                            - PROPOSAL_STATUS_VOTING_PERIOD\n                            - PROPOSAL_STATUS_PASSED\n                            - PROPOSAL_STATUS_REJECTED\n                            - PROPOSAL_STATUS_FAILED\n                          default: PROPOSAL_STATUS_UNSPECIFIED\n                        final_tally_result:\n                          description: >-\n                            final_tally_result is the final tally result of the\n                            proposal. When\n\n                            querying a proposal via gRPC, this field is not populated until the\n\n                            proposal's voting period has ended.\n                          type: object\n                          properties:\n                            yes:\n                              type: string\n                              description: yes is the number of yes votes on a proposal.\n                            abstain:\n                              type: string\n                              description: abstain is the number of abstain votes on a proposal.\n                            no:\n                              type: string\n                              description: no is the number of no votes on a proposal.\n                            no_with_veto:\n                              type: string\n                              description: no_with_veto is the number of no with veto votes on a proposal.\n                        submit_time:\n                          type: string\n                          format: date-time\n                          description: submit_time is the time of proposal submission.\n                        deposit_end_time:\n                          type: string\n                          format: date-time\n                          description: deposit_end_time is the end time for deposition.\n                        total_deposit:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              denom:\n                                type: string\n                              amount:\n                                type: string\n                            description: >-\n                              Coin defines a token with a denomination and an\n                              amount.\n\n\n                              NOTE: The amount field is an Int which implements the custom method\n\n                              signatures required by gogoproto.\n                          description: total_deposit is the total deposit on the proposal.\n                        voting_start_time:\n                          type: string\n                          format: date-time\n                          description: voting_start_time is the starting time to vote on a proposal.\n                        voting_end_time:\n                          type: string\n                          format: date-time\n                          description: voting_end_time is the end time of voting on a proposal.\n                      description: Proposal defines the core field members of a governance proposal.\n                    description: proposals defines all the requested governance proposals.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: >-\n                  QueryProposalsResponse is the response type for the\n                  Query/Proposals RPC\n\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: proposal_status\n          description: >-\n            proposal_status defines the status of the proposals.\n\n             - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n             - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\n            period.\n             - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\n            period.\n             - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\n            passed.\n             - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\n            been rejected.\n             - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\n            failed.\n          in: query\n          required: false\n          schema:\n            type: string\n            enum:\n              - PROPOSAL_STATUS_UNSPECIFIED\n              - PROPOSAL_STATUS_DEPOSIT_PERIOD\n              - PROPOSAL_STATUS_VOTING_PERIOD\n              - PROPOSAL_STATUS_PASSED\n              - PROPOSAL_STATUS_REJECTED\n              - PROPOSAL_STATUS_FAILED\n            default: PROPOSAL_STATUS_UNSPECIFIED\n        - name: voter\n          description: voter defines the voter address for the proposals.\n          in: query\n          required: false\n          schema:\n            type: string\n        - name: depositor\n          description: depositor defines the deposit addresses from the proposals.\n          in: query\n          required: false\n          schema:\n            type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/gov/v1beta1/proposals/{proposal_id}\":\n    get:\n      summary: Proposal queries proposal details based on ProposalID.\n      operationId: Proposal_Q4TVD\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  proposal:\n                    type: object\n                    properties:\n                      proposal_id:\n                        type: string\n                        format: uint64\n                        description: proposal_id defines the unique id of the proposal.\n                      content:\n                        type: object\n                        properties:\n                          type_url:\n                            type: string\n                          value:\n                            type: string\n                            format: byte\n                        description: content is the proposal's content.\n                      status:\n                        description: status defines the proposal status.\n                        type: string\n                        enum:\n                          - PROPOSAL_STATUS_UNSPECIFIED\n                          - PROPOSAL_STATUS_DEPOSIT_PERIOD\n                          - PROPOSAL_STATUS_VOTING_PERIOD\n                          - PROPOSAL_STATUS_PASSED\n                          - PROPOSAL_STATUS_REJECTED\n                          - PROPOSAL_STATUS_FAILED\n                        default: PROPOSAL_STATUS_UNSPECIFIED\n                      final_tally_result:\n                        description: >-\n                          final_tally_result is the final tally result of the\n                          proposal. When\n\n                          querying a proposal via gRPC, this field is not populated until the\n\n                          proposal's voting period has ended.\n                        type: object\n                        properties:\n                          yes:\n                            type: string\n                            description: yes is the number of yes votes on a proposal.\n                          abstain:\n                            type: string\n                            description: abstain is the number of abstain votes on a proposal.\n                          no:\n                            type: string\n                            description: no is the number of no votes on a proposal.\n                          no_with_veto:\n                            type: string\n                            description: no_with_veto is the number of no with veto votes on a proposal.\n                      submit_time:\n                        type: string\n                        format: date-time\n                        description: submit_time is the time of proposal submission.\n                      deposit_end_time:\n                        type: string\n                        format: date-time\n                        description: deposit_end_time is the end time for deposition.\n                      total_deposit:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n                        description: total_deposit is the total deposit on the proposal.\n                      voting_start_time:\n                        type: string\n                        format: date-time\n                        description: voting_start_time is the starting time to vote on a proposal.\n                      voting_end_time:\n                        type: string\n                        format: date-time\n                        description: voting_end_time is the end time of voting on a proposal.\n                    description: Proposal defines the core field members of a governance proposal.\n                description: QueryProposalResponse is the response type for the Query/Proposal\n                  RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits\":\n    get:\n      summary: Deposits queries all deposits of a single proposal.\n      operationId: Deposits_1L75C\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  deposits:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        proposal_id:\n                          type: string\n                          format: uint64\n                          description: proposal_id defines the unique id of the proposal.\n                        depositor:\n                          type: string\n                          description: depositor defines the deposit addresses from the proposals.\n                        amount:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              denom:\n                                type: string\n                              amount:\n                                type: string\n                            description: >-\n                              Coin defines a token with a denomination and an\n                              amount.\n\n\n                              NOTE: The amount field is an Int which implements the custom method\n\n                              signatures required by gogoproto.\n                          description: amount to be deposited by depositor.\n                      description: >-\n                        Deposit defines an amount deposited by an account\n                        address to an active\n\n                        proposal.\n                    description: deposits defines the requested deposits.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: QueryDepositsResponse is the response type for the Query/Deposits\n                  RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor}\":\n    get:\n      summary: Deposit queries single deposit information based proposalID, depositAddr.\n      operationId: Deposit_VE3QO\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  deposit:\n                    type: object\n                    properties:\n                      proposal_id:\n                        type: string\n                        format: uint64\n                        description: proposal_id defines the unique id of the proposal.\n                      depositor:\n                        type: string\n                        description: depositor defines the deposit addresses from the proposals.\n                      amount:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n                        description: amount to be deposited by depositor.\n                    description: >-\n                      Deposit defines an amount deposited by an account address\n                      to an active\n\n                      proposal.\n                description: QueryDepositResponse is the response type for the Query/Deposit RPC\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n        - name: depositor\n          description: depositor defines the deposit addresses from the proposals.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/gov/v1beta1/proposals/{proposal_id}/tally\":\n    get:\n      summary: TallyResult queries the tally of a proposal vote.\n      operationId: TallyResult_WW72B\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  tally:\n                    description: tally defines the requested tally.\n                    type: object\n                    properties:\n                      yes:\n                        type: string\n                        description: yes is the number of yes votes on a proposal.\n                      abstain:\n                        type: string\n                        description: abstain is the number of abstain votes on a proposal.\n                      no:\n                        type: string\n                        description: no is the number of no votes on a proposal.\n                      no_with_veto:\n                        type: string\n                        description: no_with_veto is the number of no with veto votes on a proposal.\n                description: QueryTallyResultResponse is the response type for the Query/Tally\n                  RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/gov/v1beta1/proposals/{proposal_id}/votes\":\n    get:\n      summary: Votes queries votes of a given proposal.\n      operationId: Votes_M6ZAN\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  votes:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        proposal_id:\n                          type: string\n                          format: uint64\n                          description: proposal_id defines the unique id of the proposal.\n                        voter:\n                          type: string\n                          description: voter is the voter address of the proposal.\n                        option:\n                          description: >-\n                            Deprecated: Prefer to use `options` instead. This\n                            field is set in queries\n\n                            if and only if `len(options) == 1` and that option has weight 1. In all\n\n                            other cases, this field will default to VOTE_OPTION_UNSPECIFIED.\n                          type: string\n                          enum:\n                            - VOTE_OPTION_UNSPECIFIED\n                            - VOTE_OPTION_YES\n                            - VOTE_OPTION_ABSTAIN\n                            - VOTE_OPTION_NO\n                            - VOTE_OPTION_NO_WITH_VETO\n                          default: VOTE_OPTION_UNSPECIFIED\n                        options:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              option:\n                                description: option defines the valid vote options, it must not contain\n                                  duplicate vote options.\n                                type: string\n                                enum:\n                                  - VOTE_OPTION_UNSPECIFIED\n                                  - VOTE_OPTION_YES\n                                  - VOTE_OPTION_ABSTAIN\n                                  - VOTE_OPTION_NO\n                                  - VOTE_OPTION_NO_WITH_VETO\n                                default: VOTE_OPTION_UNSPECIFIED\n                              weight:\n                                type: string\n                                description: weight is the vote weight associated with the vote option.\n                            description: >-\n                              WeightedVoteOption defines a unit of vote for vote\n                              split.\n\n\n                              Since: cosmos-sdk 0.43\n                          description: |-\n                            options is the weighted vote options.\n\n                            Since: cosmos-sdk 0.43\n                      description: >-\n                        Vote defines a vote on a governance proposal.\n\n                        A Vote consists of a proposal ID, the voter, and the vote option.\n                    description: votes defines the queried votes.\n                  pagination:\n                    type: object\n                    properties:\n                      next_key:\n                        type: string\n                        format: byte\n                        description: >-\n                          next_key is the key to be passed to PageRequest.key to\n\n                          query the next page most efficiently. It will be empty if\n\n                          there are no more results.\n                      total:\n                        type: string\n                        format: uint64\n                        title: >-\n                          total is total number of results available if\n                          PageRequest.count_total\n\n                          was set, its value is undefined otherwise\n                    description: >-\n                      PageResponse is to be embedded in gRPC response messages\n                      where the\n\n                      corresponding request message has used PageRequest.\n\n                       message SomeResponse {\n                               repeated Bar results = 1;\n                               PageResponse page = 2;\n                       }\n                description: QueryVotesResponse is the response type for the Query/Votes RPC\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          schema:\n            type: string\n            format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n          in: query\n          required: false\n          schema:\n            type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          schema:\n            type: boolean\n      tags:\n        - gRPC Gateway API\n  \"/cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter}\":\n    get:\n      summary: Vote queries voted information based on proposalID, voterAddr.\n      operationId: Vote_4I9SV\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  vote:\n                    type: object\n                    properties:\n                      proposal_id:\n                        type: string\n                        format: uint64\n                        description: proposal_id defines the unique id of the proposal.\n                      voter:\n                        type: string\n                        description: voter is the voter address of the proposal.\n                      option:\n                        description: >-\n                          Deprecated: Prefer to use `options` instead. This\n                          field is set in queries\n\n                          if and only if `len(options) == 1` and that option has weight 1. In all\n\n                          other cases, this field will default to VOTE_OPTION_UNSPECIFIED.\n                        type: string\n                        enum:\n                          - VOTE_OPTION_UNSPECIFIED\n                          - VOTE_OPTION_YES\n                          - VOTE_OPTION_ABSTAIN\n                          - VOTE_OPTION_NO\n                          - VOTE_OPTION_NO_WITH_VETO\n                        default: VOTE_OPTION_UNSPECIFIED\n                      options:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            option:\n                              description: option defines the valid vote options, it must not contain\n                                duplicate vote options.\n                              type: string\n                              enum:\n                                - VOTE_OPTION_UNSPECIFIED\n                                - VOTE_OPTION_YES\n                                - VOTE_OPTION_ABSTAIN\n                                - VOTE_OPTION_NO\n                                - VOTE_OPTION_NO_WITH_VETO\n                              default: VOTE_OPTION_UNSPECIFIED\n                            weight:\n                              type: string\n                              description: weight is the vote weight associated with the vote option.\n                          description: >-\n                            WeightedVoteOption defines a unit of vote for vote\n                            split.\n\n\n                            Since: cosmos-sdk 0.43\n                        description: |-\n                          options is the weighted vote options.\n\n                          Since: cosmos-sdk 0.43\n                    description: >-\n                      Vote defines a vote on a governance proposal.\n\n                      A Vote consists of a proposal ID, the voter, and the vote option.\n                description: QueryVoteResponse is the response type for the Query/Vote RPC\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          schema:\n            type: string\n            format: uint64\n        - name: voter\n          description: voter defines the voter address for the proposals.\n          in: path\n          required: true\n          schema:\n            type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/mint/v1beta1/annual_provisions:\n    get:\n      summary: AnnualProvisions current minting annual provisions value.\n      operationId: AnnualProvisions_JHHBU\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  annual_provisions:\n                    type: string\n                    format: byte\n                    description: annual_provisions is the current minting annual provisions value.\n                description: |-\n                  QueryAnnualProvisionsResponse is the response type for the\n                  Query/AnnualProvisions RPC method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/mint/v1beta1/inflation:\n    get:\n      summary: Inflation returns the current minting inflation value.\n      operationId: Inflation_RXNBT\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  inflation:\n                    type: string\n                    format: byte\n                    description: inflation is the current minting inflation value.\n                description: >-\n                  QueryInflationResponse is the response type for the\n                  Query/Inflation RPC\n\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/mint/v1beta1/params:\n    get:\n      summary: Params returns the total set of minting parameters.\n      operationId: Params_3M1PF\n      responses:\n        \"200\":\n          description: A successful response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  params:\n                    description: params defines the parameters of the module.\n                    type: object\n                    properties:\n                      mint_denom:\n                        type: string\n                        title: type of coin to mint\n                      inflation_rate_change:\n                        type: string\n                        title: maximum annual change in inflation rate\n                      inflation_max:\n                        type: string\n                        title: maximum inflation rate\n                      inflation_min:\n                        type: string\n                        title: minimum inflation rate\n                      goal_bonded:\n                        type: string\n                        title: goal of percent bonded atoms\n                      blocks_per_year:\n                        type: string\n                        format: uint64\n                        title: expected blocks per year\n                description: QueryParamsResponse is the response type for the Query/Params RPC\n                  method.\n        default:\n          description: An unexpected error response.\n          content:\n            application/json:\n              schema:\n                type: object\n                properties:\n                  error:\n                    type: string\n                  code:\n                    type: integer\n                    format: int32\n                  message:\n                    type: string\n                  details:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n      tags:\n        - gRPC Gateway API\ncomponents:\n  schemas:\n    cosmos.consensus.v1.QueryParamsResponse:\n      type: object\n      properties:\n        params:\n          description: >-\n            params are the tendermint consensus params stored in the consensus\n            module.\n\n            Please note that `params.version` is not populated in this response, it is\n\n            tracked separately in the x/upgrade module.\n          type: object\n          properties:\n            block:\n              type: object\n              properties:\n                max_bytes:\n                  type: string\n                  format: int64\n                  title: |-\n                    Max block size, in bytes.\n                    Note: must be greater than 0\n                max_gas:\n                  type: string\n                  format: int64\n                  title: |-\n                    Max gas per block.\n                    Note: must be greater or equal to -1\n              description: BlockParams contains limits on the block size.\n            evidence:\n              type: object\n              properties:\n                max_age_num_blocks:\n                  type: string\n                  format: int64\n                  description: >-\n                    Max age of evidence, in blocks.\n\n\n                    The basic formula for calculating this is: MaxAgeDuration / {average block\n\n                    time}.\n                max_age_duration:\n                  type: string\n                  description: >-\n                    Max age of evidence, in time.\n\n\n                    It should correspond with an app's \"unbonding period\" or other similar\n\n                    mechanism for handling [Nothing-At-Stake\n\n                    attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed).\n                max_bytes:\n                  type: string\n                  format: int64\n                  title: >-\n                    This sets the maximum size of total evidence in bytes that\n                    can be committed in a single block.\n\n                    and should fall comfortably under the max block bytes.\n\n                    Default is 1048576 or 1MB\n              description: EvidenceParams determine how we handle evidence of malfeasance.\n            validator:\n              type: object\n              properties:\n                pub_key_types:\n                  type: array\n                  items:\n                    type: string\n              description: >-\n                ValidatorParams restrict the public key types validators can\n                use.\n\n                NOTE: uses ABCI pubkey naming, not Amino names.\n            version:\n              type: object\n              properties:\n                app:\n                  type: string\n                  format: uint64\n              description: VersionParams contains the ABCI application version.\n      description: QueryParamsResponse defines the response type for querying\n        x/consensus parameters.\n    google.protobuf.Any:\n      type: object\n      properties:\n        type_url:\n          type: string\n        value:\n          type: string\n          format: byte\n    grpc.gateway.runtime.Error:\n      type: object\n      properties:\n        error:\n          type: string\n        code:\n          type: integer\n          format: int32\n        message:\n          type: string\n        details:\n          type: array\n          items:\n            type: object\n            properties:\n              type_url:\n                type: string\n              value:\n                type: string\n                format: byte\n    tendermint.types.BlockParams:\n      type: object\n      properties:\n        max_bytes:\n          type: string\n          format: int64\n          title: |-\n            Max block size, in bytes.\n            Note: must be greater than 0\n        max_gas:\n          type: string\n          format: int64\n          title: |-\n            Max gas per block.\n            Note: must be greater or equal to -1\n      description: BlockParams contains limits on the block size.\n    tendermint.types.ConsensusParams:\n      type: object\n      properties:\n        block:\n          type: object\n          properties:\n            max_bytes:\n              type: string\n              format: int64\n              title: |-\n                Max block size, in bytes.\n                Note: must be greater than 0\n            max_gas:\n              type: string\n              format: int64\n              title: |-\n                Max gas per block.\n                Note: must be greater or equal to -1\n          description: BlockParams contains limits on the block size.\n        evidence:\n          type: object\n          properties:\n            max_age_num_blocks:\n              type: string\n              format: int64\n              description: >-\n                Max age of evidence, in blocks.\n\n\n                The basic formula for calculating this is: MaxAgeDuration / {average block\n\n                time}.\n            max_age_duration:\n              type: string\n              description: >-\n                Max age of evidence, in time.\n\n\n                It should correspond with an app's \"unbonding period\" or other similar\n\n                mechanism for handling [Nothing-At-Stake\n\n                attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed).\n            max_bytes:\n              type: string\n              format: int64\n              title: >-\n                This sets the maximum size of total evidence in bytes that can\n                be committed in a single block.\n\n                and should fall comfortably under the max block bytes.\n\n                Default is 1048576 or 1MB\n          description: EvidenceParams determine how we handle evidence of malfeasance.\n        validator:\n          type: object\n          properties:\n            pub_key_types:\n              type: array\n              items:\n                type: string\n          description: |-\n            ValidatorParams restrict the public key types validators can use.\n            NOTE: uses ABCI pubkey naming, not Amino names.\n        version:\n          type: object\n          properties:\n            app:\n              type: string\n              format: uint64\n          description: VersionParams contains the ABCI application version.\n      description: >-\n        ConsensusParams contains consensus critical parameters that determine\n        the\n\n        validity of blocks.\n    tendermint.types.EvidenceParams:\n      type: object\n      properties:\n        max_age_num_blocks:\n          type: string\n          format: int64\n          description: >-\n            Max age of evidence, in blocks.\n\n\n            The basic formula for calculating this is: MaxAgeDuration / {average block\n\n            time}.\n        max_age_duration:\n          type: string\n          description: >-\n            Max age of evidence, in time.\n\n\n            It should correspond with an app's \"unbonding period\" or other similar\n\n            mechanism for handling [Nothing-At-Stake\n\n            attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed).\n        max_bytes:\n          type: string\n          format: int64\n          title: >-\n            This sets the maximum size of total evidence in bytes that can be\n            committed in a single block.\n\n            and should fall comfortably under the max block bytes.\n\n            Default is 1048576 or 1MB\n      description: EvidenceParams determine how we handle evidence of malfeasance.\n    tendermint.types.ValidatorParams:\n      type: object\n      properties:\n        pub_key_types:\n          type: array\n          items:\n            type: string\n      description: |-\n        ValidatorParams restrict the public key types validators can use.\n        NOTE: uses ABCI pubkey naming, not Amino names.\n    tendermint.types.VersionParams:\n      type: object\n      properties:\n        app:\n          type: string\n          format: uint64\n      description: VersionParams contains the ABCI application version.\n    cosmos.base.query.v1beta1.PageRequest:\n      type: object\n      properties:\n        key:\n          type: string\n          format: byte\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n        offset:\n          type: string\n          format: uint64\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key should\n\n            be set.\n        limit:\n          type: string\n          format: uint64\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n        count_total:\n          type: boolean\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in UIs.\n\n            count_total is only respected when offset is used. It is ignored when key\n\n            is set.\n        reverse:\n          type: boolean\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n      description: |-\n        message SomeRequest {\n                 Foo some_parameter = 1;\n                 PageRequest pagination = 2;\n         }\n      title: |-\n        PageRequest is to be embedded in gRPC request messages for efficient\n        pagination. Ex:\n    cosmos.base.query.v1beta1.PageResponse:\n      type: object\n      properties:\n        next_key:\n          type: string\n          format: byte\n          description: |-\n            next_key is the key to be passed to PageRequest.key to\n            query the next page most efficiently. It will be empty if\n            there are no more results.\n        total:\n          type: string\n          format: uint64\n          title: >-\n            total is total number of results available if\n            PageRequest.count_total\n\n            was set, its value is undefined otherwise\n      description: |-\n        PageResponse is to be embedded in gRPC response messages where the\n        corresponding request message has used PageRequest.\n\n         message SomeResponse {\n                 repeated Bar results = 1;\n                 PageResponse page = 2;\n         }\n    cosmos.feegrant.v1beta1.Grant:\n      type: object\n      properties:\n        granter:\n          type: string\n          description: granter is the address of the user granting an allowance of their\n            funds.\n        grantee:\n          type: string\n          description: grantee is the address of the user being granted an allowance of\n            another user's funds.\n        allowance:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n          description: allowance can be any of basic, periodic, allowed fee allowance.\n      title: Grant is stored in the KVStore to record a grant with full context\n    cosmos.feegrant.v1beta1.QueryAllowanceResponse:\n      type: object\n      properties:\n        allowance:\n          description: allowance is a allowance granted for grantee by granter.\n          type: object\n          properties:\n            granter:\n              type: string\n              description: granter is the address of the user granting an allowance of their\n                funds.\n            grantee:\n              type: string\n              description: grantee is the address of the user being granted an allowance of\n                another user's funds.\n            allowance:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n              description: allowance can be any of basic, periodic, allowed fee allowance.\n          title: Grant is stored in the KVStore to record a grant with full context\n      description: QueryAllowanceResponse is the response type for the Query/Allowance\n        RPC method.\n    cosmos.feegrant.v1beta1.QueryAllowancesByGranterResponse:\n      type: object\n      properties:\n        allowances:\n          type: array\n          items:\n            type: object\n            properties:\n              granter:\n                type: string\n                description: granter is the address of the user granting an allowance of their\n                  funds.\n              grantee:\n                type: string\n                description: grantee is the address of the user being granted an allowance of\n                  another user's funds.\n              allowance:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n                description: allowance can be any of basic, periodic, allowed fee allowance.\n            title: Grant is stored in the KVStore to record a grant with full context\n          description: allowances that have been issued by the granter.\n        pagination:\n          description: pagination defines an pagination for the response.\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n      description: >-\n        QueryAllowancesByGranterResponse is the response type for the\n        Query/AllowancesByGranter RPC method.\n\n\n        Since: cosmos-sdk 0.46\n    cosmos.feegrant.v1beta1.QueryAllowancesResponse:\n      type: object\n      properties:\n        allowances:\n          type: array\n          items:\n            type: object\n            properties:\n              granter:\n                type: string\n                description: granter is the address of the user granting an allowance of their\n                  funds.\n              grantee:\n                type: string\n                description: grantee is the address of the user being granted an allowance of\n                  another user's funds.\n              allowance:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n                description: allowance can be any of basic, periodic, allowed fee allowance.\n            title: Grant is stored in the KVStore to record a grant with full context\n          description: allowances are allowance's granted for grantee by granter.\n        pagination:\n          description: pagination defines an pagination for the response.\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n      description: QueryAllowancesResponse is the response type for the\n        Query/Allowances RPC method.\n    cosmos.base.v1beta1.Coin:\n      type: object\n      properties:\n        denom:\n          type: string\n        amount:\n          type: string\n      description: |-\n        Coin defines a token with a denomination and an amount.\n\n        NOTE: The amount field is an Int which implements the custom method\n        signatures required by gogoproto.\n    cosmos.gov.v1.Deposit:\n      type: object\n      properties:\n        proposal_id:\n          type: string\n          format: uint64\n          description: proposal_id defines the unique id of the proposal.\n        depositor:\n          type: string\n          description: depositor defines the deposit addresses from the proposals.\n        amount:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n          description: amount to be deposited by depositor.\n      description: |-\n        Deposit defines an amount deposited by an account address to an active\n        proposal.\n    cosmos.gov.v1.DepositParams:\n      type: object\n      properties:\n        min_deposit:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n          description: Minimum deposit for a proposal to enter voting period.\n        max_deposit_period:\n          type: string\n          description: >-\n            Maximum period for Atom holders to deposit on a proposal. Initial\n            value: 2\n\n            months.\n      description: DepositParams defines the params for deposits on governance proposals.\n    cosmos.gov.v1.Params:\n      type: object\n      properties:\n        min_deposit:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n          description: Minimum deposit for a proposal to enter voting period.\n        max_deposit_period:\n          type: string\n          description: >-\n            Maximum period for Atom holders to deposit on a proposal. Initial\n            value: 2\n\n            months.\n        voting_period:\n          type: string\n          description: Duration of the voting period.\n        quorum:\n          type: string\n          description: |-\n            Minimum percentage of total stake needed to vote for a result to be\n             considered valid.\n        threshold:\n          type: string\n          description: \"Minimum proportion of Yes votes for proposal to pass. Default\n            value: 0.5.\"\n        veto_threshold:\n          type: string\n          description: |-\n            Minimum value of Veto votes to Total votes ratio for proposal to be\n             vetoed. Default value: 1/3.\n        min_initial_deposit_ratio:\n          type: string\n          description: The ratio representing the proportion of the deposit value that\n            must be paid at proposal submission.\n        burn_vote_quorum:\n          type: boolean\n          title: burn deposits if a proposal does not meet quorum\n        burn_proposal_deposit_prevote:\n          type: boolean\n          title: burn deposits if the proposal does not enter voting period\n        burn_vote_veto:\n          type: boolean\n          title: burn deposits if quorum with vote type no_veto is met\n      description: |-\n        Params defines the parameters for the x/gov module.\n\n        Since: cosmos-sdk 0.47\n    cosmos.gov.v1.Proposal:\n      type: object\n      properties:\n        id:\n          type: string\n          format: uint64\n          description: id defines the unique id of the proposal.\n        messages:\n          type: array\n          items:\n            type: object\n            properties:\n              type_url:\n                type: string\n              value:\n                type: string\n                format: byte\n          description: messages are the arbitrary messages to be executed if the proposal\n            passes.\n        status:\n          description: status defines the proposal status.\n          type: string\n          enum:\n            - PROPOSAL_STATUS_UNSPECIFIED\n            - PROPOSAL_STATUS_DEPOSIT_PERIOD\n            - PROPOSAL_STATUS_VOTING_PERIOD\n            - PROPOSAL_STATUS_PASSED\n            - PROPOSAL_STATUS_REJECTED\n            - PROPOSAL_STATUS_FAILED\n          default: PROPOSAL_STATUS_UNSPECIFIED\n        final_tally_result:\n          description: |-\n            final_tally_result is the final tally result of the proposal. When\n            querying a proposal via gRPC, this field is not populated until the\n            proposal's voting period has ended.\n          type: object\n          properties:\n            yes_count:\n              type: string\n              description: yes_count is the number of yes votes on a proposal.\n            abstain_count:\n              type: string\n              description: abstain_count is the number of abstain votes on a proposal.\n            no_count:\n              type: string\n              description: no_count is the number of no votes on a proposal.\n            no_with_veto_count:\n              type: string\n              description: no_with_veto_count is the number of no with veto votes on a\n                proposal.\n        submit_time:\n          type: string\n          format: date-time\n          description: submit_time is the time of proposal submission.\n        deposit_end_time:\n          type: string\n          format: date-time\n          description: deposit_end_time is the end time for deposition.\n        total_deposit:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n          description: total_deposit is the total deposit on the proposal.\n        voting_start_time:\n          type: string\n          format: date-time\n          description: voting_start_time is the starting time to vote on a proposal.\n        voting_end_time:\n          type: string\n          format: date-time\n          description: voting_end_time is the end time of voting on a proposal.\n        metadata:\n          type: string\n          description: metadata is any arbitrary metadata attached to the proposal.\n        title:\n          type: string\n          description: \"Since: cosmos-sdk 0.47\"\n          title: title is the title of the proposal\n        summary:\n          type: string\n          description: \"Since: cosmos-sdk 0.47\"\n          title: summary is a short summary of the proposal\n        proposer:\n          type: string\n          description: \"Since: cosmos-sdk 0.47\"\n          title: Proposer is the address of the proposal sumbitter\n      description: Proposal defines the core field members of a governance proposal.\n    cosmos.gov.v1.ProposalStatus:\n      type: string\n      enum:\n        - PROPOSAL_STATUS_UNSPECIFIED\n        - PROPOSAL_STATUS_DEPOSIT_PERIOD\n        - PROPOSAL_STATUS_VOTING_PERIOD\n        - PROPOSAL_STATUS_PASSED\n        - PROPOSAL_STATUS_REJECTED\n        - PROPOSAL_STATUS_FAILED\n      default: PROPOSAL_STATUS_UNSPECIFIED\n      description: >-\n        ProposalStatus enumerates the valid statuses of a proposal.\n\n         - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n         - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\n        period.\n         - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\n        period.\n         - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\n        passed.\n         - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\n        been rejected.\n         - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\n        failed.\n    cosmos.gov.v1.QueryDepositResponse:\n      type: object\n      properties:\n        deposit:\n          type: object\n          properties:\n            proposal_id:\n              type: string\n              format: uint64\n              description: proposal_id defines the unique id of the proposal.\n            depositor:\n              type: string\n              description: depositor defines the deposit addresses from the proposals.\n            amount:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom method\n\n                  signatures required by gogoproto.\n              description: amount to be deposited by depositor.\n          description: >-\n            Deposit defines an amount deposited by an account address to an\n            active\n\n            proposal.\n      description: QueryDepositResponse is the response type for the Query/Deposit RPC\n        method.\n    cosmos.gov.v1.QueryDepositsResponse:\n      type: object\n      properties:\n        deposits:\n          type: array\n          items:\n            type: object\n            properties:\n              proposal_id:\n                type: string\n                format: uint64\n                description: proposal_id defines the unique id of the proposal.\n              depositor:\n                type: string\n                description: depositor defines the deposit addresses from the proposals.\n              amount:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom method\n\n                    signatures required by gogoproto.\n                description: amount to be deposited by depositor.\n            description: >-\n              Deposit defines an amount deposited by an account address to an\n              active\n\n              proposal.\n          description: deposits defines the requested deposits.\n        pagination:\n          description: pagination defines the pagination in the response.\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n      description: QueryDepositsResponse is the response type for the Query/Deposits\n        RPC method.\n    cosmos.gov.v1.QueryParamsResponse:\n      type: object\n      properties:\n        voting_params:\n          description: |-\n            Deprecated: Prefer to use `params` instead.\n            voting_params defines the parameters related to voting.\n          type: object\n          properties:\n            voting_period:\n              type: string\n              description: Duration of the voting period.\n        deposit_params:\n          description: |-\n            Deprecated: Prefer to use `params` instead.\n            deposit_params defines the parameters related to deposit.\n          type: object\n          properties:\n            min_deposit:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom method\n\n                  signatures required by gogoproto.\n              description: Minimum deposit for a proposal to enter voting period.\n            max_deposit_period:\n              type: string\n              description: >-\n                Maximum period for Atom holders to deposit on a proposal.\n                Initial value: 2\n\n                months.\n        tally_params:\n          description: |-\n            Deprecated: Prefer to use `params` instead.\n            tally_params defines the parameters related to tally.\n          type: object\n          properties:\n            quorum:\n              type: string\n              description: >-\n                Minimum percentage of total stake needed to vote for a result to\n                be\n\n                considered valid.\n            threshold:\n              type: string\n              description: \"Minimum proportion of Yes votes for proposal to pass. Default\n                value: 0.5.\"\n            veto_threshold:\n              type: string\n              description: >-\n                Minimum value of Veto votes to Total votes ratio for proposal to\n                be\n\n                vetoed. Default value: 1/3.\n        params:\n          description: |-\n            params defines all the paramaters of x/gov module.\n\n            Since: cosmos-sdk 0.47\n          type: object\n          properties:\n            min_deposit:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom method\n\n                  signatures required by gogoproto.\n              description: Minimum deposit for a proposal to enter voting period.\n            max_deposit_period:\n              type: string\n              description: >-\n                Maximum period for Atom holders to deposit on a proposal.\n                Initial value: 2\n\n                months.\n            voting_period:\n              type: string\n              description: Duration of the voting period.\n            quorum:\n              type: string\n              description: >-\n                Minimum percentage of total stake needed to vote for a result to\n                be\n                 considered valid.\n            threshold:\n              type: string\n              description: \"Minimum proportion of Yes votes for proposal to pass. Default\n                value: 0.5.\"\n            veto_threshold:\n              type: string\n              description: >-\n                Minimum value of Veto votes to Total votes ratio for proposal to\n                be\n                 vetoed. Default value: 1/3.\n            min_initial_deposit_ratio:\n              type: string\n              description: The ratio representing the proportion of the deposit value that\n                must be paid at proposal submission.\n            burn_vote_quorum:\n              type: boolean\n              title: burn deposits if a proposal does not meet quorum\n            burn_proposal_deposit_prevote:\n              type: boolean\n              title: burn deposits if the proposal does not enter voting period\n            burn_vote_veto:\n              type: boolean\n              title: burn deposits if quorum with vote type no_veto is met\n      description: QueryParamsResponse is the response type for the Query/Params RPC method.\n    cosmos.gov.v1.QueryProposalResponse:\n      type: object\n      properties:\n        proposal:\n          type: object\n          properties:\n            id:\n              type: string\n              format: uint64\n              description: id defines the unique id of the proposal.\n            messages:\n              type: array\n              items:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n              description: messages are the arbitrary messages to be executed if the proposal\n                passes.\n            status:\n              description: status defines the proposal status.\n              type: string\n              enum:\n                - PROPOSAL_STATUS_UNSPECIFIED\n                - PROPOSAL_STATUS_DEPOSIT_PERIOD\n                - PROPOSAL_STATUS_VOTING_PERIOD\n                - PROPOSAL_STATUS_PASSED\n                - PROPOSAL_STATUS_REJECTED\n                - PROPOSAL_STATUS_FAILED\n              default: PROPOSAL_STATUS_UNSPECIFIED\n            final_tally_result:\n              description: >-\n                final_tally_result is the final tally result of the proposal.\n                When\n\n                querying a proposal via gRPC, this field is not populated until the\n\n                proposal's voting period has ended.\n              type: object\n              properties:\n                yes_count:\n                  type: string\n                  description: yes_count is the number of yes votes on a proposal.\n                abstain_count:\n                  type: string\n                  description: abstain_count is the number of abstain votes on a proposal.\n                no_count:\n                  type: string\n                  description: no_count is the number of no votes on a proposal.\n                no_with_veto_count:\n                  type: string\n                  description: no_with_veto_count is the number of no with veto votes on a\n                    proposal.\n            submit_time:\n              type: string\n              format: date-time\n              description: submit_time is the time of proposal submission.\n            deposit_end_time:\n              type: string\n              format: date-time\n              description: deposit_end_time is the end time for deposition.\n            total_deposit:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom method\n\n                  signatures required by gogoproto.\n              description: total_deposit is the total deposit on the proposal.\n            voting_start_time:\n              type: string\n              format: date-time\n              description: voting_start_time is the starting time to vote on a proposal.\n            voting_end_time:\n              type: string\n              format: date-time\n              description: voting_end_time is the end time of voting on a proposal.\n            metadata:\n              type: string\n              description: metadata is any arbitrary metadata attached to the proposal.\n            title:\n              type: string\n              description: \"Since: cosmos-sdk 0.47\"\n              title: title is the title of the proposal\n            summary:\n              type: string\n              description: \"Since: cosmos-sdk 0.47\"\n              title: summary is a short summary of the proposal\n            proposer:\n              type: string\n              description: \"Since: cosmos-sdk 0.47\"\n              title: Proposer is the address of the proposal sumbitter\n          description: Proposal defines the core field members of a governance proposal.\n      description: QueryProposalResponse is the response type for the Query/Proposal\n        RPC method.\n    cosmos.gov.v1.QueryProposalsResponse:\n      type: object\n      properties:\n        proposals:\n          type: array\n          items:\n            type: object\n            properties:\n              id:\n                type: string\n                format: uint64\n                description: id defines the unique id of the proposal.\n              messages:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n                description: messages are the arbitrary messages to be executed if the proposal\n                  passes.\n              status:\n                description: status defines the proposal status.\n                type: string\n                enum:\n                  - PROPOSAL_STATUS_UNSPECIFIED\n                  - PROPOSAL_STATUS_DEPOSIT_PERIOD\n                  - PROPOSAL_STATUS_VOTING_PERIOD\n                  - PROPOSAL_STATUS_PASSED\n                  - PROPOSAL_STATUS_REJECTED\n                  - PROPOSAL_STATUS_FAILED\n                default: PROPOSAL_STATUS_UNSPECIFIED\n              final_tally_result:\n                description: >-\n                  final_tally_result is the final tally result of the proposal.\n                  When\n\n                  querying a proposal via gRPC, this field is not populated until the\n\n                  proposal's voting period has ended.\n                type: object\n                properties:\n                  yes_count:\n                    type: string\n                    description: yes_count is the number of yes votes on a proposal.\n                  abstain_count:\n                    type: string\n                    description: abstain_count is the number of abstain votes on a proposal.\n                  no_count:\n                    type: string\n                    description: no_count is the number of no votes on a proposal.\n                  no_with_veto_count:\n                    type: string\n                    description: no_with_veto_count is the number of no with veto votes on a\n                      proposal.\n              submit_time:\n                type: string\n                format: date-time\n                description: submit_time is the time of proposal submission.\n              deposit_end_time:\n                type: string\n                format: date-time\n                description: deposit_end_time is the end time for deposition.\n              total_deposit:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom method\n\n                    signatures required by gogoproto.\n                description: total_deposit is the total deposit on the proposal.\n              voting_start_time:\n                type: string\n                format: date-time\n                description: voting_start_time is the starting time to vote on a proposal.\n              voting_end_time:\n                type: string\n                format: date-time\n                description: voting_end_time is the end time of voting on a proposal.\n              metadata:\n                type: string\n                description: metadata is any arbitrary metadata attached to the proposal.\n              title:\n                type: string\n                description: \"Since: cosmos-sdk 0.47\"\n                title: title is the title of the proposal\n              summary:\n                type: string\n                description: \"Since: cosmos-sdk 0.47\"\n                title: summary is a short summary of the proposal\n              proposer:\n                type: string\n                description: \"Since: cosmos-sdk 0.47\"\n                title: Proposer is the address of the proposal sumbitter\n            description: Proposal defines the core field members of a governance proposal.\n          description: proposals defines all the requested governance proposals.\n        pagination:\n          description: pagination defines the pagination in the response.\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n      description: |-\n        QueryProposalsResponse is the response type for the Query/Proposals RPC\n        method.\n    cosmos.gov.v1.QueryTallyResultResponse:\n      type: object\n      properties:\n        tally:\n          description: tally defines the requested tally.\n          type: object\n          properties:\n            yes_count:\n              type: string\n              description: yes_count is the number of yes votes on a proposal.\n            abstain_count:\n              type: string\n              description: abstain_count is the number of abstain votes on a proposal.\n            no_count:\n              type: string\n              description: no_count is the number of no votes on a proposal.\n            no_with_veto_count:\n              type: string\n              description: no_with_veto_count is the number of no with veto votes on a\n                proposal.\n      description: QueryTallyResultResponse is the response type for the Query/Tally\n        RPC method.\n    cosmos.gov.v1.QueryVoteResponse:\n      type: object\n      properties:\n        vote:\n          type: object\n          properties:\n            proposal_id:\n              type: string\n              format: uint64\n              description: proposal_id defines the unique id of the proposal.\n            voter:\n              type: string\n              description: voter is the voter address of the proposal.\n            options:\n              type: array\n              items:\n                type: object\n                properties:\n                  option:\n                    description: option defines the valid vote options, it must not contain\n                      duplicate vote options.\n                    type: string\n                    enum:\n                      - VOTE_OPTION_UNSPECIFIED\n                      - VOTE_OPTION_YES\n                      - VOTE_OPTION_ABSTAIN\n                      - VOTE_OPTION_NO\n                      - VOTE_OPTION_NO_WITH_VETO\n                    default: VOTE_OPTION_UNSPECIFIED\n                  weight:\n                    type: string\n                    description: weight is the vote weight associated with the vote option.\n                description: WeightedVoteOption defines a unit of vote for vote split.\n              description: options is the weighted vote options.\n            metadata:\n              type: string\n              description: metadata is any  arbitrary metadata to attached to the vote.\n          description: |-\n            Vote defines a vote on a governance proposal.\n            A Vote consists of a proposal ID, the voter, and the vote option.\n      description: QueryVoteResponse is the response type for the Query/Vote RPC method.\n    cosmos.gov.v1.QueryVotesResponse:\n      type: object\n      properties:\n        votes:\n          type: array\n          items:\n            type: object\n            properties:\n              proposal_id:\n                type: string\n                format: uint64\n                description: proposal_id defines the unique id of the proposal.\n              voter:\n                type: string\n                description: voter is the voter address of the proposal.\n              options:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    option:\n                      description: option defines the valid vote options, it must not contain\n                        duplicate vote options.\n                      type: string\n                      enum:\n                        - VOTE_OPTION_UNSPECIFIED\n                        - VOTE_OPTION_YES\n                        - VOTE_OPTION_ABSTAIN\n                        - VOTE_OPTION_NO\n                        - VOTE_OPTION_NO_WITH_VETO\n                      default: VOTE_OPTION_UNSPECIFIED\n                    weight:\n                      type: string\n                      description: weight is the vote weight associated with the vote option.\n                  description: WeightedVoteOption defines a unit of vote for vote split.\n                description: options is the weighted vote options.\n              metadata:\n                type: string\n                description: metadata is any  arbitrary metadata to attached to the vote.\n            description: |-\n              Vote defines a vote on a governance proposal.\n              A Vote consists of a proposal ID, the voter, and the vote option.\n          description: votes defines the queried votes.\n        pagination:\n          description: pagination defines the pagination in the response.\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n      description: QueryVotesResponse is the response type for the Query/Votes RPC method.\n    cosmos.gov.v1.TallyParams:\n      type: object\n      properties:\n        quorum:\n          type: string\n          description: |-\n            Minimum percentage of total stake needed to vote for a result to be\n            considered valid.\n        threshold:\n          type: string\n          description: \"Minimum proportion of Yes votes for proposal to pass. Default\n            value: 0.5.\"\n        veto_threshold:\n          type: string\n          description: |-\n            Minimum value of Veto votes to Total votes ratio for proposal to be\n            vetoed. Default value: 1/3.\n      description: TallyParams defines the params for tallying votes on governance\n        proposals.\n    cosmos.gov.v1.TallyResult:\n      type: object\n      properties:\n        yes_count:\n          type: string\n          description: yes_count is the number of yes votes on a proposal.\n        abstain_count:\n          type: string\n          description: abstain_count is the number of abstain votes on a proposal.\n        no_count:\n          type: string\n          description: no_count is the number of no votes on a proposal.\n        no_with_veto_count:\n          type: string\n          description: no_with_veto_count is the number of no with veto votes on a proposal.\n      description: TallyResult defines a standard tally for a governance proposal.\n    cosmos.gov.v1.Vote:\n      type: object\n      properties:\n        proposal_id:\n          type: string\n          format: uint64\n          description: proposal_id defines the unique id of the proposal.\n        voter:\n          type: string\n          description: voter is the voter address of the proposal.\n        options:\n          type: array\n          items:\n            type: object\n            properties:\n              option:\n                description: option defines the valid vote options, it must not contain\n                  duplicate vote options.\n                type: string\n                enum:\n                  - VOTE_OPTION_UNSPECIFIED\n                  - VOTE_OPTION_YES\n                  - VOTE_OPTION_ABSTAIN\n                  - VOTE_OPTION_NO\n                  - VOTE_OPTION_NO_WITH_VETO\n                default: VOTE_OPTION_UNSPECIFIED\n              weight:\n                type: string\n                description: weight is the vote weight associated with the vote option.\n            description: WeightedVoteOption defines a unit of vote for vote split.\n          description: options is the weighted vote options.\n        metadata:\n          type: string\n          description: metadata is any  arbitrary metadata to attached to the vote.\n      description: |-\n        Vote defines a vote on a governance proposal.\n        A Vote consists of a proposal ID, the voter, and the vote option.\n    cosmos.gov.v1.VoteOption:\n      type: string\n      enum:\n        - VOTE_OPTION_UNSPECIFIED\n        - VOTE_OPTION_YES\n        - VOTE_OPTION_ABSTAIN\n        - VOTE_OPTION_NO\n        - VOTE_OPTION_NO_WITH_VETO\n      default: VOTE_OPTION_UNSPECIFIED\n      description: >-\n        VoteOption enumerates the valid vote options for a given governance\n        proposal.\n\n         - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option.\n         - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n         - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n         - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n         - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.\n    cosmos.gov.v1.VotingParams:\n      type: object\n      properties:\n        voting_period:\n          type: string\n          description: Duration of the voting period.\n      description: VotingParams defines the params for voting on governance proposals.\n    cosmos.gov.v1.WeightedVoteOption:\n      type: object\n      properties:\n        option:\n          description: option defines the valid vote options, it must not contain\n            duplicate vote options.\n          type: string\n          enum:\n            - VOTE_OPTION_UNSPECIFIED\n            - VOTE_OPTION_YES\n            - VOTE_OPTION_ABSTAIN\n            - VOTE_OPTION_NO\n            - VOTE_OPTION_NO_WITH_VETO\n          default: VOTE_OPTION_UNSPECIFIED\n        weight:\n          type: string\n          description: weight is the vote weight associated with the vote option.\n      description: WeightedVoteOption defines a unit of vote for vote split.\n    cyber.graph.v1beta1.QueryGraphStatsResponse:\n      type: object\n      properties:\n        cyberlinks:\n          type: string\n          format: uint64\n        particles:\n          type: string\n          format: uint64\n    cyber.resources.v1beta1.Params:\n      type: object\n      properties:\n        max_slots:\n          type: integer\n          format: int64\n        halving_period_volt_blocks:\n          type: integer\n          format: int64\n        halving_period_ampere_blocks:\n          type: integer\n          format: int64\n        base_investmint_period_volt:\n          type: integer\n          format: int64\n        base_investmint_period_ampere:\n          type: integer\n          format: int64\n        min_investmint_period:\n          type: integer\n          format: int64\n        base_investmint_amount_volt:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        base_investmint_amount_ampere:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n    cyber.resources.v1beta1.QueryInvestmintResponse:\n      type: object\n      properties:\n        amount:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n    cyber.resources.v1beta1.QueryParamsResponse:\n      type: object\n      properties:\n        params:\n          type: object\n          properties:\n            max_slots:\n              type: integer\n              format: int64\n            halving_period_volt_blocks:\n              type: integer\n              format: int64\n            halving_period_ampere_blocks:\n              type: integer\n              format: int64\n            base_investmint_period_volt:\n              type: integer\n              format: int64\n            base_investmint_period_ampere:\n              type: integer\n              format: int64\n            min_investmint_period:\n              type: integer\n              format: int64\n            base_investmint_amount_volt:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom method\n\n                signatures required by gogoproto.\n            base_investmint_amount_ampere:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom method\n\n                signatures required by gogoproto.\n    cosmos.base.node.v1beta1.ConfigResponse:\n      type: object\n      properties:\n        minimum_gas_price:\n          type: string\n      description: ConfigResponse defines the response structure for the Config gRPC query.\n    cosmos.upgrade.v1beta1.ModuleVersion:\n      type: object\n      properties:\n        name:\n          type: string\n          title: name of the app module\n        version:\n          type: string\n          format: uint64\n          title: consensus version of the app module\n      description: |-\n        ModuleVersion specifies a module and its consensus version.\n\n        Since: cosmos-sdk 0.43\n    cosmos.upgrade.v1beta1.Plan:\n      type: object\n      properties:\n        name:\n          type: string\n          description: >-\n            Sets the name for the upgrade. This name will be used by the\n            upgraded\n\n            version of the software to apply any special \"on-upgrade\" commands during\n\n            the first BeginBlock method after the upgrade is applied. It is also used\n\n            to detect whether a software version can handle a given upgrade. If no\n\n            upgrade handler with this name has been set in the software, it will be\n\n            assumed that the software is out-of-date when the upgrade Time or Height is\n\n            reached and the software will exit.\n        time:\n          type: string\n          format: date-time\n          description: >-\n            Deprecated: Time based upgrades have been deprecated. Time based\n            upgrade logic\n\n            has been removed from the SDK.\n\n            If this field is not empty, an error will be thrown.\n        height:\n          type: string\n          format: int64\n          description: The height at which the upgrade must be performed.\n        info:\n          type: string\n          title: |-\n            Any application specific upgrade info to be included on-chain\n            such as a git commit that validators could automatically upgrade to\n        upgraded_client_state:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n          description: >-\n            Deprecated: UpgradedClientState field has been deprecated. IBC\n            upgrade logic has been\n\n            moved to the IBC module in the sub module 02-client.\n\n            If this field is not empty, an error will be thrown.\n      description: Plan specifies information about a planned upgrade and when it\n        should occur.\n    cosmos.upgrade.v1beta1.QueryAppliedPlanResponse:\n      type: object\n      properties:\n        height:\n          type: string\n          format: int64\n          description: height is the block height at which the plan was applied.\n      description: >-\n        QueryAppliedPlanResponse is the response type for the Query/AppliedPlan\n        RPC\n\n        method.\n    cosmos.upgrade.v1beta1.QueryAuthorityResponse:\n      type: object\n      properties:\n        address:\n          type: string\n      description: \"Since: cosmos-sdk 0.46\"\n      title: QueryAuthorityResponse is the response type for Query/Authority\n    cosmos.upgrade.v1beta1.QueryCurrentPlanResponse:\n      type: object\n      properties:\n        plan:\n          description: plan is the current upgrade plan.\n          type: object\n          properties:\n            name:\n              type: string\n              description: >-\n                Sets the name for the upgrade. This name will be used by the\n                upgraded\n\n                version of the software to apply any special \"on-upgrade\" commands during\n\n                the first BeginBlock method after the upgrade is applied. It is also used\n\n                to detect whether a software version can handle a given upgrade. If no\n\n                upgrade handler with this name has been set in the software, it will be\n\n                assumed that the software is out-of-date when the upgrade Time or Height is\n\n                reached and the software will exit.\n            time:\n              type: string\n              format: date-time\n              description: >-\n                Deprecated: Time based upgrades have been deprecated. Time based\n                upgrade logic\n\n                has been removed from the SDK.\n\n                If this field is not empty, an error will be thrown.\n            height:\n              type: string\n              format: int64\n              description: The height at which the upgrade must be performed.\n            info:\n              type: string\n              title: >-\n                Any application specific upgrade info to be included on-chain\n\n                such as a git commit that validators could automatically upgrade to\n            upgraded_client_state:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n              description: >-\n                Deprecated: UpgradedClientState field has been deprecated. IBC\n                upgrade logic has been\n\n                moved to the IBC module in the sub module 02-client.\n\n                If this field is not empty, an error will be thrown.\n      description: >-\n        QueryCurrentPlanResponse is the response type for the Query/CurrentPlan\n        RPC\n\n        method.\n    cosmos.upgrade.v1beta1.QueryModuleVersionsResponse:\n      type: object\n      properties:\n        module_versions:\n          type: array\n          items:\n            type: object\n            properties:\n              name:\n                type: string\n                title: name of the app module\n              version:\n                type: string\n                format: uint64\n                title: consensus version of the app module\n            description: |-\n              ModuleVersion specifies a module and its consensus version.\n\n              Since: cosmos-sdk 0.43\n          description: module_versions is a list of module names with their consensus\n            versions.\n      description: >-\n        QueryModuleVersionsResponse is the response type for the\n        Query/ModuleVersions\n\n        RPC method.\n\n\n        Since: cosmos-sdk 0.43\n    cosmos.upgrade.v1beta1.QueryUpgradedConsensusStateResponse:\n      type: object\n      properties:\n        upgraded_consensus_state:\n          type: string\n          format: byte\n          title: \"Since: cosmos-sdk 0.43\"\n      description: >-\n        QueryUpgradedConsensusStateResponse is the response type for the\n        Query/UpgradedConsensusState\n\n        RPC method.\n    ibc.applications.fee.v1.Fee:\n      type: object\n      properties:\n        recv_fee:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n          title: the packet receive fee\n        ack_fee:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n          title: the packet acknowledgement fee\n        timeout_fee:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n          title: the packet timeout fee\n      title: Fee defines the ICS29 receive, acknowledgement and timeout fees\n    ibc.applications.fee.v1.FeeEnabledChannel:\n      type: object\n      properties:\n        port_id:\n          type: string\n          title: unique port identifier\n        channel_id:\n          type: string\n          title: unique channel identifier\n      title: FeeEnabledChannel contains the PortID & ChannelID for a fee enabled\n        channel\n    ibc.applications.fee.v1.IdentifiedPacketFees:\n      type: object\n      properties:\n        packet_id:\n          title: unique packet identifier comprised of the channel ID, port ID and\n            sequence\n          type: object\n          properties:\n            port_id:\n              type: string\n              title: channel port identifier\n            channel_id:\n              type: string\n              title: channel unique identifier\n            sequence:\n              type: string\n              format: uint64\n              title: packet sequence\n        packet_fees:\n          type: array\n          items:\n            type: object\n            properties:\n              fee:\n                title: fee encapsulates the recv, ack and timeout fees associated with an IBC\n                  packet\n                type: object\n                properties:\n                  recv_fee:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the custom method\n\n                        signatures required by gogoproto.\n                    title: the packet receive fee\n                  ack_fee:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the custom method\n\n                        signatures required by gogoproto.\n                    title: the packet acknowledgement fee\n                  timeout_fee:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the custom method\n\n                        signatures required by gogoproto.\n                    title: the packet timeout fee\n              refund_address:\n                type: string\n                title: the refund address for unspent fees\n              relayers:\n                type: array\n                items:\n                  type: string\n                title: optional list of relayers permitted to receive fees\n            title: PacketFee contains ICS29 relayer fees, refund address and optional list\n              of permitted relayers\n          title: list of packet fees\n      title: IdentifiedPacketFees contains a list of type PacketFee and associated\n        PacketId\n    ibc.applications.fee.v1.PacketFee:\n      type: object\n      properties:\n        fee:\n          title: fee encapsulates the recv, ack and timeout fees associated with an IBC\n            packet\n          type: object\n          properties:\n            recv_fee:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom method\n\n                  signatures required by gogoproto.\n              title: the packet receive fee\n            ack_fee:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom method\n\n                  signatures required by gogoproto.\n              title: the packet acknowledgement fee\n            timeout_fee:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom method\n\n                  signatures required by gogoproto.\n              title: the packet timeout fee\n        refund_address:\n          type: string\n          title: the refund address for unspent fees\n        relayers:\n          type: array\n          items:\n            type: string\n          title: optional list of relayers permitted to receive fees\n      title: PacketFee contains ICS29 relayer fees, refund address and optional list\n        of permitted relayers\n    ibc.applications.fee.v1.QueryCounterpartyPayeeResponse:\n      type: object\n      properties:\n        counterparty_payee:\n          type: string\n          title: the counterparty payee address used to compensate forward relaying\n      title: QueryCounterpartyPayeeResponse defines the response type for the\n        CounterpartyPayee rpc\n    ibc.applications.fee.v1.QueryFeeEnabledChannelResponse:\n      type: object\n      properties:\n        fee_enabled:\n          type: boolean\n          title: boolean flag representing the fee enabled channel status\n      title: QueryFeeEnabledChannelResponse defines the response type for the\n        FeeEnabledChannel rpc\n    ibc.applications.fee.v1.QueryFeeEnabledChannelsResponse:\n      type: object\n      properties:\n        fee_enabled_channels:\n          type: array\n          items:\n            type: object\n            properties:\n              port_id:\n                type: string\n                title: unique port identifier\n              channel_id:\n                type: string\n                title: unique channel identifier\n            title: FeeEnabledChannel contains the PortID & ChannelID for a fee enabled\n              channel\n          title: list of fee enabled channels\n      title: QueryFeeEnabledChannelsResponse defines the response type for the\n        FeeEnabledChannels rpc\n    ibc.applications.fee.v1.QueryIncentivizedPacketResponse:\n      type: object\n      properties:\n        incentivized_packet:\n          type: object\n          properties:\n            packet_id:\n              title: unique packet identifier comprised of the channel ID, port ID and\n                sequence\n              type: object\n              properties:\n                port_id:\n                  type: string\n                  title: channel port identifier\n                channel_id:\n                  type: string\n                  title: channel unique identifier\n                sequence:\n                  type: string\n                  format: uint64\n                  title: packet sequence\n            packet_fees:\n              type: array\n              items:\n                type: object\n                properties:\n                  fee:\n                    title: fee encapsulates the recv, ack and timeout fees associated with an IBC\n                      packet\n                    type: object\n                    properties:\n                      recv_fee:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n                        title: the packet receive fee\n                      ack_fee:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n                        title: the packet acknowledgement fee\n                      timeout_fee:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n                        title: the packet timeout fee\n                  refund_address:\n                    type: string\n                    title: the refund address for unspent fees\n                  relayers:\n                    type: array\n                    items:\n                      type: string\n                    title: optional list of relayers permitted to receive fees\n                title: PacketFee contains ICS29 relayer fees, refund address and optional list\n                  of permitted relayers\n              title: list of packet fees\n          title: IdentifiedPacketFees contains a list of type PacketFee and associated\n            PacketId\n      title: QueryIncentivizedPacketsResponse defines the response type for the\n        IncentivizedPacket rpc\n    ibc.applications.fee.v1.QueryIncentivizedPacketsForChannelResponse:\n      type: object\n      properties:\n        incentivized_packets:\n          type: array\n          items:\n            type: object\n            properties:\n              packet_id:\n                title: unique packet identifier comprised of the channel ID, port ID and\n                  sequence\n                type: object\n                properties:\n                  port_id:\n                    type: string\n                    title: channel port identifier\n                  channel_id:\n                    type: string\n                    title: channel unique identifier\n                  sequence:\n                    type: string\n                    format: uint64\n                    title: packet sequence\n              packet_fees:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    fee:\n                      title: fee encapsulates the recv, ack and timeout fees associated with an IBC\n                        packet\n                      type: object\n                      properties:\n                        recv_fee:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              denom:\n                                type: string\n                              amount:\n                                type: string\n                            description: >-\n                              Coin defines a token with a denomination and an\n                              amount.\n\n\n                              NOTE: The amount field is an Int which implements the custom method\n\n                              signatures required by gogoproto.\n                          title: the packet receive fee\n                        ack_fee:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              denom:\n                                type: string\n                              amount:\n                                type: string\n                            description: >-\n                              Coin defines a token with a denomination and an\n                              amount.\n\n\n                              NOTE: The amount field is an Int which implements the custom method\n\n                              signatures required by gogoproto.\n                          title: the packet acknowledgement fee\n                        timeout_fee:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              denom:\n                                type: string\n                              amount:\n                                type: string\n                            description: >-\n                              Coin defines a token with a denomination and an\n                              amount.\n\n\n                              NOTE: The amount field is an Int which implements the custom method\n\n                              signatures required by gogoproto.\n                          title: the packet timeout fee\n                    refund_address:\n                      type: string\n                      title: the refund address for unspent fees\n                    relayers:\n                      type: array\n                      items:\n                        type: string\n                      title: optional list of relayers permitted to receive fees\n                  title: PacketFee contains ICS29 relayer fees, refund address and optional list\n                    of permitted relayers\n                title: list of packet fees\n            title: IdentifiedPacketFees contains a list of type PacketFee and associated\n              PacketId\n          title: Map of all incentivized_packets\n      title: QueryIncentivizedPacketsResponse defines the response type for the\n        incentivized packets RPC\n    ibc.applications.fee.v1.QueryIncentivizedPacketsResponse:\n      type: object\n      properties:\n        incentivized_packets:\n          type: array\n          items:\n            type: object\n            properties:\n              packet_id:\n                title: unique packet identifier comprised of the channel ID, port ID and\n                  sequence\n                type: object\n                properties:\n                  port_id:\n                    type: string\n                    title: channel port identifier\n                  channel_id:\n                    type: string\n                    title: channel unique identifier\n                  sequence:\n                    type: string\n                    format: uint64\n                    title: packet sequence\n              packet_fees:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    fee:\n                      title: fee encapsulates the recv, ack and timeout fees associated with an IBC\n                        packet\n                      type: object\n                      properties:\n                        recv_fee:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              denom:\n                                type: string\n                              amount:\n                                type: string\n                            description: >-\n                              Coin defines a token with a denomination and an\n                              amount.\n\n\n                              NOTE: The amount field is an Int which implements the custom method\n\n                              signatures required by gogoproto.\n                          title: the packet receive fee\n                        ack_fee:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              denom:\n                                type: string\n                              amount:\n                                type: string\n                            description: >-\n                              Coin defines a token with a denomination and an\n                              amount.\n\n\n                              NOTE: The amount field is an Int which implements the custom method\n\n                              signatures required by gogoproto.\n                          title: the packet acknowledgement fee\n                        timeout_fee:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              denom:\n                                type: string\n                              amount:\n                                type: string\n                            description: >-\n                              Coin defines a token with a denomination and an\n                              amount.\n\n\n                              NOTE: The amount field is an Int which implements the custom method\n\n                              signatures required by gogoproto.\n                          title: the packet timeout fee\n                    refund_address:\n                      type: string\n                      title: the refund address for unspent fees\n                    relayers:\n                      type: array\n                      items:\n                        type: string\n                      title: optional list of relayers permitted to receive fees\n                  title: PacketFee contains ICS29 relayer fees, refund address and optional list\n                    of permitted relayers\n                title: list of packet fees\n            title: IdentifiedPacketFees contains a list of type PacketFee and associated\n              PacketId\n          title: list of identified fees for incentivized packets\n      title: QueryIncentivizedPacketsResponse defines the response type for the\n        IncentivizedPackets rpc\n    ibc.applications.fee.v1.QueryPayeeResponse:\n      type: object\n      properties:\n        payee_address:\n          type: string\n          title: the payee address to which packet fees are paid out\n      title: QueryPayeeResponse defines the response type for the Payee rpc\n    ibc.applications.fee.v1.QueryTotalAckFeesResponse:\n      type: object\n      properties:\n        ack_fees:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n          title: the total packet acknowledgement fees\n      title: QueryTotalAckFeesResponse defines the response type for the TotalAckFees\n        rpc\n    ibc.applications.fee.v1.QueryTotalRecvFeesResponse:\n      type: object\n      properties:\n        recv_fees:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n          title: the total packet receive fees\n      title: QueryTotalRecvFeesResponse defines the response type for the\n        TotalRecvFees rpc\n    ibc.applications.fee.v1.QueryTotalTimeoutFeesResponse:\n      type: object\n      properties:\n        timeout_fees:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n          title: the total packet timeout fees\n      title: QueryTotalTimeoutFeesResponse defines the response type for the\n        TotalTimeoutFees rpc\n    ibc.core.channel.v1.PacketId:\n      type: object\n      properties:\n        port_id:\n          type: string\n          title: channel port identifier\n        channel_id:\n          type: string\n          title: channel unique identifier\n        sequence:\n          type: string\n          format: uint64\n          title: packet sequence\n      title: |-\n        PacketId is an identifer for a unique Packet\n        Source chains refer to packets by source port/channel\n        Destination chains refer to packets by destination port/channel\n    cosmos.params.v1beta1.ParamChange:\n      type: object\n      properties:\n        subspace:\n          type: string\n        key:\n          type: string\n        value:\n          type: string\n      description: |-\n        ParamChange defines an individual parameter change, for use in\n        ParameterChangeProposal.\n    cosmos.params.v1beta1.QueryParamsResponse:\n      type: object\n      properties:\n        param:\n          description: param defines the queried parameter.\n          type: object\n          properties:\n            subspace:\n              type: string\n            key:\n              type: string\n            value:\n              type: string\n      description: QueryParamsResponse is response type for the Query/Params RPC method.\n    cosmos.params.v1beta1.QuerySubspacesResponse:\n      type: object\n      properties:\n        subspaces:\n          type: array\n          items:\n            type: object\n            properties:\n              subspace:\n                type: string\n              keys:\n                type: array\n                items:\n                  type: string\n            description: >-\n              Subspace defines a parameter subspace name and all the keys that\n              exist for\n\n              the subspace.\n\n\n              Since: cosmos-sdk 0.46\n      description: |-\n        QuerySubspacesResponse defines the response types for querying for all\n        registered subspaces and all keys for a subspace.\n\n        Since: cosmos-sdk 0.46\n    cosmos.params.v1beta1.Subspace:\n      type: object\n      properties:\n        subspace:\n          type: string\n        keys:\n          type: array\n          items:\n            type: string\n      description: >-\n        Subspace defines a parameter subspace name and all the keys that exist\n        for\n\n        the subspace.\n\n\n        Since: cosmos-sdk 0.46\n    cyber.rank.v1beta1.PageRequest:\n      type: object\n      properties:\n        page:\n          type: integer\n          format: int64\n        per_page:\n          type: integer\n          format: int64\n    cyber.rank.v1beta1.PageResponse:\n      type: object\n      properties:\n        total:\n          type: integer\n          format: int64\n    cyber.rank.v1beta1.Params:\n      type: object\n      properties:\n        calculation_period:\n          type: string\n          format: int64\n        damping_factor:\n          type: string\n        tolerance:\n          type: string\n    cyber.rank.v1beta1.QueryKarmaResponse:\n      type: object\n      properties:\n        karma:\n          type: string\n          format: uint64\n    cyber.rank.v1beta1.QueryLinkExistResponse:\n      type: object\n      properties:\n        exist:\n          type: boolean\n    cyber.rank.v1beta1.QueryNegentropyParticleResponse:\n      type: object\n      properties:\n        entropy:\n          type: string\n          format: uint64\n    cyber.rank.v1beta1.QueryNegentropyResponse:\n      type: object\n      properties:\n        negentropy:\n          type: string\n          format: uint64\n    cyber.rank.v1beta1.QueryParamsResponse:\n      type: object\n      properties:\n        params:\n          type: object\n          properties:\n            calculation_period:\n              type: string\n              format: int64\n            damping_factor:\n              type: string\n            tolerance:\n              type: string\n    cyber.rank.v1beta1.QueryRankResponse:\n      type: object\n      properties:\n        rank:\n          type: string\n          format: uint64\n    cyber.rank.v1beta1.QuerySearchResponse:\n      type: object\n      properties:\n        result:\n          type: array\n          items:\n            type: object\n            properties:\n              particle:\n                type: string\n              rank:\n                type: string\n                format: uint64\n        pagination:\n          type: object\n          properties:\n            total:\n              type: integer\n              format: int64\n    cyber.rank.v1beta1.RankedParticle:\n      type: object\n      properties:\n        particle:\n          type: string\n        rank:\n          type: string\n          format: uint64\n    cosmos.base.v1beta1.DecCoin:\n      type: object\n      properties:\n        denom:\n          type: string\n        amount:\n          type: string\n      description: |-\n        DecCoin defines a token with a denomination and a decimal amount.\n\n        NOTE: The amount field is an Dec which implements the custom method\n        signatures required by gogoproto.\n    cosmos.distribution.v1beta1.DelegationDelegatorReward:\n      type: object\n      properties:\n        validator_address:\n          type: string\n        reward:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              DecCoin defines a token with a denomination and a decimal amount.\n\n\n              NOTE: The amount field is an Dec which implements the custom method\n\n              signatures required by gogoproto.\n      description: |-\n        DelegationDelegatorReward represents the properties\n        of a delegator's delegation reward.\n    cosmos.distribution.v1beta1.Params:\n      type: object\n      properties:\n        community_tax:\n          type: string\n        base_proposer_reward:\n          type: string\n          description: >-\n            Deprecated: The base_proposer_reward field is deprecated and is no\n            longer used\n\n            in the x/distribution module's reward mechanism.\n        bonus_proposer_reward:\n          type: string\n          description: >-\n            Deprecated: The bonus_proposer_reward field is deprecated and is no\n            longer used\n\n            in the x/distribution module's reward mechanism.\n        withdraw_addr_enabled:\n          type: boolean\n      description: Params defines the set of params for the distribution module.\n    cosmos.distribution.v1beta1.QueryCommunityPoolResponse:\n      type: object\n      properties:\n        pool:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              DecCoin defines a token with a denomination and a decimal amount.\n\n\n              NOTE: The amount field is an Dec which implements the custom method\n\n              signatures required by gogoproto.\n          description: pool defines community pool's coins.\n      description: >-\n        QueryCommunityPoolResponse is the response type for the\n        Query/CommunityPool\n\n        RPC method.\n    cosmos.distribution.v1beta1.QueryDelegationRewardsResponse:\n      type: object\n      properties:\n        rewards:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              DecCoin defines a token with a denomination and a decimal amount.\n\n\n              NOTE: The amount field is an Dec which implements the custom method\n\n              signatures required by gogoproto.\n          description: rewards defines the rewards accrued by a delegation.\n      description: |-\n        QueryDelegationRewardsResponse is the response type for the\n        Query/DelegationRewards RPC method.\n    cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse:\n      type: object\n      properties:\n        rewards:\n          type: array\n          items:\n            type: object\n            properties:\n              validator_address:\n                type: string\n              reward:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    DecCoin defines a token with a denomination and a decimal\n                    amount.\n\n\n                    NOTE: The amount field is an Dec which implements the custom method\n\n                    signatures required by gogoproto.\n            description: |-\n              DelegationDelegatorReward represents the properties\n              of a delegator's delegation reward.\n          description: rewards defines all the rewards accrued by a delegator.\n        total:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              DecCoin defines a token with a denomination and a decimal amount.\n\n\n              NOTE: The amount field is an Dec which implements the custom method\n\n              signatures required by gogoproto.\n          description: total defines the sum of all the rewards.\n      description: |-\n        QueryDelegationTotalRewardsResponse is the response type for the\n        Query/DelegationTotalRewards RPC method.\n    cosmos.distribution.v1beta1.QueryDelegatorValidatorsResponse:\n      type: object\n      properties:\n        validators:\n          type: array\n          items:\n            type: string\n          description: validators defines the validators a delegator is delegating for.\n      description: |-\n        QueryDelegatorValidatorsResponse is the response type for the\n        Query/DelegatorValidators RPC method.\n    cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse:\n      type: object\n      properties:\n        withdraw_address:\n          type: string\n          description: withdraw_address defines the delegator address to query for.\n      description: |-\n        QueryDelegatorWithdrawAddressResponse is the response type for the\n        Query/DelegatorWithdrawAddress RPC method.\n    cosmos.distribution.v1beta1.QueryParamsResponse:\n      type: object\n      properties:\n        params:\n          description: params defines the parameters of the module.\n          type: object\n          properties:\n            community_tax:\n              type: string\n            base_proposer_reward:\n              type: string\n              description: >-\n                Deprecated: The base_proposer_reward field is deprecated and is\n                no longer used\n\n                in the x/distribution module's reward mechanism.\n            bonus_proposer_reward:\n              type: string\n              description: >-\n                Deprecated: The bonus_proposer_reward field is deprecated and is\n                no longer used\n\n                in the x/distribution module's reward mechanism.\n            withdraw_addr_enabled:\n              type: boolean\n      description: QueryParamsResponse is the response type for the Query/Params RPC method.\n    cosmos.distribution.v1beta1.QueryValidatorCommissionResponse:\n      type: object\n      properties:\n        commission:\n          description: commission defines the commission the validator received.\n          type: object\n          properties:\n            commission:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  DecCoin defines a token with a denomination and a decimal\n                  amount.\n\n\n                  NOTE: The amount field is an Dec which implements the custom method\n\n                  signatures required by gogoproto.\n      title: |-\n        QueryValidatorCommissionResponse is the response type for the\n        Query/ValidatorCommission RPC method\n    cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse:\n      type: object\n      properties:\n        operator_address:\n          type: string\n          description: operator_address defines the validator operator address.\n        self_bond_rewards:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              DecCoin defines a token with a denomination and a decimal amount.\n\n\n              NOTE: The amount field is an Dec which implements the custom method\n\n              signatures required by gogoproto.\n          description: self_bond_rewards defines the self delegations rewards.\n        commission:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              DecCoin defines a token with a denomination and a decimal amount.\n\n\n              NOTE: The amount field is an Dec which implements the custom method\n\n              signatures required by gogoproto.\n          description: commission defines the commission the validator received.\n      description: QueryValidatorDistributionInfoResponse is the response type for the\n        Query/ValidatorDistributionInfo RPC method.\n    cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse:\n      type: object\n      properties:\n        rewards:\n          type: object\n          properties:\n            rewards:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  DecCoin defines a token with a denomination and a decimal\n                  amount.\n\n\n                  NOTE: The amount field is an Dec which implements the custom method\n\n                  signatures required by gogoproto.\n          description: >-\n            ValidatorOutstandingRewards represents outstanding (un-withdrawn)\n            rewards\n\n            for a validator inexpensive to track, allows simple sanity checks.\n      description: |-\n        QueryValidatorOutstandingRewardsResponse is the response type for the\n        Query/ValidatorOutstandingRewards RPC method.\n    cosmos.distribution.v1beta1.QueryValidatorSlashesResponse:\n      type: object\n      properties:\n        slashes:\n          type: array\n          items:\n            type: object\n            properties:\n              validator_period:\n                type: string\n                format: uint64\n              fraction:\n                type: string\n            description: |-\n              ValidatorSlashEvent represents a validator slash event.\n              Height is implicit within the store key.\n              This is needed to calculate appropriate amount of staking tokens\n              for delegations which are withdrawn after a slash has occurred.\n          description: slashes defines the slashes the validator received.\n        pagination:\n          description: pagination defines the pagination in the response.\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n      description: |-\n        QueryValidatorSlashesResponse is the response type for the\n        Query/ValidatorSlashes RPC method.\n    cosmos.distribution.v1beta1.ValidatorAccumulatedCommission:\n      type: object\n      properties:\n        commission:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              DecCoin defines a token with a denomination and a decimal amount.\n\n\n              NOTE: The amount field is an Dec which implements the custom method\n\n              signatures required by gogoproto.\n      description: |-\n        ValidatorAccumulatedCommission represents accumulated commission\n        for a validator kept as a running counter, can be withdrawn at any time.\n    cosmos.distribution.v1beta1.ValidatorOutstandingRewards:\n      type: object\n      properties:\n        rewards:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              DecCoin defines a token with a denomination and a decimal amount.\n\n\n              NOTE: The amount field is an Dec which implements the custom method\n\n              signatures required by gogoproto.\n      description: >-\n        ValidatorOutstandingRewards represents outstanding (un-withdrawn)\n        rewards\n\n        for a validator inexpensive to track, allows simple sanity checks.\n    cosmos.distribution.v1beta1.ValidatorSlashEvent:\n      type: object\n      properties:\n        validator_period:\n          type: string\n          format: uint64\n        fraction:\n          type: string\n      description: |-\n        ValidatorSlashEvent represents a validator slash event.\n        Height is implicit within the store key.\n        This is needed to calculate appropriate amount of staking tokens\n        for delegations which are withdrawn after a slash has occurred.\n    cosmos.bank.v1beta1.DenomOwner:\n      type: object\n      properties:\n        address:\n          type: string\n          description: address defines the address that owns a particular denomination.\n        balance:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n      description: >-\n        DenomOwner defines structure representing an account that owns or holds\n        a\n\n        particular denominated token. It contains the account address and account\n\n        balance of the denominated token.\n\n\n        Since: cosmos-sdk 0.46\n    cosmos.bank.v1beta1.DenomUnit:\n      type: object\n      properties:\n        denom:\n          type: string\n          description: denom represents the string name of the given denom unit (e.g uatom).\n        exponent:\n          type: integer\n          format: int64\n          description: >-\n            exponent represents power of 10 exponent that one must\n\n            raise the base_denom to in order to equal the given DenomUnit's denom\n\n            1 denom = 10^exponent base_denom\n\n            (e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' with\n\n            exponent = 6, thus: 1 atom = 10^6 uatom).\n        aliases:\n          type: array\n          items:\n            type: string\n          title: aliases is a list of string aliases for the given denom\n      description: |-\n        DenomUnit represents a struct that describes a given\n        denomination unit of the basic token.\n    cosmos.bank.v1beta1.Metadata:\n      type: object\n      properties:\n        description:\n          type: string\n        denom_units:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n                description: denom represents the string name of the given denom unit (e.g\n                  uatom).\n              exponent:\n                type: integer\n                format: int64\n                description: >-\n                  exponent represents power of 10 exponent that one must\n\n                  raise the base_denom to in order to equal the given DenomUnit's denom\n\n                  1 denom = 10^exponent base_denom\n\n                  (e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' with\n\n                  exponent = 6, thus: 1 atom = 10^6 uatom).\n              aliases:\n                type: array\n                items:\n                  type: string\n                title: aliases is a list of string aliases for the given denom\n            description: |-\n              DenomUnit represents a struct that describes a given\n              denomination unit of the basic token.\n          title: denom_units represents the list of DenomUnit's for a given coin\n        base:\n          type: string\n          description: base represents the base denom (should be the DenomUnit with\n            exponent = 0).\n        display:\n          type: string\n          description: |-\n            display indicates the suggested denom that should be\n            displayed in clients.\n        name:\n          type: string\n          description: \"Since: cosmos-sdk 0.43\"\n          title: \"name defines the name of the token (eg: Cosmos Atom)\"\n        symbol:\n          type: string\n          description: >-\n            symbol is the token symbol usually shown on exchanges (eg: ATOM).\n            This can\n\n            be the same as the display.\n\n\n            Since: cosmos-sdk 0.43\n        uri:\n          type: string\n          description: >-\n            URI to a document (on or off-chain) that contains additional\n            information. Optional.\n\n\n            Since: cosmos-sdk 0.46\n        uri_hash:\n          type: string\n          description: >-\n            URIHash is a sha256 hash of a document pointed by URI. It's used to\n            verify that\n\n            the document didn't change. Optional.\n\n\n            Since: cosmos-sdk 0.46\n      description: |-\n        Metadata represents a struct that describes\n        a basic token.\n    cosmos.bank.v1beta1.Params:\n      type: object\n      properties:\n        send_enabled:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              enabled:\n                type: boolean\n            description: >-\n              SendEnabled maps coin denom to a send_enabled status (whether a\n              denom is\n\n              sendable).\n          description: >-\n            Deprecated: Use of SendEnabled in params is deprecated.\n\n            For genesis, use the newly added send_enabled field in the genesis object.\n\n            Storage, lookup, and manipulation of this information is now in the keeper.\n\n\n            As of cosmos-sdk 0.47, this only exists for backwards compatibility of genesis files.\n        default_send_enabled:\n          type: boolean\n      description: Params defines the parameters for the bank module.\n    cosmos.bank.v1beta1.QueryAllBalancesResponse:\n      type: object\n      properties:\n        balances:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n          description: balances is the balances of all the coins.\n        pagination:\n          description: pagination defines the pagination in the response.\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n      description: >-\n        QueryAllBalancesResponse is the response type for the Query/AllBalances\n        RPC\n\n        method.\n    cosmos.bank.v1beta1.QueryBalanceResponse:\n      type: object\n      properties:\n        balance:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n      description: QueryBalanceResponse is the response type for the Query/Balance RPC\n        method.\n    cosmos.bank.v1beta1.QueryDenomMetadataResponse:\n      type: object\n      properties:\n        metadata:\n          type: object\n          properties:\n            description:\n              type: string\n            denom_units:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                    description: denom represents the string name of the given denom unit (e.g\n                      uatom).\n                  exponent:\n                    type: integer\n                    format: int64\n                    description: >-\n                      exponent represents power of 10 exponent that one must\n\n                      raise the base_denom to in order to equal the given DenomUnit's denom\n\n                      1 denom = 10^exponent base_denom\n\n                      (e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' with\n\n                      exponent = 6, thus: 1 atom = 10^6 uatom).\n                  aliases:\n                    type: array\n                    items:\n                      type: string\n                    title: aliases is a list of string aliases for the given denom\n                description: |-\n                  DenomUnit represents a struct that describes a given\n                  denomination unit of the basic token.\n              title: denom_units represents the list of DenomUnit's for a given coin\n            base:\n              type: string\n              description: base represents the base denom (should be the DenomUnit with\n                exponent = 0).\n            display:\n              type: string\n              description: |-\n                display indicates the suggested denom that should be\n                displayed in clients.\n            name:\n              type: string\n              description: \"Since: cosmos-sdk 0.43\"\n              title: \"name defines the name of the token (eg: Cosmos Atom)\"\n            symbol:\n              type: string\n              description: >-\n                symbol is the token symbol usually shown on exchanges (eg:\n                ATOM). This can\n\n                be the same as the display.\n\n\n                Since: cosmos-sdk 0.43\n            uri:\n              type: string\n              description: >-\n                URI to a document (on or off-chain) that contains additional\n                information. Optional.\n\n\n                Since: cosmos-sdk 0.46\n            uri_hash:\n              type: string\n              description: >-\n                URIHash is a sha256 hash of a document pointed by URI. It's used\n                to verify that\n\n                the document didn't change. Optional.\n\n\n                Since: cosmos-sdk 0.46\n          description: |-\n            Metadata represents a struct that describes\n            a basic token.\n      description: >-\n        QueryDenomMetadataResponse is the response type for the\n        Query/DenomMetadata RPC\n\n        method.\n    cosmos.bank.v1beta1.QueryDenomOwnersResponse:\n      type: object\n      properties:\n        denom_owners:\n          type: array\n          items:\n            type: object\n            properties:\n              address:\n                type: string\n                description: address defines the address that owns a particular denomination.\n              balance:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom method\n\n                  signatures required by gogoproto.\n            description: >-\n              DenomOwner defines structure representing an account that owns or\n              holds a\n\n              particular denominated token. It contains the account address and account\n\n              balance of the denominated token.\n\n\n              Since: cosmos-sdk 0.46\n        pagination:\n          description: pagination defines the pagination in the response.\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n      description: >-\n        QueryDenomOwnersResponse defines the RPC response of a DenomOwners RPC\n        query.\n\n\n        Since: cosmos-sdk 0.46\n    cosmos.bank.v1beta1.QueryDenomsMetadataResponse:\n      type: object\n      properties:\n        metadatas:\n          type: array\n          items:\n            type: object\n            properties:\n              description:\n                type: string\n              denom_units:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                      description: denom represents the string name of the given denom unit (e.g\n                        uatom).\n                    exponent:\n                      type: integer\n                      format: int64\n                      description: >-\n                        exponent represents power of 10 exponent that one must\n\n                        raise the base_denom to in order to equal the given DenomUnit's denom\n\n                        1 denom = 10^exponent base_denom\n\n                        (e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' with\n\n                        exponent = 6, thus: 1 atom = 10^6 uatom).\n                    aliases:\n                      type: array\n                      items:\n                        type: string\n                      title: aliases is a list of string aliases for the given denom\n                  description: |-\n                    DenomUnit represents a struct that describes a given\n                    denomination unit of the basic token.\n                title: denom_units represents the list of DenomUnit's for a given coin\n              base:\n                type: string\n                description: base represents the base denom (should be the DenomUnit with\n                  exponent = 0).\n              display:\n                type: string\n                description: |-\n                  display indicates the suggested denom that should be\n                  displayed in clients.\n              name:\n                type: string\n                description: \"Since: cosmos-sdk 0.43\"\n                title: \"name defines the name of the token (eg: Cosmos Atom)\"\n              symbol:\n                type: string\n                description: >-\n                  symbol is the token symbol usually shown on exchanges (eg:\n                  ATOM). This can\n\n                  be the same as the display.\n\n\n                  Since: cosmos-sdk 0.43\n              uri:\n                type: string\n                description: >-\n                  URI to a document (on or off-chain) that contains additional\n                  information. Optional.\n\n\n                  Since: cosmos-sdk 0.46\n              uri_hash:\n                type: string\n                description: >-\n                  URIHash is a sha256 hash of a document pointed by URI. It's\n                  used to verify that\n\n                  the document didn't change. Optional.\n\n\n                  Since: cosmos-sdk 0.46\n            description: |-\n              Metadata represents a struct that describes\n              a basic token.\n          description: metadata provides the client information for all the registered\n            tokens.\n        pagination:\n          description: pagination defines the pagination in the response.\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n      description: >-\n        QueryDenomsMetadataResponse is the response type for the\n        Query/DenomsMetadata RPC\n\n        method.\n    cosmos.bank.v1beta1.QueryParamsResponse:\n      type: object\n      properties:\n        params:\n          type: object\n          properties:\n            send_enabled:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  enabled:\n                    type: boolean\n                description: >-\n                  SendEnabled maps coin denom to a send_enabled status (whether\n                  a denom is\n\n                  sendable).\n              description: >-\n                Deprecated: Use of SendEnabled in params is deprecated.\n\n                For genesis, use the newly added send_enabled field in the genesis object.\n\n                Storage, lookup, and manipulation of this information is now in the keeper.\n\n\n                As of cosmos-sdk 0.47, this only exists for backwards compatibility of genesis files.\n            default_send_enabled:\n              type: boolean\n          description: Params defines the parameters for the bank module.\n      description: QueryParamsResponse defines the response type for querying x/bank\n        parameters.\n    cosmos.bank.v1beta1.QuerySendEnabledResponse:\n      type: object\n      properties:\n        send_enabled:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              enabled:\n                type: boolean\n            description: >-\n              SendEnabled maps coin denom to a send_enabled status (whether a\n              denom is\n\n              sendable).\n        pagination:\n          description: >-\n            pagination defines the pagination in the response. This field is\n            only\n\n            populated if the denoms field in the request is empty.\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n      description: |-\n        QuerySendEnabledResponse defines the RPC response of a SendEnable query.\n\n        Since: cosmos-sdk 0.47\n    cosmos.bank.v1beta1.QuerySpendableBalanceByDenomResponse:\n      type: object\n      properties:\n        balance:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n      description: >-\n        QuerySpendableBalanceByDenomResponse defines the gRPC response structure\n        for\n\n        querying an account's spendable balance for a specific denom.\n\n\n        Since: cosmos-sdk 0.47\n    cosmos.bank.v1beta1.QuerySpendableBalancesResponse:\n      type: object\n      properties:\n        balances:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n          description: balances is the spendable balances of all the coins.\n        pagination:\n          description: pagination defines the pagination in the response.\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n      description: >-\n        QuerySpendableBalancesResponse defines the gRPC response structure for\n        querying\n\n        an account's spendable balances.\n\n\n        Since: cosmos-sdk 0.46\n    cosmos.bank.v1beta1.QuerySupplyOfResponse:\n      type: object\n      properties:\n        amount:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n      description: QuerySupplyOfResponse is the response type for the Query/SupplyOf\n        RPC method.\n    cosmos.bank.v1beta1.QueryTotalSupplyResponse:\n      type: object\n      properties:\n        supply:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n          title: supply is the supply of the coins\n        pagination:\n          description: |-\n            pagination defines the pagination in the response.\n\n            Since: cosmos-sdk 0.43\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n      title: >-\n        QueryTotalSupplyResponse is the response type for the Query/TotalSupply\n        RPC\n\n        method\n    cosmos.bank.v1beta1.SendEnabled:\n      type: object\n      properties:\n        denom:\n          type: string\n        enabled:\n          type: boolean\n      description: |-\n        SendEnabled maps coin denom to a send_enabled status (whether a denom is\n        sendable).\n    ibc.core.client.v1.Height:\n      type: object\n      properties:\n        revision_number:\n          type: string\n          format: uint64\n          title: the revision that the client is currently on\n        revision_height:\n          type: string\n          format: uint64\n          title: the height within the given revision\n      description: >-\n        Normally the RevisionHeight is incremented at each height while keeping\n\n        RevisionNumber the same. However some consensus algorithms may choose to\n\n        reset the height in certain conditions e.g. hard forks, state-machine\n\n        breaking changes In these cases, the RevisionNumber is incremented so that\n\n        height continues to be monitonically increasing even as the RevisionHeight\n\n        gets reset\n      title: >-\n        Height is a monotonically increasing data type\n\n        that can be compared against another Height for the purposes of updating and\n\n        freezing clients\n    ibc.core.client.v1.IdentifiedClientState:\n      type: object\n      properties:\n        client_id:\n          type: string\n          title: client identifier\n        client_state:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n          title: client state\n      description: |-\n        IdentifiedClientState defines a client state with an additional client\n        identifier field.\n    ibc.core.commitment.v1.MerklePrefix:\n      type: object\n      properties:\n        key_prefix:\n          type: string\n          format: byte\n      title: >-\n        MerklePrefix is merkle path prefixed to the key.\n\n        The constructed key from the Path and the key will be append(Path.KeyPath,\n\n        append(Path.KeyPrefix, key...))\n    ibc.core.connection.v1.ConnectionEnd:\n      type: object\n      properties:\n        client_id:\n          type: string\n          description: client associated with this connection.\n        versions:\n          type: array\n          items:\n            type: object\n            properties:\n              identifier:\n                type: string\n                title: unique version identifier\n              features:\n                type: array\n                items:\n                  type: string\n                title: list of features compatible with the specified identifier\n            description: >-\n              Version defines the versioning scheme used to negotiate the IBC\n              verison in\n\n              the connection handshake.\n          description: >-\n            IBC version which can be utilised to determine encodings or\n            protocols for\n\n            channels or packets utilising this connection.\n        state:\n          description: current state of the connection end.\n          type: string\n          enum:\n            - STATE_UNINITIALIZED_UNSPECIFIED\n            - STATE_INIT\n            - STATE_TRYOPEN\n            - STATE_OPEN\n          default: STATE_UNINITIALIZED_UNSPECIFIED\n        counterparty:\n          description: counterparty chain associated with this connection.\n          type: object\n          properties:\n            client_id:\n              type: string\n              description: >-\n                identifies the client on the counterparty chain associated with\n                a given\n\n                connection.\n            connection_id:\n              type: string\n              description: >-\n                identifies the connection end on the counterparty chain\n                associated with a\n\n                given connection.\n            prefix:\n              description: commitment merkle prefix of the counterparty chain.\n              type: object\n              properties:\n                key_prefix:\n                  type: string\n                  format: byte\n              title: >-\n                MerklePrefix is merkle path prefixed to the key.\n\n                The constructed key from the Path and the key will be append(Path.KeyPath,\n\n                append(Path.KeyPrefix, key...))\n        delay_period:\n          type: string\n          format: uint64\n          description: >-\n            delay period that must pass before a consensus state can be used for\n\n            packet-verification NOTE: delay period logic is only implemented by some\n\n            clients.\n      description: |-\n        ConnectionEnd defines a stateful object on a chain connected to another\n        separate one.\n        NOTE: there must only be 2 defined ConnectionEnds to establish\n        a connection between two chains.\n    ibc.core.connection.v1.Counterparty:\n      type: object\n      properties:\n        client_id:\n          type: string\n          description: >-\n            identifies the client on the counterparty chain associated with a\n            given\n\n            connection.\n        connection_id:\n          type: string\n          description: >-\n            identifies the connection end on the counterparty chain associated\n            with a\n\n            given connection.\n        prefix:\n          description: commitment merkle prefix of the counterparty chain.\n          type: object\n          properties:\n            key_prefix:\n              type: string\n              format: byte\n          title: >-\n            MerklePrefix is merkle path prefixed to the key.\n\n            The constructed key from the Path and the key will be append(Path.KeyPath,\n\n            append(Path.KeyPrefix, key...))\n      description: Counterparty defines the counterparty chain associated with a\n        connection end.\n    ibc.core.connection.v1.IdentifiedConnection:\n      type: object\n      properties:\n        id:\n          type: string\n          description: connection identifier.\n        client_id:\n          type: string\n          description: client associated with this connection.\n        versions:\n          type: array\n          items:\n            type: object\n            properties:\n              identifier:\n                type: string\n                title: unique version identifier\n              features:\n                type: array\n                items:\n                  type: string\n                title: list of features compatible with the specified identifier\n            description: >-\n              Version defines the versioning scheme used to negotiate the IBC\n              verison in\n\n              the connection handshake.\n          title: >-\n            IBC version which can be utilised to determine encodings or\n            protocols for\n\n            channels or packets utilising this connection\n        state:\n          description: current state of the connection end.\n          type: string\n          enum:\n            - STATE_UNINITIALIZED_UNSPECIFIED\n            - STATE_INIT\n            - STATE_TRYOPEN\n            - STATE_OPEN\n          default: STATE_UNINITIALIZED_UNSPECIFIED\n        counterparty:\n          description: counterparty chain associated with this connection.\n          type: object\n          properties:\n            client_id:\n              type: string\n              description: >-\n                identifies the client on the counterparty chain associated with\n                a given\n\n                connection.\n            connection_id:\n              type: string\n              description: >-\n                identifies the connection end on the counterparty chain\n                associated with a\n\n                given connection.\n            prefix:\n              description: commitment merkle prefix of the counterparty chain.\n              type: object\n              properties:\n                key_prefix:\n                  type: string\n                  format: byte\n              title: >-\n                MerklePrefix is merkle path prefixed to the key.\n\n                The constructed key from the Path and the key will be append(Path.KeyPath,\n\n                append(Path.KeyPrefix, key...))\n        delay_period:\n          type: string\n          format: uint64\n          description: delay period associated with this connection.\n      description: |-\n        IdentifiedConnection defines a connection with additional connection\n        identifier field.\n    ibc.core.connection.v1.Params:\n      type: object\n      properties:\n        max_expected_time_per_block:\n          type: string\n          format: uint64\n          description: >-\n            maximum expected time per block (in nanoseconds), used to enforce\n            block delay. This parameter should reflect the\n\n            largest amount of time that the chain might reasonably take to produce the next block under normal operating\n\n            conditions. A safe choice is 3-5x the expected time per block.\n      description: Params defines the set of Connection parameters.\n    ibc.core.connection.v1.QueryClientConnectionsResponse:\n      type: object\n      properties:\n        connection_paths:\n          type: array\n          items:\n            type: string\n          description: slice of all the connection paths associated with a client.\n        proof:\n          type: string\n          format: byte\n          title: merkle proof of existence\n        proof_height:\n          title: height at which the proof was generated\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may choose to\n\n            reset the height in certain conditions e.g. hard forks, state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented so that\n\n            height continues to be monitonically increasing even as the RevisionHeight\n\n            gets reset\n      title: |-\n        QueryClientConnectionsResponse is the response type for the\n        Query/ClientConnections RPC method\n    ibc.core.connection.v1.QueryConnectionClientStateResponse:\n      type: object\n      properties:\n        identified_client_state:\n          title: client state associated with the channel\n          type: object\n          properties:\n            client_id:\n              type: string\n              title: client identifier\n            client_state:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n              title: client state\n          description: >-\n            IdentifiedClientState defines a client state with an additional\n            client\n\n            identifier field.\n        proof:\n          type: string\n          format: byte\n          title: merkle proof of existence\n        proof_height:\n          title: height at which the proof was retrieved\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may choose to\n\n            reset the height in certain conditions e.g. hard forks, state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented so that\n\n            height continues to be monitonically increasing even as the RevisionHeight\n\n            gets reset\n      title: |-\n        QueryConnectionClientStateResponse is the response type for the\n        Query/ConnectionClientState RPC method\n    ibc.core.connection.v1.QueryConnectionConsensusStateResponse:\n      type: object\n      properties:\n        consensus_state:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n          title: consensus state associated with the channel\n        client_id:\n          type: string\n          title: client ID associated with the consensus state\n        proof:\n          type: string\n          format: byte\n          title: merkle proof of existence\n        proof_height:\n          title: height at which the proof was retrieved\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may choose to\n\n            reset the height in certain conditions e.g. hard forks, state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented so that\n\n            height continues to be monitonically increasing even as the RevisionHeight\n\n            gets reset\n      title: |-\n        QueryConnectionConsensusStateResponse is the response type for the\n        Query/ConnectionConsensusState RPC method\n    ibc.core.connection.v1.QueryConnectionParamsResponse:\n      type: object\n      properties:\n        params:\n          description: params defines the parameters of the module.\n          type: object\n          properties:\n            max_expected_time_per_block:\n              type: string\n              format: uint64\n              description: >-\n                maximum expected time per block (in nanoseconds), used to\n                enforce block delay. This parameter should reflect the\n\n                largest amount of time that the chain might reasonably take to produce the next block under normal operating\n\n                conditions. A safe choice is 3-5x the expected time per block.\n      description: QueryConnectionParamsResponse is the response type for the\n        Query/ConnectionParams RPC method.\n    ibc.core.connection.v1.QueryConnectionResponse:\n      type: object\n      properties:\n        connection:\n          title: connection associated with the request identifier\n          type: object\n          properties:\n            client_id:\n              type: string\n              description: client associated with this connection.\n            versions:\n              type: array\n              items:\n                type: object\n                properties:\n                  identifier:\n                    type: string\n                    title: unique version identifier\n                  features:\n                    type: array\n                    items:\n                      type: string\n                    title: list of features compatible with the specified identifier\n                description: >-\n                  Version defines the versioning scheme used to negotiate the\n                  IBC verison in\n\n                  the connection handshake.\n              description: >-\n                IBC version which can be utilised to determine encodings or\n                protocols for\n\n                channels or packets utilising this connection.\n            state:\n              description: current state of the connection end.\n              type: string\n              enum:\n                - STATE_UNINITIALIZED_UNSPECIFIED\n                - STATE_INIT\n                - STATE_TRYOPEN\n                - STATE_OPEN\n              default: STATE_UNINITIALIZED_UNSPECIFIED\n            counterparty:\n              description: counterparty chain associated with this connection.\n              type: object\n              properties:\n                client_id:\n                  type: string\n                  description: >-\n                    identifies the client on the counterparty chain associated\n                    with a given\n\n                    connection.\n                connection_id:\n                  type: string\n                  description: >-\n                    identifies the connection end on the counterparty chain\n                    associated with a\n\n                    given connection.\n                prefix:\n                  description: commitment merkle prefix of the counterparty chain.\n                  type: object\n                  properties:\n                    key_prefix:\n                      type: string\n                      format: byte\n                  title: >-\n                    MerklePrefix is merkle path prefixed to the key.\n\n                    The constructed key from the Path and the key will be append(Path.KeyPath,\n\n                    append(Path.KeyPrefix, key...))\n            delay_period:\n              type: string\n              format: uint64\n              description: >-\n                delay period that must pass before a consensus state can be used\n                for\n\n                packet-verification NOTE: delay period logic is only implemented by some\n\n                clients.\n          description: >-\n            ConnectionEnd defines a stateful object on a chain connected to\n            another\n\n            separate one.\n\n            NOTE: there must only be 2 defined ConnectionEnds to establish\n\n            a connection between two chains.\n        proof:\n          type: string\n          format: byte\n          title: merkle proof of existence\n        proof_height:\n          title: height at which the proof was retrieved\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may choose to\n\n            reset the height in certain conditions e.g. hard forks, state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented so that\n\n            height continues to be monitonically increasing even as the RevisionHeight\n\n            gets reset\n      description: >-\n        QueryConnectionResponse is the response type for the Query/Connection\n        RPC\n\n        method. Besides the connection end, it includes a proof and the height from\n\n        which the proof was retrieved.\n    ibc.core.connection.v1.QueryConnectionsResponse:\n      type: object\n      properties:\n        connections:\n          type: array\n          items:\n            type: object\n            properties:\n              id:\n                type: string\n                description: connection identifier.\n              client_id:\n                type: string\n                description: client associated with this connection.\n              versions:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    identifier:\n                      type: string\n                      title: unique version identifier\n                    features:\n                      type: array\n                      items:\n                        type: string\n                      title: list of features compatible with the specified identifier\n                  description: >-\n                    Version defines the versioning scheme used to negotiate the\n                    IBC verison in\n\n                    the connection handshake.\n                title: >-\n                  IBC version which can be utilised to determine encodings or\n                  protocols for\n\n                  channels or packets utilising this connection\n              state:\n                description: current state of the connection end.\n                type: string\n                enum:\n                  - STATE_UNINITIALIZED_UNSPECIFIED\n                  - STATE_INIT\n                  - STATE_TRYOPEN\n                  - STATE_OPEN\n                default: STATE_UNINITIALIZED_UNSPECIFIED\n              counterparty:\n                description: counterparty chain associated with this connection.\n                type: object\n                properties:\n                  client_id:\n                    type: string\n                    description: >-\n                      identifies the client on the counterparty chain associated\n                      with a given\n\n                      connection.\n                  connection_id:\n                    type: string\n                    description: >-\n                      identifies the connection end on the counterparty chain\n                      associated with a\n\n                      given connection.\n                  prefix:\n                    description: commitment merkle prefix of the counterparty chain.\n                    type: object\n                    properties:\n                      key_prefix:\n                        type: string\n                        format: byte\n                    title: >-\n                      MerklePrefix is merkle path prefixed to the key.\n\n                      The constructed key from the Path and the key will be append(Path.KeyPath,\n\n                      append(Path.KeyPrefix, key...))\n              delay_period:\n                type: string\n                format: uint64\n                description: delay period associated with this connection.\n            description: >-\n              IdentifiedConnection defines a connection with additional\n              connection\n\n              identifier field.\n          description: list of stored connections of the chain.\n        pagination:\n          title: pagination response\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n        height:\n          title: query block height\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may choose to\n\n            reset the height in certain conditions e.g. hard forks, state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented so that\n\n            height continues to be monitonically increasing even as the RevisionHeight\n\n            gets reset\n      description: >-\n        QueryConnectionsResponse is the response type for the Query/Connections\n        RPC\n\n        method.\n    ibc.core.connection.v1.State:\n      type: string\n      enum:\n        - STATE_UNINITIALIZED_UNSPECIFIED\n        - STATE_INIT\n        - STATE_TRYOPEN\n        - STATE_OPEN\n      default: STATE_UNINITIALIZED_UNSPECIFIED\n      description: >-\n        State defines if a connection is in one of the following states:\n\n        INIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n         - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n         - STATE_INIT: A connection end has just started the opening handshake.\n         - STATE_TRYOPEN: A connection end has acknowledged the handshake step on the counterparty\n        chain.\n         - STATE_OPEN: A connection end has completed the handshake.\n    ibc.core.connection.v1.Version:\n      type: object\n      properties:\n        identifier:\n          type: string\n          title: unique version identifier\n        features:\n          type: array\n          items:\n            type: string\n          title: list of features compatible with the specified identifier\n      description: >-\n        Version defines the versioning scheme used to negotiate the IBC verison\n        in\n\n        the connection handshake.\n    cyber.grid.v1beta1.Params:\n      type: object\n      properties:\n        max_routes:\n          type: integer\n          format: int64\n    cyber.grid.v1beta1.QueryParamsResponse:\n      type: object\n      properties:\n        params:\n          type: object\n          properties:\n            max_routes:\n              type: integer\n              format: int64\n    cyber.grid.v1beta1.QueryRouteResponse:\n      type: object\n      properties:\n        route:\n          type: object\n          properties:\n            source:\n              type: string\n            destination:\n              type: string\n            name:\n              type: string\n            value:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom method\n\n                  signatures required by gogoproto.\n    cyber.grid.v1beta1.QueryRoutedEnergyResponse:\n      type: object\n      properties:\n        value:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n    cyber.grid.v1beta1.QueryRoutesResponse:\n      type: object\n      properties:\n        routes:\n          type: array\n          items:\n            type: object\n            properties:\n              source:\n                type: string\n              destination:\n                type: string\n              name:\n                type: string\n              value:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom method\n\n                    signatures required by gogoproto.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n    cyber.grid.v1beta1.Route:\n      type: object\n      properties:\n        source:\n          type: string\n        destination:\n          type: string\n        name:\n          type: string\n        value:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n    cyber.dmn.v1beta1.Load:\n      type: object\n      properties:\n        input:\n          type: string\n        gas_price:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n    cyber.dmn.v1beta1.Params:\n      type: object\n      properties:\n        max_slots:\n          type: integer\n          format: int64\n        max_gas:\n          type: integer\n          format: int64\n        fee_ttl:\n          type: integer\n          format: int64\n    cyber.dmn.v1beta1.QueryParamsResponse:\n      type: object\n      properties:\n        params:\n          type: object\n          properties:\n            max_slots:\n              type: integer\n              format: int64\n            max_gas:\n              type: integer\n              format: int64\n            fee_ttl:\n              type: integer\n              format: int64\n    cyber.dmn.v1beta1.QueryThoughtResponse:\n      type: object\n      properties:\n        thought:\n          type: object\n          properties:\n            program:\n              type: string\n            trigger:\n              type: object\n              properties:\n                period:\n                  type: string\n                  format: uint64\n                block:\n                  type: string\n                  format: uint64\n            load:\n              type: object\n              properties:\n                input:\n                  type: string\n                gas_price:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom method\n\n                    signatures required by gogoproto.\n            name:\n              type: string\n            particle:\n              type: string\n    cyber.dmn.v1beta1.QueryThoughtStatsResponse:\n      type: object\n      properties:\n        thought_stats:\n          type: object\n          properties:\n            program:\n              type: string\n            name:\n              type: string\n            calls:\n              type: string\n              format: uint64\n            fees:\n              type: string\n              format: uint64\n            gas:\n              type: string\n              format: uint64\n            last_block:\n              type: string\n              format: uint64\n    cyber.dmn.v1beta1.QueryThoughtsFeesResponse:\n      type: object\n      properties:\n        fees:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n    cyber.dmn.v1beta1.QueryThoughtsResponse:\n      type: object\n      properties:\n        thoughts:\n          type: array\n          items:\n            type: object\n            properties:\n              program:\n                type: string\n              trigger:\n                type: object\n                properties:\n                  period:\n                    type: string\n                    format: uint64\n                  block:\n                    type: string\n                    format: uint64\n              load:\n                type: object\n                properties:\n                  input:\n                    type: string\n                  gas_price:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the custom method\n\n                      signatures required by gogoproto.\n              name:\n                type: string\n              particle:\n                type: string\n    cyber.dmn.v1beta1.QueryThoughtsStatsResponse:\n      type: object\n      properties:\n        thoughts_stats:\n          type: array\n          items:\n            type: object\n            properties:\n              program:\n                type: string\n              name:\n                type: string\n              calls:\n                type: string\n                format: uint64\n              fees:\n                type: string\n                format: uint64\n              gas:\n                type: string\n                format: uint64\n              last_block:\n                type: string\n                format: uint64\n    cyber.dmn.v1beta1.Thought:\n      type: object\n      properties:\n        program:\n          type: string\n        trigger:\n          type: object\n          properties:\n            period:\n              type: string\n              format: uint64\n            block:\n              type: string\n              format: uint64\n        load:\n          type: object\n          properties:\n            input:\n              type: string\n            gas_price:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom method\n\n                signatures required by gogoproto.\n        name:\n          type: string\n        particle:\n          type: string\n    cyber.dmn.v1beta1.ThoughtStats:\n      type: object\n      properties:\n        program:\n          type: string\n        name:\n          type: string\n        calls:\n          type: string\n          format: uint64\n        fees:\n          type: string\n          format: uint64\n        gas:\n          type: string\n          format: uint64\n        last_block:\n          type: string\n          format: uint64\n    cyber.dmn.v1beta1.Trigger:\n      type: object\n      properties:\n        period:\n          type: string\n          format: uint64\n        block:\n          type: string\n          format: uint64\n    cosmos.staking.v1beta1.BondStatus:\n      type: string\n      enum:\n        - BOND_STATUS_UNSPECIFIED\n        - BOND_STATUS_UNBONDED\n        - BOND_STATUS_UNBONDING\n        - BOND_STATUS_BONDED\n      default: BOND_STATUS_UNSPECIFIED\n      description: >-\n        BondStatus is the status of a validator.\n\n         - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status.\n         - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded.\n         - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding.\n         - BOND_STATUS_BONDED: BONDED defines a validator that is bonded.\n    cosmos.staking.v1beta1.Commission:\n      type: object\n      properties:\n        commission_rates:\n          description: commission_rates defines the initial commission rates to be used\n            for creating a validator.\n          type: object\n          properties:\n            rate:\n              type: string\n              description: rate is the commission rate charged to delegators, as a fraction.\n            max_rate:\n              type: string\n              description: max_rate defines the maximum commission rate which validator can\n                ever charge, as a fraction.\n            max_change_rate:\n              type: string\n              description: max_change_rate defines the maximum daily increase of the validator\n                commission, as a fraction.\n        update_time:\n          type: string\n          format: date-time\n          description: update_time is the last time the commission rate was changed.\n      description: Commission defines commission parameters for a given validator.\n    cosmos.staking.v1beta1.CommissionRates:\n      type: object\n      properties:\n        rate:\n          type: string\n          description: rate is the commission rate charged to delegators, as a fraction.\n        max_rate:\n          type: string\n          description: max_rate defines the maximum commission rate which validator can\n            ever charge, as a fraction.\n        max_change_rate:\n          type: string\n          description: max_change_rate defines the maximum daily increase of the validator\n            commission, as a fraction.\n      description: >-\n        CommissionRates defines the initial commission rates to be used for\n        creating\n\n        a validator.\n    cosmos.staking.v1beta1.Delegation:\n      type: object\n      properties:\n        delegator_address:\n          type: string\n          description: delegator_address is the bech32-encoded address of the delegator.\n        validator_address:\n          type: string\n          description: validator_address is the bech32-encoded address of the validator.\n        shares:\n          type: string\n          description: shares define the delegation shares received.\n      description: |-\n        Delegation represents the bond with tokens held by an account. It is\n        owned by one delegator, and is associated with the voting power of one\n        validator.\n    cosmos.staking.v1beta1.DelegationResponse:\n      type: object\n      properties:\n        delegation:\n          type: object\n          properties:\n            delegator_address:\n              type: string\n              description: delegator_address is the bech32-encoded address of the delegator.\n            validator_address:\n              type: string\n              description: validator_address is the bech32-encoded address of the validator.\n            shares:\n              type: string\n              description: shares define the delegation shares received.\n          description: >-\n            Delegation represents the bond with tokens held by an account. It is\n\n            owned by one delegator, and is associated with the voting power of one\n\n            validator.\n        balance:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n      description: >-\n        DelegationResponse is equivalent to Delegation except that it contains a\n\n        balance in addition to shares which is more suitable for client responses.\n    cosmos.staking.v1beta1.Description:\n      type: object\n      properties:\n        moniker:\n          type: string\n          description: moniker defines a human-readable name for the validator.\n        identity:\n          type: string\n          description: identity defines an optional identity signature (ex. UPort or\n            Keybase).\n        website:\n          type: string\n          description: website defines an optional website link.\n        security_contact:\n          type: string\n          description: security_contact defines an optional email for security contact.\n        details:\n          type: string\n          description: details define other optional details.\n      description: Description defines a validator description.\n    cosmos.staking.v1beta1.HistoricalInfo:\n      type: object\n      properties:\n        header:\n          type: object\n          properties:\n            version:\n              title: basic block info\n              type: object\n              properties:\n                block:\n                  type: string\n                  format: uint64\n                app:\n                  type: string\n                  format: uint64\n              description: >-\n                Consensus captures the consensus rules for processing a block in\n                the blockchain,\n\n                including all blockchain data structures and the rules of the application's\n\n                state transition machine.\n            chain_id:\n              type: string\n            height:\n              type: string\n              format: int64\n            time:\n              type: string\n              format: date-time\n            last_block_id:\n              title: prev block info\n              type: object\n              properties:\n                hash:\n                  type: string\n                  format: byte\n                part_set_header:\n                  type: object\n                  properties:\n                    total:\n                      type: integer\n                      format: int64\n                    hash:\n                      type: string\n                      format: byte\n                  title: PartsetHeader\n            last_commit_hash:\n              type: string\n              format: byte\n              title: hashes of block data\n            data_hash:\n              type: string\n              format: byte\n            validators_hash:\n              type: string\n              format: byte\n              title: hashes from the app output from the prev block\n            next_validators_hash:\n              type: string\n              format: byte\n            consensus_hash:\n              type: string\n              format: byte\n            app_hash:\n              type: string\n              format: byte\n            last_results_hash:\n              type: string\n              format: byte\n            evidence_hash:\n              type: string\n              format: byte\n              title: consensus info\n            proposer_address:\n              type: string\n              format: byte\n          description: Header defines the structure of a block header.\n        valset:\n          type: array\n          items:\n            type: object\n            properties:\n              operator_address:\n                type: string\n                description: operator_address defines the address of the validator's operator;\n                  bech encoded in JSON.\n              consensus_pubkey:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n                description: consensus_pubkey is the consensus public key of the validator, as a\n                  Protobuf Any.\n              jailed:\n                type: boolean\n                description: jailed defined whether the validator has been jailed from bonded\n                  status or not.\n              status:\n                description: status is the validator status (bonded/unbonding/unbonded).\n                type: string\n                enum:\n                  - BOND_STATUS_UNSPECIFIED\n                  - BOND_STATUS_UNBONDED\n                  - BOND_STATUS_UNBONDING\n                  - BOND_STATUS_BONDED\n                default: BOND_STATUS_UNSPECIFIED\n              tokens:\n                type: string\n                description: tokens define the delegated tokens (incl. self-delegation).\n              delegator_shares:\n                type: string\n                description: delegator_shares defines total shares issued to a validator's\n                  delegators.\n              description:\n                description: description defines the description terms for the validator.\n                type: object\n                properties:\n                  moniker:\n                    type: string\n                    description: moniker defines a human-readable name for the validator.\n                  identity:\n                    type: string\n                    description: identity defines an optional identity signature (ex. UPort or\n                      Keybase).\n                  website:\n                    type: string\n                    description: website defines an optional website link.\n                  security_contact:\n                    type: string\n                    description: security_contact defines an optional email for security contact.\n                  details:\n                    type: string\n                    description: details define other optional details.\n              unbonding_height:\n                type: string\n                format: int64\n                description: unbonding_height defines, if unbonding, the height at which this\n                  validator has begun unbonding.\n              unbonding_time:\n                type: string\n                format: date-time\n                description: unbonding_time defines, if unbonding, the min time for the\n                  validator to complete unbonding.\n              commission:\n                description: commission defines the commission parameters.\n                type: object\n                properties:\n                  commission_rates:\n                    description: commission_rates defines the initial commission rates to be used\n                      for creating a validator.\n                    type: object\n                    properties:\n                      rate:\n                        type: string\n                        description: rate is the commission rate charged to delegators, as a fraction.\n                      max_rate:\n                        type: string\n                        description: max_rate defines the maximum commission rate which validator can\n                          ever charge, as a fraction.\n                      max_change_rate:\n                        type: string\n                        description: max_change_rate defines the maximum daily increase of the validator\n                          commission, as a fraction.\n                  update_time:\n                    type: string\n                    format: date-time\n                    description: update_time is the last time the commission rate was changed.\n              min_self_delegation:\n                type: string\n                description: >-\n                  min_self_delegation is the validator's self declared minimum\n                  self delegation.\n\n\n                  Since: cosmos-sdk 0.46\n              unbonding_on_hold_ref_count:\n                type: string\n                format: int64\n                title: strictly positive if this validator's unbonding has been stopped by\n                  external modules\n              unbonding_ids:\n                type: array\n                items:\n                  type: string\n                  format: uint64\n                title: list of unbonding ids, each uniquely identifing an unbonding of this\n                  validator\n            description: >-\n              Validator defines a validator, together with the total amount of\n              the\n\n              Validator's bond shares and their exchange rate to coins. Slashing results in\n\n              a decrease in the exchange rate, allowing correct calculation of future\n\n              undelegations without iterating over delegators. When coins are delegated to\n\n              this validator, the validator is credited with a delegation whose number of\n\n              bond shares is based on the amount of coins delegated divided by the current\n\n              exchange rate. Voting power can be calculated as total bonded shares\n\n              multiplied by exchange rate.\n      description: >-\n        HistoricalInfo contains header and validator information for a given\n        block.\n\n        It is stored as part of staking module's state, which persists the `n` most\n\n        recent HistoricalInfo\n\n        (`n` is set by the staking module's `historical_entries` parameter).\n    cosmos.staking.v1beta1.Params:\n      type: object\n      properties:\n        unbonding_time:\n          type: string\n          description: unbonding_time is the time duration of unbonding.\n        max_validators:\n          type: integer\n          format: int64\n          description: max_validators is the maximum number of validators.\n        max_entries:\n          type: integer\n          format: int64\n          description: max_entries is the max entries for either unbonding delegation or\n            redelegation (per pair/trio).\n        historical_entries:\n          type: integer\n          format: int64\n          description: historical_entries is the number of historical entries to persist.\n        bond_denom:\n          type: string\n          description: bond_denom defines the bondable coin denomination.\n        min_commission_rate:\n          type: string\n          title: min_commission_rate is the chain-wide minimum commission rate that a\n            validator can charge their delegators\n      description: Params defines the parameters for the x/staking module.\n    cosmos.staking.v1beta1.Pool:\n      type: object\n      properties:\n        not_bonded_tokens:\n          type: string\n        bonded_tokens:\n          type: string\n      description: |-\n        Pool is used for tracking bonded and not-bonded token supply of the bond\n        denomination.\n    cosmos.staking.v1beta1.QueryDelegationResponse:\n      type: object\n      properties:\n        delegation_response:\n          type: object\n          properties:\n            delegation:\n              type: object\n              properties:\n                delegator_address:\n                  type: string\n                  description: delegator_address is the bech32-encoded address of the delegator.\n                validator_address:\n                  type: string\n                  description: validator_address is the bech32-encoded address of the validator.\n                shares:\n                  type: string\n                  description: shares define the delegation shares received.\n              description: >-\n                Delegation represents the bond with tokens held by an account.\n                It is\n\n                owned by one delegator, and is associated with the voting power of one\n\n                validator.\n            balance:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom method\n\n                signatures required by gogoproto.\n          description: >-\n            DelegationResponse is equivalent to Delegation except that it\n            contains a\n\n            balance in addition to shares which is more suitable for client responses.\n      description: QueryDelegationResponse is response type for the Query/Delegation\n        RPC method.\n    cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse:\n      type: object\n      properties:\n        delegation_responses:\n          type: array\n          items:\n            type: object\n            properties:\n              delegation:\n                type: object\n                properties:\n                  delegator_address:\n                    type: string\n                    description: delegator_address is the bech32-encoded address of the delegator.\n                  validator_address:\n                    type: string\n                    description: validator_address is the bech32-encoded address of the validator.\n                  shares:\n                    type: string\n                    description: shares define the delegation shares received.\n                description: >-\n                  Delegation represents the bond with tokens held by an account.\n                  It is\n\n                  owned by one delegator, and is associated with the voting power of one\n\n                  validator.\n              balance:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom method\n\n                  signatures required by gogoproto.\n            description: >-\n              DelegationResponse is equivalent to Delegation except that it\n              contains a\n\n              balance in addition to shares which is more suitable for client responses.\n          description: delegation_responses defines all the delegations' info of a\n            delegator.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: |-\n        QueryDelegatorDelegationsResponse is response type for the\n        Query/DelegatorDelegations RPC method.\n    cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse:\n      type: object\n      properties:\n        unbonding_responses:\n          type: array\n          items:\n            type: object\n            properties:\n              delegator_address:\n                type: string\n                description: delegator_address is the bech32-encoded address of the delegator.\n              validator_address:\n                type: string\n                description: validator_address is the bech32-encoded address of the validator.\n              entries:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    creation_height:\n                      type: string\n                      format: int64\n                      description: creation_height is the height which the unbonding took place.\n                    completion_time:\n                      type: string\n                      format: date-time\n                      description: completion_time is the unix time for unbonding completion.\n                    initial_balance:\n                      type: string\n                      description: initial_balance defines the tokens initially scheduled to receive\n                        at completion.\n                    balance:\n                      type: string\n                      description: balance defines the tokens to receive at completion.\n                    unbonding_id:\n                      type: string\n                      format: uint64\n                      title: Incrementing id that uniquely identifies this entry\n                    unbonding_on_hold_ref_count:\n                      type: string\n                      format: int64\n                      title: Strictly positive if this entry's unbonding has been stopped by external\n                        modules\n                  description: UnbondingDelegationEntry defines an unbonding object with relevant\n                    metadata.\n                description: entries are the unbonding delegation entries.\n            description: >-\n              UnbondingDelegation stores all of a single delegator's unbonding\n              bonds\n\n              for a single validator in an time-ordered list.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: |-\n        QueryUnbondingDelegatorDelegationsResponse is response type for the\n        Query/UnbondingDelegatorDelegations RPC method.\n    cosmos.staking.v1beta1.QueryDelegatorValidatorResponse:\n      type: object\n      properties:\n        validator:\n          type: object\n          properties:\n            operator_address:\n              type: string\n              description: operator_address defines the address of the validator's operator;\n                bech encoded in JSON.\n            consensus_pubkey:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n              description: consensus_pubkey is the consensus public key of the validator, as a\n                Protobuf Any.\n            jailed:\n              type: boolean\n              description: jailed defined whether the validator has been jailed from bonded\n                status or not.\n            status:\n              description: status is the validator status (bonded/unbonding/unbonded).\n              type: string\n              enum:\n                - BOND_STATUS_UNSPECIFIED\n                - BOND_STATUS_UNBONDED\n                - BOND_STATUS_UNBONDING\n                - BOND_STATUS_BONDED\n              default: BOND_STATUS_UNSPECIFIED\n            tokens:\n              type: string\n              description: tokens define the delegated tokens (incl. self-delegation).\n            delegator_shares:\n              type: string\n              description: delegator_shares defines total shares issued to a validator's\n                delegators.\n            description:\n              description: description defines the description terms for the validator.\n              type: object\n              properties:\n                moniker:\n                  type: string\n                  description: moniker defines a human-readable name for the validator.\n                identity:\n                  type: string\n                  description: identity defines an optional identity signature (ex. UPort or\n                    Keybase).\n                website:\n                  type: string\n                  description: website defines an optional website link.\n                security_contact:\n                  type: string\n                  description: security_contact defines an optional email for security contact.\n                details:\n                  type: string\n                  description: details define other optional details.\n            unbonding_height:\n              type: string\n              format: int64\n              description: unbonding_height defines, if unbonding, the height at which this\n                validator has begun unbonding.\n            unbonding_time:\n              type: string\n              format: date-time\n              description: unbonding_time defines, if unbonding, the min time for the\n                validator to complete unbonding.\n            commission:\n              description: commission defines the commission parameters.\n              type: object\n              properties:\n                commission_rates:\n                  description: commission_rates defines the initial commission rates to be used\n                    for creating a validator.\n                  type: object\n                  properties:\n                    rate:\n                      type: string\n                      description: rate is the commission rate charged to delegators, as a fraction.\n                    max_rate:\n                      type: string\n                      description: max_rate defines the maximum commission rate which validator can\n                        ever charge, as a fraction.\n                    max_change_rate:\n                      type: string\n                      description: max_change_rate defines the maximum daily increase of the validator\n                        commission, as a fraction.\n                update_time:\n                  type: string\n                  format: date-time\n                  description: update_time is the last time the commission rate was changed.\n            min_self_delegation:\n              type: string\n              description: >-\n                min_self_delegation is the validator's self declared minimum\n                self delegation.\n\n\n                Since: cosmos-sdk 0.46\n            unbonding_on_hold_ref_count:\n              type: string\n              format: int64\n              title: strictly positive if this validator's unbonding has been stopped by\n                external modules\n            unbonding_ids:\n              type: array\n              items:\n                type: string\n                format: uint64\n              title: list of unbonding ids, each uniquely identifing an unbonding of this\n                validator\n          description: >-\n            Validator defines a validator, together with the total amount of the\n\n            Validator's bond shares and their exchange rate to coins. Slashing results in\n\n            a decrease in the exchange rate, allowing correct calculation of future\n\n            undelegations without iterating over delegators. When coins are delegated to\n\n            this validator, the validator is credited with a delegation whose number of\n\n            bond shares is based on the amount of coins delegated divided by the current\n\n            exchange rate. Voting power can be calculated as total bonded shares\n\n            multiplied by exchange rate.\n      description: |-\n        QueryDelegatorValidatorResponse response type for the\n        Query/DelegatorValidator RPC method.\n    cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse:\n      type: object\n      properties:\n        validators:\n          type: array\n          items:\n            type: object\n            properties:\n              operator_address:\n                type: string\n                description: operator_address defines the address of the validator's operator;\n                  bech encoded in JSON.\n              consensus_pubkey:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n                description: consensus_pubkey is the consensus public key of the validator, as a\n                  Protobuf Any.\n              jailed:\n                type: boolean\n                description: jailed defined whether the validator has been jailed from bonded\n                  status or not.\n              status:\n                description: status is the validator status (bonded/unbonding/unbonded).\n                type: string\n                enum:\n                  - BOND_STATUS_UNSPECIFIED\n                  - BOND_STATUS_UNBONDED\n                  - BOND_STATUS_UNBONDING\n                  - BOND_STATUS_BONDED\n                default: BOND_STATUS_UNSPECIFIED\n              tokens:\n                type: string\n                description: tokens define the delegated tokens (incl. self-delegation).\n              delegator_shares:\n                type: string\n                description: delegator_shares defines total shares issued to a validator's\n                  delegators.\n              description:\n                description: description defines the description terms for the validator.\n                type: object\n                properties:\n                  moniker:\n                    type: string\n                    description: moniker defines a human-readable name for the validator.\n                  identity:\n                    type: string\n                    description: identity defines an optional identity signature (ex. UPort or\n                      Keybase).\n                  website:\n                    type: string\n                    description: website defines an optional website link.\n                  security_contact:\n                    type: string\n                    description: security_contact defines an optional email for security contact.\n                  details:\n                    type: string\n                    description: details define other optional details.\n              unbonding_height:\n                type: string\n                format: int64\n                description: unbonding_height defines, if unbonding, the height at which this\n                  validator has begun unbonding.\n              unbonding_time:\n                type: string\n                format: date-time\n                description: unbonding_time defines, if unbonding, the min time for the\n                  validator to complete unbonding.\n              commission:\n                description: commission defines the commission parameters.\n                type: object\n                properties:\n                  commission_rates:\n                    description: commission_rates defines the initial commission rates to be used\n                      for creating a validator.\n                    type: object\n                    properties:\n                      rate:\n                        type: string\n                        description: rate is the commission rate charged to delegators, as a fraction.\n                      max_rate:\n                        type: string\n                        description: max_rate defines the maximum commission rate which validator can\n                          ever charge, as a fraction.\n                      max_change_rate:\n                        type: string\n                        description: max_change_rate defines the maximum daily increase of the validator\n                          commission, as a fraction.\n                  update_time:\n                    type: string\n                    format: date-time\n                    description: update_time is the last time the commission rate was changed.\n              min_self_delegation:\n                type: string\n                description: >-\n                  min_self_delegation is the validator's self declared minimum\n                  self delegation.\n\n\n                  Since: cosmos-sdk 0.46\n              unbonding_on_hold_ref_count:\n                type: string\n                format: int64\n                title: strictly positive if this validator's unbonding has been stopped by\n                  external modules\n              unbonding_ids:\n                type: array\n                items:\n                  type: string\n                  format: uint64\n                title: list of unbonding ids, each uniquely identifing an unbonding of this\n                  validator\n            description: >-\n              Validator defines a validator, together with the total amount of\n              the\n\n              Validator's bond shares and their exchange rate to coins. Slashing results in\n\n              a decrease in the exchange rate, allowing correct calculation of future\n\n              undelegations without iterating over delegators. When coins are delegated to\n\n              this validator, the validator is credited with a delegation whose number of\n\n              bond shares is based on the amount of coins delegated divided by the current\n\n              exchange rate. Voting power can be calculated as total bonded shares\n\n              multiplied by exchange rate.\n          description: validators defines the validators' info of a delegator.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: |-\n        QueryDelegatorValidatorsResponse is response type for the\n        Query/DelegatorValidators RPC method.\n    cosmos.staking.v1beta1.QueryHistoricalInfoResponse:\n      type: object\n      properties:\n        hist:\n          description: hist defines the historical info at the given height.\n          type: object\n          properties:\n            header:\n              type: object\n              properties:\n                version:\n                  title: basic block info\n                  type: object\n                  properties:\n                    block:\n                      type: string\n                      format: uint64\n                    app:\n                      type: string\n                      format: uint64\n                  description: >-\n                    Consensus captures the consensus rules for processing a\n                    block in the blockchain,\n\n                    including all blockchain data structures and the rules of the application's\n\n                    state transition machine.\n                chain_id:\n                  type: string\n                height:\n                  type: string\n                  format: int64\n                time:\n                  type: string\n                  format: date-time\n                last_block_id:\n                  title: prev block info\n                  type: object\n                  properties:\n                    hash:\n                      type: string\n                      format: byte\n                    part_set_header:\n                      type: object\n                      properties:\n                        total:\n                          type: integer\n                          format: int64\n                        hash:\n                          type: string\n                          format: byte\n                      title: PartsetHeader\n                last_commit_hash:\n                  type: string\n                  format: byte\n                  title: hashes of block data\n                data_hash:\n                  type: string\n                  format: byte\n                validators_hash:\n                  type: string\n                  format: byte\n                  title: hashes from the app output from the prev block\n                next_validators_hash:\n                  type: string\n                  format: byte\n                consensus_hash:\n                  type: string\n                  format: byte\n                app_hash:\n                  type: string\n                  format: byte\n                last_results_hash:\n                  type: string\n                  format: byte\n                evidence_hash:\n                  type: string\n                  format: byte\n                  title: consensus info\n                proposer_address:\n                  type: string\n                  format: byte\n              description: Header defines the structure of a block header.\n            valset:\n              type: array\n              items:\n                type: object\n                properties:\n                  operator_address:\n                    type: string\n                    description: operator_address defines the address of the validator's operator;\n                      bech encoded in JSON.\n                  consensus_pubkey:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                    description: consensus_pubkey is the consensus public key of the validator, as a\n                      Protobuf Any.\n                  jailed:\n                    type: boolean\n                    description: jailed defined whether the validator has been jailed from bonded\n                      status or not.\n                  status:\n                    description: status is the validator status (bonded/unbonding/unbonded).\n                    type: string\n                    enum:\n                      - BOND_STATUS_UNSPECIFIED\n                      - BOND_STATUS_UNBONDED\n                      - BOND_STATUS_UNBONDING\n                      - BOND_STATUS_BONDED\n                    default: BOND_STATUS_UNSPECIFIED\n                  tokens:\n                    type: string\n                    description: tokens define the delegated tokens (incl. self-delegation).\n                  delegator_shares:\n                    type: string\n                    description: delegator_shares defines total shares issued to a validator's\n                      delegators.\n                  description:\n                    description: description defines the description terms for the validator.\n                    type: object\n                    properties:\n                      moniker:\n                        type: string\n                        description: moniker defines a human-readable name for the validator.\n                      identity:\n                        type: string\n                        description: identity defines an optional identity signature (ex. UPort or\n                          Keybase).\n                      website:\n                        type: string\n                        description: website defines an optional website link.\n                      security_contact:\n                        type: string\n                        description: security_contact defines an optional email for security contact.\n                      details:\n                        type: string\n                        description: details define other optional details.\n                  unbonding_height:\n                    type: string\n                    format: int64\n                    description: unbonding_height defines, if unbonding, the height at which this\n                      validator has begun unbonding.\n                  unbonding_time:\n                    type: string\n                    format: date-time\n                    description: unbonding_time defines, if unbonding, the min time for the\n                      validator to complete unbonding.\n                  commission:\n                    description: commission defines the commission parameters.\n                    type: object\n                    properties:\n                      commission_rates:\n                        description: commission_rates defines the initial commission rates to be used\n                          for creating a validator.\n                        type: object\n                        properties:\n                          rate:\n                            type: string\n                            description: rate is the commission rate charged to delegators, as a fraction.\n                          max_rate:\n                            type: string\n                            description: max_rate defines the maximum commission rate which validator can\n                              ever charge, as a fraction.\n                          max_change_rate:\n                            type: string\n                            description: max_change_rate defines the maximum daily increase of the validator\n                              commission, as a fraction.\n                      update_time:\n                        type: string\n                        format: date-time\n                        description: update_time is the last time the commission rate was changed.\n                  min_self_delegation:\n                    type: string\n                    description: >-\n                      min_self_delegation is the validator's self declared\n                      minimum self delegation.\n\n\n                      Since: cosmos-sdk 0.46\n                  unbonding_on_hold_ref_count:\n                    type: string\n                    format: int64\n                    title: strictly positive if this validator's unbonding has been stopped by\n                      external modules\n                  unbonding_ids:\n                    type: array\n                    items:\n                      type: string\n                      format: uint64\n                    title: list of unbonding ids, each uniquely identifing an unbonding of this\n                      validator\n                description: >-\n                  Validator defines a validator, together with the total amount\n                  of the\n\n                  Validator's bond shares and their exchange rate to coins. Slashing results in\n\n                  a decrease in the exchange rate, allowing correct calculation of future\n\n                  undelegations without iterating over delegators. When coins are delegated to\n\n                  this validator, the validator is credited with a delegation whose number of\n\n                  bond shares is based on the amount of coins delegated divided by the current\n\n                  exchange rate. Voting power can be calculated as total bonded shares\n\n                  multiplied by exchange rate.\n      description: >-\n        QueryHistoricalInfoResponse is response type for the\n        Query/HistoricalInfo RPC\n\n        method.\n    cosmos.staking.v1beta1.QueryParamsResponse:\n      type: object\n      properties:\n        params:\n          description: params holds all the parameters of this module.\n          type: object\n          properties:\n            unbonding_time:\n              type: string\n              description: unbonding_time is the time duration of unbonding.\n            max_validators:\n              type: integer\n              format: int64\n              description: max_validators is the maximum number of validators.\n            max_entries:\n              type: integer\n              format: int64\n              description: max_entries is the max entries for either unbonding delegation or\n                redelegation (per pair/trio).\n            historical_entries:\n              type: integer\n              format: int64\n              description: historical_entries is the number of historical entries to persist.\n            bond_denom:\n              type: string\n              description: bond_denom defines the bondable coin denomination.\n            min_commission_rate:\n              type: string\n              title: min_commission_rate is the chain-wide minimum commission rate that a\n                validator can charge their delegators\n      description: QueryParamsResponse is response type for the Query/Params RPC method.\n    cosmos.staking.v1beta1.QueryPoolResponse:\n      type: object\n      properties:\n        pool:\n          description: pool defines the pool info.\n          type: object\n          properties:\n            not_bonded_tokens:\n              type: string\n            bonded_tokens:\n              type: string\n      description: QueryPoolResponse is response type for the Query/Pool RPC method.\n    cosmos.staking.v1beta1.QueryRedelegationsResponse:\n      type: object\n      properties:\n        redelegation_responses:\n          type: array\n          items:\n            type: object\n            properties:\n              redelegation:\n                type: object\n                properties:\n                  delegator_address:\n                    type: string\n                    description: delegator_address is the bech32-encoded address of the delegator.\n                  validator_src_address:\n                    type: string\n                    description: validator_src_address is the validator redelegation source operator\n                      address.\n                  validator_dst_address:\n                    type: string\n                    description: validator_dst_address is the validator redelegation destination\n                      operator address.\n                  entries:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        creation_height:\n                          type: string\n                          format: int64\n                          description: creation_height  defines the height which the redelegation took\n                            place.\n                        completion_time:\n                          type: string\n                          format: date-time\n                          description: completion_time defines the unix time for redelegation completion.\n                        initial_balance:\n                          type: string\n                          description: initial_balance defines the initial balance when redelegation\n                            started.\n                        shares_dst:\n                          type: string\n                          description: shares_dst is the amount of destination-validator shares created by\n                            redelegation.\n                        unbonding_id:\n                          type: string\n                          format: uint64\n                          title: Incrementing id that uniquely identifies this entry\n                        unbonding_on_hold_ref_count:\n                          type: string\n                          format: int64\n                          title: Strictly positive if this entry's unbonding has been stopped by external\n                            modules\n                      description: RedelegationEntry defines a redelegation object with relevant\n                        metadata.\n                    description: entries are the redelegation entries.\n                description: >-\n                  Redelegation contains the list of a particular delegator's\n                  redelegating bonds\n\n                  from a particular source validator to a particular destination validator.\n              entries:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    redelegation_entry:\n                      type: object\n                      properties:\n                        creation_height:\n                          type: string\n                          format: int64\n                          description: creation_height  defines the height which the redelegation took\n                            place.\n                        completion_time:\n                          type: string\n                          format: date-time\n                          description: completion_time defines the unix time for redelegation completion.\n                        initial_balance:\n                          type: string\n                          description: initial_balance defines the initial balance when redelegation\n                            started.\n                        shares_dst:\n                          type: string\n                          description: shares_dst is the amount of destination-validator shares created by\n                            redelegation.\n                        unbonding_id:\n                          type: string\n                          format: uint64\n                          title: Incrementing id that uniquely identifies this entry\n                        unbonding_on_hold_ref_count:\n                          type: string\n                          format: int64\n                          title: Strictly positive if this entry's unbonding has been stopped by external\n                            modules\n                      description: RedelegationEntry defines a redelegation object with relevant\n                        metadata.\n                    balance:\n                      type: string\n                  description: >-\n                    RedelegationEntryResponse is equivalent to a\n                    RedelegationEntry except that it\n\n                    contains a balance in addition to shares which is more suitable for client\n\n                    responses.\n            description: >-\n              RedelegationResponse is equivalent to a Redelegation except that\n              its entries\n\n              contain a balance in addition to shares which is more suitable for client\n\n              responses.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: >-\n        QueryRedelegationsResponse is response type for the Query/Redelegations\n        RPC\n\n        method.\n    cosmos.staking.v1beta1.QueryUnbondingDelegationResponse:\n      type: object\n      properties:\n        unbond:\n          type: object\n          properties:\n            delegator_address:\n              type: string\n              description: delegator_address is the bech32-encoded address of the delegator.\n            validator_address:\n              type: string\n              description: validator_address is the bech32-encoded address of the validator.\n            entries:\n              type: array\n              items:\n                type: object\n                properties:\n                  creation_height:\n                    type: string\n                    format: int64\n                    description: creation_height is the height which the unbonding took place.\n                  completion_time:\n                    type: string\n                    format: date-time\n                    description: completion_time is the unix time for unbonding completion.\n                  initial_balance:\n                    type: string\n                    description: initial_balance defines the tokens initially scheduled to receive\n                      at completion.\n                  balance:\n                    type: string\n                    description: balance defines the tokens to receive at completion.\n                  unbonding_id:\n                    type: string\n                    format: uint64\n                    title: Incrementing id that uniquely identifies this entry\n                  unbonding_on_hold_ref_count:\n                    type: string\n                    format: int64\n                    title: Strictly positive if this entry's unbonding has been stopped by external\n                      modules\n                description: UnbondingDelegationEntry defines an unbonding object with relevant\n                  metadata.\n              description: entries are the unbonding delegation entries.\n          description: >-\n            UnbondingDelegation stores all of a single delegator's unbonding\n            bonds\n\n            for a single validator in an time-ordered list.\n      description: >-\n        QueryDelegationResponse is response type for the\n        Query/UnbondingDelegation\n\n        RPC method.\n    cosmos.staking.v1beta1.QueryValidatorDelegationsResponse:\n      type: object\n      properties:\n        delegation_responses:\n          type: array\n          items:\n            type: object\n            properties:\n              delegation:\n                type: object\n                properties:\n                  delegator_address:\n                    type: string\n                    description: delegator_address is the bech32-encoded address of the delegator.\n                  validator_address:\n                    type: string\n                    description: validator_address is the bech32-encoded address of the validator.\n                  shares:\n                    type: string\n                    description: shares define the delegation shares received.\n                description: >-\n                  Delegation represents the bond with tokens held by an account.\n                  It is\n\n                  owned by one delegator, and is associated with the voting power of one\n\n                  validator.\n              balance:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom method\n\n                  signatures required by gogoproto.\n            description: >-\n              DelegationResponse is equivalent to Delegation except that it\n              contains a\n\n              balance in addition to shares which is more suitable for client responses.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      title: |-\n        QueryValidatorDelegationsResponse is response type for the\n        Query/ValidatorDelegations RPC method\n    cosmos.staking.v1beta1.QueryValidatorResponse:\n      type: object\n      properties:\n        validator:\n          type: object\n          properties:\n            operator_address:\n              type: string\n              description: operator_address defines the address of the validator's operator;\n                bech encoded in JSON.\n            consensus_pubkey:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n              description: consensus_pubkey is the consensus public key of the validator, as a\n                Protobuf Any.\n            jailed:\n              type: boolean\n              description: jailed defined whether the validator has been jailed from bonded\n                status or not.\n            status:\n              description: status is the validator status (bonded/unbonding/unbonded).\n              type: string\n              enum:\n                - BOND_STATUS_UNSPECIFIED\n                - BOND_STATUS_UNBONDED\n                - BOND_STATUS_UNBONDING\n                - BOND_STATUS_BONDED\n              default: BOND_STATUS_UNSPECIFIED\n            tokens:\n              type: string\n              description: tokens define the delegated tokens (incl. self-delegation).\n            delegator_shares:\n              type: string\n              description: delegator_shares defines total shares issued to a validator's\n                delegators.\n            description:\n              description: description defines the description terms for the validator.\n              type: object\n              properties:\n                moniker:\n                  type: string\n                  description: moniker defines a human-readable name for the validator.\n                identity:\n                  type: string\n                  description: identity defines an optional identity signature (ex. UPort or\n                    Keybase).\n                website:\n                  type: string\n                  description: website defines an optional website link.\n                security_contact:\n                  type: string\n                  description: security_contact defines an optional email for security contact.\n                details:\n                  type: string\n                  description: details define other optional details.\n            unbonding_height:\n              type: string\n              format: int64\n              description: unbonding_height defines, if unbonding, the height at which this\n                validator has begun unbonding.\n            unbonding_time:\n              type: string\n              format: date-time\n              description: unbonding_time defines, if unbonding, the min time for the\n                validator to complete unbonding.\n            commission:\n              description: commission defines the commission parameters.\n              type: object\n              properties:\n                commission_rates:\n                  description: commission_rates defines the initial commission rates to be used\n                    for creating a validator.\n                  type: object\n                  properties:\n                    rate:\n                      type: string\n                      description: rate is the commission rate charged to delegators, as a fraction.\n                    max_rate:\n                      type: string\n                      description: max_rate defines the maximum commission rate which validator can\n                        ever charge, as a fraction.\n                    max_change_rate:\n                      type: string\n                      description: max_change_rate defines the maximum daily increase of the validator\n                        commission, as a fraction.\n                update_time:\n                  type: string\n                  format: date-time\n                  description: update_time is the last time the commission rate was changed.\n            min_self_delegation:\n              type: string\n              description: >-\n                min_self_delegation is the validator's self declared minimum\n                self delegation.\n\n\n                Since: cosmos-sdk 0.46\n            unbonding_on_hold_ref_count:\n              type: string\n              format: int64\n              title: strictly positive if this validator's unbonding has been stopped by\n                external modules\n            unbonding_ids:\n              type: array\n              items:\n                type: string\n                format: uint64\n              title: list of unbonding ids, each uniquely identifing an unbonding of this\n                validator\n          description: >-\n            Validator defines a validator, together with the total amount of the\n\n            Validator's bond shares and their exchange rate to coins. Slashing results in\n\n            a decrease in the exchange rate, allowing correct calculation of future\n\n            undelegations without iterating over delegators. When coins are delegated to\n\n            this validator, the validator is credited with a delegation whose number of\n\n            bond shares is based on the amount of coins delegated divided by the current\n\n            exchange rate. Voting power can be calculated as total bonded shares\n\n            multiplied by exchange rate.\n      title: QueryValidatorResponse is response type for the Query/Validator RPC\n        method\n    cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse:\n      type: object\n      properties:\n        unbonding_responses:\n          type: array\n          items:\n            type: object\n            properties:\n              delegator_address:\n                type: string\n                description: delegator_address is the bech32-encoded address of the delegator.\n              validator_address:\n                type: string\n                description: validator_address is the bech32-encoded address of the validator.\n              entries:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    creation_height:\n                      type: string\n                      format: int64\n                      description: creation_height is the height which the unbonding took place.\n                    completion_time:\n                      type: string\n                      format: date-time\n                      description: completion_time is the unix time for unbonding completion.\n                    initial_balance:\n                      type: string\n                      description: initial_balance defines the tokens initially scheduled to receive\n                        at completion.\n                    balance:\n                      type: string\n                      description: balance defines the tokens to receive at completion.\n                    unbonding_id:\n                      type: string\n                      format: uint64\n                      title: Incrementing id that uniquely identifies this entry\n                    unbonding_on_hold_ref_count:\n                      type: string\n                      format: int64\n                      title: Strictly positive if this entry's unbonding has been stopped by external\n                        modules\n                  description: UnbondingDelegationEntry defines an unbonding object with relevant\n                    metadata.\n                description: entries are the unbonding delegation entries.\n            description: >-\n              UnbondingDelegation stores all of a single delegator's unbonding\n              bonds\n\n              for a single validator in an time-ordered list.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: |-\n        QueryValidatorUnbondingDelegationsResponse is response type for the\n        Query/ValidatorUnbondingDelegations RPC method.\n    cosmos.staking.v1beta1.QueryValidatorsResponse:\n      type: object\n      properties:\n        validators:\n          type: array\n          items:\n            type: object\n            properties:\n              operator_address:\n                type: string\n                description: operator_address defines the address of the validator's operator;\n                  bech encoded in JSON.\n              consensus_pubkey:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n                description: consensus_pubkey is the consensus public key of the validator, as a\n                  Protobuf Any.\n              jailed:\n                type: boolean\n                description: jailed defined whether the validator has been jailed from bonded\n                  status or not.\n              status:\n                description: status is the validator status (bonded/unbonding/unbonded).\n                type: string\n                enum:\n                  - BOND_STATUS_UNSPECIFIED\n                  - BOND_STATUS_UNBONDED\n                  - BOND_STATUS_UNBONDING\n                  - BOND_STATUS_BONDED\n                default: BOND_STATUS_UNSPECIFIED\n              tokens:\n                type: string\n                description: tokens define the delegated tokens (incl. self-delegation).\n              delegator_shares:\n                type: string\n                description: delegator_shares defines total shares issued to a validator's\n                  delegators.\n              description:\n                description: description defines the description terms for the validator.\n                type: object\n                properties:\n                  moniker:\n                    type: string\n                    description: moniker defines a human-readable name for the validator.\n                  identity:\n                    type: string\n                    description: identity defines an optional identity signature (ex. UPort or\n                      Keybase).\n                  website:\n                    type: string\n                    description: website defines an optional website link.\n                  security_contact:\n                    type: string\n                    description: security_contact defines an optional email for security contact.\n                  details:\n                    type: string\n                    description: details define other optional details.\n              unbonding_height:\n                type: string\n                format: int64\n                description: unbonding_height defines, if unbonding, the height at which this\n                  validator has begun unbonding.\n              unbonding_time:\n                type: string\n                format: date-time\n                description: unbonding_time defines, if unbonding, the min time for the\n                  validator to complete unbonding.\n              commission:\n                description: commission defines the commission parameters.\n                type: object\n                properties:\n                  commission_rates:\n                    description: commission_rates defines the initial commission rates to be used\n                      for creating a validator.\n                    type: object\n                    properties:\n                      rate:\n                        type: string\n                        description: rate is the commission rate charged to delegators, as a fraction.\n                      max_rate:\n                        type: string\n                        description: max_rate defines the maximum commission rate which validator can\n                          ever charge, as a fraction.\n                      max_change_rate:\n                        type: string\n                        description: max_change_rate defines the maximum daily increase of the validator\n                          commission, as a fraction.\n                  update_time:\n                    type: string\n                    format: date-time\n                    description: update_time is the last time the commission rate was changed.\n              min_self_delegation:\n                type: string\n                description: >-\n                  min_self_delegation is the validator's self declared minimum\n                  self delegation.\n\n\n                  Since: cosmos-sdk 0.46\n              unbonding_on_hold_ref_count:\n                type: string\n                format: int64\n                title: strictly positive if this validator's unbonding has been stopped by\n                  external modules\n              unbonding_ids:\n                type: array\n                items:\n                  type: string\n                  format: uint64\n                title: list of unbonding ids, each uniquely identifing an unbonding of this\n                  validator\n            description: >-\n              Validator defines a validator, together with the total amount of\n              the\n\n              Validator's bond shares and their exchange rate to coins. Slashing results in\n\n              a decrease in the exchange rate, allowing correct calculation of future\n\n              undelegations without iterating over delegators. When coins are delegated to\n\n              this validator, the validator is credited with a delegation whose number of\n\n              bond shares is based on the amount of coins delegated divided by the current\n\n              exchange rate. Voting power can be calculated as total bonded shares\n\n              multiplied by exchange rate.\n          description: validators contains all the queried validators.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      title: QueryValidatorsResponse is response type for the Query/Validators RPC\n        method\n    cosmos.staking.v1beta1.Redelegation:\n      type: object\n      properties:\n        delegator_address:\n          type: string\n          description: delegator_address is the bech32-encoded address of the delegator.\n        validator_src_address:\n          type: string\n          description: validator_src_address is the validator redelegation source operator\n            address.\n        validator_dst_address:\n          type: string\n          description: validator_dst_address is the validator redelegation destination\n            operator address.\n        entries:\n          type: array\n          items:\n            type: object\n            properties:\n              creation_height:\n                type: string\n                format: int64\n                description: creation_height  defines the height which the redelegation took\n                  place.\n              completion_time:\n                type: string\n                format: date-time\n                description: completion_time defines the unix time for redelegation completion.\n              initial_balance:\n                type: string\n                description: initial_balance defines the initial balance when redelegation\n                  started.\n              shares_dst:\n                type: string\n                description: shares_dst is the amount of destination-validator shares created by\n                  redelegation.\n              unbonding_id:\n                type: string\n                format: uint64\n                title: Incrementing id that uniquely identifies this entry\n              unbonding_on_hold_ref_count:\n                type: string\n                format: int64\n                title: Strictly positive if this entry's unbonding has been stopped by external\n                  modules\n            description: RedelegationEntry defines a redelegation object with relevant\n              metadata.\n          description: entries are the redelegation entries.\n      description: >-\n        Redelegation contains the list of a particular delegator's redelegating\n        bonds\n\n        from a particular source validator to a particular destination validator.\n    cosmos.staking.v1beta1.RedelegationEntry:\n      type: object\n      properties:\n        creation_height:\n          type: string\n          format: int64\n          description: creation_height  defines the height which the redelegation took\n            place.\n        completion_time:\n          type: string\n          format: date-time\n          description: completion_time defines the unix time for redelegation completion.\n        initial_balance:\n          type: string\n          description: initial_balance defines the initial balance when redelegation\n            started.\n        shares_dst:\n          type: string\n          description: shares_dst is the amount of destination-validator shares created by\n            redelegation.\n        unbonding_id:\n          type: string\n          format: uint64\n          title: Incrementing id that uniquely identifies this entry\n        unbonding_on_hold_ref_count:\n          type: string\n          format: int64\n          title: Strictly positive if this entry's unbonding has been stopped by external\n            modules\n      description: RedelegationEntry defines a redelegation object with relevant metadata.\n    cosmos.staking.v1beta1.RedelegationEntryResponse:\n      type: object\n      properties:\n        redelegation_entry:\n          type: object\n          properties:\n            creation_height:\n              type: string\n              format: int64\n              description: creation_height  defines the height which the redelegation took\n                place.\n            completion_time:\n              type: string\n              format: date-time\n              description: completion_time defines the unix time for redelegation completion.\n            initial_balance:\n              type: string\n              description: initial_balance defines the initial balance when redelegation\n                started.\n            shares_dst:\n              type: string\n              description: shares_dst is the amount of destination-validator shares created by\n                redelegation.\n            unbonding_id:\n              type: string\n              format: uint64\n              title: Incrementing id that uniquely identifies this entry\n            unbonding_on_hold_ref_count:\n              type: string\n              format: int64\n              title: Strictly positive if this entry's unbonding has been stopped by external\n                modules\n          description: RedelegationEntry defines a redelegation object with relevant\n            metadata.\n        balance:\n          type: string\n      description: >-\n        RedelegationEntryResponse is equivalent to a RedelegationEntry except\n        that it\n\n        contains a balance in addition to shares which is more suitable for client\n\n        responses.\n    cosmos.staking.v1beta1.RedelegationResponse:\n      type: object\n      properties:\n        redelegation:\n          type: object\n          properties:\n            delegator_address:\n              type: string\n              description: delegator_address is the bech32-encoded address of the delegator.\n            validator_src_address:\n              type: string\n              description: validator_src_address is the validator redelegation source operator\n                address.\n            validator_dst_address:\n              type: string\n              description: validator_dst_address is the validator redelegation destination\n                operator address.\n            entries:\n              type: array\n              items:\n                type: object\n                properties:\n                  creation_height:\n                    type: string\n                    format: int64\n                    description: creation_height  defines the height which the redelegation took\n                      place.\n                  completion_time:\n                    type: string\n                    format: date-time\n                    description: completion_time defines the unix time for redelegation completion.\n                  initial_balance:\n                    type: string\n                    description: initial_balance defines the initial balance when redelegation\n                      started.\n                  shares_dst:\n                    type: string\n                    description: shares_dst is the amount of destination-validator shares created by\n                      redelegation.\n                  unbonding_id:\n                    type: string\n                    format: uint64\n                    title: Incrementing id that uniquely identifies this entry\n                  unbonding_on_hold_ref_count:\n                    type: string\n                    format: int64\n                    title: Strictly positive if this entry's unbonding has been stopped by external\n                      modules\n                description: RedelegationEntry defines a redelegation object with relevant\n                  metadata.\n              description: entries are the redelegation entries.\n          description: >-\n            Redelegation contains the list of a particular delegator's\n            redelegating bonds\n\n            from a particular source validator to a particular destination validator.\n        entries:\n          type: array\n          items:\n            type: object\n            properties:\n              redelegation_entry:\n                type: object\n                properties:\n                  creation_height:\n                    type: string\n                    format: int64\n                    description: creation_height  defines the height which the redelegation took\n                      place.\n                  completion_time:\n                    type: string\n                    format: date-time\n                    description: completion_time defines the unix time for redelegation completion.\n                  initial_balance:\n                    type: string\n                    description: initial_balance defines the initial balance when redelegation\n                      started.\n                  shares_dst:\n                    type: string\n                    description: shares_dst is the amount of destination-validator shares created by\n                      redelegation.\n                  unbonding_id:\n                    type: string\n                    format: uint64\n                    title: Incrementing id that uniquely identifies this entry\n                  unbonding_on_hold_ref_count:\n                    type: string\n                    format: int64\n                    title: Strictly positive if this entry's unbonding has been stopped by external\n                      modules\n                description: RedelegationEntry defines a redelegation object with relevant\n                  metadata.\n              balance:\n                type: string\n            description: >-\n              RedelegationEntryResponse is equivalent to a RedelegationEntry\n              except that it\n\n              contains a balance in addition to shares which is more suitable for client\n\n              responses.\n      description: >-\n        RedelegationResponse is equivalent to a Redelegation except that its\n        entries\n\n        contain a balance in addition to shares which is more suitable for client\n\n        responses.\n    cosmos.staking.v1beta1.UnbondingDelegation:\n      type: object\n      properties:\n        delegator_address:\n          type: string\n          description: delegator_address is the bech32-encoded address of the delegator.\n        validator_address:\n          type: string\n          description: validator_address is the bech32-encoded address of the validator.\n        entries:\n          type: array\n          items:\n            type: object\n            properties:\n              creation_height:\n                type: string\n                format: int64\n                description: creation_height is the height which the unbonding took place.\n              completion_time:\n                type: string\n                format: date-time\n                description: completion_time is the unix time for unbonding completion.\n              initial_balance:\n                type: string\n                description: initial_balance defines the tokens initially scheduled to receive\n                  at completion.\n              balance:\n                type: string\n                description: balance defines the tokens to receive at completion.\n              unbonding_id:\n                type: string\n                format: uint64\n                title: Incrementing id that uniquely identifies this entry\n              unbonding_on_hold_ref_count:\n                type: string\n                format: int64\n                title: Strictly positive if this entry's unbonding has been stopped by external\n                  modules\n            description: UnbondingDelegationEntry defines an unbonding object with relevant\n              metadata.\n          description: entries are the unbonding delegation entries.\n      description: |-\n        UnbondingDelegation stores all of a single delegator's unbonding bonds\n        for a single validator in an time-ordered list.\n    cosmos.staking.v1beta1.UnbondingDelegationEntry:\n      type: object\n      properties:\n        creation_height:\n          type: string\n          format: int64\n          description: creation_height is the height which the unbonding took place.\n        completion_time:\n          type: string\n          format: date-time\n          description: completion_time is the unix time for unbonding completion.\n        initial_balance:\n          type: string\n          description: initial_balance defines the tokens initially scheduled to receive\n            at completion.\n        balance:\n          type: string\n          description: balance defines the tokens to receive at completion.\n        unbonding_id:\n          type: string\n          format: uint64\n          title: Incrementing id that uniquely identifies this entry\n        unbonding_on_hold_ref_count:\n          type: string\n          format: int64\n          title: Strictly positive if this entry's unbonding has been stopped by external\n            modules\n      description: UnbondingDelegationEntry defines an unbonding object with relevant\n        metadata.\n    cosmos.staking.v1beta1.Validator:\n      type: object\n      properties:\n        operator_address:\n          type: string\n          description: operator_address defines the address of the validator's operator;\n            bech encoded in JSON.\n        consensus_pubkey:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n          description: consensus_pubkey is the consensus public key of the validator, as a\n            Protobuf Any.\n        jailed:\n          type: boolean\n          description: jailed defined whether the validator has been jailed from bonded\n            status or not.\n        status:\n          description: status is the validator status (bonded/unbonding/unbonded).\n          type: string\n          enum:\n            - BOND_STATUS_UNSPECIFIED\n            - BOND_STATUS_UNBONDED\n            - BOND_STATUS_UNBONDING\n            - BOND_STATUS_BONDED\n          default: BOND_STATUS_UNSPECIFIED\n        tokens:\n          type: string\n          description: tokens define the delegated tokens (incl. self-delegation).\n        delegator_shares:\n          type: string\n          description: delegator_shares defines total shares issued to a validator's\n            delegators.\n        description:\n          description: description defines the description terms for the validator.\n          type: object\n          properties:\n            moniker:\n              type: string\n              description: moniker defines a human-readable name for the validator.\n            identity:\n              type: string\n              description: identity defines an optional identity signature (ex. UPort or\n                Keybase).\n            website:\n              type: string\n              description: website defines an optional website link.\n            security_contact:\n              type: string\n              description: security_contact defines an optional email for security contact.\n            details:\n              type: string\n              description: details define other optional details.\n        unbonding_height:\n          type: string\n          format: int64\n          description: unbonding_height defines, if unbonding, the height at which this\n            validator has begun unbonding.\n        unbonding_time:\n          type: string\n          format: date-time\n          description: unbonding_time defines, if unbonding, the min time for the\n            validator to complete unbonding.\n        commission:\n          description: commission defines the commission parameters.\n          type: object\n          properties:\n            commission_rates:\n              description: commission_rates defines the initial commission rates to be used\n                for creating a validator.\n              type: object\n              properties:\n                rate:\n                  type: string\n                  description: rate is the commission rate charged to delegators, as a fraction.\n                max_rate:\n                  type: string\n                  description: max_rate defines the maximum commission rate which validator can\n                    ever charge, as a fraction.\n                max_change_rate:\n                  type: string\n                  description: max_change_rate defines the maximum daily increase of the validator\n                    commission, as a fraction.\n            update_time:\n              type: string\n              format: date-time\n              description: update_time is the last time the commission rate was changed.\n        min_self_delegation:\n          type: string\n          description: >-\n            min_self_delegation is the validator's self declared minimum self\n            delegation.\n\n\n            Since: cosmos-sdk 0.46\n        unbonding_on_hold_ref_count:\n          type: string\n          format: int64\n          title: strictly positive if this validator's unbonding has been stopped by\n            external modules\n        unbonding_ids:\n          type: array\n          items:\n            type: string\n            format: uint64\n          title: list of unbonding ids, each uniquely identifing an unbonding of this\n            validator\n      description: >-\n        Validator defines a validator, together with the total amount of the\n\n        Validator's bond shares and their exchange rate to coins. Slashing results in\n\n        a decrease in the exchange rate, allowing correct calculation of future\n\n        undelegations without iterating over delegators. When coins are delegated to\n\n        this validator, the validator is credited with a delegation whose number of\n\n        bond shares is based on the amount of coins delegated divided by the current\n\n        exchange rate. Voting power can be calculated as total bonded shares\n\n        multiplied by exchange rate.\n    tendermint.types.BlockID:\n      type: object\n      properties:\n        hash:\n          type: string\n          format: byte\n        part_set_header:\n          type: object\n          properties:\n            total:\n              type: integer\n              format: int64\n            hash:\n              type: string\n              format: byte\n          title: PartsetHeader\n      title: BlockID\n    tendermint.types.Header:\n      type: object\n      properties:\n        version:\n          title: basic block info\n          type: object\n          properties:\n            block:\n              type: string\n              format: uint64\n            app:\n              type: string\n              format: uint64\n          description: >-\n            Consensus captures the consensus rules for processing a block in the\n            blockchain,\n\n            including all blockchain data structures and the rules of the application's\n\n            state transition machine.\n        chain_id:\n          type: string\n        height:\n          type: string\n          format: int64\n        time:\n          type: string\n          format: date-time\n        last_block_id:\n          title: prev block info\n          type: object\n          properties:\n            hash:\n              type: string\n              format: byte\n            part_set_header:\n              type: object\n              properties:\n                total:\n                  type: integer\n                  format: int64\n                hash:\n                  type: string\n                  format: byte\n              title: PartsetHeader\n        last_commit_hash:\n          type: string\n          format: byte\n          title: hashes of block data\n        data_hash:\n          type: string\n          format: byte\n        validators_hash:\n          type: string\n          format: byte\n          title: hashes from the app output from the prev block\n        next_validators_hash:\n          type: string\n          format: byte\n        consensus_hash:\n          type: string\n          format: byte\n        app_hash:\n          type: string\n          format: byte\n        last_results_hash:\n          type: string\n          format: byte\n        evidence_hash:\n          type: string\n          format: byte\n          title: consensus info\n        proposer_address:\n          type: string\n          format: byte\n      description: Header defines the structure of a block header.\n    tendermint.types.PartSetHeader:\n      type: object\n      properties:\n        total:\n          type: integer\n          format: int64\n        hash:\n          type: string\n          format: byte\n      title: PartsetHeader\n    tendermint.version.Consensus:\n      type: object\n      properties:\n        block:\n          type: string\n          format: uint64\n        app:\n          type: string\n          format: uint64\n      description: >-\n        Consensus captures the consensus rules for processing a block in the\n        blockchain,\n\n        including all blockchain data structures and the rules of the application's\n\n        state transition machine.\n    ibc.applications.transfer.v1.DenomTrace:\n      type: object\n      properties:\n        path:\n          type: string\n          description: >-\n            path defines the chain of port/channel identifiers used for tracing\n            the\n\n            source of the fungible token.\n        base_denom:\n          type: string\n          description: base denomination of the relayed fungible token.\n      description: >-\n        DenomTrace contains the base denomination for ICS20 fungible tokens and\n        the\n\n        source tracing information path.\n    ibc.applications.transfer.v1.Params:\n      type: object\n      properties:\n        send_enabled:\n          type: boolean\n          description: >-\n            send_enabled enables or disables all cross-chain token transfers\n            from this\n\n            chain.\n        receive_enabled:\n          type: boolean\n          description: >-\n            receive_enabled enables or disables all cross-chain token transfers\n            to this\n\n            chain.\n      description: >-\n        Params defines the set of IBC transfer parameters.\n\n        NOTE: To prevent a single token from being transferred, set the\n\n        TransfersEnabled parameter to true and then set the bank module's SendEnabled\n\n        parameter for the denomination to false.\n    ibc.applications.transfer.v1.QueryDenomHashResponse:\n      type: object\n      properties:\n        hash:\n          type: string\n          description: hash (in hex format) of the denomination trace information.\n      description: |-\n        QueryDenomHashResponse is the response type for the Query/DenomHash RPC\n        method.\n    ibc.applications.transfer.v1.QueryDenomTraceResponse:\n      type: object\n      properties:\n        denom_trace:\n          type: object\n          properties:\n            path:\n              type: string\n              description: >-\n                path defines the chain of port/channel identifiers used for\n                tracing the\n\n                source of the fungible token.\n            base_denom:\n              type: string\n              description: base denomination of the relayed fungible token.\n          description: >-\n            DenomTrace contains the base denomination for ICS20 fungible tokens\n            and the\n\n            source tracing information path.\n      description: >-\n        QueryDenomTraceResponse is the response type for the Query/DenomTrace\n        RPC\n\n        method.\n    ibc.applications.transfer.v1.QueryDenomTracesResponse:\n      type: object\n      properties:\n        denom_traces:\n          type: array\n          items:\n            type: object\n            properties:\n              path:\n                type: string\n                description: >-\n                  path defines the chain of port/channel identifiers used for\n                  tracing the\n\n                  source of the fungible token.\n              base_denom:\n                type: string\n                description: base denomination of the relayed fungible token.\n            description: >-\n              DenomTrace contains the base denomination for ICS20 fungible\n              tokens and the\n\n              source tracing information path.\n          description: denom_traces returns all denominations trace information.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: >-\n        QueryConnectionsResponse is the response type for the Query/DenomTraces\n        RPC\n\n        method.\n    ibc.applications.transfer.v1.QueryEscrowAddressResponse:\n      type: object\n      properties:\n        escrow_address:\n          type: string\n          title: the escrow account address\n      description: QueryEscrowAddressResponse is the response type of the\n        EscrowAddress RPC method.\n    ibc.applications.transfer.v1.QueryParamsResponse:\n      type: object\n      properties:\n        params:\n          description: params defines the parameters of the module.\n          type: object\n          properties:\n            send_enabled:\n              type: boolean\n              description: >-\n                send_enabled enables or disables all cross-chain token transfers\n                from this\n\n                chain.\n            receive_enabled:\n              type: boolean\n              description: >-\n                receive_enabled enables or disables all cross-chain token\n                transfers to this\n\n                chain.\n      description: QueryParamsResponse is the response type for the Query/Params RPC method.\n    ibc.applications.transfer.v1.QueryTotalEscrowForDenomResponse:\n      type: object\n      properties:\n        amount:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n      description: QueryTotalEscrowForDenomResponse is the response type for\n        TotalEscrowForDenom RPC method.\n    cosmos.base.abci.v1beta1.ABCIMessageLog:\n      type: object\n      properties:\n        msg_index:\n          type: integer\n          format: int64\n        log:\n          type: string\n        events:\n          type: array\n          items:\n            type: object\n            properties:\n              type:\n                type: string\n              attributes:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    key:\n                      type: string\n                    value:\n                      type: string\n                  description: >-\n                    Attribute defines an attribute wrapper where the key and\n                    value are\n\n                    strings instead of raw bytes.\n            description: >-\n              StringEvent defines en Event object wrapper where all the\n              attributes\n\n              contain key/value pairs that are strings instead of raw bytes.\n          description: >-\n            Events contains a slice of Event objects that were emitted during\n            some\n\n            execution.\n      description: ABCIMessageLog defines a structure containing an indexed tx ABCI\n        message log.\n    cosmos.base.abci.v1beta1.Attribute:\n      type: object\n      properties:\n        key:\n          type: string\n        value:\n          type: string\n      description: |-\n        Attribute defines an attribute wrapper where the key and value are\n        strings instead of raw bytes.\n    cosmos.base.abci.v1beta1.GasInfo:\n      type: object\n      properties:\n        gas_wanted:\n          type: string\n          format: uint64\n          description: GasWanted is the maximum units of work we allow this tx to perform.\n        gas_used:\n          type: string\n          format: uint64\n          description: GasUsed is the amount of gas actually consumed.\n      description: GasInfo defines tx execution gas context.\n    cosmos.base.abci.v1beta1.Result:\n      type: object\n      properties:\n        data:\n          type: string\n          format: byte\n          description: >-\n            Data is any data returned from message or handler execution. It MUST\n            be\n\n            length prefixed in order to separate data from multiple message executions.\n\n            Deprecated. This field is still populated, but prefer msg_response instead\n\n            because it also contains the Msg response typeURL.\n        log:\n          type: string\n          description: Log contains the log information from message or handler execution.\n        events:\n          type: array\n          items:\n            type: object\n            properties:\n              type:\n                type: string\n              attributes:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    key:\n                      type: string\n                    value:\n                      type: string\n                    index:\n                      type: boolean\n                  description: EventAttribute is a single key-value pair, associated with an\n                    event.\n            description: >-\n              Event allows application developers to attach additional\n              information to\n\n              ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and ResponseDeliverTx.\n\n              Later, transactions may be queried using these events.\n          description: >-\n            Events contains a slice of Event objects that were emitted during\n            message\n\n            or handler execution.\n        msg_responses:\n          type: array\n          items:\n            type: object\n            properties:\n              type_url:\n                type: string\n              value:\n                type: string\n                format: byte\n          description: >-\n            msg_responses contains the Msg handler responses type packed in\n            Anys.\n\n\n            Since: cosmos-sdk 0.46\n      description: Result is the union of ResponseFormat and ResponseCheckTx.\n    cosmos.base.abci.v1beta1.StringEvent:\n      type: object\n      properties:\n        type:\n          type: string\n        attributes:\n          type: array\n          items:\n            type: object\n            properties:\n              key:\n                type: string\n              value:\n                type: string\n            description: |-\n              Attribute defines an attribute wrapper where the key and value are\n              strings instead of raw bytes.\n      description: |-\n        StringEvent defines en Event object wrapper where all the attributes\n        contain key/value pairs that are strings instead of raw bytes.\n    cosmos.base.abci.v1beta1.TxResponse:\n      type: object\n      properties:\n        height:\n          type: string\n          format: int64\n          title: The block height\n        txhash:\n          type: string\n          description: The transaction hash.\n        codespace:\n          type: string\n          title: Namespace for the Code\n        code:\n          type: integer\n          format: int64\n          description: Response code.\n        data:\n          type: string\n          description: Result bytes, if any.\n        raw_log:\n          type: string\n          description: |-\n            The output of the application's logger (raw string). May be\n            non-deterministic.\n        logs:\n          type: array\n          items:\n            type: object\n            properties:\n              msg_index:\n                type: integer\n                format: int64\n              log:\n                type: string\n              events:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type:\n                      type: string\n                    attributes:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          key:\n                            type: string\n                          value:\n                            type: string\n                        description: >-\n                          Attribute defines an attribute wrapper where the key\n                          and value are\n\n                          strings instead of raw bytes.\n                  description: >-\n                    StringEvent defines en Event object wrapper where all the\n                    attributes\n\n                    contain key/value pairs that are strings instead of raw bytes.\n                description: >-\n                  Events contains a slice of Event objects that were emitted\n                  during some\n\n                  execution.\n            description: ABCIMessageLog defines a structure containing an indexed tx ABCI\n              message log.\n          description: The output of the application's logger (typed). May be\n            non-deterministic.\n        info:\n          type: string\n          description: Additional information. May be non-deterministic.\n        gas_wanted:\n          type: string\n          format: int64\n          description: Amount of gas requested for transaction.\n        gas_used:\n          type: string\n          format: int64\n          description: Amount of gas consumed by transaction.\n        tx:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n          description: The request transaction bytes.\n        timestamp:\n          type: string\n          description: >-\n            Time of the previous block. For heights > 1, it's the weighted\n            median of\n\n            the timestamps of the valid votes in the block.LastCommit. For height == 1,\n\n            it's genesis time.\n        events:\n          type: array\n          items:\n            type: object\n            properties:\n              type:\n                type: string\n              attributes:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    key:\n                      type: string\n                    value:\n                      type: string\n                    index:\n                      type: boolean\n                  description: EventAttribute is a single key-value pair, associated with an\n                    event.\n            description: >-\n              Event allows application developers to attach additional\n              information to\n\n              ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and ResponseDeliverTx.\n\n              Later, transactions may be queried using these events.\n          description: >-\n            Events defines all the events emitted by processing a transaction.\n            Note,\n\n            these events include those emitted by processing all the messages and those\n\n            emitted from the ante. Whereas Logs contains the events, with\n\n            additional metadata, emitted only by processing the messages.\n\n\n            Since: cosmos-sdk 0.42.11, 0.44.5, 0.45\n      description: >-\n        TxResponse defines a structure containing relevant tx data and metadata.\n        The\n\n        tags are stringified and the log is JSON decoded.\n    cosmos.crypto.multisig.v1beta1.CompactBitArray:\n      type: object\n      properties:\n        extra_bits_stored:\n          type: integer\n          format: int64\n        elems:\n          type: string\n          format: byte\n      description: >-\n        CompactBitArray is an implementation of a space efficient bit array.\n\n        This is used to ensure that the encoded data takes up a minimal amount of\n\n        space after proto encoding.\n\n        This is not thread safe, and is not intended for concurrent usage.\n    cosmos.tx.signing.v1beta1.SignMode:\n      type: string\n      enum:\n        - SIGN_MODE_UNSPECIFIED\n        - SIGN_MODE_DIRECT\n        - SIGN_MODE_TEXTUAL\n        - SIGN_MODE_DIRECT_AUX\n        - SIGN_MODE_LEGACY_AMINO_JSON\n        - SIGN_MODE_EIP_191\n      default: SIGN_MODE_UNSPECIFIED\n      description: >-\n        SignMode represents a signing mode with its own security guarantees.\n\n\n        This enum should be considered a registry of all known sign modes\n\n        in the Cosmos ecosystem. Apps are not expected to support all known\n\n        sign modes. Apps that would like to support custom  sign modes are\n\n        encouraged to open a small PR against this file to add a new case\n\n        to this SignMode enum describing their sign mode so that different\n\n        apps have a consistent version of this enum.\n\n         - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n        rejected.\n         - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n        verified with raw bytes from Tx.\n         - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n        human-readable textual representation on top of the binary representation\n\n        from SIGN_MODE_DIRECT. It is currently not supported.\n         - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n        SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\n\n        require signers signing over other signers' `signer_info`. It also allows\n\n        for adding Tips in transactions.\n\n\n        Since: cosmos-sdk 0.46\n         - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n        Amino JSON and will be removed in the future.\n         - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n        SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n        Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\n\n        but is not implemented on the SDK by default. To enable EIP-191, you need\n\n        to pass a custom `TxConfig` that has an implementation of\n\n        `SignModeHandler` for EIP-191. The SDK may decide to fully support\n\n        EIP-191 in the future.\n\n\n        Since: cosmos-sdk 0.45.2\n    cosmos.tx.v1beta1.AuthInfo:\n      type: object\n      properties:\n        signer_infos:\n          type: array\n          items:\n            type: object\n            properties:\n              public_key:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n                description: >-\n                  public_key is the public key of the signer. It is optional for\n                  accounts\n\n                  that already exist in state. If unset, the verifier can use the required \\\n\n                  signer address for this position and lookup the public key.\n              mode_info:\n                title: >-\n                  mode_info describes the signing mode of the signer and is a\n                  nested\n\n                  structure to support nested multisig pubkey's\n                type: object\n                properties:\n                  single:\n                    title: single represents a single signer\n                    type: object\n                    properties:\n                      mode:\n                        title: mode is the signing mode of the single signer\n                        type: string\n                        enum:\n                          - SIGN_MODE_UNSPECIFIED\n                          - SIGN_MODE_DIRECT\n                          - SIGN_MODE_TEXTUAL\n                          - SIGN_MODE_DIRECT_AUX\n                          - SIGN_MODE_LEGACY_AMINO_JSON\n                          - SIGN_MODE_EIP_191\n                        default: SIGN_MODE_UNSPECIFIED\n                        description: >-\n                          SignMode represents a signing mode with its own\n                          security guarantees.\n\n\n                          This enum should be considered a registry of all known sign modes\n\n                          in the Cosmos ecosystem. Apps are not expected to support all known\n\n                          sign modes. Apps that would like to support custom  sign modes are\n\n                          encouraged to open a small PR against this file to add a new case\n\n                          to this SignMode enum describing their sign mode so that different\n\n                          apps have a consistent version of this enum.\n\n                           - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                          rejected.\n                           - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                          verified with raw bytes from Tx.\n                           - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                          human-readable textual representation on top of the binary representation\n\n                          from SIGN_MODE_DIRECT. It is currently not supported.\n                           - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                          SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\n\n                          require signers signing over other signers' `signer_info`. It also allows\n\n                          for adding Tips in transactions.\n\n\n                          Since: cosmos-sdk 0.46\n                           - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                          Amino JSON and will be removed in the future.\n                           - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                          SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                          Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\n\n                          but is not implemented on the SDK by default. To enable EIP-191, you need\n\n                          to pass a custom `TxConfig` that has an implementation of\n\n                          `SignModeHandler` for EIP-191. The SDK may decide to fully support\n\n                          EIP-191 in the future.\n\n\n                          Since: cosmos-sdk 0.45.2\n                  multi:\n                    title: multi represents a nested multisig signer\n                    type: object\n                    properties:\n                      bitarray:\n                        title: bitarray specifies which keys within the multisig are signing\n                        type: object\n                        properties:\n                          extra_bits_stored:\n                            type: integer\n                            format: int64\n                          elems:\n                            type: string\n                            format: byte\n                        description: >-\n                          CompactBitArray is an implementation of a space\n                          efficient bit array.\n\n                          This is used to ensure that the encoded data takes up a minimal amount of\n\n                          space after proto encoding.\n\n                          This is not thread safe, and is not intended for concurrent usage.\n                      mode_infos:\n                        type: array\n                        items: {}\n                        title: >-\n                          mode_infos is the corresponding modes of the signers\n                          of the multisig\n\n                          which could include nested multisig public keys\n                description: ModeInfo describes the signing mode of a single or nested multisig\n                  signer.\n              sequence:\n                type: string\n                format: uint64\n                description: >-\n                  sequence is the sequence of the account, which describes the\n\n                  number of committed transactions signed by a given address. It is used to\n\n                  prevent replay attacks.\n            description: >-\n              SignerInfo describes the public key and signing mode of a single\n              top-level\n\n              signer.\n          description: >-\n            signer_infos defines the signing modes for the required signers. The\n            number\n\n            and order of elements must match the required signers from TxBody's\n\n            messages. The first element is the primary signer and the one which pays\n\n            the fee.\n        fee:\n          description: >-\n            Fee is the fee and gas limit for the transaction. The first signer\n            is the\n\n            primary signer and the one which pays the fee. The fee can be calculated\n\n            based on the cost of evaluating the body and doing signature verification\n\n            of the signers. This can be estimated via simulation.\n          type: object\n          properties:\n            amount:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom method\n\n                  signatures required by gogoproto.\n              title: amount is the amount of coins to be paid as a fee\n            gas_limit:\n              type: string\n              format: uint64\n              title: >-\n                gas_limit is the maximum gas that can be used in transaction\n                processing\n\n                before an out of gas error occurs\n            payer:\n              type: string\n              description: >-\n                if unset, the first signer is responsible for paying the fees.\n                If set, the specified account must pay the fees.\n\n                the payer must be a tx signer (and thus have signed this field in AuthInfo).\n\n                setting this field does *not* change the ordering of required signers for the transaction.\n            granter:\n              type: string\n              title: >-\n                if set, the fee payer (either the first signer or the value of\n                the payer field) requests that a fee grant be used\n\n                to pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\n\n                not support fee grants, this will fail\n        tip:\n          description: >-\n            Tip is the optional tip used for transactions fees paid in another\n            denom.\n\n\n            This field is ignored if the chain didn't enable tips, i.e. didn't add the\n\n            `TipDecorator` in its posthandler.\n\n\n            Since: cosmos-sdk 0.46\n          type: object\n          properties:\n            amount:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom method\n\n                  signatures required by gogoproto.\n              title: amount is the amount of the tip\n            tipper:\n              type: string\n              title: tipper is the address of the account paying for the tip\n      description: |-\n        AuthInfo describes the fee and signer modes that are used to sign a\n        transaction.\n    cosmos.tx.v1beta1.BroadcastMode:\n      type: string\n      enum:\n        - BROADCAST_MODE_UNSPECIFIED\n        - BROADCAST_MODE_BLOCK\n        - BROADCAST_MODE_SYNC\n        - BROADCAST_MODE_ASYNC\n      default: BROADCAST_MODE_UNSPECIFIED\n      description: >-\n        BroadcastMode specifies the broadcast mode for the TxService.Broadcast\n        RPC method.\n\n         - BROADCAST_MODE_UNSPECIFIED: zero-value for mode ordering\n         - BROADCAST_MODE_BLOCK: DEPRECATED: use BROADCAST_MODE_SYNC instead,\n        BROADCAST_MODE_BLOCK is not supported by the SDK from v0.47.x onwards.\n         - BROADCAST_MODE_SYNC: BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits for\n        a CheckTx execution response only.\n         - BROADCAST_MODE_ASYNC: BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client returns\n        immediately.\n    cosmos.tx.v1beta1.BroadcastTxRequest:\n      type: object\n      properties:\n        tx_bytes:\n          type: string\n          format: byte\n          description: tx_bytes is the raw transaction.\n        mode:\n          type: string\n          enum:\n            - BROADCAST_MODE_UNSPECIFIED\n            - BROADCAST_MODE_BLOCK\n            - BROADCAST_MODE_SYNC\n            - BROADCAST_MODE_ASYNC\n          default: BROADCAST_MODE_UNSPECIFIED\n          description: >-\n            BroadcastMode specifies the broadcast mode for the\n            TxService.Broadcast RPC method.\n\n             - BROADCAST_MODE_UNSPECIFIED: zero-value for mode ordering\n             - BROADCAST_MODE_BLOCK: DEPRECATED: use BROADCAST_MODE_SYNC instead,\n            BROADCAST_MODE_BLOCK is not supported by the SDK from v0.47.x onwards.\n             - BROADCAST_MODE_SYNC: BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits for\n            a CheckTx execution response only.\n             - BROADCAST_MODE_ASYNC: BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client returns\n            immediately.\n      description: >-\n        BroadcastTxRequest is the request type for the\n        Service.BroadcastTxRequest\n\n        RPC method.\n    cosmos.tx.v1beta1.BroadcastTxResponse:\n      type: object\n      properties:\n        tx_response:\n          type: object\n          properties:\n            height:\n              type: string\n              format: int64\n              title: The block height\n            txhash:\n              type: string\n              description: The transaction hash.\n            codespace:\n              type: string\n              title: Namespace for the Code\n            code:\n              type: integer\n              format: int64\n              description: Response code.\n            data:\n              type: string\n              description: Result bytes, if any.\n            raw_log:\n              type: string\n              description: |-\n                The output of the application's logger (raw string). May be\n                non-deterministic.\n            logs:\n              type: array\n              items:\n                type: object\n                properties:\n                  msg_index:\n                    type: integer\n                    format: int64\n                  log:\n                    type: string\n                  events:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type:\n                          type: string\n                        attributes:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              key:\n                                type: string\n                              value:\n                                type: string\n                            description: >-\n                              Attribute defines an attribute wrapper where the\n                              key and value are\n\n                              strings instead of raw bytes.\n                      description: >-\n                        StringEvent defines en Event object wrapper where all\n                        the attributes\n\n                        contain key/value pairs that are strings instead of raw bytes.\n                    description: >-\n                      Events contains a slice of Event objects that were emitted\n                      during some\n\n                      execution.\n                description: ABCIMessageLog defines a structure containing an indexed tx ABCI\n                  message log.\n              description: The output of the application's logger (typed). May be\n                non-deterministic.\n            info:\n              type: string\n              description: Additional information. May be non-deterministic.\n            gas_wanted:\n              type: string\n              format: int64\n              description: Amount of gas requested for transaction.\n            gas_used:\n              type: string\n              format: int64\n              description: Amount of gas consumed by transaction.\n            tx:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n              description: The request transaction bytes.\n            timestamp:\n              type: string\n              description: >-\n                Time of the previous block. For heights > 1, it's the weighted\n                median of\n\n                the timestamps of the valid votes in the block.LastCommit. For height == 1,\n\n                it's genesis time.\n            events:\n              type: array\n              items:\n                type: object\n                properties:\n                  type:\n                    type: string\n                  attributes:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        key:\n                          type: string\n                        value:\n                          type: string\n                        index:\n                          type: boolean\n                      description: EventAttribute is a single key-value pair, associated with an\n                        event.\n                description: >-\n                  Event allows application developers to attach additional\n                  information to\n\n                  ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and ResponseDeliverTx.\n\n                  Later, transactions may be queried using these events.\n              description: >-\n                Events defines all the events emitted by processing a\n                transaction. Note,\n\n                these events include those emitted by processing all the messages and those\n\n                emitted from the ante. Whereas Logs contains the events, with\n\n                additional metadata, emitted only by processing the messages.\n\n\n                Since: cosmos-sdk 0.42.11, 0.44.5, 0.45\n          description: >-\n            TxResponse defines a structure containing relevant tx data and\n            metadata. The\n\n            tags are stringified and the log is JSON decoded.\n      description: |-\n        BroadcastTxResponse is the response type for the\n        Service.BroadcastTx method.\n    cosmos.tx.v1beta1.Fee:\n      type: object\n      properties:\n        amount:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n          title: amount is the amount of coins to be paid as a fee\n        gas_limit:\n          type: string\n          format: uint64\n          title: >-\n            gas_limit is the maximum gas that can be used in transaction\n            processing\n\n            before an out of gas error occurs\n        payer:\n          type: string\n          description: >-\n            if unset, the first signer is responsible for paying the fees. If\n            set, the specified account must pay the fees.\n\n            the payer must be a tx signer (and thus have signed this field in AuthInfo).\n\n            setting this field does *not* change the ordering of required signers for the transaction.\n        granter:\n          type: string\n          title: >-\n            if set, the fee payer (either the first signer or the value of the\n            payer field) requests that a fee grant be used\n\n            to pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\n\n            not support fee grants, this will fail\n      description: >-\n        Fee includes the amount of coins paid in fees and the maximum\n\n        gas to be used by the transaction. The ratio yields an effective \"gasprice\",\n\n        which must be above some miminum to be accepted into the mempool.\n    cosmos.tx.v1beta1.GetBlockWithTxsResponse:\n      type: object\n      properties:\n        txs:\n          type: array\n          items:\n            type: object\n            properties:\n              body:\n                title: body is the processable content of the transaction\n                type: object\n                properties:\n                  messages:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                    description: >-\n                      messages is a list of messages to be executed. The\n                      required signers of\n\n                      those messages define the number and order of elements in AuthInfo's\n\n                      signer_infos and Tx's signatures. Each required signer address is added to\n\n                      the list only the first time it occurs.\n\n                      By convention, the first required signer (usually from the first message)\n\n                      is referred to as the primary signer and pays the fee for the whole\n\n                      transaction.\n                  memo:\n                    type: string\n                    description: >-\n                      memo is any arbitrary note/comment to be added to the\n                      transaction.\n\n                      WARNING: in clients, any publicly exposed text should not be called memo,\n\n                      but should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122).\n                  timeout_height:\n                    type: string\n                    format: uint64\n                    title: >-\n                      timeout is the block height after which this transaction\n                      will not\n\n                      be processed by the chain\n                  extension_options:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                    title: >-\n                      extension_options are arbitrary options that can be added\n                      by chains\n\n                      when the default options are not sufficient. If any of these are present\n\n                      and can't be handled, the transaction will be rejected\n                  non_critical_extension_options:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                    title: >-\n                      extension_options are arbitrary options that can be added\n                      by chains\n\n                      when the default options are not sufficient. If any of these are present\n\n                      and can't be handled, they will be ignored\n                description: TxBody is the body of a transaction that all signers sign over.\n              auth_info:\n                title: >-\n                  auth_info is the authorization related content of the\n                  transaction,\n\n                  specifically signers, signer modes and fee\n                type: object\n                properties:\n                  signer_infos:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        public_key:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                          description: >-\n                            public_key is the public key of the signer. It is\n                            optional for accounts\n\n                            that already exist in state. If unset, the verifier can use the required \\\n\n                            signer address for this position and lookup the public key.\n                        mode_info:\n                          title: >-\n                            mode_info describes the signing mode of the signer\n                            and is a nested\n\n                            structure to support nested multisig pubkey's\n                          type: object\n                          properties:\n                            single:\n                              title: single represents a single signer\n                              type: object\n                              properties:\n                                mode:\n                                  title: mode is the signing mode of the single signer\n                                  type: string\n                                  enum:\n                                    - SIGN_MODE_UNSPECIFIED\n                                    - SIGN_MODE_DIRECT\n                                    - SIGN_MODE_TEXTUAL\n                                    - SIGN_MODE_DIRECT_AUX\n                                    - SIGN_MODE_LEGACY_AMINO_JSON\n                                    - SIGN_MODE_EIP_191\n                                  default: SIGN_MODE_UNSPECIFIED\n                                  description: >-\n                                    SignMode represents a signing mode with its\n                                    own security guarantees.\n\n\n                                    This enum should be considered a registry of all known sign modes\n\n                                    in the Cosmos ecosystem. Apps are not expected to support all known\n\n                                    sign modes. Apps that would like to support custom  sign modes are\n\n                                    encouraged to open a small PR against this file to add a new case\n\n                                    to this SignMode enum describing their sign mode so that different\n\n                                    apps have a consistent version of this enum.\n\n                                     - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                    rejected.\n                                     - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                    verified with raw bytes from Tx.\n                                     - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                    human-readable textual representation on top of the binary representation\n\n                                    from SIGN_MODE_DIRECT. It is currently not supported.\n                                     - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                    SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\n\n                                    require signers signing over other signers' `signer_info`. It also allows\n\n                                    for adding Tips in transactions.\n\n\n                                    Since: cosmos-sdk 0.46\n                                     - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                    Amino JSON and will be removed in the future.\n                                     - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                    SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                                    Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\n\n                                    but is not implemented on the SDK by default. To enable EIP-191, you need\n\n                                    to pass a custom `TxConfig` that has an implementation of\n\n                                    `SignModeHandler` for EIP-191. The SDK may decide to fully support\n\n                                    EIP-191 in the future.\n\n\n                                    Since: cosmos-sdk 0.45.2\n                            multi:\n                              title: multi represents a nested multisig signer\n                              type: object\n                              properties:\n                                bitarray:\n                                  title: bitarray specifies which keys within the multisig are signing\n                                  type: object\n                                  properties:\n                                    extra_bits_stored:\n                                      type: integer\n                                      format: int64\n                                    elems:\n                                      type: string\n                                      format: byte\n                                  description: >-\n                                    CompactBitArray is an implementation of a\n                                    space efficient bit array.\n\n                                    This is used to ensure that the encoded data takes up a minimal amount of\n\n                                    space after proto encoding.\n\n                                    This is not thread safe, and is not intended for concurrent usage.\n                                mode_infos:\n                                  type: array\n                                  items: {}\n                                  title: >-\n                                    mode_infos is the corresponding modes of the\n                                    signers of the multisig\n\n                                    which could include nested multisig public keys\n                          description: ModeInfo describes the signing mode of a single or nested multisig\n                            signer.\n                        sequence:\n                          type: string\n                          format: uint64\n                          description: >-\n                            sequence is the sequence of the account, which\n                            describes the\n\n                            number of committed transactions signed by a given address. It is used to\n\n                            prevent replay attacks.\n                      description: >-\n                        SignerInfo describes the public key and signing mode of\n                        a single top-level\n\n                        signer.\n                    description: >-\n                      signer_infos defines the signing modes for the required\n                      signers. The number\n\n                      and order of elements must match the required signers from TxBody's\n\n                      messages. The first element is the primary signer and the one which pays\n\n                      the fee.\n                  fee:\n                    description: >-\n                      Fee is the fee and gas limit for the transaction. The\n                      first signer is the\n\n                      primary signer and the one which pays the fee. The fee can be calculated\n\n                      based on the cost of evaluating the body and doing signature verification\n\n                      of the signers. This can be estimated via simulation.\n                    type: object\n                    properties:\n                      amount:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n                        title: amount is the amount of coins to be paid as a fee\n                      gas_limit:\n                        type: string\n                        format: uint64\n                        title: >-\n                          gas_limit is the maximum gas that can be used in\n                          transaction processing\n\n                          before an out of gas error occurs\n                      payer:\n                        type: string\n                        description: >-\n                          if unset, the first signer is responsible for paying\n                          the fees. If set, the specified account must pay the\n                          fees.\n\n                          the payer must be a tx signer (and thus have signed this field in AuthInfo).\n\n                          setting this field does *not* change the ordering of required signers for the transaction.\n                      granter:\n                        type: string\n                        title: >-\n                          if set, the fee payer (either the first signer or the\n                          value of the payer field) requests that a fee grant be\n                          used\n\n                          to pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\n\n                          not support fee grants, this will fail\n                  tip:\n                    description: >-\n                      Tip is the optional tip used for transactions fees paid in\n                      another denom.\n\n\n                      This field is ignored if the chain didn't enable tips, i.e. didn't add the\n\n                      `TipDecorator` in its posthandler.\n\n\n                      Since: cosmos-sdk 0.46\n                    type: object\n                    properties:\n                      amount:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n                        title: amount is the amount of the tip\n                      tipper:\n                        type: string\n                        title: tipper is the address of the account paying for the tip\n                description: >-\n                  AuthInfo describes the fee and signer modes that are used to\n                  sign a\n\n                  transaction.\n              signatures:\n                type: array\n                items:\n                  type: string\n                  format: byte\n                description: >-\n                  signatures is a list of signatures that matches the length and\n                  order of\n\n                  AuthInfo's signer_infos to allow connecting signature meta information like\n\n                  public key and signing mode by position.\n            description: Tx is the standard type used for broadcasting transactions.\n          description: txs are the transactions in the block.\n        block_id:\n          type: object\n          properties:\n            hash:\n              type: string\n              format: byte\n            part_set_header:\n              type: object\n              properties:\n                total:\n                  type: integer\n                  format: int64\n                hash:\n                  type: string\n                  format: byte\n              title: PartsetHeader\n          title: BlockID\n        block:\n          type: object\n          properties:\n            header:\n              type: object\n              properties:\n                version:\n                  title: basic block info\n                  type: object\n                  properties:\n                    block:\n                      type: string\n                      format: uint64\n                    app:\n                      type: string\n                      format: uint64\n                  description: >-\n                    Consensus captures the consensus rules for processing a\n                    block in the blockchain,\n\n                    including all blockchain data structures and the rules of the application's\n\n                    state transition machine.\n                chain_id:\n                  type: string\n                height:\n                  type: string\n                  format: int64\n                time:\n                  type: string\n                  format: date-time\n                last_block_id:\n                  title: prev block info\n                  type: object\n                  properties:\n                    hash:\n                      type: string\n                      format: byte\n                    part_set_header:\n                      type: object\n                      properties:\n                        total:\n                          type: integer\n                          format: int64\n                        hash:\n                          type: string\n                          format: byte\n                      title: PartsetHeader\n                last_commit_hash:\n                  type: string\n                  format: byte\n                  title: hashes of block data\n                data_hash:\n                  type: string\n                  format: byte\n                validators_hash:\n                  type: string\n                  format: byte\n                  title: hashes from the app output from the prev block\n                next_validators_hash:\n                  type: string\n                  format: byte\n                consensus_hash:\n                  type: string\n                  format: byte\n                app_hash:\n                  type: string\n                  format: byte\n                last_results_hash:\n                  type: string\n                  format: byte\n                evidence_hash:\n                  type: string\n                  format: byte\n                  title: consensus info\n                proposer_address:\n                  type: string\n                  format: byte\n              description: Header defines the structure of a block header.\n            data:\n              type: object\n              properties:\n                txs:\n                  type: array\n                  items:\n                    type: string\n                    format: byte\n                  description: >-\n                    Txs that will be applied by state @ block.Height+1.\n\n                    NOTE: not all txs here are valid.  We're just agreeing on the order first.\n\n                    This means that block.AppHash does not include these txs.\n              title: Data contains the set of transactions included in the block\n            evidence:\n              type: object\n              properties:\n                evidence:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      duplicate_vote_evidence:\n                        type: object\n                        properties:\n                          vote_a:\n                            type: object\n                            properties:\n                              type:\n                                type: string\n                                enum:\n                                  - SIGNED_MSG_TYPE_UNKNOWN\n                                  - SIGNED_MSG_TYPE_PREVOTE\n                                  - SIGNED_MSG_TYPE_PRECOMMIT\n                                  - SIGNED_MSG_TYPE_PROPOSAL\n                                default: SIGNED_MSG_TYPE_UNKNOWN\n                                description: >-\n                                  SignedMsgType is a type of signed message in\n                                  the consensus.\n\n                                   - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                   - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                              height:\n                                type: string\n                                format: int64\n                              round:\n                                type: integer\n                                format: int32\n                              block_id:\n                                type: object\n                                properties:\n                                  hash:\n                                    type: string\n                                    format: byte\n                                  part_set_header:\n                                    type: object\n                                    properties:\n                                      total:\n                                        type: integer\n                                        format: int64\n                                      hash:\n                                        type: string\n                                        format: byte\n                                    title: PartsetHeader\n                                title: BlockID\n                              timestamp:\n                                type: string\n                                format: date-time\n                              validator_address:\n                                type: string\n                                format: byte\n                              validator_index:\n                                type: integer\n                                format: int32\n                              signature:\n                                type: string\n                                format: byte\n                            description: >-\n                              Vote represents a prevote, precommit, or commit\n                              vote from validators for\n\n                              consensus.\n                          vote_b:\n                            type: object\n                            properties:\n                              type:\n                                type: string\n                                enum:\n                                  - SIGNED_MSG_TYPE_UNKNOWN\n                                  - SIGNED_MSG_TYPE_PREVOTE\n                                  - SIGNED_MSG_TYPE_PRECOMMIT\n                                  - SIGNED_MSG_TYPE_PROPOSAL\n                                default: SIGNED_MSG_TYPE_UNKNOWN\n                                description: >-\n                                  SignedMsgType is a type of signed message in\n                                  the consensus.\n\n                                   - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                   - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                              height:\n                                type: string\n                                format: int64\n                              round:\n                                type: integer\n                                format: int32\n                              block_id:\n                                type: object\n                                properties:\n                                  hash:\n                                    type: string\n                                    format: byte\n                                  part_set_header:\n                                    type: object\n                                    properties:\n                                      total:\n                                        type: integer\n                                        format: int64\n                                      hash:\n                                        type: string\n                                        format: byte\n                                    title: PartsetHeader\n                                title: BlockID\n                              timestamp:\n                                type: string\n                                format: date-time\n                              validator_address:\n                                type: string\n                                format: byte\n                              validator_index:\n                                type: integer\n                                format: int32\n                              signature:\n                                type: string\n                                format: byte\n                            description: >-\n                              Vote represents a prevote, precommit, or commit\n                              vote from validators for\n\n                              consensus.\n                          total_voting_power:\n                            type: string\n                            format: int64\n                          validator_power:\n                            type: string\n                            format: int64\n                          timestamp:\n                            type: string\n                            format: date-time\n                        description: DuplicateVoteEvidence contains evidence of a validator signed two\n                          conflicting votes.\n                      light_client_attack_evidence:\n                        type: object\n                        properties:\n                          conflicting_block:\n                            type: object\n                            properties:\n                              signed_header:\n                                type: object\n                                properties:\n                                  header:\n                                    type: object\n                                    properties:\n                                      version:\n                                        title: basic block info\n                                        type: object\n                                        properties:\n                                          block:\n                                            type: string\n                                            format: uint64\n                                          app:\n                                            type: string\n                                            format: uint64\n                                        description: >-\n                                          Consensus captures the consensus rules\n                                          for processing a block in the\n                                          blockchain,\n\n                                          including all blockchain data structures and the rules of the application's\n\n                                          state transition machine.\n                                      chain_id:\n                                        type: string\n                                      height:\n                                        type: string\n                                        format: int64\n                                      time:\n                                        type: string\n                                        format: date-time\n                                      last_block_id:\n                                        title: prev block info\n                                        type: object\n                                        properties:\n                                          hash:\n                                            type: string\n                                            format: byte\n                                          part_set_header:\n                                            type: object\n                                            properties:\n                                              total:\n                                                type: integer\n                                                format: int64\n                                              hash:\n                                                type: string\n                                                format: byte\n                                            title: PartsetHeader\n                                      last_commit_hash:\n                                        type: string\n                                        format: byte\n                                        title: hashes of block data\n                                      data_hash:\n                                        type: string\n                                        format: byte\n                                      validators_hash:\n                                        type: string\n                                        format: byte\n                                        title: hashes from the app output from the prev block\n                                      next_validators_hash:\n                                        type: string\n                                        format: byte\n                                      consensus_hash:\n                                        type: string\n                                        format: byte\n                                      app_hash:\n                                        type: string\n                                        format: byte\n                                      last_results_hash:\n                                        type: string\n                                        format: byte\n                                      evidence_hash:\n                                        type: string\n                                        format: byte\n                                        title: consensus info\n                                      proposer_address:\n                                        type: string\n                                        format: byte\n                                    description: Header defines the structure of a block header.\n                                  commit:\n                                    type: object\n                                    properties:\n                                      height:\n                                        type: string\n                                        format: int64\n                                      round:\n                                        type: integer\n                                        format: int32\n                                      block_id:\n                                        type: object\n                                        properties:\n                                          hash:\n                                            type: string\n                                            format: byte\n                                          part_set_header:\n                                            type: object\n                                            properties:\n                                              total:\n                                                type: integer\n                                                format: int64\n                                              hash:\n                                                type: string\n                                                format: byte\n                                            title: PartsetHeader\n                                        title: BlockID\n                                      signatures:\n                                        type: array\n                                        items:\n                                          type: object\n                                          properties:\n                                            block_id_flag:\n                                              type: string\n                                              enum:\n                                                - BLOCK_ID_FLAG_UNKNOWN\n                                                - BLOCK_ID_FLAG_ABSENT\n                                                - BLOCK_ID_FLAG_COMMIT\n                                                - BLOCK_ID_FLAG_NIL\n                                              default: BLOCK_ID_FLAG_UNKNOWN\n                                              title: BlockIdFlag indicates which BlcokID the signature is for\n                                            validator_address:\n                                              type: string\n                                              format: byte\n                                            timestamp:\n                                              type: string\n                                              format: date-time\n                                            signature:\n                                              type: string\n                                              format: byte\n                                          description: CommitSig is a part of the Vote included in a Commit.\n                                    description: Commit contains the evidence that a block was committed by a set of\n                                      validators.\n                              validator_set:\n                                type: object\n                                properties:\n                                  validators:\n                                    type: array\n                                    items:\n                                      type: object\n                                      properties:\n                                        address:\n                                          type: string\n                                          format: byte\n                                        pub_key:\n                                          type: object\n                                          properties:\n                                            ed25519:\n                                              type: string\n                                              format: byte\n                                            secp256k1:\n                                              type: string\n                                              format: byte\n                                          title: PublicKey defines the keys available for use with Validators\n                                        voting_power:\n                                          type: string\n                                          format: int64\n                                        proposer_priority:\n                                          type: string\n                                          format: int64\n                                  proposer:\n                                    type: object\n                                    properties:\n                                      address:\n                                        type: string\n                                        format: byte\n                                      pub_key:\n                                        type: object\n                                        properties:\n                                          ed25519:\n                                            type: string\n                                            format: byte\n                                          secp256k1:\n                                            type: string\n                                            format: byte\n                                        title: PublicKey defines the keys available for use with Validators\n                                      voting_power:\n                                        type: string\n                                        format: int64\n                                      proposer_priority:\n                                        type: string\n                                        format: int64\n                                  total_voting_power:\n                                    type: string\n                                    format: int64\n                          common_height:\n                            type: string\n                            format: int64\n                          byzantine_validators:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                address:\n                                  type: string\n                                  format: byte\n                                pub_key:\n                                  type: object\n                                  properties:\n                                    ed25519:\n                                      type: string\n                                      format: byte\n                                    secp256k1:\n                                      type: string\n                                      format: byte\n                                  title: PublicKey defines the keys available for use with Validators\n                                voting_power:\n                                  type: string\n                                  format: int64\n                                proposer_priority:\n                                  type: string\n                                  format: int64\n                          total_voting_power:\n                            type: string\n                            format: int64\n                          timestamp:\n                            type: string\n                            format: date-time\n                        description: LightClientAttackEvidence contains evidence of a set of validators\n                          attempting to mislead a light client.\n            last_commit:\n              type: object\n              properties:\n                height:\n                  type: string\n                  format: int64\n                round:\n                  type: integer\n                  format: int32\n                block_id:\n                  type: object\n                  properties:\n                    hash:\n                      type: string\n                      format: byte\n                    part_set_header:\n                      type: object\n                      properties:\n                        total:\n                          type: integer\n                          format: int64\n                        hash:\n                          type: string\n                          format: byte\n                      title: PartsetHeader\n                  title: BlockID\n                signatures:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      block_id_flag:\n                        type: string\n                        enum:\n                          - BLOCK_ID_FLAG_UNKNOWN\n                          - BLOCK_ID_FLAG_ABSENT\n                          - BLOCK_ID_FLAG_COMMIT\n                          - BLOCK_ID_FLAG_NIL\n                        default: BLOCK_ID_FLAG_UNKNOWN\n                        title: BlockIdFlag indicates which BlcokID the signature is for\n                      validator_address:\n                        type: string\n                        format: byte\n                      timestamp:\n                        type: string\n                        format: date-time\n                      signature:\n                        type: string\n                        format: byte\n                    description: CommitSig is a part of the Vote included in a Commit.\n              description: Commit contains the evidence that a block was committed by a set of\n                validators.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: >-\n        GetBlockWithTxsResponse is the response type for the\n        Service.GetBlockWithTxs method.\n\n\n        Since: cosmos-sdk 0.45.2\n    cosmos.tx.v1beta1.GetTxResponse:\n      type: object\n      properties:\n        tx:\n          type: object\n          properties:\n            body:\n              title: body is the processable content of the transaction\n              type: object\n              properties:\n                messages:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                  description: >-\n                    messages is a list of messages to be executed. The required\n                    signers of\n\n                    those messages define the number and order of elements in AuthInfo's\n\n                    signer_infos and Tx's signatures. Each required signer address is added to\n\n                    the list only the first time it occurs.\n\n                    By convention, the first required signer (usually from the first message)\n\n                    is referred to as the primary signer and pays the fee for the whole\n\n                    transaction.\n                memo:\n                  type: string\n                  description: >-\n                    memo is any arbitrary note/comment to be added to the\n                    transaction.\n\n                    WARNING: in clients, any publicly exposed text should not be called memo,\n\n                    but should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122).\n                timeout_height:\n                  type: string\n                  format: uint64\n                  title: >-\n                    timeout is the block height after which this transaction\n                    will not\n\n                    be processed by the chain\n                extension_options:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                  title: >-\n                    extension_options are arbitrary options that can be added by\n                    chains\n\n                    when the default options are not sufficient. If any of these are present\n\n                    and can't be handled, the transaction will be rejected\n                non_critical_extension_options:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                  title: >-\n                    extension_options are arbitrary options that can be added by\n                    chains\n\n                    when the default options are not sufficient. If any of these are present\n\n                    and can't be handled, they will be ignored\n              description: TxBody is the body of a transaction that all signers sign over.\n            auth_info:\n              title: >-\n                auth_info is the authorization related content of the\n                transaction,\n\n                specifically signers, signer modes and fee\n              type: object\n              properties:\n                signer_infos:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      public_key:\n                        type: object\n                        properties:\n                          type_url:\n                            type: string\n                          value:\n                            type: string\n                            format: byte\n                        description: >-\n                          public_key is the public key of the signer. It is\n                          optional for accounts\n\n                          that already exist in state. If unset, the verifier can use the required \\\n\n                          signer address for this position and lookup the public key.\n                      mode_info:\n                        title: >-\n                          mode_info describes the signing mode of the signer and\n                          is a nested\n\n                          structure to support nested multisig pubkey's\n                        type: object\n                        properties:\n                          single:\n                            title: single represents a single signer\n                            type: object\n                            properties:\n                              mode:\n                                title: mode is the signing mode of the single signer\n                                type: string\n                                enum:\n                                  - SIGN_MODE_UNSPECIFIED\n                                  - SIGN_MODE_DIRECT\n                                  - SIGN_MODE_TEXTUAL\n                                  - SIGN_MODE_DIRECT_AUX\n                                  - SIGN_MODE_LEGACY_AMINO_JSON\n                                  - SIGN_MODE_EIP_191\n                                default: SIGN_MODE_UNSPECIFIED\n                                description: >-\n                                  SignMode represents a signing mode with its\n                                  own security guarantees.\n\n\n                                  This enum should be considered a registry of all known sign modes\n\n                                  in the Cosmos ecosystem. Apps are not expected to support all known\n\n                                  sign modes. Apps that would like to support custom  sign modes are\n\n                                  encouraged to open a small PR against this file to add a new case\n\n                                  to this SignMode enum describing their sign mode so that different\n\n                                  apps have a consistent version of this enum.\n\n                                   - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                  rejected.\n                                   - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                  verified with raw bytes from Tx.\n                                   - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                  human-readable textual representation on top of the binary representation\n\n                                  from SIGN_MODE_DIRECT. It is currently not supported.\n                                   - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                  SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\n\n                                  require signers signing over other signers' `signer_info`. It also allows\n\n                                  for adding Tips in transactions.\n\n\n                                  Since: cosmos-sdk 0.46\n                                   - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                  Amino JSON and will be removed in the future.\n                                   - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                  SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                                  Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\n\n                                  but is not implemented on the SDK by default. To enable EIP-191, you need\n\n                                  to pass a custom `TxConfig` that has an implementation of\n\n                                  `SignModeHandler` for EIP-191. The SDK may decide to fully support\n\n                                  EIP-191 in the future.\n\n\n                                  Since: cosmos-sdk 0.45.2\n                          multi:\n                            title: multi represents a nested multisig signer\n                            type: object\n                            properties:\n                              bitarray:\n                                title: bitarray specifies which keys within the multisig are signing\n                                type: object\n                                properties:\n                                  extra_bits_stored:\n                                    type: integer\n                                    format: int64\n                                  elems:\n                                    type: string\n                                    format: byte\n                                description: >-\n                                  CompactBitArray is an implementation of a\n                                  space efficient bit array.\n\n                                  This is used to ensure that the encoded data takes up a minimal amount of\n\n                                  space after proto encoding.\n\n                                  This is not thread safe, and is not intended for concurrent usage.\n                              mode_infos:\n                                type: array\n                                items: {}\n                                title: >-\n                                  mode_infos is the corresponding modes of the\n                                  signers of the multisig\n\n                                  which could include nested multisig public keys\n                        description: ModeInfo describes the signing mode of a single or nested multisig\n                          signer.\n                      sequence:\n                        type: string\n                        format: uint64\n                        description: >-\n                          sequence is the sequence of the account, which\n                          describes the\n\n                          number of committed transactions signed by a given address. It is used to\n\n                          prevent replay attacks.\n                    description: >-\n                      SignerInfo describes the public key and signing mode of a\n                      single top-level\n\n                      signer.\n                  description: >-\n                    signer_infos defines the signing modes for the required\n                    signers. The number\n\n                    and order of elements must match the required signers from TxBody's\n\n                    messages. The first element is the primary signer and the one which pays\n\n                    the fee.\n                fee:\n                  description: >-\n                    Fee is the fee and gas limit for the transaction. The first\n                    signer is the\n\n                    primary signer and the one which pays the fee. The fee can be calculated\n\n                    based on the cost of evaluating the body and doing signature verification\n\n                    of the signers. This can be estimated via simulation.\n                  type: object\n                  properties:\n                    amount:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the custom method\n\n                          signatures required by gogoproto.\n                      title: amount is the amount of coins to be paid as a fee\n                    gas_limit:\n                      type: string\n                      format: uint64\n                      title: >-\n                        gas_limit is the maximum gas that can be used in\n                        transaction processing\n\n                        before an out of gas error occurs\n                    payer:\n                      type: string\n                      description: >-\n                        if unset, the first signer is responsible for paying the\n                        fees. If set, the specified account must pay the fees.\n\n                        the payer must be a tx signer (and thus have signed this field in AuthInfo).\n\n                        setting this field does *not* change the ordering of required signers for the transaction.\n                    granter:\n                      type: string\n                      title: >-\n                        if set, the fee payer (either the first signer or the\n                        value of the payer field) requests that a fee grant be\n                        used\n\n                        to pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\n\n                        not support fee grants, this will fail\n                tip:\n                  description: >-\n                    Tip is the optional tip used for transactions fees paid in\n                    another denom.\n\n\n                    This field is ignored if the chain didn't enable tips, i.e. didn't add the\n\n                    `TipDecorator` in its posthandler.\n\n\n                    Since: cosmos-sdk 0.46\n                  type: object\n                  properties:\n                    amount:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the custom method\n\n                          signatures required by gogoproto.\n                      title: amount is the amount of the tip\n                    tipper:\n                      type: string\n                      title: tipper is the address of the account paying for the tip\n              description: >-\n                AuthInfo describes the fee and signer modes that are used to\n                sign a\n\n                transaction.\n            signatures:\n              type: array\n              items:\n                type: string\n                format: byte\n              description: >-\n                signatures is a list of signatures that matches the length and\n                order of\n\n                AuthInfo's signer_infos to allow connecting signature meta information like\n\n                public key and signing mode by position.\n          description: Tx is the standard type used for broadcasting transactions.\n        tx_response:\n          type: object\n          properties:\n            height:\n              type: string\n              format: int64\n              title: The block height\n            txhash:\n              type: string\n              description: The transaction hash.\n            codespace:\n              type: string\n              title: Namespace for the Code\n            code:\n              type: integer\n              format: int64\n              description: Response code.\n            data:\n              type: string\n              description: Result bytes, if any.\n            raw_log:\n              type: string\n              description: |-\n                The output of the application's logger (raw string). May be\n                non-deterministic.\n            logs:\n              type: array\n              items:\n                type: object\n                properties:\n                  msg_index:\n                    type: integer\n                    format: int64\n                  log:\n                    type: string\n                  events:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type:\n                          type: string\n                        attributes:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              key:\n                                type: string\n                              value:\n                                type: string\n                            description: >-\n                              Attribute defines an attribute wrapper where the\n                              key and value are\n\n                              strings instead of raw bytes.\n                      description: >-\n                        StringEvent defines en Event object wrapper where all\n                        the attributes\n\n                        contain key/value pairs that are strings instead of raw bytes.\n                    description: >-\n                      Events contains a slice of Event objects that were emitted\n                      during some\n\n                      execution.\n                description: ABCIMessageLog defines a structure containing an indexed tx ABCI\n                  message log.\n              description: The output of the application's logger (typed). May be\n                non-deterministic.\n            info:\n              type: string\n              description: Additional information. May be non-deterministic.\n            gas_wanted:\n              type: string\n              format: int64\n              description: Amount of gas requested for transaction.\n            gas_used:\n              type: string\n              format: int64\n              description: Amount of gas consumed by transaction.\n            tx:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n              description: The request transaction bytes.\n            timestamp:\n              type: string\n              description: >-\n                Time of the previous block. For heights > 1, it's the weighted\n                median of\n\n                the timestamps of the valid votes in the block.LastCommit. For height == 1,\n\n                it's genesis time.\n            events:\n              type: array\n              items:\n                type: object\n                properties:\n                  type:\n                    type: string\n                  attributes:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        key:\n                          type: string\n                        value:\n                          type: string\n                        index:\n                          type: boolean\n                      description: EventAttribute is a single key-value pair, associated with an\n                        event.\n                description: >-\n                  Event allows application developers to attach additional\n                  information to\n\n                  ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and ResponseDeliverTx.\n\n                  Later, transactions may be queried using these events.\n              description: >-\n                Events defines all the events emitted by processing a\n                transaction. Note,\n\n                these events include those emitted by processing all the messages and those\n\n                emitted from the ante. Whereas Logs contains the events, with\n\n                additional metadata, emitted only by processing the messages.\n\n\n                Since: cosmos-sdk 0.42.11, 0.44.5, 0.45\n          description: >-\n            TxResponse defines a structure containing relevant tx data and\n            metadata. The\n\n            tags are stringified and the log is JSON decoded.\n      description: GetTxResponse is the response type for the Service.GetTx method.\n    cosmos.tx.v1beta1.GetTxsEventResponse:\n      type: object\n      properties:\n        txs:\n          type: array\n          items:\n            type: object\n            properties:\n              body:\n                title: body is the processable content of the transaction\n                type: object\n                properties:\n                  messages:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                    description: >-\n                      messages is a list of messages to be executed. The\n                      required signers of\n\n                      those messages define the number and order of elements in AuthInfo's\n\n                      signer_infos and Tx's signatures. Each required signer address is added to\n\n                      the list only the first time it occurs.\n\n                      By convention, the first required signer (usually from the first message)\n\n                      is referred to as the primary signer and pays the fee for the whole\n\n                      transaction.\n                  memo:\n                    type: string\n                    description: >-\n                      memo is any arbitrary note/comment to be added to the\n                      transaction.\n\n                      WARNING: in clients, any publicly exposed text should not be called memo,\n\n                      but should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122).\n                  timeout_height:\n                    type: string\n                    format: uint64\n                    title: >-\n                      timeout is the block height after which this transaction\n                      will not\n\n                      be processed by the chain\n                  extension_options:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                    title: >-\n                      extension_options are arbitrary options that can be added\n                      by chains\n\n                      when the default options are not sufficient. If any of these are present\n\n                      and can't be handled, the transaction will be rejected\n                  non_critical_extension_options:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                    title: >-\n                      extension_options are arbitrary options that can be added\n                      by chains\n\n                      when the default options are not sufficient. If any of these are present\n\n                      and can't be handled, they will be ignored\n                description: TxBody is the body of a transaction that all signers sign over.\n              auth_info:\n                title: >-\n                  auth_info is the authorization related content of the\n                  transaction,\n\n                  specifically signers, signer modes and fee\n                type: object\n                properties:\n                  signer_infos:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        public_key:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                          description: >-\n                            public_key is the public key of the signer. It is\n                            optional for accounts\n\n                            that already exist in state. If unset, the verifier can use the required \\\n\n                            signer address for this position and lookup the public key.\n                        mode_info:\n                          title: >-\n                            mode_info describes the signing mode of the signer\n                            and is a nested\n\n                            structure to support nested multisig pubkey's\n                          type: object\n                          properties:\n                            single:\n                              title: single represents a single signer\n                              type: object\n                              properties:\n                                mode:\n                                  title: mode is the signing mode of the single signer\n                                  type: string\n                                  enum:\n                                    - SIGN_MODE_UNSPECIFIED\n                                    - SIGN_MODE_DIRECT\n                                    - SIGN_MODE_TEXTUAL\n                                    - SIGN_MODE_DIRECT_AUX\n                                    - SIGN_MODE_LEGACY_AMINO_JSON\n                                    - SIGN_MODE_EIP_191\n                                  default: SIGN_MODE_UNSPECIFIED\n                                  description: >-\n                                    SignMode represents a signing mode with its\n                                    own security guarantees.\n\n\n                                    This enum should be considered a registry of all known sign modes\n\n                                    in the Cosmos ecosystem. Apps are not expected to support all known\n\n                                    sign modes. Apps that would like to support custom  sign modes are\n\n                                    encouraged to open a small PR against this file to add a new case\n\n                                    to this SignMode enum describing their sign mode so that different\n\n                                    apps have a consistent version of this enum.\n\n                                     - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                    rejected.\n                                     - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                    verified with raw bytes from Tx.\n                                     - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                    human-readable textual representation on top of the binary representation\n\n                                    from SIGN_MODE_DIRECT. It is currently not supported.\n                                     - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                    SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\n\n                                    require signers signing over other signers' `signer_info`. It also allows\n\n                                    for adding Tips in transactions.\n\n\n                                    Since: cosmos-sdk 0.46\n                                     - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                    Amino JSON and will be removed in the future.\n                                     - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                    SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                                    Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\n\n                                    but is not implemented on the SDK by default. To enable EIP-191, you need\n\n                                    to pass a custom `TxConfig` that has an implementation of\n\n                                    `SignModeHandler` for EIP-191. The SDK may decide to fully support\n\n                                    EIP-191 in the future.\n\n\n                                    Since: cosmos-sdk 0.45.2\n                            multi:\n                              title: multi represents a nested multisig signer\n                              type: object\n                              properties:\n                                bitarray:\n                                  title: bitarray specifies which keys within the multisig are signing\n                                  type: object\n                                  properties:\n                                    extra_bits_stored:\n                                      type: integer\n                                      format: int64\n                                    elems:\n                                      type: string\n                                      format: byte\n                                  description: >-\n                                    CompactBitArray is an implementation of a\n                                    space efficient bit array.\n\n                                    This is used to ensure that the encoded data takes up a minimal amount of\n\n                                    space after proto encoding.\n\n                                    This is not thread safe, and is not intended for concurrent usage.\n                                mode_infos:\n                                  type: array\n                                  items: {}\n                                  title: >-\n                                    mode_infos is the corresponding modes of the\n                                    signers of the multisig\n\n                                    which could include nested multisig public keys\n                          description: ModeInfo describes the signing mode of a single or nested multisig\n                            signer.\n                        sequence:\n                          type: string\n                          format: uint64\n                          description: >-\n                            sequence is the sequence of the account, which\n                            describes the\n\n                            number of committed transactions signed by a given address. It is used to\n\n                            prevent replay attacks.\n                      description: >-\n                        SignerInfo describes the public key and signing mode of\n                        a single top-level\n\n                        signer.\n                    description: >-\n                      signer_infos defines the signing modes for the required\n                      signers. The number\n\n                      and order of elements must match the required signers from TxBody's\n\n                      messages. The first element is the primary signer and the one which pays\n\n                      the fee.\n                  fee:\n                    description: >-\n                      Fee is the fee and gas limit for the transaction. The\n                      first signer is the\n\n                      primary signer and the one which pays the fee. The fee can be calculated\n\n                      based on the cost of evaluating the body and doing signature verification\n\n                      of the signers. This can be estimated via simulation.\n                    type: object\n                    properties:\n                      amount:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n                        title: amount is the amount of coins to be paid as a fee\n                      gas_limit:\n                        type: string\n                        format: uint64\n                        title: >-\n                          gas_limit is the maximum gas that can be used in\n                          transaction processing\n\n                          before an out of gas error occurs\n                      payer:\n                        type: string\n                        description: >-\n                          if unset, the first signer is responsible for paying\n                          the fees. If set, the specified account must pay the\n                          fees.\n\n                          the payer must be a tx signer (and thus have signed this field in AuthInfo).\n\n                          setting this field does *not* change the ordering of required signers for the transaction.\n                      granter:\n                        type: string\n                        title: >-\n                          if set, the fee payer (either the first signer or the\n                          value of the payer field) requests that a fee grant be\n                          used\n\n                          to pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\n\n                          not support fee grants, this will fail\n                  tip:\n                    description: >-\n                      Tip is the optional tip used for transactions fees paid in\n                      another denom.\n\n\n                      This field is ignored if the chain didn't enable tips, i.e. didn't add the\n\n                      `TipDecorator` in its posthandler.\n\n\n                      Since: cosmos-sdk 0.46\n                    type: object\n                    properties:\n                      amount:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements the custom method\n\n                            signatures required by gogoproto.\n                        title: amount is the amount of the tip\n                      tipper:\n                        type: string\n                        title: tipper is the address of the account paying for the tip\n                description: >-\n                  AuthInfo describes the fee and signer modes that are used to\n                  sign a\n\n                  transaction.\n              signatures:\n                type: array\n                items:\n                  type: string\n                  format: byte\n                description: >-\n                  signatures is a list of signatures that matches the length and\n                  order of\n\n                  AuthInfo's signer_infos to allow connecting signature meta information like\n\n                  public key and signing mode by position.\n            description: Tx is the standard type used for broadcasting transactions.\n          description: txs is the list of queried transactions.\n        tx_responses:\n          type: array\n          items:\n            type: object\n            properties:\n              height:\n                type: string\n                format: int64\n                title: The block height\n              txhash:\n                type: string\n                description: The transaction hash.\n              codespace:\n                type: string\n                title: Namespace for the Code\n              code:\n                type: integer\n                format: int64\n                description: Response code.\n              data:\n                type: string\n                description: Result bytes, if any.\n              raw_log:\n                type: string\n                description: |-\n                  The output of the application's logger (raw string). May be\n                  non-deterministic.\n              logs:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    msg_index:\n                      type: integer\n                      format: int64\n                    log:\n                      type: string\n                    events:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          type:\n                            type: string\n                          attributes:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                key:\n                                  type: string\n                                value:\n                                  type: string\n                              description: >-\n                                Attribute defines an attribute wrapper where the\n                                key and value are\n\n                                strings instead of raw bytes.\n                        description: >-\n                          StringEvent defines en Event object wrapper where all\n                          the attributes\n\n                          contain key/value pairs that are strings instead of raw bytes.\n                      description: >-\n                        Events contains a slice of Event objects that were\n                        emitted during some\n\n                        execution.\n                  description: ABCIMessageLog defines a structure containing an indexed tx ABCI\n                    message log.\n                description: The output of the application's logger (typed). May be\n                  non-deterministic.\n              info:\n                type: string\n                description: Additional information. May be non-deterministic.\n              gas_wanted:\n                type: string\n                format: int64\n                description: Amount of gas requested for transaction.\n              gas_used:\n                type: string\n                format: int64\n                description: Amount of gas consumed by transaction.\n              tx:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n                description: The request transaction bytes.\n              timestamp:\n                type: string\n                description: >-\n                  Time of the previous block. For heights > 1, it's the weighted\n                  median of\n\n                  the timestamps of the valid votes in the block.LastCommit. For height == 1,\n\n                  it's genesis time.\n              events:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type:\n                      type: string\n                    attributes:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          key:\n                            type: string\n                          value:\n                            type: string\n                          index:\n                            type: boolean\n                        description: EventAttribute is a single key-value pair, associated with an\n                          event.\n                  description: >-\n                    Event allows application developers to attach additional\n                    information to\n\n                    ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and ResponseDeliverTx.\n\n                    Later, transactions may be queried using these events.\n                description: >-\n                  Events defines all the events emitted by processing a\n                  transaction. Note,\n\n                  these events include those emitted by processing all the messages and those\n\n                  emitted from the ante. Whereas Logs contains the events, with\n\n                  additional metadata, emitted only by processing the messages.\n\n\n                  Since: cosmos-sdk 0.42.11, 0.44.5, 0.45\n            description: >-\n              TxResponse defines a structure containing relevant tx data and\n              metadata. The\n\n              tags are stringified and the log is JSON decoded.\n          description: tx_responses is the list of queried TxResponses.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n        total:\n          type: string\n          format: uint64\n          title: total is total number of results available\n      description: |-\n        GetTxsEventResponse is the response type for the Service.TxsByEvents\n        RPC method.\n    cosmos.tx.v1beta1.ModeInfo:\n      type: object\n      properties:\n        single:\n          title: single represents a single signer\n          type: object\n          properties:\n            mode:\n              title: mode is the signing mode of the single signer\n              type: string\n              enum:\n                - SIGN_MODE_UNSPECIFIED\n                - SIGN_MODE_DIRECT\n                - SIGN_MODE_TEXTUAL\n                - SIGN_MODE_DIRECT_AUX\n                - SIGN_MODE_LEGACY_AMINO_JSON\n                - SIGN_MODE_EIP_191\n              default: SIGN_MODE_UNSPECIFIED\n              description: >-\n                SignMode represents a signing mode with its own security\n                guarantees.\n\n\n                This enum should be considered a registry of all known sign modes\n\n                in the Cosmos ecosystem. Apps are not expected to support all known\n\n                sign modes. Apps that would like to support custom  sign modes are\n\n                encouraged to open a small PR against this file to add a new case\n\n                to this SignMode enum describing their sign mode so that different\n\n                apps have a consistent version of this enum.\n\n                 - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                rejected.\n                 - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                verified with raw bytes from Tx.\n                 - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                human-readable textual representation on top of the binary representation\n\n                from SIGN_MODE_DIRECT. It is currently not supported.\n                 - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\n\n                require signers signing over other signers' `signer_info`. It also allows\n\n                for adding Tips in transactions.\n\n\n                Since: cosmos-sdk 0.46\n                 - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                Amino JSON and will be removed in the future.\n                 - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\n\n                but is not implemented on the SDK by default. To enable EIP-191, you need\n\n                to pass a custom `TxConfig` that has an implementation of\n\n                `SignModeHandler` for EIP-191. The SDK may decide to fully support\n\n                EIP-191 in the future.\n\n\n                Since: cosmos-sdk 0.45.2\n        multi:\n          title: multi represents a nested multisig signer\n          type: object\n          properties:\n            bitarray:\n              title: bitarray specifies which keys within the multisig are signing\n              type: object\n              properties:\n                extra_bits_stored:\n                  type: integer\n                  format: int64\n                elems:\n                  type: string\n                  format: byte\n              description: >-\n                CompactBitArray is an implementation of a space efficient bit\n                array.\n\n                This is used to ensure that the encoded data takes up a minimal amount of\n\n                space after proto encoding.\n\n                This is not thread safe, and is not intended for concurrent usage.\n            mode_infos:\n              type: array\n              items: {}\n              title: >-\n                mode_infos is the corresponding modes of the signers of the\n                multisig\n\n                which could include nested multisig public keys\n      description: ModeInfo describes the signing mode of a single or nested multisig\n        signer.\n    cosmos.tx.v1beta1.ModeInfo.Multi:\n      type: object\n      properties:\n        bitarray:\n          title: bitarray specifies which keys within the multisig are signing\n          type: object\n          properties:\n            extra_bits_stored:\n              type: integer\n              format: int64\n            elems:\n              type: string\n              format: byte\n          description: >-\n            CompactBitArray is an implementation of a space efficient bit array.\n\n            This is used to ensure that the encoded data takes up a minimal amount of\n\n            space after proto encoding.\n\n            This is not thread safe, and is not intended for concurrent usage.\n        mode_infos:\n          type: array\n          items: {}\n          title: |-\n            mode_infos is the corresponding modes of the signers of the multisig\n            which could include nested multisig public keys\n      title: Multi is the mode info for a multisig public key\n    cosmos.tx.v1beta1.ModeInfo.Single:\n      type: object\n      properties:\n        mode:\n          title: mode is the signing mode of the single signer\n          type: string\n          enum:\n            - SIGN_MODE_UNSPECIFIED\n            - SIGN_MODE_DIRECT\n            - SIGN_MODE_TEXTUAL\n            - SIGN_MODE_DIRECT_AUX\n            - SIGN_MODE_LEGACY_AMINO_JSON\n            - SIGN_MODE_EIP_191\n          default: SIGN_MODE_UNSPECIFIED\n          description: >-\n            SignMode represents a signing mode with its own security guarantees.\n\n\n            This enum should be considered a registry of all known sign modes\n\n            in the Cosmos ecosystem. Apps are not expected to support all known\n\n            sign modes. Apps that would like to support custom  sign modes are\n\n            encouraged to open a small PR against this file to add a new case\n\n            to this SignMode enum describing their sign mode so that different\n\n            apps have a consistent version of this enum.\n\n             - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n            rejected.\n             - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n            verified with raw bytes from Tx.\n             - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n            human-readable textual representation on top of the binary representation\n\n            from SIGN_MODE_DIRECT. It is currently not supported.\n             - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n            SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\n\n            require signers signing over other signers' `signer_info`. It also allows\n\n            for adding Tips in transactions.\n\n\n            Since: cosmos-sdk 0.46\n             - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n            Amino JSON and will be removed in the future.\n             - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n            SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n            Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\n\n            but is not implemented on the SDK by default. To enable EIP-191, you need\n\n            to pass a custom `TxConfig` that has an implementation of\n\n            `SignModeHandler` for EIP-191. The SDK may decide to fully support\n\n            EIP-191 in the future.\n\n\n            Since: cosmos-sdk 0.45.2\n      title: >-\n        Single is the mode info for a single signer. It is structured as a\n        message\n\n        to allow for additional fields such as locale for SIGN_MODE_TEXTUAL in the\n\n        future\n    cosmos.tx.v1beta1.OrderBy:\n      type: string\n      enum:\n        - ORDER_BY_UNSPECIFIED\n        - ORDER_BY_ASC\n        - ORDER_BY_DESC\n      default: ORDER_BY_UNSPECIFIED\n      description: >-\n        - ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown\n        sorting order. OrderBy defaults to ASC in this case.\n         - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order\n         - ORDER_BY_DESC: ORDER_BY_DESC defines descending order\n      title: OrderBy defines the sorting order\n    cosmos.tx.v1beta1.SignerInfo:\n      type: object\n      properties:\n        public_key:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n          description: >-\n            public_key is the public key of the signer. It is optional for\n            accounts\n\n            that already exist in state. If unset, the verifier can use the required \\\n\n            signer address for this position and lookup the public key.\n        mode_info:\n          title: |-\n            mode_info describes the signing mode of the signer and is a nested\n            structure to support nested multisig pubkey's\n          type: object\n          properties:\n            single:\n              title: single represents a single signer\n              type: object\n              properties:\n                mode:\n                  title: mode is the signing mode of the single signer\n                  type: string\n                  enum:\n                    - SIGN_MODE_UNSPECIFIED\n                    - SIGN_MODE_DIRECT\n                    - SIGN_MODE_TEXTUAL\n                    - SIGN_MODE_DIRECT_AUX\n                    - SIGN_MODE_LEGACY_AMINO_JSON\n                    - SIGN_MODE_EIP_191\n                  default: SIGN_MODE_UNSPECIFIED\n                  description: >-\n                    SignMode represents a signing mode with its own security\n                    guarantees.\n\n\n                    This enum should be considered a registry of all known sign modes\n\n                    in the Cosmos ecosystem. Apps are not expected to support all known\n\n                    sign modes. Apps that would like to support custom  sign modes are\n\n                    encouraged to open a small PR against this file to add a new case\n\n                    to this SignMode enum describing their sign mode so that different\n\n                    apps have a consistent version of this enum.\n\n                     - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                    rejected.\n                     - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                    verified with raw bytes from Tx.\n                     - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                    human-readable textual representation on top of the binary representation\n\n                    from SIGN_MODE_DIRECT. It is currently not supported.\n                     - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                    SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\n\n                    require signers signing over other signers' `signer_info`. It also allows\n\n                    for adding Tips in transactions.\n\n\n                    Since: cosmos-sdk 0.46\n                     - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                    Amino JSON and will be removed in the future.\n                     - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                    SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                    Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\n\n                    but is not implemented on the SDK by default. To enable EIP-191, you need\n\n                    to pass a custom `TxConfig` that has an implementation of\n\n                    `SignModeHandler` for EIP-191. The SDK may decide to fully support\n\n                    EIP-191 in the future.\n\n\n                    Since: cosmos-sdk 0.45.2\n            multi:\n              title: multi represents a nested multisig signer\n              type: object\n              properties:\n                bitarray:\n                  title: bitarray specifies which keys within the multisig are signing\n                  type: object\n                  properties:\n                    extra_bits_stored:\n                      type: integer\n                      format: int64\n                    elems:\n                      type: string\n                      format: byte\n                  description: >-\n                    CompactBitArray is an implementation of a space efficient\n                    bit array.\n\n                    This is used to ensure that the encoded data takes up a minimal amount of\n\n                    space after proto encoding.\n\n                    This is not thread safe, and is not intended for concurrent usage.\n                mode_infos:\n                  type: array\n                  items: {}\n                  title: >-\n                    mode_infos is the corresponding modes of the signers of the\n                    multisig\n\n                    which could include nested multisig public keys\n          description: ModeInfo describes the signing mode of a single or nested multisig\n            signer.\n        sequence:\n          type: string\n          format: uint64\n          description: >-\n            sequence is the sequence of the account, which describes the\n\n            number of committed transactions signed by a given address. It is used to\n\n            prevent replay attacks.\n      description: >-\n        SignerInfo describes the public key and signing mode of a single\n        top-level\n\n        signer.\n    cosmos.tx.v1beta1.SimulateRequest:\n      type: object\n      properties:\n        tx:\n          description: |-\n            tx is the transaction to simulate.\n            Deprecated. Send raw tx bytes instead.\n          type: object\n          properties:\n            body:\n              title: body is the processable content of the transaction\n              type: object\n              properties:\n                messages:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                  description: >-\n                    messages is a list of messages to be executed. The required\n                    signers of\n\n                    those messages define the number and order of elements in AuthInfo's\n\n                    signer_infos and Tx's signatures. Each required signer address is added to\n\n                    the list only the first time it occurs.\n\n                    By convention, the first required signer (usually from the first message)\n\n                    is referred to as the primary signer and pays the fee for the whole\n\n                    transaction.\n                memo:\n                  type: string\n                  description: >-\n                    memo is any arbitrary note/comment to be added to the\n                    transaction.\n\n                    WARNING: in clients, any publicly exposed text should not be called memo,\n\n                    but should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122).\n                timeout_height:\n                  type: string\n                  format: uint64\n                  title: >-\n                    timeout is the block height after which this transaction\n                    will not\n\n                    be processed by the chain\n                extension_options:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                  title: >-\n                    extension_options are arbitrary options that can be added by\n                    chains\n\n                    when the default options are not sufficient. If any of these are present\n\n                    and can't be handled, the transaction will be rejected\n                non_critical_extension_options:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                  title: >-\n                    extension_options are arbitrary options that can be added by\n                    chains\n\n                    when the default options are not sufficient. If any of these are present\n\n                    and can't be handled, they will be ignored\n              description: TxBody is the body of a transaction that all signers sign over.\n            auth_info:\n              title: >-\n                auth_info is the authorization related content of the\n                transaction,\n\n                specifically signers, signer modes and fee\n              type: object\n              properties:\n                signer_infos:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      public_key:\n                        type: object\n                        properties:\n                          type_url:\n                            type: string\n                          value:\n                            type: string\n                            format: byte\n                        description: >-\n                          public_key is the public key of the signer. It is\n                          optional for accounts\n\n                          that already exist in state. If unset, the verifier can use the required \\\n\n                          signer address for this position and lookup the public key.\n                      mode_info:\n                        title: >-\n                          mode_info describes the signing mode of the signer and\n                          is a nested\n\n                          structure to support nested multisig pubkey's\n                        type: object\n                        properties:\n                          single:\n                            title: single represents a single signer\n                            type: object\n                            properties:\n                              mode:\n                                title: mode is the signing mode of the single signer\n                                type: string\n                                enum:\n                                  - SIGN_MODE_UNSPECIFIED\n                                  - SIGN_MODE_DIRECT\n                                  - SIGN_MODE_TEXTUAL\n                                  - SIGN_MODE_DIRECT_AUX\n                                  - SIGN_MODE_LEGACY_AMINO_JSON\n                                  - SIGN_MODE_EIP_191\n                                default: SIGN_MODE_UNSPECIFIED\n                                description: >-\n                                  SignMode represents a signing mode with its\n                                  own security guarantees.\n\n\n                                  This enum should be considered a registry of all known sign modes\n\n                                  in the Cosmos ecosystem. Apps are not expected to support all known\n\n                                  sign modes. Apps that would like to support custom  sign modes are\n\n                                  encouraged to open a small PR against this file to add a new case\n\n                                  to this SignMode enum describing their sign mode so that different\n\n                                  apps have a consistent version of this enum.\n\n                                   - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                  rejected.\n                                   - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                  verified with raw bytes from Tx.\n                                   - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                  human-readable textual representation on top of the binary representation\n\n                                  from SIGN_MODE_DIRECT. It is currently not supported.\n                                   - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                  SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\n\n                                  require signers signing over other signers' `signer_info`. It also allows\n\n                                  for adding Tips in transactions.\n\n\n                                  Since: cosmos-sdk 0.46\n                                   - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                  Amino JSON and will be removed in the future.\n                                   - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                  SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                                  Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\n\n                                  but is not implemented on the SDK by default. To enable EIP-191, you need\n\n                                  to pass a custom `TxConfig` that has an implementation of\n\n                                  `SignModeHandler` for EIP-191. The SDK may decide to fully support\n\n                                  EIP-191 in the future.\n\n\n                                  Since: cosmos-sdk 0.45.2\n                          multi:\n                            title: multi represents a nested multisig signer\n                            type: object\n                            properties:\n                              bitarray:\n                                title: bitarray specifies which keys within the multisig are signing\n                                type: object\n                                properties:\n                                  extra_bits_stored:\n                                    type: integer\n                                    format: int64\n                                  elems:\n                                    type: string\n                                    format: byte\n                                description: >-\n                                  CompactBitArray is an implementation of a\n                                  space efficient bit array.\n\n                                  This is used to ensure that the encoded data takes up a minimal amount of\n\n                                  space after proto encoding.\n\n                                  This is not thread safe, and is not intended for concurrent usage.\n                              mode_infos:\n                                type: array\n                                items: {}\n                                title: >-\n                                  mode_infos is the corresponding modes of the\n                                  signers of the multisig\n\n                                  which could include nested multisig public keys\n                        description: ModeInfo describes the signing mode of a single or nested multisig\n                          signer.\n                      sequence:\n                        type: string\n                        format: uint64\n                        description: >-\n                          sequence is the sequence of the account, which\n                          describes the\n\n                          number of committed transactions signed by a given address. It is used to\n\n                          prevent replay attacks.\n                    description: >-\n                      SignerInfo describes the public key and signing mode of a\n                      single top-level\n\n                      signer.\n                  description: >-\n                    signer_infos defines the signing modes for the required\n                    signers. The number\n\n                    and order of elements must match the required signers from TxBody's\n\n                    messages. The first element is the primary signer and the one which pays\n\n                    the fee.\n                fee:\n                  description: >-\n                    Fee is the fee and gas limit for the transaction. The first\n                    signer is the\n\n                    primary signer and the one which pays the fee. The fee can be calculated\n\n                    based on the cost of evaluating the body and doing signature verification\n\n                    of the signers. This can be estimated via simulation.\n                  type: object\n                  properties:\n                    amount:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the custom method\n\n                          signatures required by gogoproto.\n                      title: amount is the amount of coins to be paid as a fee\n                    gas_limit:\n                      type: string\n                      format: uint64\n                      title: >-\n                        gas_limit is the maximum gas that can be used in\n                        transaction processing\n\n                        before an out of gas error occurs\n                    payer:\n                      type: string\n                      description: >-\n                        if unset, the first signer is responsible for paying the\n                        fees. If set, the specified account must pay the fees.\n\n                        the payer must be a tx signer (and thus have signed this field in AuthInfo).\n\n                        setting this field does *not* change the ordering of required signers for the transaction.\n                    granter:\n                      type: string\n                      title: >-\n                        if set, the fee payer (either the first signer or the\n                        value of the payer field) requests that a fee grant be\n                        used\n\n                        to pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\n\n                        not support fee grants, this will fail\n                tip:\n                  description: >-\n                    Tip is the optional tip used for transactions fees paid in\n                    another denom.\n\n\n                    This field is ignored if the chain didn't enable tips, i.e. didn't add the\n\n                    `TipDecorator` in its posthandler.\n\n\n                    Since: cosmos-sdk 0.46\n                  type: object\n                  properties:\n                    amount:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the custom method\n\n                          signatures required by gogoproto.\n                      title: amount is the amount of the tip\n                    tipper:\n                      type: string\n                      title: tipper is the address of the account paying for the tip\n              description: >-\n                AuthInfo describes the fee and signer modes that are used to\n                sign a\n\n                transaction.\n            signatures:\n              type: array\n              items:\n                type: string\n                format: byte\n              description: >-\n                signatures is a list of signatures that matches the length and\n                order of\n\n                AuthInfo's signer_infos to allow connecting signature meta information like\n\n                public key and signing mode by position.\n        tx_bytes:\n          type: string\n          format: byte\n          description: |-\n            tx_bytes is the raw transaction.\n\n            Since: cosmos-sdk 0.43\n      description: |-\n        SimulateRequest is the request type for the Service.Simulate\n        RPC method.\n    cosmos.tx.v1beta1.SimulateResponse:\n      type: object\n      properties:\n        gas_info:\n          description: gas_info is the information about gas used in the simulation.\n          type: object\n          properties:\n            gas_wanted:\n              type: string\n              format: uint64\n              description: GasWanted is the maximum units of work we allow this tx to perform.\n            gas_used:\n              type: string\n              format: uint64\n              description: GasUsed is the amount of gas actually consumed.\n        result:\n          description: result is the result of the simulation.\n          type: object\n          properties:\n            data:\n              type: string\n              format: byte\n              description: >-\n                Data is any data returned from message or handler execution. It\n                MUST be\n\n                length prefixed in order to separate data from multiple message executions.\n\n                Deprecated. This field is still populated, but prefer msg_response instead\n\n                because it also contains the Msg response typeURL.\n            log:\n              type: string\n              description: Log contains the log information from message or handler execution.\n            events:\n              type: array\n              items:\n                type: object\n                properties:\n                  type:\n                    type: string\n                  attributes:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        key:\n                          type: string\n                        value:\n                          type: string\n                        index:\n                          type: boolean\n                      description: EventAttribute is a single key-value pair, associated with an\n                        event.\n                description: >-\n                  Event allows application developers to attach additional\n                  information to\n\n                  ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and ResponseDeliverTx.\n\n                  Later, transactions may be queried using these events.\n              description: >-\n                Events contains a slice of Event objects that were emitted\n                during message\n\n                or handler execution.\n            msg_responses:\n              type: array\n              items:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n              description: >-\n                msg_responses contains the Msg handler responses type packed in\n                Anys.\n\n\n                Since: cosmos-sdk 0.46\n      description: |-\n        SimulateResponse is the response type for the\n        Service.SimulateRPC method.\n    cosmos.tx.v1beta1.Tip:\n      type: object\n      properties:\n        amount:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n          title: amount is the amount of the tip\n        tipper:\n          type: string\n          title: tipper is the address of the account paying for the tip\n      description: |-\n        Tip is the tip used for meta-transactions.\n\n        Since: cosmos-sdk 0.46\n    cosmos.tx.v1beta1.Tx:\n      type: object\n      properties:\n        body:\n          title: body is the processable content of the transaction\n          type: object\n          properties:\n            messages:\n              type: array\n              items:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n              description: >-\n                messages is a list of messages to be executed. The required\n                signers of\n\n                those messages define the number and order of elements in AuthInfo's\n\n                signer_infos and Tx's signatures. Each required signer address is added to\n\n                the list only the first time it occurs.\n\n                By convention, the first required signer (usually from the first message)\n\n                is referred to as the primary signer and pays the fee for the whole\n\n                transaction.\n            memo:\n              type: string\n              description: >-\n                memo is any arbitrary note/comment to be added to the\n                transaction.\n\n                WARNING: in clients, any publicly exposed text should not be called memo,\n\n                but should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122).\n            timeout_height:\n              type: string\n              format: uint64\n              title: >-\n                timeout is the block height after which this transaction will\n                not\n\n                be processed by the chain\n            extension_options:\n              type: array\n              items:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n              title: >-\n                extension_options are arbitrary options that can be added by\n                chains\n\n                when the default options are not sufficient. If any of these are present\n\n                and can't be handled, the transaction will be rejected\n            non_critical_extension_options:\n              type: array\n              items:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n              title: >-\n                extension_options are arbitrary options that can be added by\n                chains\n\n                when the default options are not sufficient. If any of these are present\n\n                and can't be handled, they will be ignored\n          description: TxBody is the body of a transaction that all signers sign over.\n        auth_info:\n          title: |-\n            auth_info is the authorization related content of the transaction,\n            specifically signers, signer modes and fee\n          type: object\n          properties:\n            signer_infos:\n              type: array\n              items:\n                type: object\n                properties:\n                  public_key:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                    description: >-\n                      public_key is the public key of the signer. It is optional\n                      for accounts\n\n                      that already exist in state. If unset, the verifier can use the required \\\n\n                      signer address for this position and lookup the public key.\n                  mode_info:\n                    title: >-\n                      mode_info describes the signing mode of the signer and is\n                      a nested\n\n                      structure to support nested multisig pubkey's\n                    type: object\n                    properties:\n                      single:\n                        title: single represents a single signer\n                        type: object\n                        properties:\n                          mode:\n                            title: mode is the signing mode of the single signer\n                            type: string\n                            enum:\n                              - SIGN_MODE_UNSPECIFIED\n                              - SIGN_MODE_DIRECT\n                              - SIGN_MODE_TEXTUAL\n                              - SIGN_MODE_DIRECT_AUX\n                              - SIGN_MODE_LEGACY_AMINO_JSON\n                              - SIGN_MODE_EIP_191\n                            default: SIGN_MODE_UNSPECIFIED\n                            description: >-\n                              SignMode represents a signing mode with its own\n                              security guarantees.\n\n\n                              This enum should be considered a registry of all known sign modes\n\n                              in the Cosmos ecosystem. Apps are not expected to support all known\n\n                              sign modes. Apps that would like to support custom  sign modes are\n\n                              encouraged to open a small PR against this file to add a new case\n\n                              to this SignMode enum describing their sign mode so that different\n\n                              apps have a consistent version of this enum.\n\n                               - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                              rejected.\n                               - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                              verified with raw bytes from Tx.\n                               - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                              human-readable textual representation on top of the binary representation\n\n                              from SIGN_MODE_DIRECT. It is currently not supported.\n                               - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                              SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\n\n                              require signers signing over other signers' `signer_info`. It also allows\n\n                              for adding Tips in transactions.\n\n\n                              Since: cosmos-sdk 0.46\n                               - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                              Amino JSON and will be removed in the future.\n                               - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                              SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                              Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\n\n                              but is not implemented on the SDK by default. To enable EIP-191, you need\n\n                              to pass a custom `TxConfig` that has an implementation of\n\n                              `SignModeHandler` for EIP-191. The SDK may decide to fully support\n\n                              EIP-191 in the future.\n\n\n                              Since: cosmos-sdk 0.45.2\n                      multi:\n                        title: multi represents a nested multisig signer\n                        type: object\n                        properties:\n                          bitarray:\n                            title: bitarray specifies which keys within the multisig are signing\n                            type: object\n                            properties:\n                              extra_bits_stored:\n                                type: integer\n                                format: int64\n                              elems:\n                                type: string\n                                format: byte\n                            description: >-\n                              CompactBitArray is an implementation of a space\n                              efficient bit array.\n\n                              This is used to ensure that the encoded data takes up a minimal amount of\n\n                              space after proto encoding.\n\n                              This is not thread safe, and is not intended for concurrent usage.\n                          mode_infos:\n                            type: array\n                            items: {}\n                            title: >-\n                              mode_infos is the corresponding modes of the\n                              signers of the multisig\n\n                              which could include nested multisig public keys\n                    description: ModeInfo describes the signing mode of a single or nested multisig\n                      signer.\n                  sequence:\n                    type: string\n                    format: uint64\n                    description: >-\n                      sequence is the sequence of the account, which describes\n                      the\n\n                      number of committed transactions signed by a given address. It is used to\n\n                      prevent replay attacks.\n                description: >-\n                  SignerInfo describes the public key and signing mode of a\n                  single top-level\n\n                  signer.\n              description: >-\n                signer_infos defines the signing modes for the required signers.\n                The number\n\n                and order of elements must match the required signers from TxBody's\n\n                messages. The first element is the primary signer and the one which pays\n\n                the fee.\n            fee:\n              description: >-\n                Fee is the fee and gas limit for the transaction. The first\n                signer is the\n\n                primary signer and the one which pays the fee. The fee can be calculated\n\n                based on the cost of evaluating the body and doing signature verification\n\n                of the signers. This can be estimated via simulation.\n              type: object\n              properties:\n                amount:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the custom method\n\n                      signatures required by gogoproto.\n                  title: amount is the amount of coins to be paid as a fee\n                gas_limit:\n                  type: string\n                  format: uint64\n                  title: >-\n                    gas_limit is the maximum gas that can be used in transaction\n                    processing\n\n                    before an out of gas error occurs\n                payer:\n                  type: string\n                  description: >-\n                    if unset, the first signer is responsible for paying the\n                    fees. If set, the specified account must pay the fees.\n\n                    the payer must be a tx signer (and thus have signed this field in AuthInfo).\n\n                    setting this field does *not* change the ordering of required signers for the transaction.\n                granter:\n                  type: string\n                  title: >-\n                    if set, the fee payer (either the first signer or the value\n                    of the payer field) requests that a fee grant be used\n\n                    to pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\n\n                    not support fee grants, this will fail\n            tip:\n              description: >-\n                Tip is the optional tip used for transactions fees paid in\n                another denom.\n\n\n                This field is ignored if the chain didn't enable tips, i.e. didn't add the\n\n                `TipDecorator` in its posthandler.\n\n\n                Since: cosmos-sdk 0.46\n              type: object\n              properties:\n                amount:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the custom method\n\n                      signatures required by gogoproto.\n                  title: amount is the amount of the tip\n                tipper:\n                  type: string\n                  title: tipper is the address of the account paying for the tip\n          description: |-\n            AuthInfo describes the fee and signer modes that are used to sign a\n            transaction.\n        signatures:\n          type: array\n          items:\n            type: string\n            format: byte\n          description: >-\n            signatures is a list of signatures that matches the length and order\n            of\n\n            AuthInfo's signer_infos to allow connecting signature meta information like\n\n            public key and signing mode by position.\n      description: Tx is the standard type used for broadcasting transactions.\n    cosmos.tx.v1beta1.TxBody:\n      type: object\n      properties:\n        messages:\n          type: array\n          items:\n            type: object\n            properties:\n              type_url:\n                type: string\n              value:\n                type: string\n                format: byte\n          description: >-\n            messages is a list of messages to be executed. The required signers\n            of\n\n            those messages define the number and order of elements in AuthInfo's\n\n            signer_infos and Tx's signatures. Each required signer address is added to\n\n            the list only the first time it occurs.\n\n            By convention, the first required signer (usually from the first message)\n\n            is referred to as the primary signer and pays the fee for the whole\n\n            transaction.\n        memo:\n          type: string\n          description: >-\n            memo is any arbitrary note/comment to be added to the transaction.\n\n            WARNING: in clients, any publicly exposed text should not be called memo,\n\n            but should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122).\n        timeout_height:\n          type: string\n          format: uint64\n          title: |-\n            timeout is the block height after which this transaction will not\n            be processed by the chain\n        extension_options:\n          type: array\n          items:\n            type: object\n            properties:\n              type_url:\n                type: string\n              value:\n                type: string\n                format: byte\n          title: >-\n            extension_options are arbitrary options that can be added by chains\n\n            when the default options are not sufficient. If any of these are present\n\n            and can't be handled, the transaction will be rejected\n        non_critical_extension_options:\n          type: array\n          items:\n            type: object\n            properties:\n              type_url:\n                type: string\n              value:\n                type: string\n                format: byte\n          title: >-\n            extension_options are arbitrary options that can be added by chains\n\n            when the default options are not sufficient. If any of these are present\n\n            and can't be handled, they will be ignored\n      description: TxBody is the body of a transaction that all signers sign over.\n    cosmos.tx.v1beta1.TxDecodeAminoRequest:\n      type: object\n      properties:\n        amino_binary:\n          type: string\n          format: byte\n      description: |-\n        TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\n        RPC method.\n\n        Since: cosmos-sdk 0.47\n    cosmos.tx.v1beta1.TxDecodeAminoResponse:\n      type: object\n      properties:\n        amino_json:\n          type: string\n      description: |-\n        TxDecodeAminoResponse is the response type for the Service.TxDecodeAmino\n        RPC method.\n\n        Since: cosmos-sdk 0.47\n    cosmos.tx.v1beta1.TxDecodeRequest:\n      type: object\n      properties:\n        tx_bytes:\n          type: string\n          format: byte\n          description: tx_bytes is the raw transaction.\n      description: |-\n        TxDecodeRequest is the request type for the Service.TxDecode\n        RPC method.\n\n        Since: cosmos-sdk 0.47\n    cosmos.tx.v1beta1.TxDecodeResponse:\n      type: object\n      properties:\n        tx:\n          description: tx is the decoded transaction.\n          type: object\n          properties:\n            body:\n              title: body is the processable content of the transaction\n              type: object\n              properties:\n                messages:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                  description: >-\n                    messages is a list of messages to be executed. The required\n                    signers of\n\n                    those messages define the number and order of elements in AuthInfo's\n\n                    signer_infos and Tx's signatures. Each required signer address is added to\n\n                    the list only the first time it occurs.\n\n                    By convention, the first required signer (usually from the first message)\n\n                    is referred to as the primary signer and pays the fee for the whole\n\n                    transaction.\n                memo:\n                  type: string\n                  description: >-\n                    memo is any arbitrary note/comment to be added to the\n                    transaction.\n\n                    WARNING: in clients, any publicly exposed text should not be called memo,\n\n                    but should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122).\n                timeout_height:\n                  type: string\n                  format: uint64\n                  title: >-\n                    timeout is the block height after which this transaction\n                    will not\n\n                    be processed by the chain\n                extension_options:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                  title: >-\n                    extension_options are arbitrary options that can be added by\n                    chains\n\n                    when the default options are not sufficient. If any of these are present\n\n                    and can't be handled, the transaction will be rejected\n                non_critical_extension_options:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                  title: >-\n                    extension_options are arbitrary options that can be added by\n                    chains\n\n                    when the default options are not sufficient. If any of these are present\n\n                    and can't be handled, they will be ignored\n              description: TxBody is the body of a transaction that all signers sign over.\n            auth_info:\n              title: >-\n                auth_info is the authorization related content of the\n                transaction,\n\n                specifically signers, signer modes and fee\n              type: object\n              properties:\n                signer_infos:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      public_key:\n                        type: object\n                        properties:\n                          type_url:\n                            type: string\n                          value:\n                            type: string\n                            format: byte\n                        description: >-\n                          public_key is the public key of the signer. It is\n                          optional for accounts\n\n                          that already exist in state. If unset, the verifier can use the required \\\n\n                          signer address for this position and lookup the public key.\n                      mode_info:\n                        title: >-\n                          mode_info describes the signing mode of the signer and\n                          is a nested\n\n                          structure to support nested multisig pubkey's\n                        type: object\n                        properties:\n                          single:\n                            title: single represents a single signer\n                            type: object\n                            properties:\n                              mode:\n                                title: mode is the signing mode of the single signer\n                                type: string\n                                enum:\n                                  - SIGN_MODE_UNSPECIFIED\n                                  - SIGN_MODE_DIRECT\n                                  - SIGN_MODE_TEXTUAL\n                                  - SIGN_MODE_DIRECT_AUX\n                                  - SIGN_MODE_LEGACY_AMINO_JSON\n                                  - SIGN_MODE_EIP_191\n                                default: SIGN_MODE_UNSPECIFIED\n                                description: >-\n                                  SignMode represents a signing mode with its\n                                  own security guarantees.\n\n\n                                  This enum should be considered a registry of all known sign modes\n\n                                  in the Cosmos ecosystem. Apps are not expected to support all known\n\n                                  sign modes. Apps that would like to support custom  sign modes are\n\n                                  encouraged to open a small PR against this file to add a new case\n\n                                  to this SignMode enum describing their sign mode so that different\n\n                                  apps have a consistent version of this enum.\n\n                                   - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                  rejected.\n                                   - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                  verified with raw bytes from Tx.\n                                   - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                  human-readable textual representation on top of the binary representation\n\n                                  from SIGN_MODE_DIRECT. It is currently not supported.\n                                   - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                  SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\n\n                                  require signers signing over other signers' `signer_info`. It also allows\n\n                                  for adding Tips in transactions.\n\n\n                                  Since: cosmos-sdk 0.46\n                                   - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                  Amino JSON and will be removed in the future.\n                                   - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                  SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                                  Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\n\n                                  but is not implemented on the SDK by default. To enable EIP-191, you need\n\n                                  to pass a custom `TxConfig` that has an implementation of\n\n                                  `SignModeHandler` for EIP-191. The SDK may decide to fully support\n\n                                  EIP-191 in the future.\n\n\n                                  Since: cosmos-sdk 0.45.2\n                          multi:\n                            title: multi represents a nested multisig signer\n                            type: object\n                            properties:\n                              bitarray:\n                                title: bitarray specifies which keys within the multisig are signing\n                                type: object\n                                properties:\n                                  extra_bits_stored:\n                                    type: integer\n                                    format: int64\n                                  elems:\n                                    type: string\n                                    format: byte\n                                description: >-\n                                  CompactBitArray is an implementation of a\n                                  space efficient bit array.\n\n                                  This is used to ensure that the encoded data takes up a minimal amount of\n\n                                  space after proto encoding.\n\n                                  This is not thread safe, and is not intended for concurrent usage.\n                              mode_infos:\n                                type: array\n                                items: {}\n                                title: >-\n                                  mode_infos is the corresponding modes of the\n                                  signers of the multisig\n\n                                  which could include nested multisig public keys\n                        description: ModeInfo describes the signing mode of a single or nested multisig\n                          signer.\n                      sequence:\n                        type: string\n                        format: uint64\n                        description: >-\n                          sequence is the sequence of the account, which\n                          describes the\n\n                          number of committed transactions signed by a given address. It is used to\n\n                          prevent replay attacks.\n                    description: >-\n                      SignerInfo describes the public key and signing mode of a\n                      single top-level\n\n                      signer.\n                  description: >-\n                    signer_infos defines the signing modes for the required\n                    signers. The number\n\n                    and order of elements must match the required signers from TxBody's\n\n                    messages. The first element is the primary signer and the one which pays\n\n                    the fee.\n                fee:\n                  description: >-\n                    Fee is the fee and gas limit for the transaction. The first\n                    signer is the\n\n                    primary signer and the one which pays the fee. The fee can be calculated\n\n                    based on the cost of evaluating the body and doing signature verification\n\n                    of the signers. This can be estimated via simulation.\n                  type: object\n                  properties:\n                    amount:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the custom method\n\n                          signatures required by gogoproto.\n                      title: amount is the amount of coins to be paid as a fee\n                    gas_limit:\n                      type: string\n                      format: uint64\n                      title: >-\n                        gas_limit is the maximum gas that can be used in\n                        transaction processing\n\n                        before an out of gas error occurs\n                    payer:\n                      type: string\n                      description: >-\n                        if unset, the first signer is responsible for paying the\n                        fees. If set, the specified account must pay the fees.\n\n                        the payer must be a tx signer (and thus have signed this field in AuthInfo).\n\n                        setting this field does *not* change the ordering of required signers for the transaction.\n                    granter:\n                      type: string\n                      title: >-\n                        if set, the fee payer (either the first signer or the\n                        value of the payer field) requests that a fee grant be\n                        used\n\n                        to pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\n\n                        not support fee grants, this will fail\n                tip:\n                  description: >-\n                    Tip is the optional tip used for transactions fees paid in\n                    another denom.\n\n\n                    This field is ignored if the chain didn't enable tips, i.e. didn't add the\n\n                    `TipDecorator` in its posthandler.\n\n\n                    Since: cosmos-sdk 0.46\n                  type: object\n                  properties:\n                    amount:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the custom method\n\n                          signatures required by gogoproto.\n                      title: amount is the amount of the tip\n                    tipper:\n                      type: string\n                      title: tipper is the address of the account paying for the tip\n              description: >-\n                AuthInfo describes the fee and signer modes that are used to\n                sign a\n\n                transaction.\n            signatures:\n              type: array\n              items:\n                type: string\n                format: byte\n              description: >-\n                signatures is a list of signatures that matches the length and\n                order of\n\n                AuthInfo's signer_infos to allow connecting signature meta information like\n\n                public key and signing mode by position.\n      description: |-\n        TxDecodeResponse is the response type for the\n        Service.TxDecode method.\n\n        Since: cosmos-sdk 0.47\n    cosmos.tx.v1beta1.TxEncodeAminoRequest:\n      type: object\n      properties:\n        amino_json:\n          type: string\n      description: |-\n        TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino\n        RPC method.\n\n        Since: cosmos-sdk 0.47\n    cosmos.tx.v1beta1.TxEncodeAminoResponse:\n      type: object\n      properties:\n        amino_binary:\n          type: string\n          format: byte\n      description: |-\n        TxEncodeAminoResponse is the response type for the Service.TxEncodeAmino\n        RPC method.\n\n        Since: cosmos-sdk 0.47\n    cosmos.tx.v1beta1.TxEncodeRequest:\n      type: object\n      properties:\n        tx:\n          description: tx is the transaction to encode.\n          type: object\n          properties:\n            body:\n              title: body is the processable content of the transaction\n              type: object\n              properties:\n                messages:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                  description: >-\n                    messages is a list of messages to be executed. The required\n                    signers of\n\n                    those messages define the number and order of elements in AuthInfo's\n\n                    signer_infos and Tx's signatures. Each required signer address is added to\n\n                    the list only the first time it occurs.\n\n                    By convention, the first required signer (usually from the first message)\n\n                    is referred to as the primary signer and pays the fee for the whole\n\n                    transaction.\n                memo:\n                  type: string\n                  description: >-\n                    memo is any arbitrary note/comment to be added to the\n                    transaction.\n\n                    WARNING: in clients, any publicly exposed text should not be called memo,\n\n                    but should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122).\n                timeout_height:\n                  type: string\n                  format: uint64\n                  title: >-\n                    timeout is the block height after which this transaction\n                    will not\n\n                    be processed by the chain\n                extension_options:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                  title: >-\n                    extension_options are arbitrary options that can be added by\n                    chains\n\n                    when the default options are not sufficient. If any of these are present\n\n                    and can't be handled, the transaction will be rejected\n                non_critical_extension_options:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                  title: >-\n                    extension_options are arbitrary options that can be added by\n                    chains\n\n                    when the default options are not sufficient. If any of these are present\n\n                    and can't be handled, they will be ignored\n              description: TxBody is the body of a transaction that all signers sign over.\n            auth_info:\n              title: >-\n                auth_info is the authorization related content of the\n                transaction,\n\n                specifically signers, signer modes and fee\n              type: object\n              properties:\n                signer_infos:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      public_key:\n                        type: object\n                        properties:\n                          type_url:\n                            type: string\n                          value:\n                            type: string\n                            format: byte\n                        description: >-\n                          public_key is the public key of the signer. It is\n                          optional for accounts\n\n                          that already exist in state. If unset, the verifier can use the required \\\n\n                          signer address for this position and lookup the public key.\n                      mode_info:\n                        title: >-\n                          mode_info describes the signing mode of the signer and\n                          is a nested\n\n                          structure to support nested multisig pubkey's\n                        type: object\n                        properties:\n                          single:\n                            title: single represents a single signer\n                            type: object\n                            properties:\n                              mode:\n                                title: mode is the signing mode of the single signer\n                                type: string\n                                enum:\n                                  - SIGN_MODE_UNSPECIFIED\n                                  - SIGN_MODE_DIRECT\n                                  - SIGN_MODE_TEXTUAL\n                                  - SIGN_MODE_DIRECT_AUX\n                                  - SIGN_MODE_LEGACY_AMINO_JSON\n                                  - SIGN_MODE_EIP_191\n                                default: SIGN_MODE_UNSPECIFIED\n                                description: >-\n                                  SignMode represents a signing mode with its\n                                  own security guarantees.\n\n\n                                  This enum should be considered a registry of all known sign modes\n\n                                  in the Cosmos ecosystem. Apps are not expected to support all known\n\n                                  sign modes. Apps that would like to support custom  sign modes are\n\n                                  encouraged to open a small PR against this file to add a new case\n\n                                  to this SignMode enum describing their sign mode so that different\n\n                                  apps have a consistent version of this enum.\n\n                                   - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                  rejected.\n                                   - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                  verified with raw bytes from Tx.\n                                   - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                  human-readable textual representation on top of the binary representation\n\n                                  from SIGN_MODE_DIRECT. It is currently not supported.\n                                   - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                  SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\n\n                                  require signers signing over other signers' `signer_info`. It also allows\n\n                                  for adding Tips in transactions.\n\n\n                                  Since: cosmos-sdk 0.46\n                                   - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                  Amino JSON and will be removed in the future.\n                                   - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                  SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                                  Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\n\n                                  but is not implemented on the SDK by default. To enable EIP-191, you need\n\n                                  to pass a custom `TxConfig` that has an implementation of\n\n                                  `SignModeHandler` for EIP-191. The SDK may decide to fully support\n\n                                  EIP-191 in the future.\n\n\n                                  Since: cosmos-sdk 0.45.2\n                          multi:\n                            title: multi represents a nested multisig signer\n                            type: object\n                            properties:\n                              bitarray:\n                                title: bitarray specifies which keys within the multisig are signing\n                                type: object\n                                properties:\n                                  extra_bits_stored:\n                                    type: integer\n                                    format: int64\n                                  elems:\n                                    type: string\n                                    format: byte\n                                description: >-\n                                  CompactBitArray is an implementation of a\n                                  space efficient bit array.\n\n                                  This is used to ensure that the encoded data takes up a minimal amount of\n\n                                  space after proto encoding.\n\n                                  This is not thread safe, and is not intended for concurrent usage.\n                              mode_infos:\n                                type: array\n                                items: {}\n                                title: >-\n                                  mode_infos is the corresponding modes of the\n                                  signers of the multisig\n\n                                  which could include nested multisig public keys\n                        description: ModeInfo describes the signing mode of a single or nested multisig\n                          signer.\n                      sequence:\n                        type: string\n                        format: uint64\n                        description: >-\n                          sequence is the sequence of the account, which\n                          describes the\n\n                          number of committed transactions signed by a given address. It is used to\n\n                          prevent replay attacks.\n                    description: >-\n                      SignerInfo describes the public key and signing mode of a\n                      single top-level\n\n                      signer.\n                  description: >-\n                    signer_infos defines the signing modes for the required\n                    signers. The number\n\n                    and order of elements must match the required signers from TxBody's\n\n                    messages. The first element is the primary signer and the one which pays\n\n                    the fee.\n                fee:\n                  description: >-\n                    Fee is the fee and gas limit for the transaction. The first\n                    signer is the\n\n                    primary signer and the one which pays the fee. The fee can be calculated\n\n                    based on the cost of evaluating the body and doing signature verification\n\n                    of the signers. This can be estimated via simulation.\n                  type: object\n                  properties:\n                    amount:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the custom method\n\n                          signatures required by gogoproto.\n                      title: amount is the amount of coins to be paid as a fee\n                    gas_limit:\n                      type: string\n                      format: uint64\n                      title: >-\n                        gas_limit is the maximum gas that can be used in\n                        transaction processing\n\n                        before an out of gas error occurs\n                    payer:\n                      type: string\n                      description: >-\n                        if unset, the first signer is responsible for paying the\n                        fees. If set, the specified account must pay the fees.\n\n                        the payer must be a tx signer (and thus have signed this field in AuthInfo).\n\n                        setting this field does *not* change the ordering of required signers for the transaction.\n                    granter:\n                      type: string\n                      title: >-\n                        if set, the fee payer (either the first signer or the\n                        value of the payer field) requests that a fee grant be\n                        used\n\n                        to pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does\n\n                        not support fee grants, this will fail\n                tip:\n                  description: >-\n                    Tip is the optional tip used for transactions fees paid in\n                    another denom.\n\n\n                    This field is ignored if the chain didn't enable tips, i.e. didn't add the\n\n                    `TipDecorator` in its posthandler.\n\n\n                    Since: cosmos-sdk 0.46\n                  type: object\n                  properties:\n                    amount:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the custom method\n\n                          signatures required by gogoproto.\n                      title: amount is the amount of the tip\n                    tipper:\n                      type: string\n                      title: tipper is the address of the account paying for the tip\n              description: >-\n                AuthInfo describes the fee and signer modes that are used to\n                sign a\n\n                transaction.\n            signatures:\n              type: array\n              items:\n                type: string\n                format: byte\n              description: >-\n                signatures is a list of signatures that matches the length and\n                order of\n\n                AuthInfo's signer_infos to allow connecting signature meta information like\n\n                public key and signing mode by position.\n      description: |-\n        TxEncodeRequest is the request type for the Service.TxEncode\n        RPC method.\n\n        Since: cosmos-sdk 0.47\n    cosmos.tx.v1beta1.TxEncodeResponse:\n      type: object\n      properties:\n        tx_bytes:\n          type: string\n          format: byte\n          description: tx_bytes is the encoded transaction bytes.\n      description: |-\n        TxEncodeResponse is the response type for the\n        Service.TxEncode method.\n\n        Since: cosmos-sdk 0.47\n    tendermint.abci.Event:\n      type: object\n      properties:\n        type:\n          type: string\n        attributes:\n          type: array\n          items:\n            type: object\n            properties:\n              key:\n                type: string\n              value:\n                type: string\n              index:\n                type: boolean\n            description: EventAttribute is a single key-value pair, associated with an\n              event.\n      description: >-\n        Event allows application developers to attach additional information to\n\n        ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and ResponseDeliverTx.\n\n        Later, transactions may be queried using these events.\n    tendermint.abci.EventAttribute:\n      type: object\n      properties:\n        key:\n          type: string\n        value:\n          type: string\n        index:\n          type: boolean\n      description: EventAttribute is a single key-value pair, associated with an event.\n    tendermint.crypto.PublicKey:\n      type: object\n      properties:\n        ed25519:\n          type: string\n          format: byte\n        secp256k1:\n          type: string\n          format: byte\n      title: PublicKey defines the keys available for use with Validators\n    tendermint.types.Block:\n      type: object\n      properties:\n        header:\n          type: object\n          properties:\n            version:\n              title: basic block info\n              type: object\n              properties:\n                block:\n                  type: string\n                  format: uint64\n                app:\n                  type: string\n                  format: uint64\n              description: >-\n                Consensus captures the consensus rules for processing a block in\n                the blockchain,\n\n                including all blockchain data structures and the rules of the application's\n\n                state transition machine.\n            chain_id:\n              type: string\n            height:\n              type: string\n              format: int64\n            time:\n              type: string\n              format: date-time\n            last_block_id:\n              title: prev block info\n              type: object\n              properties:\n                hash:\n                  type: string\n                  format: byte\n                part_set_header:\n                  type: object\n                  properties:\n                    total:\n                      type: integer\n                      format: int64\n                    hash:\n                      type: string\n                      format: byte\n                  title: PartsetHeader\n            last_commit_hash:\n              type: string\n              format: byte\n              title: hashes of block data\n            data_hash:\n              type: string\n              format: byte\n            validators_hash:\n              type: string\n              format: byte\n              title: hashes from the app output from the prev block\n            next_validators_hash:\n              type: string\n              format: byte\n            consensus_hash:\n              type: string\n              format: byte\n            app_hash:\n              type: string\n              format: byte\n            last_results_hash:\n              type: string\n              format: byte\n            evidence_hash:\n              type: string\n              format: byte\n              title: consensus info\n            proposer_address:\n              type: string\n              format: byte\n          description: Header defines the structure of a block header.\n        data:\n          type: object\n          properties:\n            txs:\n              type: array\n              items:\n                type: string\n                format: byte\n              description: >-\n                Txs that will be applied by state @ block.Height+1.\n\n                NOTE: not all txs here are valid.  We're just agreeing on the order first.\n\n                This means that block.AppHash does not include these txs.\n          title: Data contains the set of transactions included in the block\n        evidence:\n          type: object\n          properties:\n            evidence:\n              type: array\n              items:\n                type: object\n                properties:\n                  duplicate_vote_evidence:\n                    type: object\n                    properties:\n                      vote_a:\n                        type: object\n                        properties:\n                          type:\n                            type: string\n                            enum:\n                              - SIGNED_MSG_TYPE_UNKNOWN\n                              - SIGNED_MSG_TYPE_PREVOTE\n                              - SIGNED_MSG_TYPE_PRECOMMIT\n                              - SIGNED_MSG_TYPE_PROPOSAL\n                            default: SIGNED_MSG_TYPE_UNKNOWN\n                            description: >-\n                              SignedMsgType is a type of signed message in the\n                              consensus.\n\n                               - SIGNED_MSG_TYPE_PREVOTE: Votes\n                               - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                          height:\n                            type: string\n                            format: int64\n                          round:\n                            type: integer\n                            format: int32\n                          block_id:\n                            type: object\n                            properties:\n                              hash:\n                                type: string\n                                format: byte\n                              part_set_header:\n                                type: object\n                                properties:\n                                  total:\n                                    type: integer\n                                    format: int64\n                                  hash:\n                                    type: string\n                                    format: byte\n                                title: PartsetHeader\n                            title: BlockID\n                          timestamp:\n                            type: string\n                            format: date-time\n                          validator_address:\n                            type: string\n                            format: byte\n                          validator_index:\n                            type: integer\n                            format: int32\n                          signature:\n                            type: string\n                            format: byte\n                        description: >-\n                          Vote represents a prevote, precommit, or commit vote\n                          from validators for\n\n                          consensus.\n                      vote_b:\n                        type: object\n                        properties:\n                          type:\n                            type: string\n                            enum:\n                              - SIGNED_MSG_TYPE_UNKNOWN\n                              - SIGNED_MSG_TYPE_PREVOTE\n                              - SIGNED_MSG_TYPE_PRECOMMIT\n                              - SIGNED_MSG_TYPE_PROPOSAL\n                            default: SIGNED_MSG_TYPE_UNKNOWN\n                            description: >-\n                              SignedMsgType is a type of signed message in the\n                              consensus.\n\n                               - SIGNED_MSG_TYPE_PREVOTE: Votes\n                               - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                          height:\n                            type: string\n                            format: int64\n                          round:\n                            type: integer\n                            format: int32\n                          block_id:\n                            type: object\n                            properties:\n                              hash:\n                                type: string\n                                format: byte\n                              part_set_header:\n                                type: object\n                                properties:\n                                  total:\n                                    type: integer\n                                    format: int64\n                                  hash:\n                                    type: string\n                                    format: byte\n                                title: PartsetHeader\n                            title: BlockID\n                          timestamp:\n                            type: string\n                            format: date-time\n                          validator_address:\n                            type: string\n                            format: byte\n                          validator_index:\n                            type: integer\n                            format: int32\n                          signature:\n                            type: string\n                            format: byte\n                        description: >-\n                          Vote represents a prevote, precommit, or commit vote\n                          from validators for\n\n                          consensus.\n                      total_voting_power:\n                        type: string\n                        format: int64\n                      validator_power:\n                        type: string\n                        format: int64\n                      timestamp:\n                        type: string\n                        format: date-time\n                    description: DuplicateVoteEvidence contains evidence of a validator signed two\n                      conflicting votes.\n                  light_client_attack_evidence:\n                    type: object\n                    properties:\n                      conflicting_block:\n                        type: object\n                        properties:\n                          signed_header:\n                            type: object\n                            properties:\n                              header:\n                                type: object\n                                properties:\n                                  version:\n                                    title: basic block info\n                                    type: object\n                                    properties:\n                                      block:\n                                        type: string\n                                        format: uint64\n                                      app:\n                                        type: string\n                                        format: uint64\n                                    description: >-\n                                      Consensus captures the consensus rules for\n                                      processing a block in the blockchain,\n\n                                      including all blockchain data structures and the rules of the application's\n\n                                      state transition machine.\n                                  chain_id:\n                                    type: string\n                                  height:\n                                    type: string\n                                    format: int64\n                                  time:\n                                    type: string\n                                    format: date-time\n                                  last_block_id:\n                                    title: prev block info\n                                    type: object\n                                    properties:\n                                      hash:\n                                        type: string\n                                        format: byte\n                                      part_set_header:\n                                        type: object\n                                        properties:\n                                          total:\n                                            type: integer\n                                            format: int64\n                                          hash:\n                                            type: string\n                                            format: byte\n                                        title: PartsetHeader\n                                  last_commit_hash:\n                                    type: string\n                                    format: byte\n                                    title: hashes of block data\n                                  data_hash:\n                                    type: string\n                                    format: byte\n                                  validators_hash:\n                                    type: string\n                                    format: byte\n                                    title: hashes from the app output from the prev block\n                                  next_validators_hash:\n                                    type: string\n                                    format: byte\n                                  consensus_hash:\n                                    type: string\n                                    format: byte\n                                  app_hash:\n                                    type: string\n                                    format: byte\n                                  last_results_hash:\n                                    type: string\n                                    format: byte\n                                  evidence_hash:\n                                    type: string\n                                    format: byte\n                                    title: consensus info\n                                  proposer_address:\n                                    type: string\n                                    format: byte\n                                description: Header defines the structure of a block header.\n                              commit:\n                                type: object\n                                properties:\n                                  height:\n                                    type: string\n                                    format: int64\n                                  round:\n                                    type: integer\n                                    format: int32\n                                  block_id:\n                                    type: object\n                                    properties:\n                                      hash:\n                                        type: string\n                                        format: byte\n                                      part_set_header:\n                                        type: object\n                                        properties:\n                                          total:\n                                            type: integer\n                                            format: int64\n                                          hash:\n                                            type: string\n                                            format: byte\n                                        title: PartsetHeader\n                                    title: BlockID\n                                  signatures:\n                                    type: array\n                                    items:\n                                      type: object\n                                      properties:\n                                        block_id_flag:\n                                          type: string\n                                          enum:\n                                            - BLOCK_ID_FLAG_UNKNOWN\n                                            - BLOCK_ID_FLAG_ABSENT\n                                            - BLOCK_ID_FLAG_COMMIT\n                                            - BLOCK_ID_FLAG_NIL\n                                          default: BLOCK_ID_FLAG_UNKNOWN\n                                          title: BlockIdFlag indicates which BlcokID the signature is for\n                                        validator_address:\n                                          type: string\n                                          format: byte\n                                        timestamp:\n                                          type: string\n                                          format: date-time\n                                        signature:\n                                          type: string\n                                          format: byte\n                                      description: CommitSig is a part of the Vote included in a Commit.\n                                description: Commit contains the evidence that a block was committed by a set of\n                                  validators.\n                          validator_set:\n                            type: object\n                            properties:\n                              validators:\n                                type: array\n                                items:\n                                  type: object\n                                  properties:\n                                    address:\n                                      type: string\n                                      format: byte\n                                    pub_key:\n                                      type: object\n                                      properties:\n                                        ed25519:\n                                          type: string\n                                          format: byte\n                                        secp256k1:\n                                          type: string\n                                          format: byte\n                                      title: PublicKey defines the keys available for use with Validators\n                                    voting_power:\n                                      type: string\n                                      format: int64\n                                    proposer_priority:\n                                      type: string\n                                      format: int64\n                              proposer:\n                                type: object\n                                properties:\n                                  address:\n                                    type: string\n                                    format: byte\n                                  pub_key:\n                                    type: object\n                                    properties:\n                                      ed25519:\n                                        type: string\n                                        format: byte\n                                      secp256k1:\n                                        type: string\n                                        format: byte\n                                    title: PublicKey defines the keys available for use with Validators\n                                  voting_power:\n                                    type: string\n                                    format: int64\n                                  proposer_priority:\n                                    type: string\n                                    format: int64\n                              total_voting_power:\n                                type: string\n                                format: int64\n                      common_height:\n                        type: string\n                        format: int64\n                      byzantine_validators:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            address:\n                              type: string\n                              format: byte\n                            pub_key:\n                              type: object\n                              properties:\n                                ed25519:\n                                  type: string\n                                  format: byte\n                                secp256k1:\n                                  type: string\n                                  format: byte\n                              title: PublicKey defines the keys available for use with Validators\n                            voting_power:\n                              type: string\n                              format: int64\n                            proposer_priority:\n                              type: string\n                              format: int64\n                      total_voting_power:\n                        type: string\n                        format: int64\n                      timestamp:\n                        type: string\n                        format: date-time\n                    description: LightClientAttackEvidence contains evidence of a set of validators\n                      attempting to mislead a light client.\n        last_commit:\n          type: object\n          properties:\n            height:\n              type: string\n              format: int64\n            round:\n              type: integer\n              format: int32\n            block_id:\n              type: object\n              properties:\n                hash:\n                  type: string\n                  format: byte\n                part_set_header:\n                  type: object\n                  properties:\n                    total:\n                      type: integer\n                      format: int64\n                    hash:\n                      type: string\n                      format: byte\n                  title: PartsetHeader\n              title: BlockID\n            signatures:\n              type: array\n              items:\n                type: object\n                properties:\n                  block_id_flag:\n                    type: string\n                    enum:\n                      - BLOCK_ID_FLAG_UNKNOWN\n                      - BLOCK_ID_FLAG_ABSENT\n                      - BLOCK_ID_FLAG_COMMIT\n                      - BLOCK_ID_FLAG_NIL\n                    default: BLOCK_ID_FLAG_UNKNOWN\n                    title: BlockIdFlag indicates which BlcokID the signature is for\n                  validator_address:\n                    type: string\n                    format: byte\n                  timestamp:\n                    type: string\n                    format: date-time\n                  signature:\n                    type: string\n                    format: byte\n                description: CommitSig is a part of the Vote included in a Commit.\n          description: Commit contains the evidence that a block was committed by a set of\n            validators.\n    tendermint.types.BlockIDFlag:\n      type: string\n      enum:\n        - BLOCK_ID_FLAG_UNKNOWN\n        - BLOCK_ID_FLAG_ABSENT\n        - BLOCK_ID_FLAG_COMMIT\n        - BLOCK_ID_FLAG_NIL\n      default: BLOCK_ID_FLAG_UNKNOWN\n      title: BlockIdFlag indicates which BlcokID the signature is for\n    tendermint.types.Commit:\n      type: object\n      properties:\n        height:\n          type: string\n          format: int64\n        round:\n          type: integer\n          format: int32\n        block_id:\n          type: object\n          properties:\n            hash:\n              type: string\n              format: byte\n            part_set_header:\n              type: object\n              properties:\n                total:\n                  type: integer\n                  format: int64\n                hash:\n                  type: string\n                  format: byte\n              title: PartsetHeader\n          title: BlockID\n        signatures:\n          type: array\n          items:\n            type: object\n            properties:\n              block_id_flag:\n                type: string\n                enum:\n                  - BLOCK_ID_FLAG_UNKNOWN\n                  - BLOCK_ID_FLAG_ABSENT\n                  - BLOCK_ID_FLAG_COMMIT\n                  - BLOCK_ID_FLAG_NIL\n                default: BLOCK_ID_FLAG_UNKNOWN\n                title: BlockIdFlag indicates which BlcokID the signature is for\n              validator_address:\n                type: string\n                format: byte\n              timestamp:\n                type: string\n                format: date-time\n              signature:\n                type: string\n                format: byte\n            description: CommitSig is a part of the Vote included in a Commit.\n      description: Commit contains the evidence that a block was committed by a set of\n        validators.\n    tendermint.types.CommitSig:\n      type: object\n      properties:\n        block_id_flag:\n          type: string\n          enum:\n            - BLOCK_ID_FLAG_UNKNOWN\n            - BLOCK_ID_FLAG_ABSENT\n            - BLOCK_ID_FLAG_COMMIT\n            - BLOCK_ID_FLAG_NIL\n          default: BLOCK_ID_FLAG_UNKNOWN\n          title: BlockIdFlag indicates which BlcokID the signature is for\n        validator_address:\n          type: string\n          format: byte\n        timestamp:\n          type: string\n          format: date-time\n        signature:\n          type: string\n          format: byte\n      description: CommitSig is a part of the Vote included in a Commit.\n    tendermint.types.Data:\n      type: object\n      properties:\n        txs:\n          type: array\n          items:\n            type: string\n            format: byte\n          description: >-\n            Txs that will be applied by state @ block.Height+1.\n\n            NOTE: not all txs here are valid.  We're just agreeing on the order first.\n\n            This means that block.AppHash does not include these txs.\n      title: Data contains the set of transactions included in the block\n    tendermint.types.DuplicateVoteEvidence:\n      type: object\n      properties:\n        vote_a:\n          type: object\n          properties:\n            type:\n              type: string\n              enum:\n                - SIGNED_MSG_TYPE_UNKNOWN\n                - SIGNED_MSG_TYPE_PREVOTE\n                - SIGNED_MSG_TYPE_PRECOMMIT\n                - SIGNED_MSG_TYPE_PROPOSAL\n              default: SIGNED_MSG_TYPE_UNKNOWN\n              description: |-\n                SignedMsgType is a type of signed message in the consensus.\n\n                 - SIGNED_MSG_TYPE_PREVOTE: Votes\n                 - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n            height:\n              type: string\n              format: int64\n            round:\n              type: integer\n              format: int32\n            block_id:\n              type: object\n              properties:\n                hash:\n                  type: string\n                  format: byte\n                part_set_header:\n                  type: object\n                  properties:\n                    total:\n                      type: integer\n                      format: int64\n                    hash:\n                      type: string\n                      format: byte\n                  title: PartsetHeader\n              title: BlockID\n            timestamp:\n              type: string\n              format: date-time\n            validator_address:\n              type: string\n              format: byte\n            validator_index:\n              type: integer\n              format: int32\n            signature:\n              type: string\n              format: byte\n          description: >-\n            Vote represents a prevote, precommit, or commit vote from validators\n            for\n\n            consensus.\n        vote_b:\n          type: object\n          properties:\n            type:\n              type: string\n              enum:\n                - SIGNED_MSG_TYPE_UNKNOWN\n                - SIGNED_MSG_TYPE_PREVOTE\n                - SIGNED_MSG_TYPE_PRECOMMIT\n                - SIGNED_MSG_TYPE_PROPOSAL\n              default: SIGNED_MSG_TYPE_UNKNOWN\n              description: |-\n                SignedMsgType is a type of signed message in the consensus.\n\n                 - SIGNED_MSG_TYPE_PREVOTE: Votes\n                 - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n            height:\n              type: string\n              format: int64\n            round:\n              type: integer\n              format: int32\n            block_id:\n              type: object\n              properties:\n                hash:\n                  type: string\n                  format: byte\n                part_set_header:\n                  type: object\n                  properties:\n                    total:\n                      type: integer\n                      format: int64\n                    hash:\n                      type: string\n                      format: byte\n                  title: PartsetHeader\n              title: BlockID\n            timestamp:\n              type: string\n              format: date-time\n            validator_address:\n              type: string\n              format: byte\n            validator_index:\n              type: integer\n              format: int32\n            signature:\n              type: string\n              format: byte\n          description: >-\n            Vote represents a prevote, precommit, or commit vote from validators\n            for\n\n            consensus.\n        total_voting_power:\n          type: string\n          format: int64\n        validator_power:\n          type: string\n          format: int64\n        timestamp:\n          type: string\n          format: date-time\n      description: DuplicateVoteEvidence contains evidence of a validator signed two\n        conflicting votes.\n    tendermint.types.Evidence:\n      type: object\n      properties:\n        duplicate_vote_evidence:\n          type: object\n          properties:\n            vote_a:\n              type: object\n              properties:\n                type:\n                  type: string\n                  enum:\n                    - SIGNED_MSG_TYPE_UNKNOWN\n                    - SIGNED_MSG_TYPE_PREVOTE\n                    - SIGNED_MSG_TYPE_PRECOMMIT\n                    - SIGNED_MSG_TYPE_PROPOSAL\n                  default: SIGNED_MSG_TYPE_UNKNOWN\n                  description: |-\n                    SignedMsgType is a type of signed message in the consensus.\n\n                     - SIGNED_MSG_TYPE_PREVOTE: Votes\n                     - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                height:\n                  type: string\n                  format: int64\n                round:\n                  type: integer\n                  format: int32\n                block_id:\n                  type: object\n                  properties:\n                    hash:\n                      type: string\n                      format: byte\n                    part_set_header:\n                      type: object\n                      properties:\n                        total:\n                          type: integer\n                          format: int64\n                        hash:\n                          type: string\n                          format: byte\n                      title: PartsetHeader\n                  title: BlockID\n                timestamp:\n                  type: string\n                  format: date-time\n                validator_address:\n                  type: string\n                  format: byte\n                validator_index:\n                  type: integer\n                  format: int32\n                signature:\n                  type: string\n                  format: byte\n              description: >-\n                Vote represents a prevote, precommit, or commit vote from\n                validators for\n\n                consensus.\n            vote_b:\n              type: object\n              properties:\n                type:\n                  type: string\n                  enum:\n                    - SIGNED_MSG_TYPE_UNKNOWN\n                    - SIGNED_MSG_TYPE_PREVOTE\n                    - SIGNED_MSG_TYPE_PRECOMMIT\n                    - SIGNED_MSG_TYPE_PROPOSAL\n                  default: SIGNED_MSG_TYPE_UNKNOWN\n                  description: |-\n                    SignedMsgType is a type of signed message in the consensus.\n\n                     - SIGNED_MSG_TYPE_PREVOTE: Votes\n                     - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                height:\n                  type: string\n                  format: int64\n                round:\n                  type: integer\n                  format: int32\n                block_id:\n                  type: object\n                  properties:\n                    hash:\n                      type: string\n                      format: byte\n                    part_set_header:\n                      type: object\n                      properties:\n                        total:\n                          type: integer\n                          format: int64\n                        hash:\n                          type: string\n                          format: byte\n                      title: PartsetHeader\n                  title: BlockID\n                timestamp:\n                  type: string\n                  format: date-time\n                validator_address:\n                  type: string\n                  format: byte\n                validator_index:\n                  type: integer\n                  format: int32\n                signature:\n                  type: string\n                  format: byte\n              description: >-\n                Vote represents a prevote, precommit, or commit vote from\n                validators for\n\n                consensus.\n            total_voting_power:\n              type: string\n              format: int64\n            validator_power:\n              type: string\n              format: int64\n            timestamp:\n              type: string\n              format: date-time\n          description: DuplicateVoteEvidence contains evidence of a validator signed two\n            conflicting votes.\n        light_client_attack_evidence:\n          type: object\n          properties:\n            conflicting_block:\n              type: object\n              properties:\n                signed_header:\n                  type: object\n                  properties:\n                    header:\n                      type: object\n                      properties:\n                        version:\n                          title: basic block info\n                          type: object\n                          properties:\n                            block:\n                              type: string\n                              format: uint64\n                            app:\n                              type: string\n                              format: uint64\n                          description: >-\n                            Consensus captures the consensus rules for\n                            processing a block in the blockchain,\n\n                            including all blockchain data structures and the rules of the application's\n\n                            state transition machine.\n                        chain_id:\n                          type: string\n                        height:\n                          type: string\n                          format: int64\n                        time:\n                          type: string\n                          format: date-time\n                        last_block_id:\n                          title: prev block info\n                          type: object\n                          properties:\n                            hash:\n                              type: string\n                              format: byte\n                            part_set_header:\n                              type: object\n                              properties:\n                                total:\n                                  type: integer\n                                  format: int64\n                                hash:\n                                  type: string\n                                  format: byte\n                              title: PartsetHeader\n                        last_commit_hash:\n                          type: string\n                          format: byte\n                          title: hashes of block data\n                        data_hash:\n                          type: string\n                          format: byte\n                        validators_hash:\n                          type: string\n                          format: byte\n                          title: hashes from the app output from the prev block\n                        next_validators_hash:\n                          type: string\n                          format: byte\n                        consensus_hash:\n                          type: string\n                          format: byte\n                        app_hash:\n                          type: string\n                          format: byte\n                        last_results_hash:\n                          type: string\n                          format: byte\n                        evidence_hash:\n                          type: string\n                          format: byte\n                          title: consensus info\n                        proposer_address:\n                          type: string\n                          format: byte\n                      description: Header defines the structure of a block header.\n                    commit:\n                      type: object\n                      properties:\n                        height:\n                          type: string\n                          format: int64\n                        round:\n                          type: integer\n                          format: int32\n                        block_id:\n                          type: object\n                          properties:\n                            hash:\n                              type: string\n                              format: byte\n                            part_set_header:\n                              type: object\n                              properties:\n                                total:\n                                  type: integer\n                                  format: int64\n                                hash:\n                                  type: string\n                                  format: byte\n                              title: PartsetHeader\n                          title: BlockID\n                        signatures:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              block_id_flag:\n                                type: string\n                                enum:\n                                  - BLOCK_ID_FLAG_UNKNOWN\n                                  - BLOCK_ID_FLAG_ABSENT\n                                  - BLOCK_ID_FLAG_COMMIT\n                                  - BLOCK_ID_FLAG_NIL\n                                default: BLOCK_ID_FLAG_UNKNOWN\n                                title: BlockIdFlag indicates which BlcokID the signature is for\n                              validator_address:\n                                type: string\n                                format: byte\n                              timestamp:\n                                type: string\n                                format: date-time\n                              signature:\n                                type: string\n                                format: byte\n                            description: CommitSig is a part of the Vote included in a Commit.\n                      description: Commit contains the evidence that a block was committed by a set of\n                        validators.\n                validator_set:\n                  type: object\n                  properties:\n                    validators:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          address:\n                            type: string\n                            format: byte\n                          pub_key:\n                            type: object\n                            properties:\n                              ed25519:\n                                type: string\n                                format: byte\n                              secp256k1:\n                                type: string\n                                format: byte\n                            title: PublicKey defines the keys available for use with Validators\n                          voting_power:\n                            type: string\n                            format: int64\n                          proposer_priority:\n                            type: string\n                            format: int64\n                    proposer:\n                      type: object\n                      properties:\n                        address:\n                          type: string\n                          format: byte\n                        pub_key:\n                          type: object\n                          properties:\n                            ed25519:\n                              type: string\n                              format: byte\n                            secp256k1:\n                              type: string\n                              format: byte\n                          title: PublicKey defines the keys available for use with Validators\n                        voting_power:\n                          type: string\n                          format: int64\n                        proposer_priority:\n                          type: string\n                          format: int64\n                    total_voting_power:\n                      type: string\n                      format: int64\n            common_height:\n              type: string\n              format: int64\n            byzantine_validators:\n              type: array\n              items:\n                type: object\n                properties:\n                  address:\n                    type: string\n                    format: byte\n                  pub_key:\n                    type: object\n                    properties:\n                      ed25519:\n                        type: string\n                        format: byte\n                      secp256k1:\n                        type: string\n                        format: byte\n                    title: PublicKey defines the keys available for use with Validators\n                  voting_power:\n                    type: string\n                    format: int64\n                  proposer_priority:\n                    type: string\n                    format: int64\n            total_voting_power:\n              type: string\n              format: int64\n            timestamp:\n              type: string\n              format: date-time\n          description: LightClientAttackEvidence contains evidence of a set of validators\n            attempting to mislead a light client.\n    tendermint.types.EvidenceList:\n      type: object\n      properties:\n        evidence:\n          type: array\n          items:\n            type: object\n            properties:\n              duplicate_vote_evidence:\n                type: object\n                properties:\n                  vote_a:\n                    type: object\n                    properties:\n                      type:\n                        type: string\n                        enum:\n                          - SIGNED_MSG_TYPE_UNKNOWN\n                          - SIGNED_MSG_TYPE_PREVOTE\n                          - SIGNED_MSG_TYPE_PRECOMMIT\n                          - SIGNED_MSG_TYPE_PROPOSAL\n                        default: SIGNED_MSG_TYPE_UNKNOWN\n                        description: >-\n                          SignedMsgType is a type of signed message in the\n                          consensus.\n\n                           - SIGNED_MSG_TYPE_PREVOTE: Votes\n                           - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                      height:\n                        type: string\n                        format: int64\n                      round:\n                        type: integer\n                        format: int32\n                      block_id:\n                        type: object\n                        properties:\n                          hash:\n                            type: string\n                            format: byte\n                          part_set_header:\n                            type: object\n                            properties:\n                              total:\n                                type: integer\n                                format: int64\n                              hash:\n                                type: string\n                                format: byte\n                            title: PartsetHeader\n                        title: BlockID\n                      timestamp:\n                        type: string\n                        format: date-time\n                      validator_address:\n                        type: string\n                        format: byte\n                      validator_index:\n                        type: integer\n                        format: int32\n                      signature:\n                        type: string\n                        format: byte\n                    description: >-\n                      Vote represents a prevote, precommit, or commit vote from\n                      validators for\n\n                      consensus.\n                  vote_b:\n                    type: object\n                    properties:\n                      type:\n                        type: string\n                        enum:\n                          - SIGNED_MSG_TYPE_UNKNOWN\n                          - SIGNED_MSG_TYPE_PREVOTE\n                          - SIGNED_MSG_TYPE_PRECOMMIT\n                          - SIGNED_MSG_TYPE_PROPOSAL\n                        default: SIGNED_MSG_TYPE_UNKNOWN\n                        description: >-\n                          SignedMsgType is a type of signed message in the\n                          consensus.\n\n                           - SIGNED_MSG_TYPE_PREVOTE: Votes\n                           - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                      height:\n                        type: string\n                        format: int64\n                      round:\n                        type: integer\n                        format: int32\n                      block_id:\n                        type: object\n                        properties:\n                          hash:\n                            type: string\n                            format: byte\n                          part_set_header:\n                            type: object\n                            properties:\n                              total:\n                                type: integer\n                                format: int64\n                              hash:\n                                type: string\n                                format: byte\n                            title: PartsetHeader\n                        title: BlockID\n                      timestamp:\n                        type: string\n                        format: date-time\n                      validator_address:\n                        type: string\n                        format: byte\n                      validator_index:\n                        type: integer\n                        format: int32\n                      signature:\n                        type: string\n                        format: byte\n                    description: >-\n                      Vote represents a prevote, precommit, or commit vote from\n                      validators for\n\n                      consensus.\n                  total_voting_power:\n                    type: string\n                    format: int64\n                  validator_power:\n                    type: string\n                    format: int64\n                  timestamp:\n                    type: string\n                    format: date-time\n                description: DuplicateVoteEvidence contains evidence of a validator signed two\n                  conflicting votes.\n              light_client_attack_evidence:\n                type: object\n                properties:\n                  conflicting_block:\n                    type: object\n                    properties:\n                      signed_header:\n                        type: object\n                        properties:\n                          header:\n                            type: object\n                            properties:\n                              version:\n                                title: basic block info\n                                type: object\n                                properties:\n                                  block:\n                                    type: string\n                                    format: uint64\n                                  app:\n                                    type: string\n                                    format: uint64\n                                description: >-\n                                  Consensus captures the consensus rules for\n                                  processing a block in the blockchain,\n\n                                  including all blockchain data structures and the rules of the application's\n\n                                  state transition machine.\n                              chain_id:\n                                type: string\n                              height:\n                                type: string\n                                format: int64\n                              time:\n                                type: string\n                                format: date-time\n                              last_block_id:\n                                title: prev block info\n                                type: object\n                                properties:\n                                  hash:\n                                    type: string\n                                    format: byte\n                                  part_set_header:\n                                    type: object\n                                    properties:\n                                      total:\n                                        type: integer\n                                        format: int64\n                                      hash:\n                                        type: string\n                                        format: byte\n                                    title: PartsetHeader\n                              last_commit_hash:\n                                type: string\n                                format: byte\n                                title: hashes of block data\n                              data_hash:\n                                type: string\n                                format: byte\n                              validators_hash:\n                                type: string\n                                format: byte\n                                title: hashes from the app output from the prev block\n                              next_validators_hash:\n                                type: string\n                                format: byte\n                              consensus_hash:\n                                type: string\n                                format: byte\n                              app_hash:\n                                type: string\n                                format: byte\n                              last_results_hash:\n                                type: string\n                                format: byte\n                              evidence_hash:\n                                type: string\n                                format: byte\n                                title: consensus info\n                              proposer_address:\n                                type: string\n                                format: byte\n                            description: Header defines the structure of a block header.\n                          commit:\n                            type: object\n                            properties:\n                              height:\n                                type: string\n                                format: int64\n                              round:\n                                type: integer\n                                format: int32\n                              block_id:\n                                type: object\n                                properties:\n                                  hash:\n                                    type: string\n                                    format: byte\n                                  part_set_header:\n                                    type: object\n                                    properties:\n                                      total:\n                                        type: integer\n                                        format: int64\n                                      hash:\n                                        type: string\n                                        format: byte\n                                    title: PartsetHeader\n                                title: BlockID\n                              signatures:\n                                type: array\n                                items:\n                                  type: object\n                                  properties:\n                                    block_id_flag:\n                                      type: string\n                                      enum:\n                                        - BLOCK_ID_FLAG_UNKNOWN\n                                        - BLOCK_ID_FLAG_ABSENT\n                                        - BLOCK_ID_FLAG_COMMIT\n                                        - BLOCK_ID_FLAG_NIL\n                                      default: BLOCK_ID_FLAG_UNKNOWN\n                                      title: BlockIdFlag indicates which BlcokID the signature is for\n                                    validator_address:\n                                      type: string\n                                      format: byte\n                                    timestamp:\n                                      type: string\n                                      format: date-time\n                                    signature:\n                                      type: string\n                                      format: byte\n                                  description: CommitSig is a part of the Vote included in a Commit.\n                            description: Commit contains the evidence that a block was committed by a set of\n                              validators.\n                      validator_set:\n                        type: object\n                        properties:\n                          validators:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                address:\n                                  type: string\n                                  format: byte\n                                pub_key:\n                                  type: object\n                                  properties:\n                                    ed25519:\n                                      type: string\n                                      format: byte\n                                    secp256k1:\n                                      type: string\n                                      format: byte\n                                  title: PublicKey defines the keys available for use with Validators\n                                voting_power:\n                                  type: string\n                                  format: int64\n                                proposer_priority:\n                                  type: string\n                                  format: int64\n                          proposer:\n                            type: object\n                            properties:\n                              address:\n                                type: string\n                                format: byte\n                              pub_key:\n                                type: object\n                                properties:\n                                  ed25519:\n                                    type: string\n                                    format: byte\n                                  secp256k1:\n                                    type: string\n                                    format: byte\n                                title: PublicKey defines the keys available for use with Validators\n                              voting_power:\n                                type: string\n                                format: int64\n                              proposer_priority:\n                                type: string\n                                format: int64\n                          total_voting_power:\n                            type: string\n                            format: int64\n                  common_height:\n                    type: string\n                    format: int64\n                  byzantine_validators:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        address:\n                          type: string\n                          format: byte\n                        pub_key:\n                          type: object\n                          properties:\n                            ed25519:\n                              type: string\n                              format: byte\n                            secp256k1:\n                              type: string\n                              format: byte\n                          title: PublicKey defines the keys available for use with Validators\n                        voting_power:\n                          type: string\n                          format: int64\n                        proposer_priority:\n                          type: string\n                          format: int64\n                  total_voting_power:\n                    type: string\n                    format: int64\n                  timestamp:\n                    type: string\n                    format: date-time\n                description: LightClientAttackEvidence contains evidence of a set of validators\n                  attempting to mislead a light client.\n    tendermint.types.LightBlock:\n      type: object\n      properties:\n        signed_header:\n          type: object\n          properties:\n            header:\n              type: object\n              properties:\n                version:\n                  title: basic block info\n                  type: object\n                  properties:\n                    block:\n                      type: string\n                      format: uint64\n                    app:\n                      type: string\n                      format: uint64\n                  description: >-\n                    Consensus captures the consensus rules for processing a\n                    block in the blockchain,\n\n                    including all blockchain data structures and the rules of the application's\n\n                    state transition machine.\n                chain_id:\n                  type: string\n                height:\n                  type: string\n                  format: int64\n                time:\n                  type: string\n                  format: date-time\n                last_block_id:\n                  title: prev block info\n                  type: object\n                  properties:\n                    hash:\n                      type: string\n                      format: byte\n                    part_set_header:\n                      type: object\n                      properties:\n                        total:\n                          type: integer\n                          format: int64\n                        hash:\n                          type: string\n                          format: byte\n                      title: PartsetHeader\n                last_commit_hash:\n                  type: string\n                  format: byte\n                  title: hashes of block data\n                data_hash:\n                  type: string\n                  format: byte\n                validators_hash:\n                  type: string\n                  format: byte\n                  title: hashes from the app output from the prev block\n                next_validators_hash:\n                  type: string\n                  format: byte\n                consensus_hash:\n                  type: string\n                  format: byte\n                app_hash:\n                  type: string\n                  format: byte\n                last_results_hash:\n                  type: string\n                  format: byte\n                evidence_hash:\n                  type: string\n                  format: byte\n                  title: consensus info\n                proposer_address:\n                  type: string\n                  format: byte\n              description: Header defines the structure of a block header.\n            commit:\n              type: object\n              properties:\n                height:\n                  type: string\n                  format: int64\n                round:\n                  type: integer\n                  format: int32\n                block_id:\n                  type: object\n                  properties:\n                    hash:\n                      type: string\n                      format: byte\n                    part_set_header:\n                      type: object\n                      properties:\n                        total:\n                          type: integer\n                          format: int64\n                        hash:\n                          type: string\n                          format: byte\n                      title: PartsetHeader\n                  title: BlockID\n                signatures:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      block_id_flag:\n                        type: string\n                        enum:\n                          - BLOCK_ID_FLAG_UNKNOWN\n                          - BLOCK_ID_FLAG_ABSENT\n                          - BLOCK_ID_FLAG_COMMIT\n                          - BLOCK_ID_FLAG_NIL\n                        default: BLOCK_ID_FLAG_UNKNOWN\n                        title: BlockIdFlag indicates which BlcokID the signature is for\n                      validator_address:\n                        type: string\n                        format: byte\n                      timestamp:\n                        type: string\n                        format: date-time\n                      signature:\n                        type: string\n                        format: byte\n                    description: CommitSig is a part of the Vote included in a Commit.\n              description: Commit contains the evidence that a block was committed by a set of\n                validators.\n        validator_set:\n          type: object\n          properties:\n            validators:\n              type: array\n              items:\n                type: object\n                properties:\n                  address:\n                    type: string\n                    format: byte\n                  pub_key:\n                    type: object\n                    properties:\n                      ed25519:\n                        type: string\n                        format: byte\n                      secp256k1:\n                        type: string\n                        format: byte\n                    title: PublicKey defines the keys available for use with Validators\n                  voting_power:\n                    type: string\n                    format: int64\n                  proposer_priority:\n                    type: string\n                    format: int64\n            proposer:\n              type: object\n              properties:\n                address:\n                  type: string\n                  format: byte\n                pub_key:\n                  type: object\n                  properties:\n                    ed25519:\n                      type: string\n                      format: byte\n                    secp256k1:\n                      type: string\n                      format: byte\n                  title: PublicKey defines the keys available for use with Validators\n                voting_power:\n                  type: string\n                  format: int64\n                proposer_priority:\n                  type: string\n                  format: int64\n            total_voting_power:\n              type: string\n              format: int64\n    tendermint.types.LightClientAttackEvidence:\n      type: object\n      properties:\n        conflicting_block:\n          type: object\n          properties:\n            signed_header:\n              type: object\n              properties:\n                header:\n                  type: object\n                  properties:\n                    version:\n                      title: basic block info\n                      type: object\n                      properties:\n                        block:\n                          type: string\n                          format: uint64\n                        app:\n                          type: string\n                          format: uint64\n                      description: >-\n                        Consensus captures the consensus rules for processing a\n                        block in the blockchain,\n\n                        including all blockchain data structures and the rules of the application's\n\n                        state transition machine.\n                    chain_id:\n                      type: string\n                    height:\n                      type: string\n                      format: int64\n                    time:\n                      type: string\n                      format: date-time\n                    last_block_id:\n                      title: prev block info\n                      type: object\n                      properties:\n                        hash:\n                          type: string\n                          format: byte\n                        part_set_header:\n                          type: object\n                          properties:\n                            total:\n                              type: integer\n                              format: int64\n                            hash:\n                              type: string\n                              format: byte\n                          title: PartsetHeader\n                    last_commit_hash:\n                      type: string\n                      format: byte\n                      title: hashes of block data\n                    data_hash:\n                      type: string\n                      format: byte\n                    validators_hash:\n                      type: string\n                      format: byte\n                      title: hashes from the app output from the prev block\n                    next_validators_hash:\n                      type: string\n                      format: byte\n                    consensus_hash:\n                      type: string\n                      format: byte\n                    app_hash:\n                      type: string\n                      format: byte\n                    last_results_hash:\n                      type: string\n                      format: byte\n                    evidence_hash:\n                      type: string\n                      format: byte\n                      title: consensus info\n                    proposer_address:\n                      type: string\n                      format: byte\n                  description: Header defines the structure of a block header.\n                commit:\n                  type: object\n                  properties:\n                    height:\n                      type: string\n                      format: int64\n                    round:\n                      type: integer\n                      format: int32\n                    block_id:\n                      type: object\n                      properties:\n                        hash:\n                          type: string\n                          format: byte\n                        part_set_header:\n                          type: object\n                          properties:\n                            total:\n                              type: integer\n                              format: int64\n                            hash:\n                              type: string\n                              format: byte\n                          title: PartsetHeader\n                      title: BlockID\n                    signatures:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          block_id_flag:\n                            type: string\n                            enum:\n                              - BLOCK_ID_FLAG_UNKNOWN\n                              - BLOCK_ID_FLAG_ABSENT\n                              - BLOCK_ID_FLAG_COMMIT\n                              - BLOCK_ID_FLAG_NIL\n                            default: BLOCK_ID_FLAG_UNKNOWN\n                            title: BlockIdFlag indicates which BlcokID the signature is for\n                          validator_address:\n                            type: string\n                            format: byte\n                          timestamp:\n                            type: string\n                            format: date-time\n                          signature:\n                            type: string\n                            format: byte\n                        description: CommitSig is a part of the Vote included in a Commit.\n                  description: Commit contains the evidence that a block was committed by a set of\n                    validators.\n            validator_set:\n              type: object\n              properties:\n                validators:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      address:\n                        type: string\n                        format: byte\n                      pub_key:\n                        type: object\n                        properties:\n                          ed25519:\n                            type: string\n                            format: byte\n                          secp256k1:\n                            type: string\n                            format: byte\n                        title: PublicKey defines the keys available for use with Validators\n                      voting_power:\n                        type: string\n                        format: int64\n                      proposer_priority:\n                        type: string\n                        format: int64\n                proposer:\n                  type: object\n                  properties:\n                    address:\n                      type: string\n                      format: byte\n                    pub_key:\n                      type: object\n                      properties:\n                        ed25519:\n                          type: string\n                          format: byte\n                        secp256k1:\n                          type: string\n                          format: byte\n                      title: PublicKey defines the keys available for use with Validators\n                    voting_power:\n                      type: string\n                      format: int64\n                    proposer_priority:\n                      type: string\n                      format: int64\n                total_voting_power:\n                  type: string\n                  format: int64\n        common_height:\n          type: string\n          format: int64\n        byzantine_validators:\n          type: array\n          items:\n            type: object\n            properties:\n              address:\n                type: string\n                format: byte\n              pub_key:\n                type: object\n                properties:\n                  ed25519:\n                    type: string\n                    format: byte\n                  secp256k1:\n                    type: string\n                    format: byte\n                title: PublicKey defines the keys available for use with Validators\n              voting_power:\n                type: string\n                format: int64\n              proposer_priority:\n                type: string\n                format: int64\n        total_voting_power:\n          type: string\n          format: int64\n        timestamp:\n          type: string\n          format: date-time\n      description: LightClientAttackEvidence contains evidence of a set of validators\n        attempting to mislead a light client.\n    tendermint.types.SignedHeader:\n      type: object\n      properties:\n        header:\n          type: object\n          properties:\n            version:\n              title: basic block info\n              type: object\n              properties:\n                block:\n                  type: string\n                  format: uint64\n                app:\n                  type: string\n                  format: uint64\n              description: >-\n                Consensus captures the consensus rules for processing a block in\n                the blockchain,\n\n                including all blockchain data structures and the rules of the application's\n\n                state transition machine.\n            chain_id:\n              type: string\n            height:\n              type: string\n              format: int64\n            time:\n              type: string\n              format: date-time\n            last_block_id:\n              title: prev block info\n              type: object\n              properties:\n                hash:\n                  type: string\n                  format: byte\n                part_set_header:\n                  type: object\n                  properties:\n                    total:\n                      type: integer\n                      format: int64\n                    hash:\n                      type: string\n                      format: byte\n                  title: PartsetHeader\n            last_commit_hash:\n              type: string\n              format: byte\n              title: hashes of block data\n            data_hash:\n              type: string\n              format: byte\n            validators_hash:\n              type: string\n              format: byte\n              title: hashes from the app output from the prev block\n            next_validators_hash:\n              type: string\n              format: byte\n            consensus_hash:\n              type: string\n              format: byte\n            app_hash:\n              type: string\n              format: byte\n            last_results_hash:\n              type: string\n              format: byte\n            evidence_hash:\n              type: string\n              format: byte\n              title: consensus info\n            proposer_address:\n              type: string\n              format: byte\n          description: Header defines the structure of a block header.\n        commit:\n          type: object\n          properties:\n            height:\n              type: string\n              format: int64\n            round:\n              type: integer\n              format: int32\n            block_id:\n              type: object\n              properties:\n                hash:\n                  type: string\n                  format: byte\n                part_set_header:\n                  type: object\n                  properties:\n                    total:\n                      type: integer\n                      format: int64\n                    hash:\n                      type: string\n                      format: byte\n                  title: PartsetHeader\n              title: BlockID\n            signatures:\n              type: array\n              items:\n                type: object\n                properties:\n                  block_id_flag:\n                    type: string\n                    enum:\n                      - BLOCK_ID_FLAG_UNKNOWN\n                      - BLOCK_ID_FLAG_ABSENT\n                      - BLOCK_ID_FLAG_COMMIT\n                      - BLOCK_ID_FLAG_NIL\n                    default: BLOCK_ID_FLAG_UNKNOWN\n                    title: BlockIdFlag indicates which BlcokID the signature is for\n                  validator_address:\n                    type: string\n                    format: byte\n                  timestamp:\n                    type: string\n                    format: date-time\n                  signature:\n                    type: string\n                    format: byte\n                description: CommitSig is a part of the Vote included in a Commit.\n          description: Commit contains the evidence that a block was committed by a set of\n            validators.\n    tendermint.types.SignedMsgType:\n      type: string\n      enum:\n        - SIGNED_MSG_TYPE_UNKNOWN\n        - SIGNED_MSG_TYPE_PREVOTE\n        - SIGNED_MSG_TYPE_PRECOMMIT\n        - SIGNED_MSG_TYPE_PROPOSAL\n      default: SIGNED_MSG_TYPE_UNKNOWN\n      description: |-\n        SignedMsgType is a type of signed message in the consensus.\n\n         - SIGNED_MSG_TYPE_PREVOTE: Votes\n         - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n    tendermint.types.Validator:\n      type: object\n      properties:\n        address:\n          type: string\n          format: byte\n        pub_key:\n          type: object\n          properties:\n            ed25519:\n              type: string\n              format: byte\n            secp256k1:\n              type: string\n              format: byte\n          title: PublicKey defines the keys available for use with Validators\n        voting_power:\n          type: string\n          format: int64\n        proposer_priority:\n          type: string\n          format: int64\n    tendermint.types.ValidatorSet:\n      type: object\n      properties:\n        validators:\n          type: array\n          items:\n            type: object\n            properties:\n              address:\n                type: string\n                format: byte\n              pub_key:\n                type: object\n                properties:\n                  ed25519:\n                    type: string\n                    format: byte\n                  secp256k1:\n                    type: string\n                    format: byte\n                title: PublicKey defines the keys available for use with Validators\n              voting_power:\n                type: string\n                format: int64\n              proposer_priority:\n                type: string\n                format: int64\n        proposer:\n          type: object\n          properties:\n            address:\n              type: string\n              format: byte\n            pub_key:\n              type: object\n              properties:\n                ed25519:\n                  type: string\n                  format: byte\n                secp256k1:\n                  type: string\n                  format: byte\n              title: PublicKey defines the keys available for use with Validators\n            voting_power:\n              type: string\n              format: int64\n            proposer_priority:\n              type: string\n              format: int64\n        total_voting_power:\n          type: string\n          format: int64\n    tendermint.types.Vote:\n      type: object\n      properties:\n        type:\n          type: string\n          enum:\n            - SIGNED_MSG_TYPE_UNKNOWN\n            - SIGNED_MSG_TYPE_PREVOTE\n            - SIGNED_MSG_TYPE_PRECOMMIT\n            - SIGNED_MSG_TYPE_PROPOSAL\n          default: SIGNED_MSG_TYPE_UNKNOWN\n          description: |-\n            SignedMsgType is a type of signed message in the consensus.\n\n             - SIGNED_MSG_TYPE_PREVOTE: Votes\n             - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n        height:\n          type: string\n          format: int64\n        round:\n          type: integer\n          format: int32\n        block_id:\n          type: object\n          properties:\n            hash:\n              type: string\n              format: byte\n            part_set_header:\n              type: object\n              properties:\n                total:\n                  type: integer\n                  format: int64\n                hash:\n                  type: string\n                  format: byte\n              title: PartsetHeader\n          title: BlockID\n        timestamp:\n          type: string\n          format: date-time\n        validator_address:\n          type: string\n          format: byte\n        validator_index:\n          type: integer\n          format: int32\n        signature:\n          type: string\n          format: byte\n      description: |-\n        Vote represents a prevote, precommit, or commit vote from validators for\n        consensus.\n    cyber.clock.v1.ClockContract:\n      type: object\n      properties:\n        contract_address:\n          type: string\n          description: The address of the contract.\n        is_jailed:\n          type: boolean\n          description: The jail status of the contract.\n      description: |-\n        This object is used to store the contract address and the\n        jail status of the contract.\n    cyber.clock.v1.Params:\n      type: object\n      properties:\n        contract_gas_limit:\n          type: string\n          format: uint64\n          description: >-\n            contract_gas_limit defines the maximum amount of gas that can be\n            used by a\n\n            contract.\n      description: Params defines the set of module parameters.\n    cyber.clock.v1.QueryClockContractResponse:\n      type: object\n      properties:\n        clock_contract:\n          type: object\n          properties:\n            contract_address:\n              type: string\n              description: The address of the contract.\n            is_jailed:\n              type: boolean\n              description: The jail status of the contract.\n          description: |-\n            This object is used to store the contract address and the\n            jail status of the contract.\n      description: >-\n        QueryClockContractResponse is the response type for the\n        Query/ClockContract\n\n        RPC method.\n    cyber.clock.v1.QueryClockContractsResponse:\n      type: object\n      properties:\n        clock_contracts:\n          type: array\n          items:\n            type: object\n            properties:\n              contract_address:\n                type: string\n                description: The address of the contract.\n              is_jailed:\n                type: boolean\n                description: The jail status of the contract.\n            description: |-\n              This object is used to store the contract address and the\n              jail status of the contract.\n          description: clock_contracts are the clock contracts.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: >-\n        QueryClockContractsResponse is the response type for the\n        Query/ClockContracts\n\n        RPC method.\n    cyber.clock.v1.QueryParamsResponse:\n      type: object\n      properties:\n        params:\n          type: object\n          properties:\n            contract_gas_limit:\n              type: string\n              format: uint64\n              description: >-\n                contract_gas_limit defines the maximum amount of gas that can be\n                used by a\n\n                contract.\n          description: Params defines the set of module parameters.\n      description: >-\n        QueryClockContractsResponse is the response type for the\n        Query/ClockContracts\n\n        RPC method.\n    ibc.core.channel.v1.Channel:\n      type: object\n      properties:\n        state:\n          title: current state of the channel end\n          type: string\n          enum:\n            - STATE_UNINITIALIZED_UNSPECIFIED\n            - STATE_INIT\n            - STATE_TRYOPEN\n            - STATE_OPEN\n            - STATE_CLOSED\n          default: STATE_UNINITIALIZED_UNSPECIFIED\n          description: >-\n            State defines if a channel is in one of the following states:\n\n            CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n             - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n             - STATE_INIT: A channel has just started the opening handshake.\n             - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n             - STATE_OPEN: A channel has completed the handshake. Open channels are\n            ready to send and receive packets.\n             - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\n            packets.\n        ordering:\n          title: whether the channel is ordered or unordered\n          type: string\n          enum:\n            - ORDER_NONE_UNSPECIFIED\n            - ORDER_UNORDERED\n            - ORDER_ORDERED\n          default: ORDER_NONE_UNSPECIFIED\n          description: >-\n            - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering\n             - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\n            which they were sent.\n             - ORDER_ORDERED: packets are delivered exactly in the order which they were sent\n        counterparty:\n          title: counterparty channel end\n          type: object\n          properties:\n            port_id:\n              type: string\n              description: port on the counterparty chain which owns the other end of the\n                channel.\n            channel_id:\n              type: string\n              title: channel end on the counterparty chain\n        connection_hops:\n          type: array\n          items:\n            type: string\n          title: >-\n            list of connection identifiers, in order, along which packets sent\n            on\n\n            this channel will travel\n        version:\n          type: string\n          title: opaque channel version, which is agreed upon during the handshake\n      description: >-\n        Channel defines pipeline for exactly-once packet delivery between\n        specific\n\n        modules on separate blockchains, which has at least one end capable of\n\n        sending packets and one end capable of receiving packets.\n    ibc.core.channel.v1.Counterparty:\n      type: object\n      properties:\n        port_id:\n          type: string\n          description: port on the counterparty chain which owns the other end of the\n            channel.\n        channel_id:\n          type: string\n          title: channel end on the counterparty chain\n      title: Counterparty defines a channel end counterparty\n    ibc.core.channel.v1.IdentifiedChannel:\n      type: object\n      properties:\n        state:\n          title: current state of the channel end\n          type: string\n          enum:\n            - STATE_UNINITIALIZED_UNSPECIFIED\n            - STATE_INIT\n            - STATE_TRYOPEN\n            - STATE_OPEN\n            - STATE_CLOSED\n          default: STATE_UNINITIALIZED_UNSPECIFIED\n          description: >-\n            State defines if a channel is in one of the following states:\n\n            CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n             - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n             - STATE_INIT: A channel has just started the opening handshake.\n             - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n             - STATE_OPEN: A channel has completed the handshake. Open channels are\n            ready to send and receive packets.\n             - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\n            packets.\n        ordering:\n          title: whether the channel is ordered or unordered\n          type: string\n          enum:\n            - ORDER_NONE_UNSPECIFIED\n            - ORDER_UNORDERED\n            - ORDER_ORDERED\n          default: ORDER_NONE_UNSPECIFIED\n          description: >-\n            - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering\n             - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\n            which they were sent.\n             - ORDER_ORDERED: packets are delivered exactly in the order which they were sent\n        counterparty:\n          title: counterparty channel end\n          type: object\n          properties:\n            port_id:\n              type: string\n              description: port on the counterparty chain which owns the other end of the\n                channel.\n            channel_id:\n              type: string\n              title: channel end on the counterparty chain\n        connection_hops:\n          type: array\n          items:\n            type: string\n          title: >-\n            list of connection identifiers, in order, along which packets sent\n            on\n\n            this channel will travel\n        version:\n          type: string\n          title: opaque channel version, which is agreed upon during the handshake\n        port_id:\n          type: string\n          title: port identifier\n        channel_id:\n          type: string\n          title: channel identifier\n      description: |-\n        IdentifiedChannel defines a channel with additional port and channel\n        identifier fields.\n    ibc.core.channel.v1.Order:\n      type: string\n      enum:\n        - ORDER_NONE_UNSPECIFIED\n        - ORDER_UNORDERED\n        - ORDER_ORDERED\n      default: ORDER_NONE_UNSPECIFIED\n      description: >-\n        - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering\n         - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\n        which they were sent.\n         - ORDER_ORDERED: packets are delivered exactly in the order which they were sent\n      title: Order defines if a channel is ORDERED or UNORDERED\n    ibc.core.channel.v1.PacketState:\n      type: object\n      properties:\n        port_id:\n          type: string\n          description: channel port identifier.\n        channel_id:\n          type: string\n          description: channel unique identifier.\n        sequence:\n          type: string\n          format: uint64\n          description: packet sequence.\n        data:\n          type: string\n          format: byte\n          description: embedded data that represents packet state.\n      description: >-\n        PacketState defines the generic type necessary to retrieve and store\n\n        packet commitments, acknowledgements, and receipts.\n\n        Caller is responsible for knowing the context necessary to interpret this\n\n        state as a commitment, acknowledgement, or a receipt.\n    ibc.core.channel.v1.QueryChannelClientStateResponse:\n      type: object\n      properties:\n        identified_client_state:\n          title: client state associated with the channel\n          type: object\n          properties:\n            client_id:\n              type: string\n              title: client identifier\n            client_state:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n              title: client state\n          description: >-\n            IdentifiedClientState defines a client state with an additional\n            client\n\n            identifier field.\n        proof:\n          type: string\n          format: byte\n          title: merkle proof of existence\n        proof_height:\n          title: height at which the proof was retrieved\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may choose to\n\n            reset the height in certain conditions e.g. hard forks, state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented so that\n\n            height continues to be monitonically increasing even as the RevisionHeight\n\n            gets reset\n      title: |-\n        QueryChannelClientStateResponse is the Response type for the\n        Query/QueryChannelClientState RPC method\n    ibc.core.channel.v1.QueryChannelConsensusStateResponse:\n      type: object\n      properties:\n        consensus_state:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n          title: consensus state associated with the channel\n        client_id:\n          type: string\n          title: client ID associated with the consensus state\n        proof:\n          type: string\n          format: byte\n          title: merkle proof of existence\n        proof_height:\n          title: height at which the proof was retrieved\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may choose to\n\n            reset the height in certain conditions e.g. hard forks, state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented so that\n\n            height continues to be monitonically increasing even as the RevisionHeight\n\n            gets reset\n      title: |-\n        QueryChannelClientStateResponse is the Response type for the\n        Query/QueryChannelClientState RPC method\n    ibc.core.channel.v1.QueryChannelResponse:\n      type: object\n      properties:\n        channel:\n          title: channel associated with the request identifiers\n          type: object\n          properties:\n            state:\n              title: current state of the channel end\n              type: string\n              enum:\n                - STATE_UNINITIALIZED_UNSPECIFIED\n                - STATE_INIT\n                - STATE_TRYOPEN\n                - STATE_OPEN\n                - STATE_CLOSED\n              default: STATE_UNINITIALIZED_UNSPECIFIED\n              description: >-\n                State defines if a channel is in one of the following states:\n\n                CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n                 - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n                 - STATE_INIT: A channel has just started the opening handshake.\n                 - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n                 - STATE_OPEN: A channel has completed the handshake. Open channels are\n                ready to send and receive packets.\n                 - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\n                packets.\n            ordering:\n              title: whether the channel is ordered or unordered\n              type: string\n              enum:\n                - ORDER_NONE_UNSPECIFIED\n                - ORDER_UNORDERED\n                - ORDER_ORDERED\n              default: ORDER_NONE_UNSPECIFIED\n              description: >-\n                - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering\n                 - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\n                which they were sent.\n                 - ORDER_ORDERED: packets are delivered exactly in the order which they were sent\n            counterparty:\n              title: counterparty channel end\n              type: object\n              properties:\n                port_id:\n                  type: string\n                  description: port on the counterparty chain which owns the other end of the\n                    channel.\n                channel_id:\n                  type: string\n                  title: channel end on the counterparty chain\n            connection_hops:\n              type: array\n              items:\n                type: string\n              title: >-\n                list of connection identifiers, in order, along which packets\n                sent on\n\n                this channel will travel\n            version:\n              type: string\n              title: opaque channel version, which is agreed upon during the handshake\n          description: >-\n            Channel defines pipeline for exactly-once packet delivery between\n            specific\n\n            modules on separate blockchains, which has at least one end capable of\n\n            sending packets and one end capable of receiving packets.\n        proof:\n          type: string\n          format: byte\n          title: merkle proof of existence\n        proof_height:\n          title: height at which the proof was retrieved\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may choose to\n\n            reset the height in certain conditions e.g. hard forks, state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented so that\n\n            height continues to be monitonically increasing even as the RevisionHeight\n\n            gets reset\n      description: >-\n        QueryChannelResponse is the response type for the Query/Channel RPC\n        method.\n\n        Besides the Channel end, it includes a proof and the height from which the\n\n        proof was retrieved.\n    ibc.core.channel.v1.QueryChannelsResponse:\n      type: object\n      properties:\n        channels:\n          type: array\n          items:\n            type: object\n            properties:\n              state:\n                title: current state of the channel end\n                type: string\n                enum:\n                  - STATE_UNINITIALIZED_UNSPECIFIED\n                  - STATE_INIT\n                  - STATE_TRYOPEN\n                  - STATE_OPEN\n                  - STATE_CLOSED\n                default: STATE_UNINITIALIZED_UNSPECIFIED\n                description: >-\n                  State defines if a channel is in one of the following states:\n\n                  CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n                   - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n                   - STATE_INIT: A channel has just started the opening handshake.\n                   - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n                   - STATE_OPEN: A channel has completed the handshake. Open channels are\n                  ready to send and receive packets.\n                   - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\n                  packets.\n              ordering:\n                title: whether the channel is ordered or unordered\n                type: string\n                enum:\n                  - ORDER_NONE_UNSPECIFIED\n                  - ORDER_UNORDERED\n                  - ORDER_ORDERED\n                default: ORDER_NONE_UNSPECIFIED\n                description: >-\n                  - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering\n                   - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\n                  which they were sent.\n                   - ORDER_ORDERED: packets are delivered exactly in the order which they were sent\n              counterparty:\n                title: counterparty channel end\n                type: object\n                properties:\n                  port_id:\n                    type: string\n                    description: port on the counterparty chain which owns the other end of the\n                      channel.\n                  channel_id:\n                    type: string\n                    title: channel end on the counterparty chain\n              connection_hops:\n                type: array\n                items:\n                  type: string\n                title: >-\n                  list of connection identifiers, in order, along which packets\n                  sent on\n\n                  this channel will travel\n              version:\n                type: string\n                title: opaque channel version, which is agreed upon during the handshake\n              port_id:\n                type: string\n                title: port identifier\n              channel_id:\n                type: string\n                title: channel identifier\n            description: >-\n              IdentifiedChannel defines a channel with additional port and\n              channel\n\n              identifier fields.\n          description: list of stored channels of the chain.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n          title: pagination response\n        height:\n          title: query block height\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may choose to\n\n            reset the height in certain conditions e.g. hard forks, state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented so that\n\n            height continues to be monitonically increasing even as the RevisionHeight\n\n            gets reset\n      description: QueryChannelsResponse is the response type for the Query/Channels\n        RPC method.\n    ibc.core.channel.v1.QueryConnectionChannelsResponse:\n      type: object\n      properties:\n        channels:\n          type: array\n          items:\n            type: object\n            properties:\n              state:\n                title: current state of the channel end\n                type: string\n                enum:\n                  - STATE_UNINITIALIZED_UNSPECIFIED\n                  - STATE_INIT\n                  - STATE_TRYOPEN\n                  - STATE_OPEN\n                  - STATE_CLOSED\n                default: STATE_UNINITIALIZED_UNSPECIFIED\n                description: >-\n                  State defines if a channel is in one of the following states:\n\n                  CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n                   - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n                   - STATE_INIT: A channel has just started the opening handshake.\n                   - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n                   - STATE_OPEN: A channel has completed the handshake. Open channels are\n                  ready to send and receive packets.\n                   - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\n                  packets.\n              ordering:\n                title: whether the channel is ordered or unordered\n                type: string\n                enum:\n                  - ORDER_NONE_UNSPECIFIED\n                  - ORDER_UNORDERED\n                  - ORDER_ORDERED\n                default: ORDER_NONE_UNSPECIFIED\n                description: >-\n                  - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering\n                   - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\n                  which they were sent.\n                   - ORDER_ORDERED: packets are delivered exactly in the order which they were sent\n              counterparty:\n                title: counterparty channel end\n                type: object\n                properties:\n                  port_id:\n                    type: string\n                    description: port on the counterparty chain which owns the other end of the\n                      channel.\n                  channel_id:\n                    type: string\n                    title: channel end on the counterparty chain\n              connection_hops:\n                type: array\n                items:\n                  type: string\n                title: >-\n                  list of connection identifiers, in order, along which packets\n                  sent on\n\n                  this channel will travel\n              version:\n                type: string\n                title: opaque channel version, which is agreed upon during the handshake\n              port_id:\n                type: string\n                title: port identifier\n              channel_id:\n                type: string\n                title: channel identifier\n            description: >-\n              IdentifiedChannel defines a channel with additional port and\n              channel\n\n              identifier fields.\n          description: list of channels associated with a connection.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n          title: pagination response\n        height:\n          title: query block height\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may choose to\n\n            reset the height in certain conditions e.g. hard forks, state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented so that\n\n            height continues to be monitonically increasing even as the RevisionHeight\n\n            gets reset\n      title: |-\n        QueryConnectionChannelsResponse is the Response type for the\n        Query/QueryConnectionChannels RPC method\n    ibc.core.channel.v1.QueryNextSequenceReceiveResponse:\n      type: object\n      properties:\n        next_sequence_receive:\n          type: string\n          format: uint64\n          title: next sequence receive number\n        proof:\n          type: string\n          format: byte\n          title: merkle proof of existence\n        proof_height:\n          title: height at which the proof was retrieved\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may choose to\n\n            reset the height in certain conditions e.g. hard forks, state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented so that\n\n            height continues to be monitonically increasing even as the RevisionHeight\n\n            gets reset\n      title: |-\n        QuerySequenceResponse is the request type for the\n        Query/QueryNextSequenceReceiveResponse RPC method\n    ibc.core.channel.v1.QueryPacketAcknowledgementResponse:\n      type: object\n      properties:\n        acknowledgement:\n          type: string\n          format: byte\n          title: packet associated with the request fields\n        proof:\n          type: string\n          format: byte\n          title: merkle proof of existence\n        proof_height:\n          title: height at which the proof was retrieved\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may choose to\n\n            reset the height in certain conditions e.g. hard forks, state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented so that\n\n            height continues to be monitonically increasing even as the RevisionHeight\n\n            gets reset\n      title: >-\n        QueryPacketAcknowledgementResponse defines the client query response for\n        a\n\n        packet which also includes a proof and the height from which the\n\n        proof was retrieved\n    ibc.core.channel.v1.QueryPacketAcknowledgementsResponse:\n      type: object\n      properties:\n        acknowledgements:\n          type: array\n          items:\n            type: object\n            properties:\n              port_id:\n                type: string\n                description: channel port identifier.\n              channel_id:\n                type: string\n                description: channel unique identifier.\n              sequence:\n                type: string\n                format: uint64\n                description: packet sequence.\n              data:\n                type: string\n                format: byte\n                description: embedded data that represents packet state.\n            description: >-\n              PacketState defines the generic type necessary to retrieve and\n              store\n\n              packet commitments, acknowledgements, and receipts.\n\n              Caller is responsible for knowing the context necessary to interpret this\n\n              state as a commitment, acknowledgement, or a receipt.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n          title: pagination response\n        height:\n          title: query block height\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may choose to\n\n            reset the height in certain conditions e.g. hard forks, state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented so that\n\n            height continues to be monitonically increasing even as the RevisionHeight\n\n            gets reset\n      title: |-\n        QueryPacketAcknowledgemetsResponse is the request type for the\n        Query/QueryPacketAcknowledgements RPC method\n    ibc.core.channel.v1.QueryPacketCommitmentResponse:\n      type: object\n      properties:\n        commitment:\n          type: string\n          format: byte\n          title: packet associated with the request fields\n        proof:\n          type: string\n          format: byte\n          title: merkle proof of existence\n        proof_height:\n          title: height at which the proof was retrieved\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may choose to\n\n            reset the height in certain conditions e.g. hard forks, state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented so that\n\n            height continues to be monitonically increasing even as the RevisionHeight\n\n            gets reset\n      title: >-\n        QueryPacketCommitmentResponse defines the client query response for a\n        packet\n\n        which also includes a proof and the height from which the proof was\n\n        retrieved\n    ibc.core.channel.v1.QueryPacketCommitmentsResponse:\n      type: object\n      properties:\n        commitments:\n          type: array\n          items:\n            type: object\n            properties:\n              port_id:\n                type: string\n                description: channel port identifier.\n              channel_id:\n                type: string\n                description: channel unique identifier.\n              sequence:\n                type: string\n                format: uint64\n                description: packet sequence.\n              data:\n                type: string\n                format: byte\n                description: embedded data that represents packet state.\n            description: >-\n              PacketState defines the generic type necessary to retrieve and\n              store\n\n              packet commitments, acknowledgements, and receipts.\n\n              Caller is responsible for knowing the context necessary to interpret this\n\n              state as a commitment, acknowledgement, or a receipt.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n          title: pagination response\n        height:\n          title: query block height\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may choose to\n\n            reset the height in certain conditions e.g. hard forks, state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented so that\n\n            height continues to be monitonically increasing even as the RevisionHeight\n\n            gets reset\n      title: |-\n        QueryPacketCommitmentsResponse is the request type for the\n        Query/QueryPacketCommitments RPC method\n    ibc.core.channel.v1.QueryPacketReceiptResponse:\n      type: object\n      properties:\n        received:\n          type: boolean\n          title: success flag for if receipt exists\n        proof:\n          type: string\n          format: byte\n          title: merkle proof of existence\n        proof_height:\n          title: height at which the proof was retrieved\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may choose to\n\n            reset the height in certain conditions e.g. hard forks, state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented so that\n\n            height continues to be monitonically increasing even as the RevisionHeight\n\n            gets reset\n      title: >-\n        QueryPacketReceiptResponse defines the client query response for a\n        packet\n\n        receipt which also includes a proof, and the height from which the proof was\n\n        retrieved\n    ibc.core.channel.v1.QueryUnreceivedAcksResponse:\n      type: object\n      properties:\n        sequences:\n          type: array\n          items:\n            type: string\n            format: uint64\n          title: list of unreceived acknowledgement sequences\n        height:\n          title: query block height\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may choose to\n\n            reset the height in certain conditions e.g. hard forks, state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented so that\n\n            height continues to be monitonically increasing even as the RevisionHeight\n\n            gets reset\n      title: |-\n        QueryUnreceivedAcksResponse is the response type for the\n        Query/UnreceivedAcks RPC method\n    ibc.core.channel.v1.QueryUnreceivedPacketsResponse:\n      type: object\n      properties:\n        sequences:\n          type: array\n          items:\n            type: string\n            format: uint64\n          title: list of unreceived packet sequences\n        height:\n          title: query block height\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may choose to\n\n            reset the height in certain conditions e.g. hard forks, state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented so that\n\n            height continues to be monitonically increasing even as the RevisionHeight\n\n            gets reset\n      title: |-\n        QueryUnreceivedPacketsResponse is the response type for the\n        Query/UnreceivedPacketCommitments RPC method\n    ibc.core.channel.v1.State:\n      type: string\n      enum:\n        - STATE_UNINITIALIZED_UNSPECIFIED\n        - STATE_INIT\n        - STATE_TRYOPEN\n        - STATE_OPEN\n        - STATE_CLOSED\n      default: STATE_UNINITIALIZED_UNSPECIFIED\n      description: >-\n        State defines if a channel is in one of the following states:\n\n        CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n         - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n         - STATE_INIT: A channel has just started the opening handshake.\n         - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n         - STATE_OPEN: A channel has completed the handshake. Open channels are\n        ready to send and receive packets.\n         - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\n        packets.\n    cosmos.auth.v1beta1.AddressBytesToStringResponse:\n      type: object\n      properties:\n        address_string:\n          type: string\n      description: >-\n        AddressBytesToStringResponse is the response type for AddressString rpc\n        method.\n\n\n        Since: cosmos-sdk 0.46\n    cosmos.auth.v1beta1.AddressStringToBytesResponse:\n      type: object\n      properties:\n        address_bytes:\n          type: string\n          format: byte\n      description: >-\n        AddressStringToBytesResponse is the response type for AddressBytes rpc\n        method.\n\n\n        Since: cosmos-sdk 0.46\n    cosmos.auth.v1beta1.BaseAccount:\n      type: object\n      properties:\n        address:\n          type: string\n        pub_key:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n        account_number:\n          type: string\n          format: uint64\n        sequence:\n          type: string\n          format: uint64\n      description: >-\n        BaseAccount defines a base account type. It contains all the necessary\n        fields\n\n        for basic account functionality. Any custom account type should extend this\n\n        type for additional functionality (e.g. vesting).\n    cosmos.auth.v1beta1.Bech32PrefixResponse:\n      type: object\n      properties:\n        bech32_prefix:\n          type: string\n      description: |-\n        Bech32PrefixResponse is the response type for Bech32Prefix rpc method.\n\n        Since: cosmos-sdk 0.46\n    cosmos.auth.v1beta1.Params:\n      type: object\n      properties:\n        max_memo_characters:\n          type: string\n          format: uint64\n        tx_sig_limit:\n          type: string\n          format: uint64\n        tx_size_cost_per_byte:\n          type: string\n          format: uint64\n        sig_verify_cost_ed25519:\n          type: string\n          format: uint64\n        sig_verify_cost_secp256k1:\n          type: string\n          format: uint64\n      description: Params defines the parameters for the auth module.\n    cosmos.auth.v1beta1.QueryAccountAddressByIDResponse:\n      type: object\n      properties:\n        account_address:\n          type: string\n      description: \"Since: cosmos-sdk 0.46.2\"\n      title: QueryAccountAddressByIDResponse is the response type for\n        AccountAddressByID rpc method\n    cosmos.auth.v1beta1.QueryAccountInfoResponse:\n      type: object\n      properties:\n        info:\n          description: info is the account info which is represented by BaseAccount.\n          type: object\n          properties:\n            address:\n              type: string\n            pub_key:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n            account_number:\n              type: string\n              format: uint64\n            sequence:\n              type: string\n              format: uint64\n      description: |-\n        QueryAccountInfoResponse is the Query/AccountInfo response type.\n\n        Since: cosmos-sdk 0.47\n    cosmos.auth.v1beta1.QueryAccountResponse:\n      type: object\n      properties:\n        account:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n          description: account defines the account of the corresponding address.\n      description: QueryAccountResponse is the response type for the Query/Account RPC\n        method.\n    cosmos.auth.v1beta1.QueryAccountsResponse:\n      type: object\n      properties:\n        accounts:\n          type: array\n          items:\n            type: object\n            properties:\n              type_url:\n                type: string\n              value:\n                type: string\n                format: byte\n          title: accounts are the existing accounts\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: >-\n        QueryAccountsResponse is the response type for the Query/Accounts RPC\n        method.\n\n\n        Since: cosmos-sdk 0.43\n    cosmos.auth.v1beta1.QueryModuleAccountByNameResponse:\n      type: object\n      properties:\n        account:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n      description: QueryModuleAccountByNameResponse is the response type for the\n        Query/ModuleAccountByName RPC method.\n    cosmos.auth.v1beta1.QueryModuleAccountsResponse:\n      type: object\n      properties:\n        accounts:\n          type: array\n          items:\n            type: object\n            properties:\n              type_url:\n                type: string\n              value:\n                type: string\n                format: byte\n      description: >-\n        QueryModuleAccountsResponse is the response type for the\n        Query/ModuleAccounts RPC method.\n\n\n        Since: cosmos-sdk 0.46\n    cosmos.auth.v1beta1.QueryParamsResponse:\n      type: object\n      properties:\n        params:\n          description: params defines the parameters of the module.\n          type: object\n          properties:\n            max_memo_characters:\n              type: string\n              format: uint64\n            tx_sig_limit:\n              type: string\n              format: uint64\n            tx_size_cost_per_byte:\n              type: string\n              format: uint64\n            sig_verify_cost_ed25519:\n              type: string\n              format: uint64\n            sig_verify_cost_secp256k1:\n              type: string\n              format: uint64\n      description: QueryParamsResponse is the response type for the Query/Params RPC method.\n    cosmos.evidence.v1beta1.QueryAllEvidenceResponse:\n      type: object\n      properties:\n        evidence:\n          type: array\n          items:\n            type: object\n            properties:\n              type_url:\n                type: string\n              value:\n                type: string\n                format: byte\n          description: evidence returns all evidences.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: >-\n        QueryAllEvidenceResponse is the response type for the Query/AllEvidence\n        RPC\n\n        method.\n    cosmos.evidence.v1beta1.QueryEvidenceResponse:\n      type: object\n      properties:\n        evidence:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n          description: evidence returns the requested evidence.\n      description: QueryEvidenceResponse is the response type for the Query/Evidence\n        RPC method.\n    ibc.core.client.v1.ConsensusStateWithHeight:\n      type: object\n      properties:\n        height:\n          title: consensus state height\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may choose to\n\n            reset the height in certain conditions e.g. hard forks, state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented so that\n\n            height continues to be monitonically increasing even as the RevisionHeight\n\n            gets reset\n        consensus_state:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n          title: consensus state\n      description: >-\n        ConsensusStateWithHeight defines a consensus state with an additional\n        height\n\n        field.\n    ibc.core.client.v1.Params:\n      type: object\n      properties:\n        allowed_clients:\n          type: array\n          items:\n            type: string\n          description: >-\n            allowed_clients defines the list of allowed client state types which\n            can be created\n\n            and interacted with. If a client type is removed from the allowed clients list, usage\n\n            of this client will be disabled until it is added again to the list.\n      description: Params defines the set of IBC light client parameters.\n    ibc.core.client.v1.QueryClientParamsResponse:\n      type: object\n      properties:\n        params:\n          description: params defines the parameters of the module.\n          type: object\n          properties:\n            allowed_clients:\n              type: array\n              items:\n                type: string\n              description: >-\n                allowed_clients defines the list of allowed client state types\n                which can be created\n\n                and interacted with. If a client type is removed from the allowed clients list, usage\n\n                of this client will be disabled until it is added again to the list.\n      description: >-\n        QueryClientParamsResponse is the response type for the\n        Query/ClientParams RPC\n\n        method.\n    ibc.core.client.v1.QueryClientStateResponse:\n      type: object\n      properties:\n        client_state:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n          title: client state associated with the request identifier\n        proof:\n          type: string\n          format: byte\n          title: merkle proof of existence\n        proof_height:\n          title: height at which the proof was retrieved\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may choose to\n\n            reset the height in certain conditions e.g. hard forks, state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented so that\n\n            height continues to be monitonically increasing even as the RevisionHeight\n\n            gets reset\n      description: >-\n        QueryClientStateResponse is the response type for the Query/ClientState\n        RPC\n\n        method. Besides the client state, it includes a proof and the height from\n\n        which the proof was retrieved.\n    ibc.core.client.v1.QueryClientStatesResponse:\n      type: object\n      properties:\n        client_states:\n          type: array\n          items:\n            type: object\n            properties:\n              client_id:\n                type: string\n                title: client identifier\n              client_state:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n                title: client state\n            description: >-\n              IdentifiedClientState defines a client state with an additional\n              client\n\n              identifier field.\n          description: list of stored ClientStates of the chain.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n          title: pagination response\n      description: >-\n        QueryClientStatesResponse is the response type for the\n        Query/ClientStates RPC\n\n        method.\n    ibc.core.client.v1.QueryClientStatusResponse:\n      type: object\n      properties:\n        status:\n          type: string\n      description: >-\n        QueryClientStatusResponse is the response type for the\n        Query/ClientStatus RPC\n\n        method. It returns the current status of the IBC client.\n    ibc.core.client.v1.QueryConsensusStateHeightsResponse:\n      type: object\n      properties:\n        consensus_state_heights:\n          type: array\n          items:\n            type: object\n            properties:\n              revision_number:\n                type: string\n                format: uint64\n                title: the revision that the client is currently on\n              revision_height:\n                type: string\n                format: uint64\n                title: the height within the given revision\n            description: >-\n              Normally the RevisionHeight is incremented at each height while\n              keeping\n\n              RevisionNumber the same. However some consensus algorithms may choose to\n\n              reset the height in certain conditions e.g. hard forks, state-machine\n\n              breaking changes In these cases, the RevisionNumber is incremented so that\n\n              height continues to be monitonically increasing even as the RevisionHeight\n\n              gets reset\n            title: >-\n              Height is a monotonically increasing data type\n\n              that can be compared against another Height for the purposes of updating and\n\n              freezing clients\n          title: consensus state heights\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n          title: pagination response\n      title: |-\n        QueryConsensusStateHeightsResponse is the response type for the\n        Query/ConsensusStateHeights RPC method\n    ibc.core.client.v1.QueryConsensusStateResponse:\n      type: object\n      properties:\n        consensus_state:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n          title: consensus state associated with the client identifier at the given height\n        proof:\n          type: string\n          format: byte\n          title: merkle proof of existence\n        proof_height:\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may choose to\n\n            reset the height in certain conditions e.g. hard forks, state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented so that\n\n            height continues to be monitonically increasing even as the RevisionHeight\n\n            gets reset\n          title: >-\n            Height is a monotonically increasing data type\n\n            that can be compared against another Height for the purposes of updating and\n\n            freezing clients\n      title: >-\n        QueryConsensusStateResponse is the response type for the\n        Query/ConsensusState\n\n        RPC method\n    ibc.core.client.v1.QueryConsensusStatesResponse:\n      type: object\n      properties:\n        consensus_states:\n          type: array\n          items:\n            type: object\n            properties:\n              height:\n                title: consensus state height\n                type: object\n                properties:\n                  revision_number:\n                    type: string\n                    format: uint64\n                    title: the revision that the client is currently on\n                  revision_height:\n                    type: string\n                    format: uint64\n                    title: the height within the given revision\n                description: >-\n                  Normally the RevisionHeight is incremented at each height\n                  while keeping\n\n                  RevisionNumber the same. However some consensus algorithms may choose to\n\n                  reset the height in certain conditions e.g. hard forks, state-machine\n\n                  breaking changes In these cases, the RevisionNumber is incremented so that\n\n                  height continues to be monitonically increasing even as the RevisionHeight\n\n                  gets reset\n              consensus_state:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n                title: consensus state\n            description: >-\n              ConsensusStateWithHeight defines a consensus state with an\n              additional height\n\n              field.\n          title: consensus states associated with the identifier\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n          title: pagination response\n      title: |-\n        QueryConsensusStatesResponse is the response type for the\n        Query/ConsensusStates RPC method\n    ibc.core.client.v1.QueryUpgradedClientStateResponse:\n      type: object\n      properties:\n        upgraded_client_state:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n          title: client state associated with the request identifier\n      description: |-\n        QueryUpgradedClientStateResponse is the response type for the\n        Query/UpgradedClientState RPC method.\n    ibc.core.client.v1.QueryUpgradedConsensusStateResponse:\n      type: object\n      properties:\n        upgraded_consensus_state:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n          title: Consensus state associated with the request identifier\n      description: |-\n        QueryUpgradedConsensusStateResponse is the response type for the\n        Query/UpgradedConsensusState RPC method.\n    cosmos.authz.v1beta1.Grant:\n      type: object\n      properties:\n        authorization:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n        expiration:\n          type: string\n          format: date-time\n          title: >-\n            time when the grant will expire and will be pruned. If null, then\n            the grant\n\n            doesn't have a time expiration (other conditions  in `authorization`\n\n            may apply to invalidate the grant)\n      description: |-\n        Grant gives permissions to execute\n        the provide method with expiration time.\n    cosmos.authz.v1beta1.GrantAuthorization:\n      type: object\n      properties:\n        granter:\n          type: string\n        grantee:\n          type: string\n        authorization:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n        expiration:\n          type: string\n          format: date-time\n      title: >-\n        GrantAuthorization extends a grant with both the addresses of the\n        grantee and granter.\n\n        It is used in genesis.proto and query.proto\n    cosmos.authz.v1beta1.QueryGranteeGrantsResponse:\n      type: object\n      properties:\n        grants:\n          type: array\n          items:\n            type: object\n            properties:\n              granter:\n                type: string\n              grantee:\n                type: string\n              authorization:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n              expiration:\n                type: string\n                format: date-time\n            title: >-\n              GrantAuthorization extends a grant with both the addresses of the\n              grantee and granter.\n\n              It is used in genesis.proto and query.proto\n          description: grants is a list of grants granted to the grantee.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: QueryGranteeGrantsResponse is the response type for the\n        Query/GranteeGrants RPC method.\n    cosmos.authz.v1beta1.QueryGranterGrantsResponse:\n      type: object\n      properties:\n        grants:\n          type: array\n          items:\n            type: object\n            properties:\n              granter:\n                type: string\n              grantee:\n                type: string\n              authorization:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n              expiration:\n                type: string\n                format: date-time\n            title: >-\n              GrantAuthorization extends a grant with both the addresses of the\n              grantee and granter.\n\n              It is used in genesis.proto and query.proto\n          description: grants is a list of grants granted by the granter.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: QueryGranterGrantsResponse is the response type for the\n        Query/GranterGrants RPC method.\n    cosmos.authz.v1beta1.QueryGrantsResponse:\n      type: object\n      properties:\n        grants:\n          type: array\n          items:\n            type: object\n            properties:\n              authorization:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n              expiration:\n                type: string\n                format: date-time\n                title: >-\n                  time when the grant will expire and will be pruned. If null,\n                  then the grant\n\n                  doesn't have a time expiration (other conditions  in `authorization`\n\n                  may apply to invalidate the grant)\n            description: |-\n              Grant gives permissions to execute\n              the provide method with expiration time.\n          description: authorizations is a list of grants granted for grantee by granter.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: QueryGrantsResponse is the response type for the\n        Query/Authorizations RPC method.\n    cyber.liquidity.v1beta1.DepositMsgState:\n      type: object\n      properties:\n        msg_height:\n          type: string\n          format: int64\n          title: height where this message is appended to the batch\n        msg_index:\n          type: string\n          format: uint64\n          title: index of this deposit message in this liquidity pool\n        executed:\n          type: boolean\n          title: true if executed on this batch, false if not executed\n        succeeded:\n          type: boolean\n          title: true if executed successfully on this batch, false if failed\n        to_be_deleted:\n          type: boolean\n          title: true if ready to be deleted on kvstore, false if not ready to be deleted\n        msg:\n          title: MsgDepositWithinBatch\n          type: object\n          properties:\n            depositor_address:\n              type: string\n            pool_id:\n              type: string\n              format: uint64\n              title: id of the target pool\n            deposit_coins:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom method\n\n                  signatures required by gogoproto.\n              title: reserve coin pair of the pool to deposit\n          description: >-\n            `MsgDepositWithinBatch defines` an `sdk.Msg` type that supports\n            submitting\n\n            a deposit request to the batch of the liquidity pool.\n\n            Deposit is submitted to the batch of the Liquidity pool with the specified\n\n            `pool_id`, `deposit_coins` for reserve.\n\n            This request is stacked in the batch of the liquidity pool, is not processed\n\n            immediately, and is processed in the `endblock` at the same time as other\n\n            requests.\n\n\n            See:\n\n            https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n      description: |-\n        DepositMsgState defines the state of deposit message that contains state\n        information as it is processed in the next batch or batches.\n    cyber.liquidity.v1beta1.MsgDepositWithinBatch:\n      type: object\n      properties:\n        depositor_address:\n          type: string\n        pool_id:\n          type: string\n          format: uint64\n          title: id of the target pool\n        deposit_coins:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n          title: reserve coin pair of the pool to deposit\n      description: >-\n        `MsgDepositWithinBatch defines` an `sdk.Msg` type that supports\n        submitting\n\n        a deposit request to the batch of the liquidity pool.\n\n        Deposit is submitted to the batch of the Liquidity pool with the specified\n\n        `pool_id`, `deposit_coins` for reserve.\n\n        This request is stacked in the batch of the liquidity pool, is not processed\n\n        immediately, and is processed in the `endblock` at the same time as other\n\n        requests.\n\n\n        See:\n\n        https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n    cyber.liquidity.v1beta1.MsgSwapWithinBatch:\n      type: object\n      properties:\n        swap_requester_address:\n          type: string\n          title: address of swap requester\n        pool_id:\n          type: string\n          format: uint64\n          description: >-\n            id of swap type, must match the value in the pool. Only\n            `swap_type_id` 1 is\n\n            supported.\n        swap_type_id:\n          type: integer\n          format: int64\n          description: id of swap type. Must match the value in the pool.\n        offer_coin:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        demand_coin_denom:\n          type: string\n          description: >-\n            denom of demand coin to be exchanged on the swap request, must match\n            the\n\n            denom in the pool.\n        offer_coin_fee:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        order_price:\n          type: string\n          description: >-\n            limit order price for the order, the price is the exchange ratio of\n            X/Y\n\n            where X is the amount of the first coin and Y is the amount\n\n            of the second coin when their denoms are sorted alphabetically.\n      description: >-\n        `MsgSwapWithinBatch` defines an sdk.Msg type that supports submitting a\n        swap\n\n        offer request to the batch of the liquidity pool. Submit swap offer to the\n\n        liquidity pool batch with the specified the `pool_id`, `swap_type_id`,\n\n        `demand_coin_denom` with the coin and the price you're offering\n\n        and `offer_coin_fee` must be half of offer coin amount * current\n\n        `params.swap_fee_rate` and ceil for reservation to pay fees. This request is\n\n        stacked in the batch of the liquidity pool, is not processed immediately, and\n\n        is processed in the `endblock` at the same time as other requests. You must\n\n        request the same fields as the pool. Only the default `swap_type_id` 1 is\n\n        supported.\n\n\n        See: https://github.com/gravity-devs/liquidity/tree/develop/doc\n\n        https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n    cyber.liquidity.v1beta1.MsgWithdrawWithinBatch:\n      type: object\n      properties:\n        withdrawer_address:\n          type: string\n        pool_id:\n          type: string\n          format: uint64\n          title: id of the target pool\n        pool_coin:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n      description: >-\n        `MsgWithdrawWithinBatch` defines an `sdk.Msg` type that supports\n        submitting\n\n        a withdraw request to the batch of the liquidity pool.\n\n        Withdraw is submitted to the batch from the Liquidity pool with the\n\n        specified `pool_id`, `pool_coin` of the pool.\n\n        This request is stacked in the batch of the liquidity pool, is not processed\n\n        immediately, and is processed in the `endblock` at the same time as other\n\n        requests.\n\n\n        See:\n\n        https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n    cyber.liquidity.v1beta1.Params:\n      type: object\n      properties:\n        pool_types:\n          type: array\n          items:\n            type: object\n            properties:\n              id:\n                type: integer\n                format: int64\n                title: >-\n                  This is the id of the pool_type that is used as pool_type_id\n                  for pool\n\n                  creation. In this version, only pool-type-id 1 is supported.\n\n                  {\"id\":1,\"name\":\"ConstantProductLiquidityPool\",\"min_reserve_coin_num\":2,\"max_reserve_coin_num\":2,\"description\":\"\"}\n              name:\n                type: string\n                description: name of the pool type.\n              min_reserve_coin_num:\n                type: integer\n                format: int64\n                description: >-\n                  minimum number of reserveCoins for LiquidityPoolType, only 2\n                  reserve coins\n\n                  are supported.\n              max_reserve_coin_num:\n                type: integer\n                format: int64\n                description: >-\n                  maximum number of reserveCoins for LiquidityPoolType, only 2\n                  reserve coins\n\n                  are supported.\n              description:\n                type: string\n                description: description of the pool type.\n            description: >-\n              Structure for the pool type to distinguish the characteristics of\n              the reserve\n\n              pools.\n          title: list of available pool types\n        min_init_deposit_amount:\n          type: string\n          description: >-\n            Minimum number of coins to be deposited to the liquidity pool on\n            pool\n\n            creation.\n        init_pool_coin_mint_amount:\n          type: string\n          description: Initial mint amount of pool coins upon pool creation.\n        max_reserve_coin_amount:\n          type: string\n          description: >-\n            Limit the size of each liquidity pool to minimize risk. In\n            development, set\n\n            to 0 for no limit. In production, set a limit.\n        pool_creation_fee:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n          description: Fee paid to create a Liquidity Pool. Set a fee to prevent spamming.\n        swap_fee_rate:\n          type: string\n          description: Swap fee rate for every executed swap.\n        withdraw_fee_rate:\n          type: string\n          description: Reserve coin withdrawal with less proportion by withdrawFeeRate.\n        max_order_amount_ratio:\n          type: string\n          description: Maximum ratio of reserve coins that can be ordered at a swap order.\n        unit_batch_height:\n          type: integer\n          format: int64\n          description: The smallest unit batch height for every liquidity pool.\n        circuit_breaker_enabled:\n          type: boolean\n          description: >-\n            Circuit breaker enables or disables transaction messages in\n            liquidity\n\n            module.\n      description: Params defines the parameters for the liquidity module.\n    cyber.liquidity.v1beta1.Pool:\n      type: object\n      properties:\n        id:\n          type: string\n          format: uint64\n          title: id of the pool\n        type_id:\n          type: integer\n          format: int64\n          title: id of the pool_type\n        reserve_coin_denoms:\n          type: array\n          items:\n            type: string\n          title: denoms of reserve coin pair of the pool\n        reserve_account_address:\n          type: string\n          title: reserve account address of the pool\n        pool_coin_denom:\n          type: string\n          title: denom of pool coin of the pool\n      description: Pool defines the liquidity pool that contains pool information.\n    cyber.liquidity.v1beta1.PoolBatch:\n      type: object\n      properties:\n        pool_id:\n          type: string\n          format: uint64\n          title: id of the pool\n        index:\n          type: string\n          format: uint64\n          title: index of this batch\n        begin_height:\n          type: string\n          format: int64\n          title: height where this batch is started\n        deposit_msg_index:\n          type: string\n          format: uint64\n          title: last index of DepositMsgStates\n        withdraw_msg_index:\n          type: string\n          format: uint64\n          title: last index of WithdrawMsgStates\n        swap_msg_index:\n          type: string\n          format: uint64\n          title: last index of SwapMsgStates\n        executed:\n          type: boolean\n          title: true if executed, false if not executed\n      description: |-\n        PoolBatch defines the batch or batches of a given liquidity pool that\n        contains indexes of deposit, withdraw, and swap messages. Index param\n        increments by 1 if the pool id is same.\n    cyber.liquidity.v1beta1.PoolType:\n      type: object\n      properties:\n        id:\n          type: integer\n          format: int64\n          title: >-\n            This is the id of the pool_type that is used as pool_type_id for\n            pool\n\n            creation. In this version, only pool-type-id 1 is supported.\n\n            {\"id\":1,\"name\":\"ConstantProductLiquidityPool\",\"min_reserve_coin_num\":2,\"max_reserve_coin_num\":2,\"description\":\"\"}\n        name:\n          type: string\n          description: name of the pool type.\n        min_reserve_coin_num:\n          type: integer\n          format: int64\n          description: >-\n            minimum number of reserveCoins for LiquidityPoolType, only 2 reserve\n            coins\n\n            are supported.\n        max_reserve_coin_num:\n          type: integer\n          format: int64\n          description: >-\n            maximum number of reserveCoins for LiquidityPoolType, only 2 reserve\n            coins\n\n            are supported.\n        description:\n          type: string\n          description: description of the pool type.\n      description: >-\n        Structure for the pool type to distinguish the characteristics of the\n        reserve\n\n        pools.\n    cyber.liquidity.v1beta1.QueryLiquidityPoolBatchResponse:\n      type: object\n      properties:\n        batch:\n          type: object\n          properties:\n            pool_id:\n              type: string\n              format: uint64\n              title: id of the pool\n            index:\n              type: string\n              format: uint64\n              title: index of this batch\n            begin_height:\n              type: string\n              format: int64\n              title: height where this batch is started\n            deposit_msg_index:\n              type: string\n              format: uint64\n              title: last index of DepositMsgStates\n            withdraw_msg_index:\n              type: string\n              format: uint64\n              title: last index of WithdrawMsgStates\n            swap_msg_index:\n              type: string\n              format: uint64\n              title: last index of SwapMsgStates\n            executed:\n              type: boolean\n              title: true if executed, false if not executed\n          description: >-\n            PoolBatch defines the batch or batches of a given liquidity pool\n            that\n\n            contains indexes of deposit, withdraw, and swap messages. Index param\n\n            increments by 1 if the pool id is same.\n      description: >-\n        the response type for the QueryLiquidityPoolBatchResponse RPC method.\n        Returns\n\n        the liquidity pool batch that corresponds to the requested pool_id.\n    cyber.liquidity.v1beta1.QueryLiquidityPoolResponse:\n      type: object\n      properties:\n        pool:\n          type: object\n          properties:\n            id:\n              type: string\n              format: uint64\n              title: id of the pool\n            type_id:\n              type: integer\n              format: int64\n              title: id of the pool_type\n            reserve_coin_denoms:\n              type: array\n              items:\n                type: string\n              title: denoms of reserve coin pair of the pool\n            reserve_account_address:\n              type: string\n              title: reserve account address of the pool\n            pool_coin_denom:\n              type: string\n              title: denom of pool coin of the pool\n          description: Pool defines the liquidity pool that contains pool information.\n      description: >-\n        the response type for the QueryLiquidityPoolResponse RPC method. Returns\n        the\n\n        liquidity pool that corresponds to the requested pool_id.\n    cyber.liquidity.v1beta1.QueryLiquidityPoolsResponse:\n      type: object\n      properties:\n        pools:\n          type: array\n          items:\n            type: object\n            properties:\n              id:\n                type: string\n                format: uint64\n                title: id of the pool\n              type_id:\n                type: integer\n                format: int64\n                title: id of the pool_type\n              reserve_coin_denoms:\n                type: array\n                items:\n                  type: string\n                title: denoms of reserve coin pair of the pool\n              reserve_account_address:\n                type: string\n                title: reserve account address of the pool\n              pool_coin_denom:\n                type: string\n                title: denom of pool coin of the pool\n            description: Pool defines the liquidity pool that contains pool information.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: |-\n        the response type for the QueryLiquidityPoolsResponse RPC method. This\n        includes a list of all existing liquidity pools and paging results that\n        contain next_key and total count.\n    cyber.liquidity.v1beta1.QueryParamsResponse:\n      type: object\n      properties:\n        params:\n          description: params holds all the parameters of this module.\n          type: object\n          properties:\n            pool_types:\n              type: array\n              items:\n                type: object\n                properties:\n                  id:\n                    type: integer\n                    format: int64\n                    title: >-\n                      This is the id of the pool_type that is used as\n                      pool_type_id for pool\n\n                      creation. In this version, only pool-type-id 1 is supported.\n\n                      {\"id\":1,\"name\":\"ConstantProductLiquidityPool\",\"min_reserve_coin_num\":2,\"max_reserve_coin_num\":2,\"description\":\"\"}\n                  name:\n                    type: string\n                    description: name of the pool type.\n                  min_reserve_coin_num:\n                    type: integer\n                    format: int64\n                    description: >-\n                      minimum number of reserveCoins for LiquidityPoolType, only\n                      2 reserve coins\n\n                      are supported.\n                  max_reserve_coin_num:\n                    type: integer\n                    format: int64\n                    description: >-\n                      maximum number of reserveCoins for LiquidityPoolType, only\n                      2 reserve coins\n\n                      are supported.\n                  description:\n                    type: string\n                    description: description of the pool type.\n                description: >-\n                  Structure for the pool type to distinguish the characteristics\n                  of the reserve\n\n                  pools.\n              title: list of available pool types\n            min_init_deposit_amount:\n              type: string\n              description: >-\n                Minimum number of coins to be deposited to the liquidity pool on\n                pool\n\n                creation.\n            init_pool_coin_mint_amount:\n              type: string\n              description: Initial mint amount of pool coins upon pool creation.\n            max_reserve_coin_amount:\n              type: string\n              description: >-\n                Limit the size of each liquidity pool to minimize risk. In\n                development, set\n\n                to 0 for no limit. In production, set a limit.\n            pool_creation_fee:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom method\n\n                  signatures required by gogoproto.\n              description: Fee paid to create a Liquidity Pool. Set a fee to prevent spamming.\n            swap_fee_rate:\n              type: string\n              description: Swap fee rate for every executed swap.\n            withdraw_fee_rate:\n              type: string\n              description: Reserve coin withdrawal with less proportion by withdrawFeeRate.\n            max_order_amount_ratio:\n              type: string\n              description: Maximum ratio of reserve coins that can be ordered at a swap order.\n            unit_batch_height:\n              type: integer\n              format: int64\n              description: The smallest unit batch height for every liquidity pool.\n            circuit_breaker_enabled:\n              type: boolean\n              description: >-\n                Circuit breaker enables or disables transaction messages in\n                liquidity\n\n                module.\n      description: |-\n        the response type for the QueryParamsResponse RPC method. This includes\n        current parameter of the liquidity module.\n    cyber.liquidity.v1beta1.QueryPoolBatchDepositMsgResponse:\n      type: object\n      properties:\n        deposit:\n          type: object\n          properties:\n            msg_height:\n              type: string\n              format: int64\n              title: height where this message is appended to the batch\n            msg_index:\n              type: string\n              format: uint64\n              title: index of this deposit message in this liquidity pool\n            executed:\n              type: boolean\n              title: true if executed on this batch, false if not executed\n            succeeded:\n              type: boolean\n              title: true if executed successfully on this batch, false if failed\n            to_be_deleted:\n              type: boolean\n              title: true if ready to be deleted on kvstore, false if not ready to be deleted\n            msg:\n              title: MsgDepositWithinBatch\n              type: object\n              properties:\n                depositor_address:\n                  type: string\n                pool_id:\n                  type: string\n                  format: uint64\n                  title: id of the target pool\n                deposit_coins:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the custom method\n\n                      signatures required by gogoproto.\n                  title: reserve coin pair of the pool to deposit\n              description: >-\n                `MsgDepositWithinBatch defines` an `sdk.Msg` type that supports\n                submitting\n\n                a deposit request to the batch of the liquidity pool.\n\n                Deposit is submitted to the batch of the Liquidity pool with the specified\n\n                `pool_id`, `deposit_coins` for reserve.\n\n                This request is stacked in the batch of the liquidity pool, is not processed\n\n                immediately, and is processed in the `endblock` at the same time as other\n\n                requests.\n\n\n                See:\n\n                https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n          description: >-\n            DepositMsgState defines the state of deposit message that contains\n            state\n\n            information as it is processed in the next batch or batches.\n      description: >-\n        the response type for the QueryPoolBatchDepositMsg RPC method. This\n        includes\n\n        a batch swap message of the batch.\n    cyber.liquidity.v1beta1.QueryPoolBatchDepositMsgsResponse:\n      type: object\n      properties:\n        deposits:\n          type: array\n          items:\n            type: object\n            properties:\n              msg_height:\n                type: string\n                format: int64\n                title: height where this message is appended to the batch\n              msg_index:\n                type: string\n                format: uint64\n                title: index of this deposit message in this liquidity pool\n              executed:\n                type: boolean\n                title: true if executed on this batch, false if not executed\n              succeeded:\n                type: boolean\n                title: true if executed successfully on this batch, false if failed\n              to_be_deleted:\n                type: boolean\n                title: true if ready to be deleted on kvstore, false if not ready to be deleted\n              msg:\n                title: MsgDepositWithinBatch\n                type: object\n                properties:\n                  depositor_address:\n                    type: string\n                  pool_id:\n                    type: string\n                    format: uint64\n                    title: id of the target pool\n                  deposit_coins:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the custom method\n\n                        signatures required by gogoproto.\n                    title: reserve coin pair of the pool to deposit\n                description: >-\n                  `MsgDepositWithinBatch defines` an `sdk.Msg` type that\n                  supports submitting\n\n                  a deposit request to the batch of the liquidity pool.\n\n                  Deposit is submitted to the batch of the Liquidity pool with the specified\n\n                  `pool_id`, `deposit_coins` for reserve.\n\n                  This request is stacked in the batch of the liquidity pool, is not processed\n\n                  immediately, and is processed in the `endblock` at the same time as other\n\n                  requests.\n\n\n                  See:\n\n                  https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n            description: >-\n              DepositMsgState defines the state of deposit message that contains\n              state\n\n              information as it is processed in the next batch or batches.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: >-\n        the response type for the QueryPoolBatchDeposit RPC method. This\n        includes a\n\n        list of all currently existing deposit messages of the batch and paging\n\n        results that contain next_key and total count.\n    cyber.liquidity.v1beta1.QueryPoolBatchSwapMsgResponse:\n      type: object\n      properties:\n        swap:\n          type: object\n          properties:\n            msg_height:\n              type: string\n              format: int64\n              title: height where this message is appended to the batch\n            msg_index:\n              type: string\n              format: uint64\n              title: index of this swap message in this liquidity pool\n            executed:\n              type: boolean\n              title: true if executed on this batch, false if not executed\n            succeeded:\n              type: boolean\n              title: true if executed successfully on this batch, false if failed\n            to_be_deleted:\n              type: boolean\n              title: true if ready to be deleted on kvstore, false if not ready to be deleted\n            order_expiry_height:\n              type: string\n              format: int64\n              title: >-\n                swap orders are cancelled when current height is equal to or\n                higher than\n\n                ExpiryHeight\n            exchanged_offer_coin:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom method\n\n                signatures required by gogoproto.\n              title: offer coin exchanged until now\n            remaining_offer_coin:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom method\n\n                signatures required by gogoproto.\n              title: offer coin currently remaining to be exchanged\n            reserved_offer_coin_fee:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom method\n\n                signatures required by gogoproto.\n              title: reserve fee for pays fee in half offer coin\n            msg:\n              title: MsgSwapWithinBatch\n              type: object\n              properties:\n                swap_requester_address:\n                  type: string\n                  title: address of swap requester\n                pool_id:\n                  type: string\n                  format: uint64\n                  description: >-\n                    id of swap type, must match the value in the pool. Only\n                    `swap_type_id` 1 is\n\n                    supported.\n                swap_type_id:\n                  type: integer\n                  format: int64\n                  description: id of swap type. Must match the value in the pool.\n                offer_coin:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom method\n\n                    signatures required by gogoproto.\n                demand_coin_denom:\n                  type: string\n                  description: >-\n                    denom of demand coin to be exchanged on the swap request,\n                    must match the\n\n                    denom in the pool.\n                offer_coin_fee:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom method\n\n                    signatures required by gogoproto.\n                order_price:\n                  type: string\n                  description: >-\n                    limit order price for the order, the price is the exchange\n                    ratio of X/Y\n\n                    where X is the amount of the first coin and Y is the amount\n\n                    of the second coin when their denoms are sorted alphabetically.\n              description: >-\n                `MsgSwapWithinBatch` defines an sdk.Msg type that supports\n                submitting a swap\n\n                offer request to the batch of the liquidity pool. Submit swap offer to the\n\n                liquidity pool batch with the specified the `pool_id`, `swap_type_id`,\n\n                `demand_coin_denom` with the coin and the price you're offering\n\n                and `offer_coin_fee` must be half of offer coin amount * current\n\n                `params.swap_fee_rate` and ceil for reservation to pay fees. This request is\n\n                stacked in the batch of the liquidity pool, is not processed immediately, and\n\n                is processed in the `endblock` at the same time as other requests. You must\n\n                request the same fields as the pool. Only the default `swap_type_id` 1 is\n\n                supported.\n\n\n                See: https://github.com/gravity-devs/liquidity/tree/develop/doc\n\n                https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n          description: >-\n            SwapMsgState defines the state of the swap message that contains\n            state\n\n            information as the message is processed in the next batch or batches.\n      description: >-\n        the response type for the QueryPoolBatchSwapMsg RPC method. This\n        includes a\n\n        batch swap message of the batch.\n    cyber.liquidity.v1beta1.QueryPoolBatchSwapMsgsResponse:\n      type: object\n      properties:\n        swaps:\n          type: array\n          items:\n            type: object\n            properties:\n              msg_height:\n                type: string\n                format: int64\n                title: height where this message is appended to the batch\n              msg_index:\n                type: string\n                format: uint64\n                title: index of this swap message in this liquidity pool\n              executed:\n                type: boolean\n                title: true if executed on this batch, false if not executed\n              succeeded:\n                type: boolean\n                title: true if executed successfully on this batch, false if failed\n              to_be_deleted:\n                type: boolean\n                title: true if ready to be deleted on kvstore, false if not ready to be deleted\n              order_expiry_height:\n                type: string\n                format: int64\n                title: >-\n                  swap orders are cancelled when current height is equal to or\n                  higher than\n\n                  ExpiryHeight\n              exchanged_offer_coin:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom method\n\n                  signatures required by gogoproto.\n                title: offer coin exchanged until now\n              remaining_offer_coin:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom method\n\n                  signatures required by gogoproto.\n                title: offer coin currently remaining to be exchanged\n              reserved_offer_coin_fee:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom method\n\n                  signatures required by gogoproto.\n                title: reserve fee for pays fee in half offer coin\n              msg:\n                title: MsgSwapWithinBatch\n                type: object\n                properties:\n                  swap_requester_address:\n                    type: string\n                    title: address of swap requester\n                  pool_id:\n                    type: string\n                    format: uint64\n                    description: >-\n                      id of swap type, must match the value in the pool. Only\n                      `swap_type_id` 1 is\n\n                      supported.\n                  swap_type_id:\n                    type: integer\n                    format: int64\n                    description: id of swap type. Must match the value in the pool.\n                  offer_coin:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the custom method\n\n                      signatures required by gogoproto.\n                  demand_coin_denom:\n                    type: string\n                    description: >-\n                      denom of demand coin to be exchanged on the swap request,\n                      must match the\n\n                      denom in the pool.\n                  offer_coin_fee:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the custom method\n\n                      signatures required by gogoproto.\n                  order_price:\n                    type: string\n                    description: >-\n                      limit order price for the order, the price is the exchange\n                      ratio of X/Y\n\n                      where X is the amount of the first coin and Y is the amount\n\n                      of the second coin when their denoms are sorted alphabetically.\n                description: >-\n                  `MsgSwapWithinBatch` defines an sdk.Msg type that supports\n                  submitting a swap\n\n                  offer request to the batch of the liquidity pool. Submit swap offer to the\n\n                  liquidity pool batch with the specified the `pool_id`, `swap_type_id`,\n\n                  `demand_coin_denom` with the coin and the price you're offering\n\n                  and `offer_coin_fee` must be half of offer coin amount * current\n\n                  `params.swap_fee_rate` and ceil for reservation to pay fees. This request is\n\n                  stacked in the batch of the liquidity pool, is not processed immediately, and\n\n                  is processed in the `endblock` at the same time as other requests. You must\n\n                  request the same fields as the pool. Only the default `swap_type_id` 1 is\n\n                  supported.\n\n\n                  See: https://github.com/gravity-devs/liquidity/tree/develop/doc\n\n                  https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n            description: >-\n              SwapMsgState defines the state of the swap message that contains\n              state\n\n              information as the message is processed in the next batch or batches.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: >-\n        the response type for the QueryPoolBatchSwapMsgs RPC method. This\n        includes\n\n        list of all currently existing swap messages of the batch and paging results\n\n        that contain next_key and total count.\n    cyber.liquidity.v1beta1.QueryPoolBatchWithdrawMsgResponse:\n      type: object\n      properties:\n        withdraw:\n          type: object\n          properties:\n            msg_height:\n              type: string\n              format: int64\n              title: height where this message is appended to the batch\n            msg_index:\n              type: string\n              format: uint64\n              title: index of this withdraw message in this liquidity pool\n            executed:\n              type: boolean\n              title: true if executed on this batch, false if not executed\n            succeeded:\n              type: boolean\n              title: true if executed successfully on this batch, false if failed\n            to_be_deleted:\n              type: boolean\n              title: true if ready to be deleted on kvstore, false if not ready to be deleted\n            msg:\n              title: MsgWithdrawWithinBatch\n              type: object\n              properties:\n                withdrawer_address:\n                  type: string\n                pool_id:\n                  type: string\n                  format: uint64\n                  title: id of the target pool\n                pool_coin:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom method\n\n                    signatures required by gogoproto.\n              description: >-\n                `MsgWithdrawWithinBatch` defines an `sdk.Msg` type that supports\n                submitting\n\n                a withdraw request to the batch of the liquidity pool.\n\n                Withdraw is submitted to the batch from the Liquidity pool with the\n\n                specified `pool_id`, `pool_coin` of the pool.\n\n                This request is stacked in the batch of the liquidity pool, is not processed\n\n                immediately, and is processed in the `endblock` at the same time as other\n\n                requests.\n\n\n                See:\n\n                https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n          description: >-\n            WithdrawMsgState defines the state of the withdraw message that\n            contains\n\n            state information as the message is processed in the next batch or batches.\n      description: >-\n        the response type for the QueryPoolBatchWithdrawMsg RPC method. This\n        includes\n\n        a batch swap message of the batch.\n    cyber.liquidity.v1beta1.QueryPoolBatchWithdrawMsgsResponse:\n      type: object\n      properties:\n        withdraws:\n          type: array\n          items:\n            type: object\n            properties:\n              msg_height:\n                type: string\n                format: int64\n                title: height where this message is appended to the batch\n              msg_index:\n                type: string\n                format: uint64\n                title: index of this withdraw message in this liquidity pool\n              executed:\n                type: boolean\n                title: true if executed on this batch, false if not executed\n              succeeded:\n                type: boolean\n                title: true if executed successfully on this batch, false if failed\n              to_be_deleted:\n                type: boolean\n                title: true if ready to be deleted on kvstore, false if not ready to be deleted\n              msg:\n                title: MsgWithdrawWithinBatch\n                type: object\n                properties:\n                  withdrawer_address:\n                    type: string\n                  pool_id:\n                    type: string\n                    format: uint64\n                    title: id of the target pool\n                  pool_coin:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the custom method\n\n                      signatures required by gogoproto.\n                description: >-\n                  `MsgWithdrawWithinBatch` defines an `sdk.Msg` type that\n                  supports submitting\n\n                  a withdraw request to the batch of the liquidity pool.\n\n                  Withdraw is submitted to the batch from the Liquidity pool with the\n\n                  specified `pool_id`, `pool_coin` of the pool.\n\n                  This request is stacked in the batch of the liquidity pool, is not processed\n\n                  immediately, and is processed in the `endblock` at the same time as other\n\n                  requests.\n\n\n                  See:\n\n                  https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n            description: >-\n              WithdrawMsgState defines the state of the withdraw message that\n              contains\n\n              state information as the message is processed in the next batch or batches.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: >-\n        the response type for the QueryPoolBatchWithdraw RPC method. This\n        includes a\n\n        list of all currently existing withdraw messages of the batch and paging\n\n        results that contain next_key and total count.\n    cyber.liquidity.v1beta1.SwapMsgState:\n      type: object\n      properties:\n        msg_height:\n          type: string\n          format: int64\n          title: height where this message is appended to the batch\n        msg_index:\n          type: string\n          format: uint64\n          title: index of this swap message in this liquidity pool\n        executed:\n          type: boolean\n          title: true if executed on this batch, false if not executed\n        succeeded:\n          type: boolean\n          title: true if executed successfully on this batch, false if failed\n        to_be_deleted:\n          type: boolean\n          title: true if ready to be deleted on kvstore, false if not ready to be deleted\n        order_expiry_height:\n          type: string\n          format: int64\n          title: >-\n            swap orders are cancelled when current height is equal to or higher\n            than\n\n            ExpiryHeight\n        exchanged_offer_coin:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n          title: offer coin exchanged until now\n        remaining_offer_coin:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n          title: offer coin currently remaining to be exchanged\n        reserved_offer_coin_fee:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n          title: reserve fee for pays fee in half offer coin\n        msg:\n          title: MsgSwapWithinBatch\n          type: object\n          properties:\n            swap_requester_address:\n              type: string\n              title: address of swap requester\n            pool_id:\n              type: string\n              format: uint64\n              description: >-\n                id of swap type, must match the value in the pool. Only\n                `swap_type_id` 1 is\n\n                supported.\n            swap_type_id:\n              type: integer\n              format: int64\n              description: id of swap type. Must match the value in the pool.\n            offer_coin:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom method\n\n                signatures required by gogoproto.\n            demand_coin_denom:\n              type: string\n              description: >-\n                denom of demand coin to be exchanged on the swap request, must\n                match the\n\n                denom in the pool.\n            offer_coin_fee:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom method\n\n                signatures required by gogoproto.\n            order_price:\n              type: string\n              description: >-\n                limit order price for the order, the price is the exchange ratio\n                of X/Y\n\n                where X is the amount of the first coin and Y is the amount\n\n                of the second coin when their denoms are sorted alphabetically.\n          description: >-\n            `MsgSwapWithinBatch` defines an sdk.Msg type that supports\n            submitting a swap\n\n            offer request to the batch of the liquidity pool. Submit swap offer to the\n\n            liquidity pool batch with the specified the `pool_id`, `swap_type_id`,\n\n            `demand_coin_denom` with the coin and the price you're offering\n\n            and `offer_coin_fee` must be half of offer coin amount * current\n\n            `params.swap_fee_rate` and ceil for reservation to pay fees. This request is\n\n            stacked in the batch of the liquidity pool, is not processed immediately, and\n\n            is processed in the `endblock` at the same time as other requests. You must\n\n            request the same fields as the pool. Only the default `swap_type_id` 1 is\n\n            supported.\n\n\n            See: https://github.com/gravity-devs/liquidity/tree/develop/doc\n\n            https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n      description: |-\n        SwapMsgState defines the state of the swap message that contains state\n        information as the message is processed in the next batch or batches.\n    cyber.liquidity.v1beta1.WithdrawMsgState:\n      type: object\n      properties:\n        msg_height:\n          type: string\n          format: int64\n          title: height where this message is appended to the batch\n        msg_index:\n          type: string\n          format: uint64\n          title: index of this withdraw message in this liquidity pool\n        executed:\n          type: boolean\n          title: true if executed on this batch, false if not executed\n        succeeded:\n          type: boolean\n          title: true if executed successfully on this batch, false if failed\n        to_be_deleted:\n          type: boolean\n          title: true if ready to be deleted on kvstore, false if not ready to be deleted\n        msg:\n          title: MsgWithdrawWithinBatch\n          type: object\n          properties:\n            withdrawer_address:\n              type: string\n            pool_id:\n              type: string\n              format: uint64\n              title: id of the target pool\n            pool_coin:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom method\n\n                signatures required by gogoproto.\n          description: >-\n            `MsgWithdrawWithinBatch` defines an `sdk.Msg` type that supports\n            submitting\n\n            a withdraw request to the batch of the liquidity pool.\n\n            Withdraw is submitted to the batch from the Liquidity pool with the\n\n            specified `pool_id`, `pool_coin` of the pool.\n\n            This request is stacked in the batch of the liquidity pool, is not processed\n\n            immediately, and is processed in the `endblock` at the same time as other\n\n            requests.\n\n\n            See:\n\n            https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n      description: >-\n        WithdrawMsgState defines the state of the withdraw message that contains\n\n        state information as the message is processed in the next batch or batches.\n    cosmos.app.v1alpha1.Config:\n      type: object\n      properties:\n        modules:\n          type: array\n          items:\n            type: object\n            properties:\n              name:\n                type: string\n                description: >-\n                  name is the unique name of the module within the app. It\n                  should be a name\n\n                  that persists between different versions of a module so that modules\n\n                  can be smoothly upgraded to new versions.\n\n\n                  For example, for the module cosmos.bank.module.v1.Module, we may chose\n\n                  to simply name the module \"bank\" in the app. When we upgrade to\n\n                  cosmos.bank.module.v2.Module, the app-specific name \"bank\" stays the same\n\n                  and the framework knows that the v2 module should receive all the same state\n\n                  that the v1 module had. Note: modules should provide info on which versions\n\n                  they can migrate from in the ModuleDescriptor.can_migration_from field.\n              config:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n                description: >-\n                  config is the config object for the module. Module config\n                  messages should\n\n                  define a ModuleDescriptor using the cosmos.app.v1alpha1.is_module extension.\n              golang_bindings:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    interface_type:\n                      type: string\n                      title: interface_type is the interface type which will be bound to a specific\n                        implementation type\n                    implementation:\n                      type: string\n                      title: implementation is the implementing type which will be supplied when an\n                        input of type interface is requested\n                  description: GolangBinding is an explicit interface type to implementing type\n                    binding for dependency injection.\n                description: >-\n                  golang_bindings specifies explicit interface to implementation\n                  type bindings which\n\n                  depinject uses to resolve interface inputs to provider functions.  The scope of this\n\n                  field's configuration is module specific.\n            description: ModuleConfig is a module configuration for an app.\n          description: modules are the module configurations for the app.\n        golang_bindings:\n          type: array\n          items:\n            type: object\n            properties:\n              interface_type:\n                type: string\n                title: interface_type is the interface type which will be bound to a specific\n                  implementation type\n              implementation:\n                type: string\n                title: implementation is the implementing type which will be supplied when an\n                  input of type interface is requested\n            description: GolangBinding is an explicit interface type to implementing type\n              binding for dependency injection.\n          description: >-\n            golang_bindings specifies explicit interface to implementation type\n            bindings which\n\n            depinject uses to resolve interface inputs to provider functions.  The scope of this\n\n            field's configuration is global (not module specific).\n      description: >-\n        Config represents the configuration for a Cosmos SDK ABCI app.\n\n        It is intended that all state machine logic including the version of\n\n        baseapp and tx handlers (and possibly even Tendermint) that an app needs\n\n        can be described in a config object. For compatibility, the framework should\n\n        allow a mixture of declarative and imperative app wiring, however, apps\n\n        that strive for the maximum ease of maintainability should be able to describe\n\n        their state machine with a config object alone.\n    cosmos.app.v1alpha1.GolangBinding:\n      type: object\n      properties:\n        interface_type:\n          type: string\n          title: interface_type is the interface type which will be bound to a specific\n            implementation type\n        implementation:\n          type: string\n          title: implementation is the implementing type which will be supplied when an\n            input of type interface is requested\n      description: GolangBinding is an explicit interface type to implementing type\n        binding for dependency injection.\n    cosmos.app.v1alpha1.ModuleConfig:\n      type: object\n      properties:\n        name:\n          type: string\n          description: >-\n            name is the unique name of the module within the app. It should be a\n            name\n\n            that persists between different versions of a module so that modules\n\n            can be smoothly upgraded to new versions.\n\n\n            For example, for the module cosmos.bank.module.v1.Module, we may chose\n\n            to simply name the module \"bank\" in the app. When we upgrade to\n\n            cosmos.bank.module.v2.Module, the app-specific name \"bank\" stays the same\n\n            and the framework knows that the v2 module should receive all the same state\n\n            that the v1 module had. Note: modules should provide info on which versions\n\n            they can migrate from in the ModuleDescriptor.can_migration_from field.\n        config:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n          description: >-\n            config is the config object for the module. Module config messages\n            should\n\n            define a ModuleDescriptor using the cosmos.app.v1alpha1.is_module extension.\n        golang_bindings:\n          type: array\n          items:\n            type: object\n            properties:\n              interface_type:\n                type: string\n                title: interface_type is the interface type which will be bound to a specific\n                  implementation type\n              implementation:\n                type: string\n                title: implementation is the implementing type which will be supplied when an\n                  input of type interface is requested\n            description: GolangBinding is an explicit interface type to implementing type\n              binding for dependency injection.\n          description: >-\n            golang_bindings specifies explicit interface to implementation type\n            bindings which\n\n            depinject uses to resolve interface inputs to provider functions.  The scope of this\n\n            field's configuration is module specific.\n      description: ModuleConfig is a module configuration for an app.\n    cosmos.app.v1alpha1.QueryConfigResponse:\n      type: object\n      properties:\n        config:\n          description: config is the current app config.\n          type: object\n          properties:\n            modules:\n              type: array\n              items:\n                type: object\n                properties:\n                  name:\n                    type: string\n                    description: >-\n                      name is the unique name of the module within the app. It\n                      should be a name\n\n                      that persists between different versions of a module so that modules\n\n                      can be smoothly upgraded to new versions.\n\n\n                      For example, for the module cosmos.bank.module.v1.Module, we may chose\n\n                      to simply name the module \"bank\" in the app. When we upgrade to\n\n                      cosmos.bank.module.v2.Module, the app-specific name \"bank\" stays the same\n\n                      and the framework knows that the v2 module should receive all the same state\n\n                      that the v1 module had. Note: modules should provide info on which versions\n\n                      they can migrate from in the ModuleDescriptor.can_migration_from field.\n                  config:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                    description: >-\n                      config is the config object for the module. Module config\n                      messages should\n\n                      define a ModuleDescriptor using the cosmos.app.v1alpha1.is_module extension.\n                  golang_bindings:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        interface_type:\n                          type: string\n                          title: interface_type is the interface type which will be bound to a specific\n                            implementation type\n                        implementation:\n                          type: string\n                          title: implementation is the implementing type which will be supplied when an\n                            input of type interface is requested\n                      description: GolangBinding is an explicit interface type to implementing type\n                        binding for dependency injection.\n                    description: >-\n                      golang_bindings specifies explicit interface to\n                      implementation type bindings which\n\n                      depinject uses to resolve interface inputs to provider functions.  The scope of this\n\n                      field's configuration is module specific.\n                description: ModuleConfig is a module configuration for an app.\n              description: modules are the module configurations for the app.\n            golang_bindings:\n              type: array\n              items:\n                type: object\n                properties:\n                  interface_type:\n                    type: string\n                    title: interface_type is the interface type which will be bound to a specific\n                      implementation type\n                  implementation:\n                    type: string\n                    title: implementation is the implementing type which will be supplied when an\n                      input of type interface is requested\n                description: GolangBinding is an explicit interface type to implementing type\n                  binding for dependency injection.\n              description: >-\n                golang_bindings specifies explicit interface to implementation\n                type bindings which\n\n                depinject uses to resolve interface inputs to provider functions.  The scope of this\n\n                field's configuration is global (not module specific).\n      description: QueryConfigRequest is the Query/Config response type.\n    cosmwasm.wasm.v1.AbsoluteTxPosition:\n      type: object\n      properties:\n        block_height:\n          type: string\n          format: uint64\n          title: BlockHeight is the block the contract was created at\n        tx_index:\n          type: string\n          format: uint64\n          title: >-\n            TxIndex is a monotonic counter within the block (actual transaction\n            index,\n\n            or gas consumed)\n      description: >-\n        AbsoluteTxPosition is a unique transaction position that allows for\n        global\n\n        ordering of transactions.\n    cosmwasm.wasm.v1.AccessConfig:\n      type: object\n      properties:\n        permission:\n          type: string\n          enum:\n            - ACCESS_TYPE_UNSPECIFIED\n            - ACCESS_TYPE_NOBODY\n            - ACCESS_TYPE_EVERYBODY\n            - ACCESS_TYPE_ANY_OF_ADDRESSES\n          default: ACCESS_TYPE_UNSPECIFIED\n          description: >-\n            - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder for\n            empty value\n             - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n             - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n             - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n          title: AccessType permission types\n        addresses:\n          type: array\n          items:\n            type: string\n      description: AccessConfig access control type.\n    cosmwasm.wasm.v1.AccessType:\n      type: string\n      enum:\n        - ACCESS_TYPE_UNSPECIFIED\n        - ACCESS_TYPE_NOBODY\n        - ACCESS_TYPE_EVERYBODY\n        - ACCESS_TYPE_ANY_OF_ADDRESSES\n      default: ACCESS_TYPE_UNSPECIFIED\n      description: >-\n        - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder for empty\n        value\n         - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n         - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n         - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n      title: AccessType permission types\n    cosmwasm.wasm.v1.CodeInfoResponse:\n      type: object\n      properties:\n        code_id:\n          type: string\n          format: uint64\n        creator:\n          type: string\n        data_hash:\n          type: string\n          format: byte\n        instantiate_permission:\n          type: object\n          properties:\n            permission:\n              type: string\n              enum:\n                - ACCESS_TYPE_UNSPECIFIED\n                - ACCESS_TYPE_NOBODY\n                - ACCESS_TYPE_EVERYBODY\n                - ACCESS_TYPE_ANY_OF_ADDRESSES\n              default: ACCESS_TYPE_UNSPECIFIED\n              description: >-\n                - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder for\n                empty value\n                 - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n                 - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n                 - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n              title: AccessType permission types\n            addresses:\n              type: array\n              items:\n                type: string\n          description: AccessConfig access control type.\n      title: CodeInfoResponse contains code meta data from CodeInfo\n    cosmwasm.wasm.v1.ContractCodeHistoryEntry:\n      type: object\n      properties:\n        operation:\n          type: string\n          enum:\n            - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED\n            - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT\n            - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE\n            - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS\n          default: CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED\n          description: >-\n            - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED:\n            ContractCodeHistoryOperationTypeUnspecified placeholder for empty\n            value\n             - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT: ContractCodeHistoryOperationTypeInit on chain contract instantiation\n             - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE: ContractCodeHistoryOperationTypeMigrate code migration\n             - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS: ContractCodeHistoryOperationTypeGenesis based on genesis data\n          title: ContractCodeHistoryOperationType actions that caused a code change\n        code_id:\n          type: string\n          format: uint64\n          title: CodeID is the reference to the stored WASM code\n        updated:\n          description: Updated Tx position when the operation was executed.\n          type: object\n          properties:\n            block_height:\n              type: string\n              format: uint64\n              title: BlockHeight is the block the contract was created at\n            tx_index:\n              type: string\n              format: uint64\n              title: >-\n                TxIndex is a monotonic counter within the block (actual\n                transaction index,\n\n                or gas consumed)\n        msg:\n          type: string\n          format: byte\n      description: ContractCodeHistoryEntry metadata to a contract.\n    cosmwasm.wasm.v1.ContractCodeHistoryOperationType:\n      type: string\n      enum:\n        - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED\n        - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT\n        - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE\n        - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS\n      default: CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED\n      description: >-\n        - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED:\n        ContractCodeHistoryOperationTypeUnspecified placeholder for empty value\n         - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT: ContractCodeHistoryOperationTypeInit on chain contract instantiation\n         - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE: ContractCodeHistoryOperationTypeMigrate code migration\n         - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS: ContractCodeHistoryOperationTypeGenesis based on genesis data\n      title: ContractCodeHistoryOperationType actions that caused a code change\n    cosmwasm.wasm.v1.ContractInfo:\n      type: object\n      properties:\n        code_id:\n          type: string\n          format: uint64\n          title: CodeID is the reference to the stored Wasm code\n        creator:\n          type: string\n          title: Creator address who initially instantiated the contract\n        admin:\n          type: string\n          title: Admin is an optional address that can execute migrations\n        label:\n          type: string\n          description: Label is optional metadata to be stored with a contract instance.\n        created:\n          description: Created Tx position when the contract was instantiated.\n          type: object\n          properties:\n            block_height:\n              type: string\n              format: uint64\n              title: BlockHeight is the block the contract was created at\n            tx_index:\n              type: string\n              format: uint64\n              title: >-\n                TxIndex is a monotonic counter within the block (actual\n                transaction index,\n\n                or gas consumed)\n        ibc_port_id:\n          type: string\n        extension:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n          description: |-\n            Extension is an extension point to store custom metadata within the\n            persistence model.\n      title: ContractInfo stores a WASM contract instance\n    cosmwasm.wasm.v1.Model:\n      type: object\n      properties:\n        key:\n          type: string\n          format: byte\n          title: hex-encode key to read it better (this is often ascii)\n        value:\n          type: string\n          format: byte\n          title: base64-encode raw value\n      title: Model is a struct that holds a KV pair\n    cosmwasm.wasm.v1.Params:\n      type: object\n      properties:\n        code_upload_access:\n          type: object\n          properties:\n            permission:\n              type: string\n              enum:\n                - ACCESS_TYPE_UNSPECIFIED\n                - ACCESS_TYPE_NOBODY\n                - ACCESS_TYPE_EVERYBODY\n                - ACCESS_TYPE_ANY_OF_ADDRESSES\n              default: ACCESS_TYPE_UNSPECIFIED\n              description: >-\n                - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder for\n                empty value\n                 - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n                 - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n                 - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n              title: AccessType permission types\n            addresses:\n              type: array\n              items:\n                type: string\n          description: AccessConfig access control type.\n        instantiate_default_permission:\n          type: string\n          enum:\n            - ACCESS_TYPE_UNSPECIFIED\n            - ACCESS_TYPE_NOBODY\n            - ACCESS_TYPE_EVERYBODY\n            - ACCESS_TYPE_ANY_OF_ADDRESSES\n          default: ACCESS_TYPE_UNSPECIFIED\n          description: >-\n            - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder for\n            empty value\n             - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n             - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n             - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n          title: AccessType permission types\n      description: Params defines the set of wasm parameters.\n    cosmwasm.wasm.v1.QueryAllContractStateResponse:\n      type: object\n      properties:\n        models:\n          type: array\n          items:\n            type: object\n            properties:\n              key:\n                type: string\n                format: byte\n                title: hex-encode key to read it better (this is often ascii)\n              value:\n                type: string\n                format: byte\n                title: base64-encode raw value\n            title: Model is a struct that holds a KV pair\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      title: |-\n        QueryAllContractStateResponse is the response type for the\n        Query/AllContractState RPC method\n    cosmwasm.wasm.v1.QueryCodeResponse:\n      type: object\n      properties:\n        code_info:\n          type: object\n          properties:\n            code_id:\n              type: string\n              format: uint64\n            creator:\n              type: string\n            data_hash:\n              type: string\n              format: byte\n            instantiate_permission:\n              type: object\n              properties:\n                permission:\n                  type: string\n                  enum:\n                    - ACCESS_TYPE_UNSPECIFIED\n                    - ACCESS_TYPE_NOBODY\n                    - ACCESS_TYPE_EVERYBODY\n                    - ACCESS_TYPE_ANY_OF_ADDRESSES\n                  default: ACCESS_TYPE_UNSPECIFIED\n                  description: >-\n                    - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder\n                    for empty value\n                     - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n                     - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n                     - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n                  title: AccessType permission types\n                addresses:\n                  type: array\n                  items:\n                    type: string\n              description: AccessConfig access control type.\n          title: CodeInfoResponse contains code meta data from CodeInfo\n        data:\n          type: string\n          format: byte\n      title: QueryCodeResponse is the response type for the Query/Code RPC method\n    cosmwasm.wasm.v1.QueryCodesResponse:\n      type: object\n      properties:\n        code_infos:\n          type: array\n          items:\n            type: object\n            properties:\n              code_id:\n                type: string\n                format: uint64\n              creator:\n                type: string\n              data_hash:\n                type: string\n                format: byte\n              instantiate_permission:\n                type: object\n                properties:\n                  permission:\n                    type: string\n                    enum:\n                      - ACCESS_TYPE_UNSPECIFIED\n                      - ACCESS_TYPE_NOBODY\n                      - ACCESS_TYPE_EVERYBODY\n                      - ACCESS_TYPE_ANY_OF_ADDRESSES\n                    default: ACCESS_TYPE_UNSPECIFIED\n                    description: >-\n                      - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified\n                      placeholder for empty value\n                       - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n                       - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n                       - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n                    title: AccessType permission types\n                  addresses:\n                    type: array\n                    items:\n                      type: string\n                description: AccessConfig access control type.\n            title: CodeInfoResponse contains code meta data from CodeInfo\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      title: QueryCodesResponse is the response type for the Query/Codes RPC method\n    cosmwasm.wasm.v1.QueryContractHistoryResponse:\n      type: object\n      properties:\n        entries:\n          type: array\n          items:\n            type: object\n            properties:\n              operation:\n                type: string\n                enum:\n                  - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED\n                  - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT\n                  - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE\n                  - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS\n                default: CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED\n                description: >-\n                  - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED:\n                  ContractCodeHistoryOperationTypeUnspecified placeholder for\n                  empty value\n                   - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT: ContractCodeHistoryOperationTypeInit on chain contract instantiation\n                   - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE: ContractCodeHistoryOperationTypeMigrate code migration\n                   - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS: ContractCodeHistoryOperationTypeGenesis based on genesis data\n                title: ContractCodeHistoryOperationType actions that caused a code change\n              code_id:\n                type: string\n                format: uint64\n                title: CodeID is the reference to the stored WASM code\n              updated:\n                description: Updated Tx position when the operation was executed.\n                type: object\n                properties:\n                  block_height:\n                    type: string\n                    format: uint64\n                    title: BlockHeight is the block the contract was created at\n                  tx_index:\n                    type: string\n                    format: uint64\n                    title: >-\n                      TxIndex is a monotonic counter within the block (actual\n                      transaction index,\n\n                      or gas consumed)\n              msg:\n                type: string\n                format: byte\n            description: ContractCodeHistoryEntry metadata to a contract.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      title: |-\n        QueryContractHistoryResponse is the response type for the\n        Query/ContractHistory RPC method\n    cosmwasm.wasm.v1.QueryContractInfoResponse:\n      type: object\n      properties:\n        address:\n          type: string\n          title: address is the address of the contract\n        contract_info:\n          type: object\n          properties:\n            code_id:\n              type: string\n              format: uint64\n              title: CodeID is the reference to the stored Wasm code\n            creator:\n              type: string\n              title: Creator address who initially instantiated the contract\n            admin:\n              type: string\n              title: Admin is an optional address that can execute migrations\n            label:\n              type: string\n              description: Label is optional metadata to be stored with a contract instance.\n            created:\n              description: Created Tx position when the contract was instantiated.\n              type: object\n              properties:\n                block_height:\n                  type: string\n                  format: uint64\n                  title: BlockHeight is the block the contract was created at\n                tx_index:\n                  type: string\n                  format: uint64\n                  title: >-\n                    TxIndex is a monotonic counter within the block (actual\n                    transaction index,\n\n                    or gas consumed)\n            ibc_port_id:\n              type: string\n            extension:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n              description: >-\n                Extension is an extension point to store custom metadata within\n                the\n\n                persistence model.\n          title: ContractInfo stores a WASM contract instance\n      title: >-\n        QueryContractInfoResponse is the response type for the\n        Query/ContractInfo RPC\n\n        method\n    cosmwasm.wasm.v1.QueryContractsByCodeResponse:\n      type: object\n      properties:\n        contracts:\n          type: array\n          items:\n            type: string\n          title: contracts are a set of contract addresses\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      title: |-\n        QueryContractsByCodeResponse is the response type for the\n        Query/ContractsByCode RPC method\n    cosmwasm.wasm.v1.QueryContractsByCreatorResponse:\n      type: object\n      properties:\n        contract_addresses:\n          type: array\n          items:\n            type: string\n          title: ContractAddresses result set\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: |-\n        QueryContractsByCreatorResponse is the response type for the\n        Query/ContractsByCreator RPC method.\n    cosmwasm.wasm.v1.QueryParamsResponse:\n      type: object\n      properties:\n        params:\n          description: params defines the parameters of the module.\n          type: object\n          properties:\n            code_upload_access:\n              type: object\n              properties:\n                permission:\n                  type: string\n                  enum:\n                    - ACCESS_TYPE_UNSPECIFIED\n                    - ACCESS_TYPE_NOBODY\n                    - ACCESS_TYPE_EVERYBODY\n                    - ACCESS_TYPE_ANY_OF_ADDRESSES\n                  default: ACCESS_TYPE_UNSPECIFIED\n                  description: >-\n                    - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder\n                    for empty value\n                     - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n                     - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n                     - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n                  title: AccessType permission types\n                addresses:\n                  type: array\n                  items:\n                    type: string\n              description: AccessConfig access control type.\n            instantiate_default_permission:\n              type: string\n              enum:\n                - ACCESS_TYPE_UNSPECIFIED\n                - ACCESS_TYPE_NOBODY\n                - ACCESS_TYPE_EVERYBODY\n                - ACCESS_TYPE_ANY_OF_ADDRESSES\n              default: ACCESS_TYPE_UNSPECIFIED\n              description: >-\n                - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder for\n                empty value\n                 - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n                 - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n                 - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n              title: AccessType permission types\n      description: QueryParamsResponse is the response type for the Query/Params RPC method.\n    cosmwasm.wasm.v1.QueryPinnedCodesResponse:\n      type: object\n      properties:\n        code_ids:\n          type: array\n          items:\n            type: string\n            format: uint64\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      title: |-\n        QueryPinnedCodesResponse is the response type for the\n        Query/PinnedCodes RPC method\n    cosmwasm.wasm.v1.QueryRawContractStateResponse:\n      type: object\n      properties:\n        data:\n          type: string\n          format: byte\n          title: Data contains the raw store data\n      title: |-\n        QueryRawContractStateResponse is the response type for the\n        Query/RawContractState RPC method\n    cosmwasm.wasm.v1.QuerySmartContractStateResponse:\n      type: object\n      properties:\n        data:\n          type: string\n          format: byte\n          title: Data contains the json data returned from the smart contract\n      title: |-\n        QuerySmartContractStateResponse is the response type for the\n        Query/SmartContractState RPC method\n    cyber.bandwidth.v1beta1.NeuronBandwidth:\n      type: object\n      properties:\n        neuron:\n          type: string\n        remained_value:\n          type: string\n          format: uint64\n        last_updated_block:\n          type: string\n          format: uint64\n        max_value:\n          type: string\n          format: uint64\n    cyber.bandwidth.v1beta1.Params:\n      type: object\n      properties:\n        recovery_period:\n          type: string\n          format: uint64\n        adjust_price_period:\n          type: string\n          format: uint64\n        base_price:\n          type: string\n        base_load:\n          type: string\n        max_block_bandwidth:\n          type: string\n          format: uint64\n    cyber.bandwidth.v1beta1.QueryLoadResponse:\n      type: object\n      properties:\n        load:\n          type: string\n    cyber.bandwidth.v1beta1.QueryNeuronBandwidthResponse:\n      type: object\n      properties:\n        neuron_bandwidth:\n          type: object\n          properties:\n            neuron:\n              type: string\n            remained_value:\n              type: string\n              format: uint64\n            last_updated_block:\n              type: string\n              format: uint64\n            max_value:\n              type: string\n              format: uint64\n    cyber.bandwidth.v1beta1.QueryParamsResponse:\n      type: object\n      properties:\n        params:\n          type: object\n          properties:\n            recovery_period:\n              type: string\n              format: uint64\n            adjust_price_period:\n              type: string\n              format: uint64\n            base_price:\n              type: string\n            base_load:\n              type: string\n            max_block_bandwidth:\n              type: string\n              format: uint64\n    cyber.bandwidth.v1beta1.QueryPriceResponse:\n      type: object\n      properties:\n        price:\n          type: string\n    cyber.bandwidth.v1beta1.QueryTotalBandwidthResponse:\n      type: object\n      properties:\n        total_bandwidth:\n          type: string\n          format: uint64\n    cosmos.base.tendermint.v1beta1.ABCIQueryResponse:\n      type: object\n      properties:\n        code:\n          type: integer\n          format: int64\n        log:\n          type: string\n        info:\n          type: string\n        index:\n          type: string\n          format: int64\n        key:\n          type: string\n          format: byte\n        value:\n          type: string\n          format: byte\n        proof_ops:\n          type: object\n          properties:\n            ops:\n              type: array\n              items:\n                type: object\n                properties:\n                  type:\n                    type: string\n                  key:\n                    type: string\n                    format: byte\n                  data:\n                    type: string\n                    format: byte\n                description: >-\n                  ProofOp defines an operation used for calculating Merkle root.\n                  The data could\n\n                  be arbitrary format, providing necessary data for example neighbouring node\n\n                  hash.\n\n\n                  Note: This type is a duplicate of the ProofOp proto type defined in Tendermint.\n          description: >-\n            ProofOps is Merkle proof defined by the list of ProofOps.\n\n\n            Note: This type is a duplicate of the ProofOps proto type defined in Tendermint.\n        height:\n          type: string\n          format: int64\n        codespace:\n          type: string\n      description: >-\n        ABCIQueryResponse defines the response structure for the ABCIQuery gRPC\n        query.\n\n\n        Note: This type is a duplicate of the ResponseQuery proto type defined in\n\n        Tendermint.\n    cosmos.base.tendermint.v1beta1.Block:\n      type: object\n      properties:\n        header:\n          type: object\n          properties:\n            version:\n              title: basic block info\n              type: object\n              properties:\n                block:\n                  type: string\n                  format: uint64\n                app:\n                  type: string\n                  format: uint64\n              description: >-\n                Consensus captures the consensus rules for processing a block in\n                the blockchain,\n\n                including all blockchain data structures and the rules of the application's\n\n                state transition machine.\n            chain_id:\n              type: string\n            height:\n              type: string\n              format: int64\n            time:\n              type: string\n              format: date-time\n            last_block_id:\n              type: object\n              properties:\n                hash:\n                  type: string\n                  format: byte\n                part_set_header:\n                  type: object\n                  properties:\n                    total:\n                      type: integer\n                      format: int64\n                    hash:\n                      type: string\n                      format: byte\n                  title: PartsetHeader\n              title: BlockID\n            last_commit_hash:\n              type: string\n              format: byte\n              title: hashes of block data\n            data_hash:\n              type: string\n              format: byte\n            validators_hash:\n              type: string\n              format: byte\n              title: hashes from the app output from the prev block\n            next_validators_hash:\n              type: string\n              format: byte\n            consensus_hash:\n              type: string\n              format: byte\n            app_hash:\n              type: string\n              format: byte\n            last_results_hash:\n              type: string\n              format: byte\n            evidence_hash:\n              type: string\n              format: byte\n              title: consensus info\n            proposer_address:\n              type: string\n              description: >-\n                proposer_address is the original block proposer address,\n                formatted as a Bech32 string.\n\n                In Tendermint, this type is `bytes`, but in the SDK, we convert it to a Bech32 string\n\n                for better UX.\n          description: Header defines the structure of a Tendermint block header.\n        data:\n          type: object\n          properties:\n            txs:\n              type: array\n              items:\n                type: string\n                format: byte\n              description: >-\n                Txs that will be applied by state @ block.Height+1.\n\n                NOTE: not all txs here are valid.  We're just agreeing on the order first.\n\n                This means that block.AppHash does not include these txs.\n          title: Data contains the set of transactions included in the block\n        evidence:\n          type: object\n          properties:\n            evidence:\n              type: array\n              items:\n                type: object\n                properties:\n                  duplicate_vote_evidence:\n                    type: object\n                    properties:\n                      vote_a:\n                        type: object\n                        properties:\n                          type:\n                            type: string\n                            enum:\n                              - SIGNED_MSG_TYPE_UNKNOWN\n                              - SIGNED_MSG_TYPE_PREVOTE\n                              - SIGNED_MSG_TYPE_PRECOMMIT\n                              - SIGNED_MSG_TYPE_PROPOSAL\n                            default: SIGNED_MSG_TYPE_UNKNOWN\n                            description: >-\n                              SignedMsgType is a type of signed message in the\n                              consensus.\n\n                               - SIGNED_MSG_TYPE_PREVOTE: Votes\n                               - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                          height:\n                            type: string\n                            format: int64\n                          round:\n                            type: integer\n                            format: int32\n                          block_id:\n                            type: object\n                            properties:\n                              hash:\n                                type: string\n                                format: byte\n                              part_set_header:\n                                type: object\n                                properties:\n                                  total:\n                                    type: integer\n                                    format: int64\n                                  hash:\n                                    type: string\n                                    format: byte\n                                title: PartsetHeader\n                            title: BlockID\n                          timestamp:\n                            type: string\n                            format: date-time\n                          validator_address:\n                            type: string\n                            format: byte\n                          validator_index:\n                            type: integer\n                            format: int32\n                          signature:\n                            type: string\n                            format: byte\n                        description: >-\n                          Vote represents a prevote, precommit, or commit vote\n                          from validators for\n\n                          consensus.\n                      vote_b:\n                        type: object\n                        properties:\n                          type:\n                            type: string\n                            enum:\n                              - SIGNED_MSG_TYPE_UNKNOWN\n                              - SIGNED_MSG_TYPE_PREVOTE\n                              - SIGNED_MSG_TYPE_PRECOMMIT\n                              - SIGNED_MSG_TYPE_PROPOSAL\n                            default: SIGNED_MSG_TYPE_UNKNOWN\n                            description: >-\n                              SignedMsgType is a type of signed message in the\n                              consensus.\n\n                               - SIGNED_MSG_TYPE_PREVOTE: Votes\n                               - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                          height:\n                            type: string\n                            format: int64\n                          round:\n                            type: integer\n                            format: int32\n                          block_id:\n                            type: object\n                            properties:\n                              hash:\n                                type: string\n                                format: byte\n                              part_set_header:\n                                type: object\n                                properties:\n                                  total:\n                                    type: integer\n                                    format: int64\n                                  hash:\n                                    type: string\n                                    format: byte\n                                title: PartsetHeader\n                            title: BlockID\n                          timestamp:\n                            type: string\n                            format: date-time\n                          validator_address:\n                            type: string\n                            format: byte\n                          validator_index:\n                            type: integer\n                            format: int32\n                          signature:\n                            type: string\n                            format: byte\n                        description: >-\n                          Vote represents a prevote, precommit, or commit vote\n                          from validators for\n\n                          consensus.\n                      total_voting_power:\n                        type: string\n                        format: int64\n                      validator_power:\n                        type: string\n                        format: int64\n                      timestamp:\n                        type: string\n                        format: date-time\n                    description: DuplicateVoteEvidence contains evidence of a validator signed two\n                      conflicting votes.\n                  light_client_attack_evidence:\n                    type: object\n                    properties:\n                      conflicting_block:\n                        type: object\n                        properties:\n                          signed_header:\n                            type: object\n                            properties:\n                              header:\n                                type: object\n                                properties:\n                                  version:\n                                    title: basic block info\n                                    type: object\n                                    properties:\n                                      block:\n                                        type: string\n                                        format: uint64\n                                      app:\n                                        type: string\n                                        format: uint64\n                                    description: >-\n                                      Consensus captures the consensus rules for\n                                      processing a block in the blockchain,\n\n                                      including all blockchain data structures and the rules of the application's\n\n                                      state transition machine.\n                                  chain_id:\n                                    type: string\n                                  height:\n                                    type: string\n                                    format: int64\n                                  time:\n                                    type: string\n                                    format: date-time\n                                  last_block_id:\n                                    title: prev block info\n                                    type: object\n                                    properties:\n                                      hash:\n                                        type: string\n                                        format: byte\n                                      part_set_header:\n                                        type: object\n                                        properties:\n                                          total:\n                                            type: integer\n                                            format: int64\n                                          hash:\n                                            type: string\n                                            format: byte\n                                        title: PartsetHeader\n                                  last_commit_hash:\n                                    type: string\n                                    format: byte\n                                    title: hashes of block data\n                                  data_hash:\n                                    type: string\n                                    format: byte\n                                  validators_hash:\n                                    type: string\n                                    format: byte\n                                    title: hashes from the app output from the prev block\n                                  next_validators_hash:\n                                    type: string\n                                    format: byte\n                                  consensus_hash:\n                                    type: string\n                                    format: byte\n                                  app_hash:\n                                    type: string\n                                    format: byte\n                                  last_results_hash:\n                                    type: string\n                                    format: byte\n                                  evidence_hash:\n                                    type: string\n                                    format: byte\n                                    title: consensus info\n                                  proposer_address:\n                                    type: string\n                                    format: byte\n                                description: Header defines the structure of a block header.\n                              commit:\n                                type: object\n                                properties:\n                                  height:\n                                    type: string\n                                    format: int64\n                                  round:\n                                    type: integer\n                                    format: int32\n                                  block_id:\n                                    type: object\n                                    properties:\n                                      hash:\n                                        type: string\n                                        format: byte\n                                      part_set_header:\n                                        type: object\n                                        properties:\n                                          total:\n                                            type: integer\n                                            format: int64\n                                          hash:\n                                            type: string\n                                            format: byte\n                                        title: PartsetHeader\n                                    title: BlockID\n                                  signatures:\n                                    type: array\n                                    items:\n                                      type: object\n                                      properties:\n                                        block_id_flag:\n                                          type: string\n                                          enum:\n                                            - BLOCK_ID_FLAG_UNKNOWN\n                                            - BLOCK_ID_FLAG_ABSENT\n                                            - BLOCK_ID_FLAG_COMMIT\n                                            - BLOCK_ID_FLAG_NIL\n                                          default: BLOCK_ID_FLAG_UNKNOWN\n                                          title: BlockIdFlag indicates which BlcokID the signature is for\n                                        validator_address:\n                                          type: string\n                                          format: byte\n                                        timestamp:\n                                          type: string\n                                          format: date-time\n                                        signature:\n                                          type: string\n                                          format: byte\n                                      description: CommitSig is a part of the Vote included in a Commit.\n                                description: Commit contains the evidence that a block was committed by a set of\n                                  validators.\n                          validator_set:\n                            type: object\n                            properties:\n                              validators:\n                                type: array\n                                items:\n                                  type: object\n                                  properties:\n                                    address:\n                                      type: string\n                                      format: byte\n                                    pub_key:\n                                      type: object\n                                      properties:\n                                        ed25519:\n                                          type: string\n                                          format: byte\n                                        secp256k1:\n                                          type: string\n                                          format: byte\n                                      title: PublicKey defines the keys available for use with Validators\n                                    voting_power:\n                                      type: string\n                                      format: int64\n                                    proposer_priority:\n                                      type: string\n                                      format: int64\n                              proposer:\n                                type: object\n                                properties:\n                                  address:\n                                    type: string\n                                    format: byte\n                                  pub_key:\n                                    type: object\n                                    properties:\n                                      ed25519:\n                                        type: string\n                                        format: byte\n                                      secp256k1:\n                                        type: string\n                                        format: byte\n                                    title: PublicKey defines the keys available for use with Validators\n                                  voting_power:\n                                    type: string\n                                    format: int64\n                                  proposer_priority:\n                                    type: string\n                                    format: int64\n                              total_voting_power:\n                                type: string\n                                format: int64\n                      common_height:\n                        type: string\n                        format: int64\n                      byzantine_validators:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            address:\n                              type: string\n                              format: byte\n                            pub_key:\n                              type: object\n                              properties:\n                                ed25519:\n                                  type: string\n                                  format: byte\n                                secp256k1:\n                                  type: string\n                                  format: byte\n                              title: PublicKey defines the keys available for use with Validators\n                            voting_power:\n                              type: string\n                              format: int64\n                            proposer_priority:\n                              type: string\n                              format: int64\n                      total_voting_power:\n                        type: string\n                        format: int64\n                      timestamp:\n                        type: string\n                        format: date-time\n                    description: LightClientAttackEvidence contains evidence of a set of validators\n                      attempting to mislead a light client.\n        last_commit:\n          type: object\n          properties:\n            height:\n              type: string\n              format: int64\n            round:\n              type: integer\n              format: int32\n            block_id:\n              type: object\n              properties:\n                hash:\n                  type: string\n                  format: byte\n                part_set_header:\n                  type: object\n                  properties:\n                    total:\n                      type: integer\n                      format: int64\n                    hash:\n                      type: string\n                      format: byte\n                  title: PartsetHeader\n              title: BlockID\n            signatures:\n              type: array\n              items:\n                type: object\n                properties:\n                  block_id_flag:\n                    type: string\n                    enum:\n                      - BLOCK_ID_FLAG_UNKNOWN\n                      - BLOCK_ID_FLAG_ABSENT\n                      - BLOCK_ID_FLAG_COMMIT\n                      - BLOCK_ID_FLAG_NIL\n                    default: BLOCK_ID_FLAG_UNKNOWN\n                    title: BlockIdFlag indicates which BlcokID the signature is for\n                  validator_address:\n                    type: string\n                    format: byte\n                  timestamp:\n                    type: string\n                    format: date-time\n                  signature:\n                    type: string\n                    format: byte\n                description: CommitSig is a part of the Vote included in a Commit.\n          description: Commit contains the evidence that a block was committed by a set of\n            validators.\n      description: |-\n        Block is tendermint type Block, with the Header proposer address\n        field converted to bech32 string.\n    cosmos.base.tendermint.v1beta1.GetBlockByHeightResponse:\n      type: object\n      properties:\n        block_id:\n          type: object\n          properties:\n            hash:\n              type: string\n              format: byte\n            part_set_header:\n              type: object\n              properties:\n                total:\n                  type: integer\n                  format: int64\n                hash:\n                  type: string\n                  format: byte\n              title: PartsetHeader\n          title: BlockID\n        block:\n          type: object\n          properties:\n            header:\n              type: object\n              properties:\n                version:\n                  title: basic block info\n                  type: object\n                  properties:\n                    block:\n                      type: string\n                      format: uint64\n                    app:\n                      type: string\n                      format: uint64\n                  description: >-\n                    Consensus captures the consensus rules for processing a\n                    block in the blockchain,\n\n                    including all blockchain data structures and the rules of the application's\n\n                    state transition machine.\n                chain_id:\n                  type: string\n                height:\n                  type: string\n                  format: int64\n                time:\n                  type: string\n                  format: date-time\n                last_block_id:\n                  title: prev block info\n                  type: object\n                  properties:\n                    hash:\n                      type: string\n                      format: byte\n                    part_set_header:\n                      type: object\n                      properties:\n                        total:\n                          type: integer\n                          format: int64\n                        hash:\n                          type: string\n                          format: byte\n                      title: PartsetHeader\n                last_commit_hash:\n                  type: string\n                  format: byte\n                  title: hashes of block data\n                data_hash:\n                  type: string\n                  format: byte\n                validators_hash:\n                  type: string\n                  format: byte\n                  title: hashes from the app output from the prev block\n                next_validators_hash:\n                  type: string\n                  format: byte\n                consensus_hash:\n                  type: string\n                  format: byte\n                app_hash:\n                  type: string\n                  format: byte\n                last_results_hash:\n                  type: string\n                  format: byte\n                evidence_hash:\n                  type: string\n                  format: byte\n                  title: consensus info\n                proposer_address:\n                  type: string\n                  format: byte\n              description: Header defines the structure of a block header.\n            data:\n              type: object\n              properties:\n                txs:\n                  type: array\n                  items:\n                    type: string\n                    format: byte\n                  description: >-\n                    Txs that will be applied by state @ block.Height+1.\n\n                    NOTE: not all txs here are valid.  We're just agreeing on the order first.\n\n                    This means that block.AppHash does not include these txs.\n              title: Data contains the set of transactions included in the block\n            evidence:\n              type: object\n              properties:\n                evidence:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      duplicate_vote_evidence:\n                        type: object\n                        properties:\n                          vote_a:\n                            type: object\n                            properties:\n                              type:\n                                type: string\n                                enum:\n                                  - SIGNED_MSG_TYPE_UNKNOWN\n                                  - SIGNED_MSG_TYPE_PREVOTE\n                                  - SIGNED_MSG_TYPE_PRECOMMIT\n                                  - SIGNED_MSG_TYPE_PROPOSAL\n                                default: SIGNED_MSG_TYPE_UNKNOWN\n                                description: >-\n                                  SignedMsgType is a type of signed message in\n                                  the consensus.\n\n                                   - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                   - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                              height:\n                                type: string\n                                format: int64\n                              round:\n                                type: integer\n                                format: int32\n                              block_id:\n                                type: object\n                                properties:\n                                  hash:\n                                    type: string\n                                    format: byte\n                                  part_set_header:\n                                    type: object\n                                    properties:\n                                      total:\n                                        type: integer\n                                        format: int64\n                                      hash:\n                                        type: string\n                                        format: byte\n                                    title: PartsetHeader\n                                title: BlockID\n                              timestamp:\n                                type: string\n                                format: date-time\n                              validator_address:\n                                type: string\n                                format: byte\n                              validator_index:\n                                type: integer\n                                format: int32\n                              signature:\n                                type: string\n                                format: byte\n                            description: >-\n                              Vote represents a prevote, precommit, or commit\n                              vote from validators for\n\n                              consensus.\n                          vote_b:\n                            type: object\n                            properties:\n                              type:\n                                type: string\n                                enum:\n                                  - SIGNED_MSG_TYPE_UNKNOWN\n                                  - SIGNED_MSG_TYPE_PREVOTE\n                                  - SIGNED_MSG_TYPE_PRECOMMIT\n                                  - SIGNED_MSG_TYPE_PROPOSAL\n                                default: SIGNED_MSG_TYPE_UNKNOWN\n                                description: >-\n                                  SignedMsgType is a type of signed message in\n                                  the consensus.\n\n                                   - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                   - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                              height:\n                                type: string\n                                format: int64\n                              round:\n                                type: integer\n                                format: int32\n                              block_id:\n                                type: object\n                                properties:\n                                  hash:\n                                    type: string\n                                    format: byte\n                                  part_set_header:\n                                    type: object\n                                    properties:\n                                      total:\n                                        type: integer\n                                        format: int64\n                                      hash:\n                                        type: string\n                                        format: byte\n                                    title: PartsetHeader\n                                title: BlockID\n                              timestamp:\n                                type: string\n                                format: date-time\n                              validator_address:\n                                type: string\n                                format: byte\n                              validator_index:\n                                type: integer\n                                format: int32\n                              signature:\n                                type: string\n                                format: byte\n                            description: >-\n                              Vote represents a prevote, precommit, or commit\n                              vote from validators for\n\n                              consensus.\n                          total_voting_power:\n                            type: string\n                            format: int64\n                          validator_power:\n                            type: string\n                            format: int64\n                          timestamp:\n                            type: string\n                            format: date-time\n                        description: DuplicateVoteEvidence contains evidence of a validator signed two\n                          conflicting votes.\n                      light_client_attack_evidence:\n                        type: object\n                        properties:\n                          conflicting_block:\n                            type: object\n                            properties:\n                              signed_header:\n                                type: object\n                                properties:\n                                  header:\n                                    type: object\n                                    properties:\n                                      version:\n                                        title: basic block info\n                                        type: object\n                                        properties:\n                                          block:\n                                            type: string\n                                            format: uint64\n                                          app:\n                                            type: string\n                                            format: uint64\n                                        description: >-\n                                          Consensus captures the consensus rules\n                                          for processing a block in the\n                                          blockchain,\n\n                                          including all blockchain data structures and the rules of the application's\n\n                                          state transition machine.\n                                      chain_id:\n                                        type: string\n                                      height:\n                                        type: string\n                                        format: int64\n                                      time:\n                                        type: string\n                                        format: date-time\n                                      last_block_id:\n                                        title: prev block info\n                                        type: object\n                                        properties:\n                                          hash:\n                                            type: string\n                                            format: byte\n                                          part_set_header:\n                                            type: object\n                                            properties:\n                                              total:\n                                                type: integer\n                                                format: int64\n                                              hash:\n                                                type: string\n                                                format: byte\n                                            title: PartsetHeader\n                                      last_commit_hash:\n                                        type: string\n                                        format: byte\n                                        title: hashes of block data\n                                      data_hash:\n                                        type: string\n                                        format: byte\n                                      validators_hash:\n                                        type: string\n                                        format: byte\n                                        title: hashes from the app output from the prev block\n                                      next_validators_hash:\n                                        type: string\n                                        format: byte\n                                      consensus_hash:\n                                        type: string\n                                        format: byte\n                                      app_hash:\n                                        type: string\n                                        format: byte\n                                      last_results_hash:\n                                        type: string\n                                        format: byte\n                                      evidence_hash:\n                                        type: string\n                                        format: byte\n                                        title: consensus info\n                                      proposer_address:\n                                        type: string\n                                        format: byte\n                                    description: Header defines the structure of a block header.\n                                  commit:\n                                    type: object\n                                    properties:\n                                      height:\n                                        type: string\n                                        format: int64\n                                      round:\n                                        type: integer\n                                        format: int32\n                                      block_id:\n                                        type: object\n                                        properties:\n                                          hash:\n                                            type: string\n                                            format: byte\n                                          part_set_header:\n                                            type: object\n                                            properties:\n                                              total:\n                                                type: integer\n                                                format: int64\n                                              hash:\n                                                type: string\n                                                format: byte\n                                            title: PartsetHeader\n                                        title: BlockID\n                                      signatures:\n                                        type: array\n                                        items:\n                                          type: object\n                                          properties:\n                                            block_id_flag:\n                                              type: string\n                                              enum:\n                                                - BLOCK_ID_FLAG_UNKNOWN\n                                                - BLOCK_ID_FLAG_ABSENT\n                                                - BLOCK_ID_FLAG_COMMIT\n                                                - BLOCK_ID_FLAG_NIL\n                                              default: BLOCK_ID_FLAG_UNKNOWN\n                                              title: BlockIdFlag indicates which BlcokID the signature is for\n                                            validator_address:\n                                              type: string\n                                              format: byte\n                                            timestamp:\n                                              type: string\n                                              format: date-time\n                                            signature:\n                                              type: string\n                                              format: byte\n                                          description: CommitSig is a part of the Vote included in a Commit.\n                                    description: Commit contains the evidence that a block was committed by a set of\n                                      validators.\n                              validator_set:\n                                type: object\n                                properties:\n                                  validators:\n                                    type: array\n                                    items:\n                                      type: object\n                                      properties:\n                                        address:\n                                          type: string\n                                          format: byte\n                                        pub_key:\n                                          type: object\n                                          properties:\n                                            ed25519:\n                                              type: string\n                                              format: byte\n                                            secp256k1:\n                                              type: string\n                                              format: byte\n                                          title: PublicKey defines the keys available for use with Validators\n                                        voting_power:\n                                          type: string\n                                          format: int64\n                                        proposer_priority:\n                                          type: string\n                                          format: int64\n                                  proposer:\n                                    type: object\n                                    properties:\n                                      address:\n                                        type: string\n                                        format: byte\n                                      pub_key:\n                                        type: object\n                                        properties:\n                                          ed25519:\n                                            type: string\n                                            format: byte\n                                          secp256k1:\n                                            type: string\n                                            format: byte\n                                        title: PublicKey defines the keys available for use with Validators\n                                      voting_power:\n                                        type: string\n                                        format: int64\n                                      proposer_priority:\n                                        type: string\n                                        format: int64\n                                  total_voting_power:\n                                    type: string\n                                    format: int64\n                          common_height:\n                            type: string\n                            format: int64\n                          byzantine_validators:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                address:\n                                  type: string\n                                  format: byte\n                                pub_key:\n                                  type: object\n                                  properties:\n                                    ed25519:\n                                      type: string\n                                      format: byte\n                                    secp256k1:\n                                      type: string\n                                      format: byte\n                                  title: PublicKey defines the keys available for use with Validators\n                                voting_power:\n                                  type: string\n                                  format: int64\n                                proposer_priority:\n                                  type: string\n                                  format: int64\n                          total_voting_power:\n                            type: string\n                            format: int64\n                          timestamp:\n                            type: string\n                            format: date-time\n                        description: LightClientAttackEvidence contains evidence of a set of validators\n                          attempting to mislead a light client.\n            last_commit:\n              type: object\n              properties:\n                height:\n                  type: string\n                  format: int64\n                round:\n                  type: integer\n                  format: int32\n                block_id:\n                  type: object\n                  properties:\n                    hash:\n                      type: string\n                      format: byte\n                    part_set_header:\n                      type: object\n                      properties:\n                        total:\n                          type: integer\n                          format: int64\n                        hash:\n                          type: string\n                          format: byte\n                      title: PartsetHeader\n                  title: BlockID\n                signatures:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      block_id_flag:\n                        type: string\n                        enum:\n                          - BLOCK_ID_FLAG_UNKNOWN\n                          - BLOCK_ID_FLAG_ABSENT\n                          - BLOCK_ID_FLAG_COMMIT\n                          - BLOCK_ID_FLAG_NIL\n                        default: BLOCK_ID_FLAG_UNKNOWN\n                        title: BlockIdFlag indicates which BlcokID the signature is for\n                      validator_address:\n                        type: string\n                        format: byte\n                      timestamp:\n                        type: string\n                        format: date-time\n                      signature:\n                        type: string\n                        format: byte\n                    description: CommitSig is a part of the Vote included in a Commit.\n              description: Commit contains the evidence that a block was committed by a set of\n                validators.\n          title: \"Deprecated: please use `sdk_block` instead\"\n        sdk_block:\n          title: \"Since: cosmos-sdk 0.47\"\n          type: object\n          properties:\n            header:\n              type: object\n              properties:\n                version:\n                  title: basic block info\n                  type: object\n                  properties:\n                    block:\n                      type: string\n                      format: uint64\n                    app:\n                      type: string\n                      format: uint64\n                  description: >-\n                    Consensus captures the consensus rules for processing a\n                    block in the blockchain,\n\n                    including all blockchain data structures and the rules of the application's\n\n                    state transition machine.\n                chain_id:\n                  type: string\n                height:\n                  type: string\n                  format: int64\n                time:\n                  type: string\n                  format: date-time\n                last_block_id:\n                  type: object\n                  properties:\n                    hash:\n                      type: string\n                      format: byte\n                    part_set_header:\n                      type: object\n                      properties:\n                        total:\n                          type: integer\n                          format: int64\n                        hash:\n                          type: string\n                          format: byte\n                      title: PartsetHeader\n                  title: BlockID\n                last_commit_hash:\n                  type: string\n                  format: byte\n                  title: hashes of block data\n                data_hash:\n                  type: string\n                  format: byte\n                validators_hash:\n                  type: string\n                  format: byte\n                  title: hashes from the app output from the prev block\n                next_validators_hash:\n                  type: string\n                  format: byte\n                consensus_hash:\n                  type: string\n                  format: byte\n                app_hash:\n                  type: string\n                  format: byte\n                last_results_hash:\n                  type: string\n                  format: byte\n                evidence_hash:\n                  type: string\n                  format: byte\n                  title: consensus info\n                proposer_address:\n                  type: string\n                  description: >-\n                    proposer_address is the original block proposer address,\n                    formatted as a Bech32 string.\n\n                    In Tendermint, this type is `bytes`, but in the SDK, we convert it to a Bech32 string\n\n                    for better UX.\n              description: Header defines the structure of a Tendermint block header.\n            data:\n              type: object\n              properties:\n                txs:\n                  type: array\n                  items:\n                    type: string\n                    format: byte\n                  description: >-\n                    Txs that will be applied by state @ block.Height+1.\n\n                    NOTE: not all txs here are valid.  We're just agreeing on the order first.\n\n                    This means that block.AppHash does not include these txs.\n              title: Data contains the set of transactions included in the block\n            evidence:\n              type: object\n              properties:\n                evidence:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      duplicate_vote_evidence:\n                        type: object\n                        properties:\n                          vote_a:\n                            type: object\n                            properties:\n                              type:\n                                type: string\n                                enum:\n                                  - SIGNED_MSG_TYPE_UNKNOWN\n                                  - SIGNED_MSG_TYPE_PREVOTE\n                                  - SIGNED_MSG_TYPE_PRECOMMIT\n                                  - SIGNED_MSG_TYPE_PROPOSAL\n                                default: SIGNED_MSG_TYPE_UNKNOWN\n                                description: >-\n                                  SignedMsgType is a type of signed message in\n                                  the consensus.\n\n                                   - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                   - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                              height:\n                                type: string\n                                format: int64\n                              round:\n                                type: integer\n                                format: int32\n                              block_id:\n                                type: object\n                                properties:\n                                  hash:\n                                    type: string\n                                    format: byte\n                                  part_set_header:\n                                    type: object\n                                    properties:\n                                      total:\n                                        type: integer\n                                        format: int64\n                                      hash:\n                                        type: string\n                                        format: byte\n                                    title: PartsetHeader\n                                title: BlockID\n                              timestamp:\n                                type: string\n                                format: date-time\n                              validator_address:\n                                type: string\n                                format: byte\n                              validator_index:\n                                type: integer\n                                format: int32\n                              signature:\n                                type: string\n                                format: byte\n                            description: >-\n                              Vote represents a prevote, precommit, or commit\n                              vote from validators for\n\n                              consensus.\n                          vote_b:\n                            type: object\n                            properties:\n                              type:\n                                type: string\n                                enum:\n                                  - SIGNED_MSG_TYPE_UNKNOWN\n                                  - SIGNED_MSG_TYPE_PREVOTE\n                                  - SIGNED_MSG_TYPE_PRECOMMIT\n                                  - SIGNED_MSG_TYPE_PROPOSAL\n                                default: SIGNED_MSG_TYPE_UNKNOWN\n                                description: >-\n                                  SignedMsgType is a type of signed message in\n                                  the consensus.\n\n                                   - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                   - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                              height:\n                                type: string\n                                format: int64\n                              round:\n                                type: integer\n                                format: int32\n                              block_id:\n                                type: object\n                                properties:\n                                  hash:\n                                    type: string\n                                    format: byte\n                                  part_set_header:\n                                    type: object\n                                    properties:\n                                      total:\n                                        type: integer\n                                        format: int64\n                                      hash:\n                                        type: string\n                                        format: byte\n                                    title: PartsetHeader\n                                title: BlockID\n                              timestamp:\n                                type: string\n                                format: date-time\n                              validator_address:\n                                type: string\n                                format: byte\n                              validator_index:\n                                type: integer\n                                format: int32\n                              signature:\n                                type: string\n                                format: byte\n                            description: >-\n                              Vote represents a prevote, precommit, or commit\n                              vote from validators for\n\n                              consensus.\n                          total_voting_power:\n                            type: string\n                            format: int64\n                          validator_power:\n                            type: string\n                            format: int64\n                          timestamp:\n                            type: string\n                            format: date-time\n                        description: DuplicateVoteEvidence contains evidence of a validator signed two\n                          conflicting votes.\n                      light_client_attack_evidence:\n                        type: object\n                        properties:\n                          conflicting_block:\n                            type: object\n                            properties:\n                              signed_header:\n                                type: object\n                                properties:\n                                  header:\n                                    type: object\n                                    properties:\n                                      version:\n                                        title: basic block info\n                                        type: object\n                                        properties:\n                                          block:\n                                            type: string\n                                            format: uint64\n                                          app:\n                                            type: string\n                                            format: uint64\n                                        description: >-\n                                          Consensus captures the consensus rules\n                                          for processing a block in the\n                                          blockchain,\n\n                                          including all blockchain data structures and the rules of the application's\n\n                                          state transition machine.\n                                      chain_id:\n                                        type: string\n                                      height:\n                                        type: string\n                                        format: int64\n                                      time:\n                                        type: string\n                                        format: date-time\n                                      last_block_id:\n                                        title: prev block info\n                                        type: object\n                                        properties:\n                                          hash:\n                                            type: string\n                                            format: byte\n                                          part_set_header:\n                                            type: object\n                                            properties:\n                                              total:\n                                                type: integer\n                                                format: int64\n                                              hash:\n                                                type: string\n                                                format: byte\n                                            title: PartsetHeader\n                                      last_commit_hash:\n                                        type: string\n                                        format: byte\n                                        title: hashes of block data\n                                      data_hash:\n                                        type: string\n                                        format: byte\n                                      validators_hash:\n                                        type: string\n                                        format: byte\n                                        title: hashes from the app output from the prev block\n                                      next_validators_hash:\n                                        type: string\n                                        format: byte\n                                      consensus_hash:\n                                        type: string\n                                        format: byte\n                                      app_hash:\n                                        type: string\n                                        format: byte\n                                      last_results_hash:\n                                        type: string\n                                        format: byte\n                                      evidence_hash:\n                                        type: string\n                                        format: byte\n                                        title: consensus info\n                                      proposer_address:\n                                        type: string\n                                        format: byte\n                                    description: Header defines the structure of a block header.\n                                  commit:\n                                    type: object\n                                    properties:\n                                      height:\n                                        type: string\n                                        format: int64\n                                      round:\n                                        type: integer\n                                        format: int32\n                                      block_id:\n                                        type: object\n                                        properties:\n                                          hash:\n                                            type: string\n                                            format: byte\n                                          part_set_header:\n                                            type: object\n                                            properties:\n                                              total:\n                                                type: integer\n                                                format: int64\n                                              hash:\n                                                type: string\n                                                format: byte\n                                            title: PartsetHeader\n                                        title: BlockID\n                                      signatures:\n                                        type: array\n                                        items:\n                                          type: object\n                                          properties:\n                                            block_id_flag:\n                                              type: string\n                                              enum:\n                                                - BLOCK_ID_FLAG_UNKNOWN\n                                                - BLOCK_ID_FLAG_ABSENT\n                                                - BLOCK_ID_FLAG_COMMIT\n                                                - BLOCK_ID_FLAG_NIL\n                                              default: BLOCK_ID_FLAG_UNKNOWN\n                                              title: BlockIdFlag indicates which BlcokID the signature is for\n                                            validator_address:\n                                              type: string\n                                              format: byte\n                                            timestamp:\n                                              type: string\n                                              format: date-time\n                                            signature:\n                                              type: string\n                                              format: byte\n                                          description: CommitSig is a part of the Vote included in a Commit.\n                                    description: Commit contains the evidence that a block was committed by a set of\n                                      validators.\n                              validator_set:\n                                type: object\n                                properties:\n                                  validators:\n                                    type: array\n                                    items:\n                                      type: object\n                                      properties:\n                                        address:\n                                          type: string\n                                          format: byte\n                                        pub_key:\n                                          type: object\n                                          properties:\n                                            ed25519:\n                                              type: string\n                                              format: byte\n                                            secp256k1:\n                                              type: string\n                                              format: byte\n                                          title: PublicKey defines the keys available for use with Validators\n                                        voting_power:\n                                          type: string\n                                          format: int64\n                                        proposer_priority:\n                                          type: string\n                                          format: int64\n                                  proposer:\n                                    type: object\n                                    properties:\n                                      address:\n                                        type: string\n                                        format: byte\n                                      pub_key:\n                                        type: object\n                                        properties:\n                                          ed25519:\n                                            type: string\n                                            format: byte\n                                          secp256k1:\n                                            type: string\n                                            format: byte\n                                        title: PublicKey defines the keys available for use with Validators\n                                      voting_power:\n                                        type: string\n                                        format: int64\n                                      proposer_priority:\n                                        type: string\n                                        format: int64\n                                  total_voting_power:\n                                    type: string\n                                    format: int64\n                          common_height:\n                            type: string\n                            format: int64\n                          byzantine_validators:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                address:\n                                  type: string\n                                  format: byte\n                                pub_key:\n                                  type: object\n                                  properties:\n                                    ed25519:\n                                      type: string\n                                      format: byte\n                                    secp256k1:\n                                      type: string\n                                      format: byte\n                                  title: PublicKey defines the keys available for use with Validators\n                                voting_power:\n                                  type: string\n                                  format: int64\n                                proposer_priority:\n                                  type: string\n                                  format: int64\n                          total_voting_power:\n                            type: string\n                            format: int64\n                          timestamp:\n                            type: string\n                            format: date-time\n                        description: LightClientAttackEvidence contains evidence of a set of validators\n                          attempting to mislead a light client.\n            last_commit:\n              type: object\n              properties:\n                height:\n                  type: string\n                  format: int64\n                round:\n                  type: integer\n                  format: int32\n                block_id:\n                  type: object\n                  properties:\n                    hash:\n                      type: string\n                      format: byte\n                    part_set_header:\n                      type: object\n                      properties:\n                        total:\n                          type: integer\n                          format: int64\n                        hash:\n                          type: string\n                          format: byte\n                      title: PartsetHeader\n                  title: BlockID\n                signatures:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      block_id_flag:\n                        type: string\n                        enum:\n                          - BLOCK_ID_FLAG_UNKNOWN\n                          - BLOCK_ID_FLAG_ABSENT\n                          - BLOCK_ID_FLAG_COMMIT\n                          - BLOCK_ID_FLAG_NIL\n                        default: BLOCK_ID_FLAG_UNKNOWN\n                        title: BlockIdFlag indicates which BlcokID the signature is for\n                      validator_address:\n                        type: string\n                        format: byte\n                      timestamp:\n                        type: string\n                        format: date-time\n                      signature:\n                        type: string\n                        format: byte\n                    description: CommitSig is a part of the Vote included in a Commit.\n              description: Commit contains the evidence that a block was committed by a set of\n                validators.\n          description: |-\n            Block is tendermint type Block, with the Header proposer address\n            field converted to bech32 string.\n      description: GetBlockByHeightResponse is the response type for the\n        Query/GetBlockByHeight RPC method.\n    cosmos.base.tendermint.v1beta1.GetLatestBlockResponse:\n      type: object\n      properties:\n        block_id:\n          type: object\n          properties:\n            hash:\n              type: string\n              format: byte\n            part_set_header:\n              type: object\n              properties:\n                total:\n                  type: integer\n                  format: int64\n                hash:\n                  type: string\n                  format: byte\n              title: PartsetHeader\n          title: BlockID\n        block:\n          type: object\n          properties:\n            header:\n              type: object\n              properties:\n                version:\n                  title: basic block info\n                  type: object\n                  properties:\n                    block:\n                      type: string\n                      format: uint64\n                    app:\n                      type: string\n                      format: uint64\n                  description: >-\n                    Consensus captures the consensus rules for processing a\n                    block in the blockchain,\n\n                    including all blockchain data structures and the rules of the application's\n\n                    state transition machine.\n                chain_id:\n                  type: string\n                height:\n                  type: string\n                  format: int64\n                time:\n                  type: string\n                  format: date-time\n                last_block_id:\n                  title: prev block info\n                  type: object\n                  properties:\n                    hash:\n                      type: string\n                      format: byte\n                    part_set_header:\n                      type: object\n                      properties:\n                        total:\n                          type: integer\n                          format: int64\n                        hash:\n                          type: string\n                          format: byte\n                      title: PartsetHeader\n                last_commit_hash:\n                  type: string\n                  format: byte\n                  title: hashes of block data\n                data_hash:\n                  type: string\n                  format: byte\n                validators_hash:\n                  type: string\n                  format: byte\n                  title: hashes from the app output from the prev block\n                next_validators_hash:\n                  type: string\n                  format: byte\n                consensus_hash:\n                  type: string\n                  format: byte\n                app_hash:\n                  type: string\n                  format: byte\n                last_results_hash:\n                  type: string\n                  format: byte\n                evidence_hash:\n                  type: string\n                  format: byte\n                  title: consensus info\n                proposer_address:\n                  type: string\n                  format: byte\n              description: Header defines the structure of a block header.\n            data:\n              type: object\n              properties:\n                txs:\n                  type: array\n                  items:\n                    type: string\n                    format: byte\n                  description: >-\n                    Txs that will be applied by state @ block.Height+1.\n\n                    NOTE: not all txs here are valid.  We're just agreeing on the order first.\n\n                    This means that block.AppHash does not include these txs.\n              title: Data contains the set of transactions included in the block\n            evidence:\n              type: object\n              properties:\n                evidence:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      duplicate_vote_evidence:\n                        type: object\n                        properties:\n                          vote_a:\n                            type: object\n                            properties:\n                              type:\n                                type: string\n                                enum:\n                                  - SIGNED_MSG_TYPE_UNKNOWN\n                                  - SIGNED_MSG_TYPE_PREVOTE\n                                  - SIGNED_MSG_TYPE_PRECOMMIT\n                                  - SIGNED_MSG_TYPE_PROPOSAL\n                                default: SIGNED_MSG_TYPE_UNKNOWN\n                                description: >-\n                                  SignedMsgType is a type of signed message in\n                                  the consensus.\n\n                                   - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                   - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                              height:\n                                type: string\n                                format: int64\n                              round:\n                                type: integer\n                                format: int32\n                              block_id:\n                                type: object\n                                properties:\n                                  hash:\n                                    type: string\n                                    format: byte\n                                  part_set_header:\n                                    type: object\n                                    properties:\n                                      total:\n                                        type: integer\n                                        format: int64\n                                      hash:\n                                        type: string\n                                        format: byte\n                                    title: PartsetHeader\n                                title: BlockID\n                              timestamp:\n                                type: string\n                                format: date-time\n                              validator_address:\n                                type: string\n                                format: byte\n                              validator_index:\n                                type: integer\n                                format: int32\n                              signature:\n                                type: string\n                                format: byte\n                            description: >-\n                              Vote represents a prevote, precommit, or commit\n                              vote from validators for\n\n                              consensus.\n                          vote_b:\n                            type: object\n                            properties:\n                              type:\n                                type: string\n                                enum:\n                                  - SIGNED_MSG_TYPE_UNKNOWN\n                                  - SIGNED_MSG_TYPE_PREVOTE\n                                  - SIGNED_MSG_TYPE_PRECOMMIT\n                                  - SIGNED_MSG_TYPE_PROPOSAL\n                                default: SIGNED_MSG_TYPE_UNKNOWN\n                                description: >-\n                                  SignedMsgType is a type of signed message in\n                                  the consensus.\n\n                                   - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                   - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                              height:\n                                type: string\n                                format: int64\n                              round:\n                                type: integer\n                                format: int32\n                              block_id:\n                                type: object\n                                properties:\n                                  hash:\n                                    type: string\n                                    format: byte\n                                  part_set_header:\n                                    type: object\n                                    properties:\n                                      total:\n                                        type: integer\n                                        format: int64\n                                      hash:\n                                        type: string\n                                        format: byte\n                                    title: PartsetHeader\n                                title: BlockID\n                              timestamp:\n                                type: string\n                                format: date-time\n                              validator_address:\n                                type: string\n                                format: byte\n                              validator_index:\n                                type: integer\n                                format: int32\n                              signature:\n                                type: string\n                                format: byte\n                            description: >-\n                              Vote represents a prevote, precommit, or commit\n                              vote from validators for\n\n                              consensus.\n                          total_voting_power:\n                            type: string\n                            format: int64\n                          validator_power:\n                            type: string\n                            format: int64\n                          timestamp:\n                            type: string\n                            format: date-time\n                        description: DuplicateVoteEvidence contains evidence of a validator signed two\n                          conflicting votes.\n                      light_client_attack_evidence:\n                        type: object\n                        properties:\n                          conflicting_block:\n                            type: object\n                            properties:\n                              signed_header:\n                                type: object\n                                properties:\n                                  header:\n                                    type: object\n                                    properties:\n                                      version:\n                                        title: basic block info\n                                        type: object\n                                        properties:\n                                          block:\n                                            type: string\n                                            format: uint64\n                                          app:\n                                            type: string\n                                            format: uint64\n                                        description: >-\n                                          Consensus captures the consensus rules\n                                          for processing a block in the\n                                          blockchain,\n\n                                          including all blockchain data structures and the rules of the application's\n\n                                          state transition machine.\n                                      chain_id:\n                                        type: string\n                                      height:\n                                        type: string\n                                        format: int64\n                                      time:\n                                        type: string\n                                        format: date-time\n                                      last_block_id:\n                                        title: prev block info\n                                        type: object\n                                        properties:\n                                          hash:\n                                            type: string\n                                            format: byte\n                                          part_set_header:\n                                            type: object\n                                            properties:\n                                              total:\n                                                type: integer\n                                                format: int64\n                                              hash:\n                                                type: string\n                                                format: byte\n                                            title: PartsetHeader\n                                      last_commit_hash:\n                                        type: string\n                                        format: byte\n                                        title: hashes of block data\n                                      data_hash:\n                                        type: string\n                                        format: byte\n                                      validators_hash:\n                                        type: string\n                                        format: byte\n                                        title: hashes from the app output from the prev block\n                                      next_validators_hash:\n                                        type: string\n                                        format: byte\n                                      consensus_hash:\n                                        type: string\n                                        format: byte\n                                      app_hash:\n                                        type: string\n                                        format: byte\n                                      last_results_hash:\n                                        type: string\n                                        format: byte\n                                      evidence_hash:\n                                        type: string\n                                        format: byte\n                                        title: consensus info\n                                      proposer_address:\n                                        type: string\n                                        format: byte\n                                    description: Header defines the structure of a block header.\n                                  commit:\n                                    type: object\n                                    properties:\n                                      height:\n                                        type: string\n                                        format: int64\n                                      round:\n                                        type: integer\n                                        format: int32\n                                      block_id:\n                                        type: object\n                                        properties:\n                                          hash:\n                                            type: string\n                                            format: byte\n                                          part_set_header:\n                                            type: object\n                                            properties:\n                                              total:\n                                                type: integer\n                                                format: int64\n                                              hash:\n                                                type: string\n                                                format: byte\n                                            title: PartsetHeader\n                                        title: BlockID\n                                      signatures:\n                                        type: array\n                                        items:\n                                          type: object\n                                          properties:\n                                            block_id_flag:\n                                              type: string\n                                              enum:\n                                                - BLOCK_ID_FLAG_UNKNOWN\n                                                - BLOCK_ID_FLAG_ABSENT\n                                                - BLOCK_ID_FLAG_COMMIT\n                                                - BLOCK_ID_FLAG_NIL\n                                              default: BLOCK_ID_FLAG_UNKNOWN\n                                              title: BlockIdFlag indicates which BlcokID the signature is for\n                                            validator_address:\n                                              type: string\n                                              format: byte\n                                            timestamp:\n                                              type: string\n                                              format: date-time\n                                            signature:\n                                              type: string\n                                              format: byte\n                                          description: CommitSig is a part of the Vote included in a Commit.\n                                    description: Commit contains the evidence that a block was committed by a set of\n                                      validators.\n                              validator_set:\n                                type: object\n                                properties:\n                                  validators:\n                                    type: array\n                                    items:\n                                      type: object\n                                      properties:\n                                        address:\n                                          type: string\n                                          format: byte\n                                        pub_key:\n                                          type: object\n                                          properties:\n                                            ed25519:\n                                              type: string\n                                              format: byte\n                                            secp256k1:\n                                              type: string\n                                              format: byte\n                                          title: PublicKey defines the keys available for use with Validators\n                                        voting_power:\n                                          type: string\n                                          format: int64\n                                        proposer_priority:\n                                          type: string\n                                          format: int64\n                                  proposer:\n                                    type: object\n                                    properties:\n                                      address:\n                                        type: string\n                                        format: byte\n                                      pub_key:\n                                        type: object\n                                        properties:\n                                          ed25519:\n                                            type: string\n                                            format: byte\n                                          secp256k1:\n                                            type: string\n                                            format: byte\n                                        title: PublicKey defines the keys available for use with Validators\n                                      voting_power:\n                                        type: string\n                                        format: int64\n                                      proposer_priority:\n                                        type: string\n                                        format: int64\n                                  total_voting_power:\n                                    type: string\n                                    format: int64\n                          common_height:\n                            type: string\n                            format: int64\n                          byzantine_validators:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                address:\n                                  type: string\n                                  format: byte\n                                pub_key:\n                                  type: object\n                                  properties:\n                                    ed25519:\n                                      type: string\n                                      format: byte\n                                    secp256k1:\n                                      type: string\n                                      format: byte\n                                  title: PublicKey defines the keys available for use with Validators\n                                voting_power:\n                                  type: string\n                                  format: int64\n                                proposer_priority:\n                                  type: string\n                                  format: int64\n                          total_voting_power:\n                            type: string\n                            format: int64\n                          timestamp:\n                            type: string\n                            format: date-time\n                        description: LightClientAttackEvidence contains evidence of a set of validators\n                          attempting to mislead a light client.\n            last_commit:\n              type: object\n              properties:\n                height:\n                  type: string\n                  format: int64\n                round:\n                  type: integer\n                  format: int32\n                block_id:\n                  type: object\n                  properties:\n                    hash:\n                      type: string\n                      format: byte\n                    part_set_header:\n                      type: object\n                      properties:\n                        total:\n                          type: integer\n                          format: int64\n                        hash:\n                          type: string\n                          format: byte\n                      title: PartsetHeader\n                  title: BlockID\n                signatures:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      block_id_flag:\n                        type: string\n                        enum:\n                          - BLOCK_ID_FLAG_UNKNOWN\n                          - BLOCK_ID_FLAG_ABSENT\n                          - BLOCK_ID_FLAG_COMMIT\n                          - BLOCK_ID_FLAG_NIL\n                        default: BLOCK_ID_FLAG_UNKNOWN\n                        title: BlockIdFlag indicates which BlcokID the signature is for\n                      validator_address:\n                        type: string\n                        format: byte\n                      timestamp:\n                        type: string\n                        format: date-time\n                      signature:\n                        type: string\n                        format: byte\n                    description: CommitSig is a part of the Vote included in a Commit.\n              description: Commit contains the evidence that a block was committed by a set of\n                validators.\n          title: \"Deprecated: please use `sdk_block` instead\"\n        sdk_block:\n          title: \"Since: cosmos-sdk 0.47\"\n          type: object\n          properties:\n            header:\n              type: object\n              properties:\n                version:\n                  title: basic block info\n                  type: object\n                  properties:\n                    block:\n                      type: string\n                      format: uint64\n                    app:\n                      type: string\n                      format: uint64\n                  description: >-\n                    Consensus captures the consensus rules for processing a\n                    block in the blockchain,\n\n                    including all blockchain data structures and the rules of the application's\n\n                    state transition machine.\n                chain_id:\n                  type: string\n                height:\n                  type: string\n                  format: int64\n                time:\n                  type: string\n                  format: date-time\n                last_block_id:\n                  type: object\n                  properties:\n                    hash:\n                      type: string\n                      format: byte\n                    part_set_header:\n                      type: object\n                      properties:\n                        total:\n                          type: integer\n                          format: int64\n                        hash:\n                          type: string\n                          format: byte\n                      title: PartsetHeader\n                  title: BlockID\n                last_commit_hash:\n                  type: string\n                  format: byte\n                  title: hashes of block data\n                data_hash:\n                  type: string\n                  format: byte\n                validators_hash:\n                  type: string\n                  format: byte\n                  title: hashes from the app output from the prev block\n                next_validators_hash:\n                  type: string\n                  format: byte\n                consensus_hash:\n                  type: string\n                  format: byte\n                app_hash:\n                  type: string\n                  format: byte\n                last_results_hash:\n                  type: string\n                  format: byte\n                evidence_hash:\n                  type: string\n                  format: byte\n                  title: consensus info\n                proposer_address:\n                  type: string\n                  description: >-\n                    proposer_address is the original block proposer address,\n                    formatted as a Bech32 string.\n\n                    In Tendermint, this type is `bytes`, but in the SDK, we convert it to a Bech32 string\n\n                    for better UX.\n              description: Header defines the structure of a Tendermint block header.\n            data:\n              type: object\n              properties:\n                txs:\n                  type: array\n                  items:\n                    type: string\n                    format: byte\n                  description: >-\n                    Txs that will be applied by state @ block.Height+1.\n\n                    NOTE: not all txs here are valid.  We're just agreeing on the order first.\n\n                    This means that block.AppHash does not include these txs.\n              title: Data contains the set of transactions included in the block\n            evidence:\n              type: object\n              properties:\n                evidence:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      duplicate_vote_evidence:\n                        type: object\n                        properties:\n                          vote_a:\n                            type: object\n                            properties:\n                              type:\n                                type: string\n                                enum:\n                                  - SIGNED_MSG_TYPE_UNKNOWN\n                                  - SIGNED_MSG_TYPE_PREVOTE\n                                  - SIGNED_MSG_TYPE_PRECOMMIT\n                                  - SIGNED_MSG_TYPE_PROPOSAL\n                                default: SIGNED_MSG_TYPE_UNKNOWN\n                                description: >-\n                                  SignedMsgType is a type of signed message in\n                                  the consensus.\n\n                                   - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                   - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                              height:\n                                type: string\n                                format: int64\n                              round:\n                                type: integer\n                                format: int32\n                              block_id:\n                                type: object\n                                properties:\n                                  hash:\n                                    type: string\n                                    format: byte\n                                  part_set_header:\n                                    type: object\n                                    properties:\n                                      total:\n                                        type: integer\n                                        format: int64\n                                      hash:\n                                        type: string\n                                        format: byte\n                                    title: PartsetHeader\n                                title: BlockID\n                              timestamp:\n                                type: string\n                                format: date-time\n                              validator_address:\n                                type: string\n                                format: byte\n                              validator_index:\n                                type: integer\n                                format: int32\n                              signature:\n                                type: string\n                                format: byte\n                            description: >-\n                              Vote represents a prevote, precommit, or commit\n                              vote from validators for\n\n                              consensus.\n                          vote_b:\n                            type: object\n                            properties:\n                              type:\n                                type: string\n                                enum:\n                                  - SIGNED_MSG_TYPE_UNKNOWN\n                                  - SIGNED_MSG_TYPE_PREVOTE\n                                  - SIGNED_MSG_TYPE_PRECOMMIT\n                                  - SIGNED_MSG_TYPE_PROPOSAL\n                                default: SIGNED_MSG_TYPE_UNKNOWN\n                                description: >-\n                                  SignedMsgType is a type of signed message in\n                                  the consensus.\n\n                                   - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                   - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                              height:\n                                type: string\n                                format: int64\n                              round:\n                                type: integer\n                                format: int32\n                              block_id:\n                                type: object\n                                properties:\n                                  hash:\n                                    type: string\n                                    format: byte\n                                  part_set_header:\n                                    type: object\n                                    properties:\n                                      total:\n                                        type: integer\n                                        format: int64\n                                      hash:\n                                        type: string\n                                        format: byte\n                                    title: PartsetHeader\n                                title: BlockID\n                              timestamp:\n                                type: string\n                                format: date-time\n                              validator_address:\n                                type: string\n                                format: byte\n                              validator_index:\n                                type: integer\n                                format: int32\n                              signature:\n                                type: string\n                                format: byte\n                            description: >-\n                              Vote represents a prevote, precommit, or commit\n                              vote from validators for\n\n                              consensus.\n                          total_voting_power:\n                            type: string\n                            format: int64\n                          validator_power:\n                            type: string\n                            format: int64\n                          timestamp:\n                            type: string\n                            format: date-time\n                        description: DuplicateVoteEvidence contains evidence of a validator signed two\n                          conflicting votes.\n                      light_client_attack_evidence:\n                        type: object\n                        properties:\n                          conflicting_block:\n                            type: object\n                            properties:\n                              signed_header:\n                                type: object\n                                properties:\n                                  header:\n                                    type: object\n                                    properties:\n                                      version:\n                                        title: basic block info\n                                        type: object\n                                        properties:\n                                          block:\n                                            type: string\n                                            format: uint64\n                                          app:\n                                            type: string\n                                            format: uint64\n                                        description: >-\n                                          Consensus captures the consensus rules\n                                          for processing a block in the\n                                          blockchain,\n\n                                          including all blockchain data structures and the rules of the application's\n\n                                          state transition machine.\n                                      chain_id:\n                                        type: string\n                                      height:\n                                        type: string\n                                        format: int64\n                                      time:\n                                        type: string\n                                        format: date-time\n                                      last_block_id:\n                                        title: prev block info\n                                        type: object\n                                        properties:\n                                          hash:\n                                            type: string\n                                            format: byte\n                                          part_set_header:\n                                            type: object\n                                            properties:\n                                              total:\n                                                type: integer\n                                                format: int64\n                                              hash:\n                                                type: string\n                                                format: byte\n                                            title: PartsetHeader\n                                      last_commit_hash:\n                                        type: string\n                                        format: byte\n                                        title: hashes of block data\n                                      data_hash:\n                                        type: string\n                                        format: byte\n                                      validators_hash:\n                                        type: string\n                                        format: byte\n                                        title: hashes from the app output from the prev block\n                                      next_validators_hash:\n                                        type: string\n                                        format: byte\n                                      consensus_hash:\n                                        type: string\n                                        format: byte\n                                      app_hash:\n                                        type: string\n                                        format: byte\n                                      last_results_hash:\n                                        type: string\n                                        format: byte\n                                      evidence_hash:\n                                        type: string\n                                        format: byte\n                                        title: consensus info\n                                      proposer_address:\n                                        type: string\n                                        format: byte\n                                    description: Header defines the structure of a block header.\n                                  commit:\n                                    type: object\n                                    properties:\n                                      height:\n                                        type: string\n                                        format: int64\n                                      round:\n                                        type: integer\n                                        format: int32\n                                      block_id:\n                                        type: object\n                                        properties:\n                                          hash:\n                                            type: string\n                                            format: byte\n                                          part_set_header:\n                                            type: object\n                                            properties:\n                                              total:\n                                                type: integer\n                                                format: int64\n                                              hash:\n                                                type: string\n                                                format: byte\n                                            title: PartsetHeader\n                                        title: BlockID\n                                      signatures:\n                                        type: array\n                                        items:\n                                          type: object\n                                          properties:\n                                            block_id_flag:\n                                              type: string\n                                              enum:\n                                                - BLOCK_ID_FLAG_UNKNOWN\n                                                - BLOCK_ID_FLAG_ABSENT\n                                                - BLOCK_ID_FLAG_COMMIT\n                                                - BLOCK_ID_FLAG_NIL\n                                              default: BLOCK_ID_FLAG_UNKNOWN\n                                              title: BlockIdFlag indicates which BlcokID the signature is for\n                                            validator_address:\n                                              type: string\n                                              format: byte\n                                            timestamp:\n                                              type: string\n                                              format: date-time\n                                            signature:\n                                              type: string\n                                              format: byte\n                                          description: CommitSig is a part of the Vote included in a Commit.\n                                    description: Commit contains the evidence that a block was committed by a set of\n                                      validators.\n                              validator_set:\n                                type: object\n                                properties:\n                                  validators:\n                                    type: array\n                                    items:\n                                      type: object\n                                      properties:\n                                        address:\n                                          type: string\n                                          format: byte\n                                        pub_key:\n                                          type: object\n                                          properties:\n                                            ed25519:\n                                              type: string\n                                              format: byte\n                                            secp256k1:\n                                              type: string\n                                              format: byte\n                                          title: PublicKey defines the keys available for use with Validators\n                                        voting_power:\n                                          type: string\n                                          format: int64\n                                        proposer_priority:\n                                          type: string\n                                          format: int64\n                                  proposer:\n                                    type: object\n                                    properties:\n                                      address:\n                                        type: string\n                                        format: byte\n                                      pub_key:\n                                        type: object\n                                        properties:\n                                          ed25519:\n                                            type: string\n                                            format: byte\n                                          secp256k1:\n                                            type: string\n                                            format: byte\n                                        title: PublicKey defines the keys available for use with Validators\n                                      voting_power:\n                                        type: string\n                                        format: int64\n                                      proposer_priority:\n                                        type: string\n                                        format: int64\n                                  total_voting_power:\n                                    type: string\n                                    format: int64\n                          common_height:\n                            type: string\n                            format: int64\n                          byzantine_validators:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                address:\n                                  type: string\n                                  format: byte\n                                pub_key:\n                                  type: object\n                                  properties:\n                                    ed25519:\n                                      type: string\n                                      format: byte\n                                    secp256k1:\n                                      type: string\n                                      format: byte\n                                  title: PublicKey defines the keys available for use with Validators\n                                voting_power:\n                                  type: string\n                                  format: int64\n                                proposer_priority:\n                                  type: string\n                                  format: int64\n                          total_voting_power:\n                            type: string\n                            format: int64\n                          timestamp:\n                            type: string\n                            format: date-time\n                        description: LightClientAttackEvidence contains evidence of a set of validators\n                          attempting to mislead a light client.\n            last_commit:\n              type: object\n              properties:\n                height:\n                  type: string\n                  format: int64\n                round:\n                  type: integer\n                  format: int32\n                block_id:\n                  type: object\n                  properties:\n                    hash:\n                      type: string\n                      format: byte\n                    part_set_header:\n                      type: object\n                      properties:\n                        total:\n                          type: integer\n                          format: int64\n                        hash:\n                          type: string\n                          format: byte\n                      title: PartsetHeader\n                  title: BlockID\n                signatures:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      block_id_flag:\n                        type: string\n                        enum:\n                          - BLOCK_ID_FLAG_UNKNOWN\n                          - BLOCK_ID_FLAG_ABSENT\n                          - BLOCK_ID_FLAG_COMMIT\n                          - BLOCK_ID_FLAG_NIL\n                        default: BLOCK_ID_FLAG_UNKNOWN\n                        title: BlockIdFlag indicates which BlcokID the signature is for\n                      validator_address:\n                        type: string\n                        format: byte\n                      timestamp:\n                        type: string\n                        format: date-time\n                      signature:\n                        type: string\n                        format: byte\n                    description: CommitSig is a part of the Vote included in a Commit.\n              description: Commit contains the evidence that a block was committed by a set of\n                validators.\n          description: |-\n            Block is tendermint type Block, with the Header proposer address\n            field converted to bech32 string.\n      description: GetLatestBlockResponse is the response type for the\n        Query/GetLatestBlock RPC method.\n    cosmos.base.tendermint.v1beta1.GetLatestValidatorSetResponse:\n      type: object\n      properties:\n        block_height:\n          type: string\n          format: int64\n        validators:\n          type: array\n          items:\n            type: object\n            properties:\n              address:\n                type: string\n              pub_key:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n              voting_power:\n                type: string\n                format: int64\n              proposer_priority:\n                type: string\n                format: int64\n            description: Validator is the type for the validator-set.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: GetLatestValidatorSetResponse is the response type for the\n        Query/GetValidatorSetByHeight RPC method.\n    cosmos.base.tendermint.v1beta1.GetNodeInfoResponse:\n      type: object\n      properties:\n        default_node_info:\n          type: object\n          properties:\n            protocol_version:\n              type: object\n              properties:\n                p2p:\n                  type: string\n                  format: uint64\n                block:\n                  type: string\n                  format: uint64\n                app:\n                  type: string\n                  format: uint64\n            default_node_id:\n              type: string\n            listen_addr:\n              type: string\n            network:\n              type: string\n            version:\n              type: string\n            channels:\n              type: string\n              format: byte\n            moniker:\n              type: string\n            other:\n              type: object\n              properties:\n                tx_index:\n                  type: string\n                rpc_address:\n                  type: string\n        application_version:\n          type: object\n          properties:\n            name:\n              type: string\n            app_name:\n              type: string\n            version:\n              type: string\n            git_commit:\n              type: string\n            build_tags:\n              type: string\n            go_version:\n              type: string\n            build_deps:\n              type: array\n              items:\n                type: object\n                properties:\n                  path:\n                    type: string\n                    title: module path\n                  version:\n                    type: string\n                    title: module version\n                  sum:\n                    type: string\n                    title: checksum\n                title: Module is the type for VersionInfo\n            cosmos_sdk_version:\n              type: string\n              title: \"Since: cosmos-sdk 0.43\"\n          description: VersionInfo is the type for the GetNodeInfoResponse message.\n      description: GetNodeInfoResponse is the response type for the Query/GetNodeInfo\n        RPC method.\n    cosmos.base.tendermint.v1beta1.GetSyncingResponse:\n      type: object\n      properties:\n        syncing:\n          type: boolean\n      description: GetSyncingResponse is the response type for the Query/GetSyncing\n        RPC method.\n    cosmos.base.tendermint.v1beta1.GetValidatorSetByHeightResponse:\n      type: object\n      properties:\n        block_height:\n          type: string\n          format: int64\n        validators:\n          type: array\n          items:\n            type: object\n            properties:\n              address:\n                type: string\n              pub_key:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n              voting_power:\n                type: string\n                format: int64\n              proposer_priority:\n                type: string\n                format: int64\n            description: Validator is the type for the validator-set.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: GetValidatorSetByHeightResponse is the response type for the\n        Query/GetValidatorSetByHeight RPC method.\n    cosmos.base.tendermint.v1beta1.Header:\n      type: object\n      properties:\n        version:\n          title: basic block info\n          type: object\n          properties:\n            block:\n              type: string\n              format: uint64\n            app:\n              type: string\n              format: uint64\n          description: >-\n            Consensus captures the consensus rules for processing a block in the\n            blockchain,\n\n            including all blockchain data structures and the rules of the application's\n\n            state transition machine.\n        chain_id:\n          type: string\n        height:\n          type: string\n          format: int64\n        time:\n          type: string\n          format: date-time\n        last_block_id:\n          type: object\n          properties:\n            hash:\n              type: string\n              format: byte\n            part_set_header:\n              type: object\n              properties:\n                total:\n                  type: integer\n                  format: int64\n                hash:\n                  type: string\n                  format: byte\n              title: PartsetHeader\n          title: BlockID\n        last_commit_hash:\n          type: string\n          format: byte\n          title: hashes of block data\n        data_hash:\n          type: string\n          format: byte\n        validators_hash:\n          type: string\n          format: byte\n          title: hashes from the app output from the prev block\n        next_validators_hash:\n          type: string\n          format: byte\n        consensus_hash:\n          type: string\n          format: byte\n        app_hash:\n          type: string\n          format: byte\n        last_results_hash:\n          type: string\n          format: byte\n        evidence_hash:\n          type: string\n          format: byte\n          title: consensus info\n        proposer_address:\n          type: string\n          description: >-\n            proposer_address is the original block proposer address, formatted\n            as a Bech32 string.\n\n            In Tendermint, this type is `bytes`, but in the SDK, we convert it to a Bech32 string\n\n            for better UX.\n      description: Header defines the structure of a Tendermint block header.\n    cosmos.base.tendermint.v1beta1.Module:\n      type: object\n      properties:\n        path:\n          type: string\n          title: module path\n        version:\n          type: string\n          title: module version\n        sum:\n          type: string\n          title: checksum\n      title: Module is the type for VersionInfo\n    cosmos.base.tendermint.v1beta1.ProofOp:\n      type: object\n      properties:\n        type:\n          type: string\n        key:\n          type: string\n          format: byte\n        data:\n          type: string\n          format: byte\n      description: >-\n        ProofOp defines an operation used for calculating Merkle root. The data\n        could\n\n        be arbitrary format, providing necessary data for example neighbouring node\n\n        hash.\n\n\n        Note: This type is a duplicate of the ProofOp proto type defined in Tendermint.\n    cosmos.base.tendermint.v1beta1.ProofOps:\n      type: object\n      properties:\n        ops:\n          type: array\n          items:\n            type: object\n            properties:\n              type:\n                type: string\n              key:\n                type: string\n                format: byte\n              data:\n                type: string\n                format: byte\n            description: >-\n              ProofOp defines an operation used for calculating Merkle root. The\n              data could\n\n              be arbitrary format, providing necessary data for example neighbouring node\n\n              hash.\n\n\n              Note: This type is a duplicate of the ProofOp proto type defined in Tendermint.\n      description: >-\n        ProofOps is Merkle proof defined by the list of ProofOps.\n\n\n        Note: This type is a duplicate of the ProofOps proto type defined in Tendermint.\n    cosmos.base.tendermint.v1beta1.Validator:\n      type: object\n      properties:\n        address:\n          type: string\n        pub_key:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n        voting_power:\n          type: string\n          format: int64\n        proposer_priority:\n          type: string\n          format: int64\n      description: Validator is the type for the validator-set.\n    cosmos.base.tendermint.v1beta1.VersionInfo:\n      type: object\n      properties:\n        name:\n          type: string\n        app_name:\n          type: string\n        version:\n          type: string\n        git_commit:\n          type: string\n        build_tags:\n          type: string\n        go_version:\n          type: string\n        build_deps:\n          type: array\n          items:\n            type: object\n            properties:\n              path:\n                type: string\n                title: module path\n              version:\n                type: string\n                title: module version\n              sum:\n                type: string\n                title: checksum\n            title: Module is the type for VersionInfo\n        cosmos_sdk_version:\n          type: string\n          title: \"Since: cosmos-sdk 0.43\"\n      description: VersionInfo is the type for the GetNodeInfoResponse message.\n    tendermint.p2p.DefaultNodeInfo:\n      type: object\n      properties:\n        protocol_version:\n          type: object\n          properties:\n            p2p:\n              type: string\n              format: uint64\n            block:\n              type: string\n              format: uint64\n            app:\n              type: string\n              format: uint64\n        default_node_id:\n          type: string\n        listen_addr:\n          type: string\n        network:\n          type: string\n        version:\n          type: string\n        channels:\n          type: string\n          format: byte\n        moniker:\n          type: string\n        other:\n          type: object\n          properties:\n            tx_index:\n              type: string\n            rpc_address:\n              type: string\n    tendermint.p2p.DefaultNodeInfoOther:\n      type: object\n      properties:\n        tx_index:\n          type: string\n        rpc_address:\n          type: string\n    tendermint.p2p.ProtocolVersion:\n      type: object\n      properties:\n        p2p:\n          type: string\n          format: uint64\n        block:\n          type: string\n          format: uint64\n        app:\n          type: string\n          format: uint64\n    cosmos.slashing.v1beta1.Params:\n      type: object\n      properties:\n        signed_blocks_window:\n          type: string\n          format: int64\n        min_signed_per_window:\n          type: string\n          format: byte\n        downtime_jail_duration:\n          type: string\n        slash_fraction_double_sign:\n          type: string\n          format: byte\n        slash_fraction_downtime:\n          type: string\n          format: byte\n      description: Params represents the parameters used for by the slashing module.\n    cosmos.slashing.v1beta1.QueryParamsResponse:\n      type: object\n      properties:\n        params:\n          type: object\n          properties:\n            signed_blocks_window:\n              type: string\n              format: int64\n            min_signed_per_window:\n              type: string\n              format: byte\n            downtime_jail_duration:\n              type: string\n            slash_fraction_double_sign:\n              type: string\n              format: byte\n            slash_fraction_downtime:\n              type: string\n              format: byte\n          description: Params represents the parameters used for by the slashing module.\n      title: QueryParamsResponse is the response type for the Query/Params RPC method\n    cosmos.slashing.v1beta1.QuerySigningInfoResponse:\n      type: object\n      properties:\n        val_signing_info:\n          type: object\n          properties:\n            address:\n              type: string\n            start_height:\n              type: string\n              format: int64\n              title: Height at which validator was first a candidate OR was unjailed\n            index_offset:\n              type: string\n              format: int64\n              description: >-\n                Index which is incremented each time the validator was a bonded\n\n                in a block and may have signed a precommit or not. This in conjunction with the\n\n                `SignedBlocksWindow` param determines the index in the `MissedBlocksBitArray`.\n            jailed_until:\n              type: string\n              format: date-time\n              description: Timestamp until which the validator is jailed due to liveness\n                downtime.\n            tombstoned:\n              type: boolean\n              description: >-\n                Whether or not a validator has been tombstoned (killed out of\n                validator set). It is set\n\n                once the validator commits an equivocation or for any other configured misbehiavor.\n            missed_blocks_counter:\n              type: string\n              format: int64\n              description: >-\n                A counter kept to avoid unnecessary array reads.\n\n                Note that `Sum(MissedBlocksBitArray)` always equals `MissedBlocksCounter`.\n          description: >-\n            ValidatorSigningInfo defines a validator's signing info for\n            monitoring their\n\n            liveness activity.\n          title: val_signing_info is the signing info of requested val cons address\n      title: >-\n        QuerySigningInfoResponse is the response type for the Query/SigningInfo\n        RPC\n\n        method\n    cosmos.slashing.v1beta1.QuerySigningInfosResponse:\n      type: object\n      properties:\n        info:\n          type: array\n          items:\n            type: object\n            properties:\n              address:\n                type: string\n              start_height:\n                type: string\n                format: int64\n                title: Height at which validator was first a candidate OR was unjailed\n              index_offset:\n                type: string\n                format: int64\n                description: >-\n                  Index which is incremented each time the validator was a\n                  bonded\n\n                  in a block and may have signed a precommit or not. This in conjunction with the\n\n                  `SignedBlocksWindow` param determines the index in the `MissedBlocksBitArray`.\n              jailed_until:\n                type: string\n                format: date-time\n                description: Timestamp until which the validator is jailed due to liveness\n                  downtime.\n              tombstoned:\n                type: boolean\n                description: >-\n                  Whether or not a validator has been tombstoned (killed out of\n                  validator set). It is set\n\n                  once the validator commits an equivocation or for any other configured misbehiavor.\n              missed_blocks_counter:\n                type: string\n                format: int64\n                description: >-\n                  A counter kept to avoid unnecessary array reads.\n\n                  Note that `Sum(MissedBlocksBitArray)` always equals `MissedBlocksCounter`.\n            description: >-\n              ValidatorSigningInfo defines a validator's signing info for\n              monitoring their\n\n              liveness activity.\n          title: info is the signing info of all validators\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      title: >-\n        QuerySigningInfosResponse is the response type for the\n        Query/SigningInfos RPC\n\n        method\n    cosmos.slashing.v1beta1.ValidatorSigningInfo:\n      type: object\n      properties:\n        address:\n          type: string\n        start_height:\n          type: string\n          format: int64\n          title: Height at which validator was first a candidate OR was unjailed\n        index_offset:\n          type: string\n          format: int64\n          description: >-\n            Index which is incremented each time the validator was a bonded\n\n            in a block and may have signed a precommit or not. This in conjunction with the\n\n            `SignedBlocksWindow` param determines the index in the `MissedBlocksBitArray`.\n        jailed_until:\n          type: string\n          format: date-time\n          description: Timestamp until which the validator is jailed due to liveness\n            downtime.\n        tombstoned:\n          type: boolean\n          description: >-\n            Whether or not a validator has been tombstoned (killed out of\n            validator set). It is set\n\n            once the validator commits an equivocation or for any other configured misbehiavor.\n        missed_blocks_counter:\n          type: string\n          format: int64\n          description: >-\n            A counter kept to avoid unnecessary array reads.\n\n            Note that `Sum(MissedBlocksBitArray)` always equals `MissedBlocksCounter`.\n      description: >-\n        ValidatorSigningInfo defines a validator's signing info for monitoring\n        their\n\n        liveness activity.\n    cosmos.gov.v1beta1.Deposit:\n      type: object\n      properties:\n        proposal_id:\n          type: string\n          format: uint64\n          description: proposal_id defines the unique id of the proposal.\n        depositor:\n          type: string\n          description: depositor defines the deposit addresses from the proposals.\n        amount:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n          description: amount to be deposited by depositor.\n      description: |-\n        Deposit defines an amount deposited by an account address to an active\n        proposal.\n    cosmos.gov.v1beta1.DepositParams:\n      type: object\n      properties:\n        min_deposit:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n          description: Minimum deposit for a proposal to enter voting period.\n        max_deposit_period:\n          type: string\n          description: >-\n            Maximum period for Atom holders to deposit on a proposal. Initial\n            value: 2\n\n            months.\n      description: DepositParams defines the params for deposits on governance proposals.\n    cosmos.gov.v1beta1.Proposal:\n      type: object\n      properties:\n        proposal_id:\n          type: string\n          format: uint64\n          description: proposal_id defines the unique id of the proposal.\n        content:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n          description: content is the proposal's content.\n        status:\n          description: status defines the proposal status.\n          type: string\n          enum:\n            - PROPOSAL_STATUS_UNSPECIFIED\n            - PROPOSAL_STATUS_DEPOSIT_PERIOD\n            - PROPOSAL_STATUS_VOTING_PERIOD\n            - PROPOSAL_STATUS_PASSED\n            - PROPOSAL_STATUS_REJECTED\n            - PROPOSAL_STATUS_FAILED\n          default: PROPOSAL_STATUS_UNSPECIFIED\n        final_tally_result:\n          description: |-\n            final_tally_result is the final tally result of the proposal. When\n            querying a proposal via gRPC, this field is not populated until the\n            proposal's voting period has ended.\n          type: object\n          properties:\n            yes:\n              type: string\n              description: yes is the number of yes votes on a proposal.\n            abstain:\n              type: string\n              description: abstain is the number of abstain votes on a proposal.\n            no:\n              type: string\n              description: no is the number of no votes on a proposal.\n            no_with_veto:\n              type: string\n              description: no_with_veto is the number of no with veto votes on a proposal.\n        submit_time:\n          type: string\n          format: date-time\n          description: submit_time is the time of proposal submission.\n        deposit_end_time:\n          type: string\n          format: date-time\n          description: deposit_end_time is the end time for deposition.\n        total_deposit:\n          type: array\n          items:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom method\n\n              signatures required by gogoproto.\n          description: total_deposit is the total deposit on the proposal.\n        voting_start_time:\n          type: string\n          format: date-time\n          description: voting_start_time is the starting time to vote on a proposal.\n        voting_end_time:\n          type: string\n          format: date-time\n          description: voting_end_time is the end time of voting on a proposal.\n      description: Proposal defines the core field members of a governance proposal.\n    cosmos.gov.v1beta1.ProposalStatus:\n      type: string\n      enum:\n        - PROPOSAL_STATUS_UNSPECIFIED\n        - PROPOSAL_STATUS_DEPOSIT_PERIOD\n        - PROPOSAL_STATUS_VOTING_PERIOD\n        - PROPOSAL_STATUS_PASSED\n        - PROPOSAL_STATUS_REJECTED\n        - PROPOSAL_STATUS_FAILED\n      default: PROPOSAL_STATUS_UNSPECIFIED\n      description: >-\n        ProposalStatus enumerates the valid statuses of a proposal.\n\n         - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n         - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\n        period.\n         - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\n        period.\n         - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\n        passed.\n         - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\n        been rejected.\n         - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\n        failed.\n    cosmos.gov.v1beta1.QueryDepositResponse:\n      type: object\n      properties:\n        deposit:\n          type: object\n          properties:\n            proposal_id:\n              type: string\n              format: uint64\n              description: proposal_id defines the unique id of the proposal.\n            depositor:\n              type: string\n              description: depositor defines the deposit addresses from the proposals.\n            amount:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom method\n\n                  signatures required by gogoproto.\n              description: amount to be deposited by depositor.\n          description: >-\n            Deposit defines an amount deposited by an account address to an\n            active\n\n            proposal.\n      description: QueryDepositResponse is the response type for the Query/Deposit RPC\n        method.\n    cosmos.gov.v1beta1.QueryDepositsResponse:\n      type: object\n      properties:\n        deposits:\n          type: array\n          items:\n            type: object\n            properties:\n              proposal_id:\n                type: string\n                format: uint64\n                description: proposal_id defines the unique id of the proposal.\n              depositor:\n                type: string\n                description: depositor defines the deposit addresses from the proposals.\n              amount:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom method\n\n                    signatures required by gogoproto.\n                description: amount to be deposited by depositor.\n            description: >-\n              Deposit defines an amount deposited by an account address to an\n              active\n\n              proposal.\n          description: deposits defines the requested deposits.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: QueryDepositsResponse is the response type for the Query/Deposits\n        RPC method.\n    cosmos.gov.v1beta1.QueryParamsResponse:\n      type: object\n      properties:\n        voting_params:\n          description: voting_params defines the parameters related to voting.\n          type: object\n          properties:\n            voting_period:\n              type: string\n              description: Duration of the voting period.\n        deposit_params:\n          description: deposit_params defines the parameters related to deposit.\n          type: object\n          properties:\n            min_deposit:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom method\n\n                  signatures required by gogoproto.\n              description: Minimum deposit for a proposal to enter voting period.\n            max_deposit_period:\n              type: string\n              description: >-\n                Maximum period for Atom holders to deposit on a proposal.\n                Initial value: 2\n\n                months.\n        tally_params:\n          description: tally_params defines the parameters related to tally.\n          type: object\n          properties:\n            quorum:\n              type: string\n              format: byte\n              description: >-\n                Minimum percentage of total stake needed to vote for a result to\n                be\n\n                considered valid.\n            threshold:\n              type: string\n              format: byte\n              description: \"Minimum proportion of Yes votes for proposal to pass. Default\n                value: 0.5.\"\n            veto_threshold:\n              type: string\n              format: byte\n              description: >-\n                Minimum value of Veto votes to Total votes ratio for proposal to\n                be\n\n                vetoed. Default value: 1/3.\n      description: QueryParamsResponse is the response type for the Query/Params RPC method.\n    cosmos.gov.v1beta1.QueryProposalResponse:\n      type: object\n      properties:\n        proposal:\n          type: object\n          properties:\n            proposal_id:\n              type: string\n              format: uint64\n              description: proposal_id defines the unique id of the proposal.\n            content:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n              description: content is the proposal's content.\n            status:\n              description: status defines the proposal status.\n              type: string\n              enum:\n                - PROPOSAL_STATUS_UNSPECIFIED\n                - PROPOSAL_STATUS_DEPOSIT_PERIOD\n                - PROPOSAL_STATUS_VOTING_PERIOD\n                - PROPOSAL_STATUS_PASSED\n                - PROPOSAL_STATUS_REJECTED\n                - PROPOSAL_STATUS_FAILED\n              default: PROPOSAL_STATUS_UNSPECIFIED\n            final_tally_result:\n              description: >-\n                final_tally_result is the final tally result of the proposal.\n                When\n\n                querying a proposal via gRPC, this field is not populated until the\n\n                proposal's voting period has ended.\n              type: object\n              properties:\n                yes:\n                  type: string\n                  description: yes is the number of yes votes on a proposal.\n                abstain:\n                  type: string\n                  description: abstain is the number of abstain votes on a proposal.\n                no:\n                  type: string\n                  description: no is the number of no votes on a proposal.\n                no_with_veto:\n                  type: string\n                  description: no_with_veto is the number of no with veto votes on a proposal.\n            submit_time:\n              type: string\n              format: date-time\n              description: submit_time is the time of proposal submission.\n            deposit_end_time:\n              type: string\n              format: date-time\n              description: deposit_end_time is the end time for deposition.\n            total_deposit:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom method\n\n                  signatures required by gogoproto.\n              description: total_deposit is the total deposit on the proposal.\n            voting_start_time:\n              type: string\n              format: date-time\n              description: voting_start_time is the starting time to vote on a proposal.\n            voting_end_time:\n              type: string\n              format: date-time\n              description: voting_end_time is the end time of voting on a proposal.\n          description: Proposal defines the core field members of a governance proposal.\n      description: QueryProposalResponse is the response type for the Query/Proposal\n        RPC method.\n    cosmos.gov.v1beta1.QueryProposalsResponse:\n      type: object\n      properties:\n        proposals:\n          type: array\n          items:\n            type: object\n            properties:\n              proposal_id:\n                type: string\n                format: uint64\n                description: proposal_id defines the unique id of the proposal.\n              content:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n                description: content is the proposal's content.\n              status:\n                description: status defines the proposal status.\n                type: string\n                enum:\n                  - PROPOSAL_STATUS_UNSPECIFIED\n                  - PROPOSAL_STATUS_DEPOSIT_PERIOD\n                  - PROPOSAL_STATUS_VOTING_PERIOD\n                  - PROPOSAL_STATUS_PASSED\n                  - PROPOSAL_STATUS_REJECTED\n                  - PROPOSAL_STATUS_FAILED\n                default: PROPOSAL_STATUS_UNSPECIFIED\n              final_tally_result:\n                description: >-\n                  final_tally_result is the final tally result of the proposal.\n                  When\n\n                  querying a proposal via gRPC, this field is not populated until the\n\n                  proposal's voting period has ended.\n                type: object\n                properties:\n                  yes:\n                    type: string\n                    description: yes is the number of yes votes on a proposal.\n                  abstain:\n                    type: string\n                    description: abstain is the number of abstain votes on a proposal.\n                  no:\n                    type: string\n                    description: no is the number of no votes on a proposal.\n                  no_with_veto:\n                    type: string\n                    description: no_with_veto is the number of no with veto votes on a proposal.\n              submit_time:\n                type: string\n                format: date-time\n                description: submit_time is the time of proposal submission.\n              deposit_end_time:\n                type: string\n                format: date-time\n                description: deposit_end_time is the end time for deposition.\n              total_deposit:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom method\n\n                    signatures required by gogoproto.\n                description: total_deposit is the total deposit on the proposal.\n              voting_start_time:\n                type: string\n                format: date-time\n                description: voting_start_time is the starting time to vote on a proposal.\n              voting_end_time:\n                type: string\n                format: date-time\n                description: voting_end_time is the end time of voting on a proposal.\n            description: Proposal defines the core field members of a governance proposal.\n          description: proposals defines all the requested governance proposals.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: |-\n        QueryProposalsResponse is the response type for the Query/Proposals RPC\n        method.\n    cosmos.gov.v1beta1.QueryTallyResultResponse:\n      type: object\n      properties:\n        tally:\n          description: tally defines the requested tally.\n          type: object\n          properties:\n            yes:\n              type: string\n              description: yes is the number of yes votes on a proposal.\n            abstain:\n              type: string\n              description: abstain is the number of abstain votes on a proposal.\n            no:\n              type: string\n              description: no is the number of no votes on a proposal.\n            no_with_veto:\n              type: string\n              description: no_with_veto is the number of no with veto votes on a proposal.\n      description: QueryTallyResultResponse is the response type for the Query/Tally\n        RPC method.\n    cosmos.gov.v1beta1.QueryVoteResponse:\n      type: object\n      properties:\n        vote:\n          type: object\n          properties:\n            proposal_id:\n              type: string\n              format: uint64\n              description: proposal_id defines the unique id of the proposal.\n            voter:\n              type: string\n              description: voter is the voter address of the proposal.\n            option:\n              description: >-\n                Deprecated: Prefer to use `options` instead. This field is set\n                in queries\n\n                if and only if `len(options) == 1` and that option has weight 1. In all\n\n                other cases, this field will default to VOTE_OPTION_UNSPECIFIED.\n              type: string\n              enum:\n                - VOTE_OPTION_UNSPECIFIED\n                - VOTE_OPTION_YES\n                - VOTE_OPTION_ABSTAIN\n                - VOTE_OPTION_NO\n                - VOTE_OPTION_NO_WITH_VETO\n              default: VOTE_OPTION_UNSPECIFIED\n            options:\n              type: array\n              items:\n                type: object\n                properties:\n                  option:\n                    description: option defines the valid vote options, it must not contain\n                      duplicate vote options.\n                    type: string\n                    enum:\n                      - VOTE_OPTION_UNSPECIFIED\n                      - VOTE_OPTION_YES\n                      - VOTE_OPTION_ABSTAIN\n                      - VOTE_OPTION_NO\n                      - VOTE_OPTION_NO_WITH_VETO\n                    default: VOTE_OPTION_UNSPECIFIED\n                  weight:\n                    type: string\n                    description: weight is the vote weight associated with the vote option.\n                description: |-\n                  WeightedVoteOption defines a unit of vote for vote split.\n\n                  Since: cosmos-sdk 0.43\n              description: |-\n                options is the weighted vote options.\n\n                Since: cosmos-sdk 0.43\n          description: |-\n            Vote defines a vote on a governance proposal.\n            A Vote consists of a proposal ID, the voter, and the vote option.\n      description: QueryVoteResponse is the response type for the Query/Vote RPC method.\n    cosmos.gov.v1beta1.QueryVotesResponse:\n      type: object\n      properties:\n        votes:\n          type: array\n          items:\n            type: object\n            properties:\n              proposal_id:\n                type: string\n                format: uint64\n                description: proposal_id defines the unique id of the proposal.\n              voter:\n                type: string\n                description: voter is the voter address of the proposal.\n              option:\n                description: >-\n                  Deprecated: Prefer to use `options` instead. This field is set\n                  in queries\n\n                  if and only if `len(options) == 1` and that option has weight 1. In all\n\n                  other cases, this field will default to VOTE_OPTION_UNSPECIFIED.\n                type: string\n                enum:\n                  - VOTE_OPTION_UNSPECIFIED\n                  - VOTE_OPTION_YES\n                  - VOTE_OPTION_ABSTAIN\n                  - VOTE_OPTION_NO\n                  - VOTE_OPTION_NO_WITH_VETO\n                default: VOTE_OPTION_UNSPECIFIED\n              options:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    option:\n                      description: option defines the valid vote options, it must not contain\n                        duplicate vote options.\n                      type: string\n                      enum:\n                        - VOTE_OPTION_UNSPECIFIED\n                        - VOTE_OPTION_YES\n                        - VOTE_OPTION_ABSTAIN\n                        - VOTE_OPTION_NO\n                        - VOTE_OPTION_NO_WITH_VETO\n                      default: VOTE_OPTION_UNSPECIFIED\n                    weight:\n                      type: string\n                      description: weight is the vote weight associated with the vote option.\n                  description: |-\n                    WeightedVoteOption defines a unit of vote for vote split.\n\n                    Since: cosmos-sdk 0.43\n                description: |-\n                  options is the weighted vote options.\n\n                  Since: cosmos-sdk 0.43\n            description: |-\n              Vote defines a vote on a governance proposal.\n              A Vote consists of a proposal ID, the voter, and the vote option.\n          description: votes defines the queried votes.\n        pagination:\n          type: object\n          properties:\n            next_key:\n              type: string\n              format: byte\n              description: |-\n                next_key is the key to be passed to PageRequest.key to\n                query the next page most efficiently. It will be empty if\n                there are no more results.\n            total:\n              type: string\n              format: uint64\n              title: >-\n                total is total number of results available if\n                PageRequest.count_total\n\n                was set, its value is undefined otherwise\n          description: |-\n            PageResponse is to be embedded in gRPC response messages where the\n            corresponding request message has used PageRequest.\n\n             message SomeResponse {\n                     repeated Bar results = 1;\n                     PageResponse page = 2;\n             }\n      description: QueryVotesResponse is the response type for the Query/Votes RPC method.\n    cosmos.gov.v1beta1.TallyParams:\n      type: object\n      properties:\n        quorum:\n          type: string\n          format: byte\n          description: |-\n            Minimum percentage of total stake needed to vote for a result to be\n            considered valid.\n        threshold:\n          type: string\n          format: byte\n          description: \"Minimum proportion of Yes votes for proposal to pass. Default\n            value: 0.5.\"\n        veto_threshold:\n          type: string\n          format: byte\n          description: |-\n            Minimum value of Veto votes to Total votes ratio for proposal to be\n            vetoed. Default value: 1/3.\n      description: TallyParams defines the params for tallying votes on governance\n        proposals.\n    cosmos.gov.v1beta1.TallyResult:\n      type: object\n      properties:\n        yes:\n          type: string\n          description: yes is the number of yes votes on a proposal.\n        abstain:\n          type: string\n          description: abstain is the number of abstain votes on a proposal.\n        no:\n          type: string\n          description: no is the number of no votes on a proposal.\n        no_with_veto:\n          type: string\n          description: no_with_veto is the number of no with veto votes on a proposal.\n      description: TallyResult defines a standard tally for a governance proposal.\n    cosmos.gov.v1beta1.Vote:\n      type: object\n      properties:\n        proposal_id:\n          type: string\n          format: uint64\n          description: proposal_id defines the unique id of the proposal.\n        voter:\n          type: string\n          description: voter is the voter address of the proposal.\n        option:\n          description: >-\n            Deprecated: Prefer to use `options` instead. This field is set in\n            queries\n\n            if and only if `len(options) == 1` and that option has weight 1. In all\n\n            other cases, this field will default to VOTE_OPTION_UNSPECIFIED.\n          type: string\n          enum:\n            - VOTE_OPTION_UNSPECIFIED\n            - VOTE_OPTION_YES\n            - VOTE_OPTION_ABSTAIN\n            - VOTE_OPTION_NO\n            - VOTE_OPTION_NO_WITH_VETO\n          default: VOTE_OPTION_UNSPECIFIED\n        options:\n          type: array\n          items:\n            type: object\n            properties:\n              option:\n                description: option defines the valid vote options, it must not contain\n                  duplicate vote options.\n                type: string\n                enum:\n                  - VOTE_OPTION_UNSPECIFIED\n                  - VOTE_OPTION_YES\n                  - VOTE_OPTION_ABSTAIN\n                  - VOTE_OPTION_NO\n                  - VOTE_OPTION_NO_WITH_VETO\n                default: VOTE_OPTION_UNSPECIFIED\n              weight:\n                type: string\n                description: weight is the vote weight associated with the vote option.\n            description: |-\n              WeightedVoteOption defines a unit of vote for vote split.\n\n              Since: cosmos-sdk 0.43\n          description: |-\n            options is the weighted vote options.\n\n            Since: cosmos-sdk 0.43\n      description: |-\n        Vote defines a vote on a governance proposal.\n        A Vote consists of a proposal ID, the voter, and the vote option.\n    cosmos.gov.v1beta1.VoteOption:\n      type: string\n      enum:\n        - VOTE_OPTION_UNSPECIFIED\n        - VOTE_OPTION_YES\n        - VOTE_OPTION_ABSTAIN\n        - VOTE_OPTION_NO\n        - VOTE_OPTION_NO_WITH_VETO\n      default: VOTE_OPTION_UNSPECIFIED\n      description: >-\n        VoteOption enumerates the valid vote options for a given governance\n        proposal.\n\n         - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option.\n         - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n         - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n         - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n         - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.\n    cosmos.gov.v1beta1.VotingParams:\n      type: object\n      properties:\n        voting_period:\n          type: string\n          description: Duration of the voting period.\n      description: VotingParams defines the params for voting on governance proposals.\n    cosmos.gov.v1beta1.WeightedVoteOption:\n      type: object\n      properties:\n        option:\n          description: option defines the valid vote options, it must not contain\n            duplicate vote options.\n          type: string\n          enum:\n            - VOTE_OPTION_UNSPECIFIED\n            - VOTE_OPTION_YES\n            - VOTE_OPTION_ABSTAIN\n            - VOTE_OPTION_NO\n            - VOTE_OPTION_NO_WITH_VETO\n          default: VOTE_OPTION_UNSPECIFIED\n        weight:\n          type: string\n          description: weight is the vote weight associated with the vote option.\n      description: |-\n        WeightedVoteOption defines a unit of vote for vote split.\n\n        Since: cosmos-sdk 0.43\n    cosmos.mint.v1beta1.Params:\n      type: object\n      properties:\n        mint_denom:\n          type: string\n          title: type of coin to mint\n        inflation_rate_change:\n          type: string\n          title: maximum annual change in inflation rate\n        inflation_max:\n          type: string\n          title: maximum inflation rate\n        inflation_min:\n          type: string\n          title: minimum inflation rate\n        goal_bonded:\n          type: string\n          title: goal of percent bonded atoms\n        blocks_per_year:\n          type: string\n          format: uint64\n          title: expected blocks per year\n      description: Params defines the parameters for the x/mint module.\n    cosmos.mint.v1beta1.QueryAnnualProvisionsResponse:\n      type: object\n      properties:\n        annual_provisions:\n          type: string\n          format: byte\n          description: annual_provisions is the current minting annual provisions value.\n      description: |-\n        QueryAnnualProvisionsResponse is the response type for the\n        Query/AnnualProvisions RPC method.\n    cosmos.mint.v1beta1.QueryInflationResponse:\n      type: object\n      properties:\n        inflation:\n          type: string\n          format: byte\n          description: inflation is the current minting inflation value.\n      description: |-\n        QueryInflationResponse is the response type for the Query/Inflation RPC\n        method.\n    cosmos.mint.v1beta1.QueryParamsResponse:\n      type: object\n      properties:\n        params:\n          description: params defines the parameters of the module.\n          type: object\n          properties:\n            mint_denom:\n              type: string\n              title: type of coin to mint\n            inflation_rate_change:\n              type: string\n              title: maximum annual change in inflation rate\n            inflation_max:\n              type: string\n              title: maximum inflation rate\n            inflation_min:\n              type: string\n              title: minimum inflation rate\n            goal_bonded:\n              type: string\n              title: goal of percent bonded atoms\n            blocks_per_year:\n              type: string\n              format: uint64\n              title: expected blocks per year\n      description: QueryParamsResponse is the response type for the Query/Params RPC method.\n"
  },
  {
    "path": "client/docs/swagger.yaml",
    "content": "swagger: '2.0'\ninfo:\n  title: Bostrom network\n  version: v4\nconsumes:\n  - application/json\nproduces:\n  - application/json\npaths:\n  /cosmos/consensus/v1/params:\n    get:\n      summary: Params queries the parameters of x/consensus_param module.\n      operationId: Params_TZPQY\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              params:\n                description: >-\n                  params are the tendermint consensus params stored in the\n                  consensus module.\n\n                  Please note that `params.version` is not populated in this\n                  response, it is\n\n                  tracked separately in the x/upgrade module.\n                type: object\n                properties:\n                  block:\n                    type: object\n                    properties:\n                      max_bytes:\n                        type: string\n                        format: int64\n                        title: |-\n                          Max block size, in bytes.\n                          Note: must be greater than 0\n                      max_gas:\n                        type: string\n                        format: int64\n                        title: |-\n                          Max gas per block.\n                          Note: must be greater or equal to -1\n                    description: BlockParams contains limits on the block size.\n                  evidence:\n                    type: object\n                    properties:\n                      max_age_num_blocks:\n                        type: string\n                        format: int64\n                        description: >-\n                          Max age of evidence, in blocks.\n\n\n                          The basic formula for calculating this is:\n                          MaxAgeDuration / {average block\n\n                          time}.\n                      max_age_duration:\n                        type: string\n                        description: >-\n                          Max age of evidence, in time.\n\n\n                          It should correspond with an app's \"unbonding period\"\n                          or other similar\n\n                          mechanism for handling [Nothing-At-Stake\n\n                          attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed).\n                      max_bytes:\n                        type: string\n                        format: int64\n                        title: >-\n                          This sets the maximum size of total evidence in bytes\n                          that can be committed in a single block.\n\n                          and should fall comfortably under the max block bytes.\n\n                          Default is 1048576 or 1MB\n                    description: >-\n                      EvidenceParams determine how we handle evidence of\n                      malfeasance.\n                  validator:\n                    type: object\n                    properties:\n                      pub_key_types:\n                        type: array\n                        items:\n                          type: string\n                    description: >-\n                      ValidatorParams restrict the public key types validators\n                      can use.\n\n                      NOTE: uses ABCI pubkey naming, not Amino names.\n                  version:\n                    type: object\n                    properties:\n                      app:\n                        type: string\n                        format: uint64\n                    description: VersionParams contains the ABCI application version.\n            description: >-\n              QueryParamsResponse defines the response type for querying\n              x/consensus parameters.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/feegrant/v1beta1/allowance/{granter}/{grantee}:\n    get:\n      summary: Allowance returns fee granted to the grantee by the granter.\n      operationId: Allowance_WUEKP\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              allowance:\n                description: allowance is a allowance granted for grantee by granter.\n                type: object\n                properties:\n                  granter:\n                    type: string\n                    description: >-\n                      granter is the address of the user granting an allowance\n                      of their funds.\n                  grantee:\n                    type: string\n                    description: >-\n                      grantee is the address of the user being granted an\n                      allowance of another user's funds.\n                  allowance:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                    description: >-\n                      allowance can be any of basic, periodic, allowed fee\n                      allowance.\n                title: >-\n                  Grant is stored in the KVStore to record a grant with full\n                  context\n            description: >-\n              QueryAllowanceResponse is the response type for the\n              Query/Allowance RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: granter\n          description: >-\n            granter is the address of the user granting an allowance of their\n            funds.\n          in: path\n          required: true\n          type: string\n        - name: grantee\n          description: >-\n            grantee is the address of the user being granted an allowance of\n            another user's funds.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/feegrant/v1beta1/allowances/{grantee}:\n    get:\n      summary: Allowances returns all the grants for address.\n      operationId: Allowances_2SCGA\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              allowances:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    granter:\n                      type: string\n                      description: >-\n                        granter is the address of the user granting an allowance\n                        of their funds.\n                    grantee:\n                      type: string\n                      description: >-\n                        grantee is the address of the user being granted an\n                        allowance of another user's funds.\n                    allowance:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                      description: >-\n                        allowance can be any of basic, periodic, allowed fee\n                        allowance.\n                  title: >-\n                    Grant is stored in the KVStore to record a grant with full\n                    context\n                description: allowances are allowance's granted for grantee by granter.\n              pagination:\n                description: pagination defines an pagination for the response.\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n            description: >-\n              QueryAllowancesResponse is the response type for the\n              Query/Allowances RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: grantee\n          in: path\n          required: true\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/feegrant/v1beta1/issued/{granter}:\n    get:\n      summary: AllowancesByGranter returns all the grants given by an address\n      description: 'Since: cosmos-sdk 0.46'\n      operationId: AllowancesByGranter_H5OXI\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              allowances:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    granter:\n                      type: string\n                      description: >-\n                        granter is the address of the user granting an allowance\n                        of their funds.\n                    grantee:\n                      type: string\n                      description: >-\n                        grantee is the address of the user being granted an\n                        allowance of another user's funds.\n                    allowance:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                      description: >-\n                        allowance can be any of basic, periodic, allowed fee\n                        allowance.\n                  title: >-\n                    Grant is stored in the KVStore to record a grant with full\n                    context\n                description: allowances that have been issued by the granter.\n              pagination:\n                description: pagination defines an pagination for the response.\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n            description: >-\n              QueryAllowancesByGranterResponse is the response type for the\n              Query/AllowancesByGranter RPC method.\n\n\n              Since: cosmos-sdk 0.46\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: granter\n          in: path\n          required: true\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/gov/v1/params/{params_type}:\n    get:\n      summary: Params queries all parameters of the gov module.\n      operationId: Params_RTRPI\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              voting_params:\n                description: |-\n                  Deprecated: Prefer to use `params` instead.\n                  voting_params defines the parameters related to voting.\n                type: object\n                properties:\n                  voting_period:\n                    type: string\n                    description: Duration of the voting period.\n              deposit_params:\n                description: |-\n                  Deprecated: Prefer to use `params` instead.\n                  deposit_params defines the parameters related to deposit.\n                type: object\n                properties:\n                  min_deposit:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                    description: Minimum deposit for a proposal to enter voting period.\n                  max_deposit_period:\n                    type: string\n                    description: >-\n                      Maximum period for Atom holders to deposit on a proposal.\n                      Initial value: 2\n\n                      months.\n              tally_params:\n                description: |-\n                  Deprecated: Prefer to use `params` instead.\n                  tally_params defines the parameters related to tally.\n                type: object\n                properties:\n                  quorum:\n                    type: string\n                    description: >-\n                      Minimum percentage of total stake needed to vote for a\n                      result to be\n\n                      considered valid.\n                  threshold:\n                    type: string\n                    description: >-\n                      Minimum proportion of Yes votes for proposal to pass.\n                      Default value: 0.5.\n                  veto_threshold:\n                    type: string\n                    description: >-\n                      Minimum value of Veto votes to Total votes ratio for\n                      proposal to be\n\n                      vetoed. Default value: 1/3.\n              params:\n                description: |-\n                  params defines all the paramaters of x/gov module.\n\n                  Since: cosmos-sdk 0.47\n                type: object\n                properties:\n                  min_deposit:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                    description: Minimum deposit for a proposal to enter voting period.\n                  max_deposit_period:\n                    type: string\n                    description: >-\n                      Maximum period for Atom holders to deposit on a proposal.\n                      Initial value: 2\n\n                      months.\n                  voting_period:\n                    type: string\n                    description: Duration of the voting period.\n                  quorum:\n                    type: string\n                    description: >-\n                      Minimum percentage of total stake needed to vote for a\n                      result to be\n                       considered valid.\n                  threshold:\n                    type: string\n                    description: >-\n                      Minimum proportion of Yes votes for proposal to pass.\n                      Default value: 0.5.\n                  veto_threshold:\n                    type: string\n                    description: >-\n                      Minimum value of Veto votes to Total votes ratio for\n                      proposal to be\n                       vetoed. Default value: 1/3.\n                  min_initial_deposit_ratio:\n                    type: string\n                    description: >-\n                      The ratio representing the proportion of the deposit value\n                      that must be paid at proposal submission.\n                  burn_vote_quorum:\n                    type: boolean\n                    title: burn deposits if a proposal does not meet quorum\n                  burn_proposal_deposit_prevote:\n                    type: boolean\n                    title: burn deposits if the proposal does not enter voting period\n                  burn_vote_veto:\n                    type: boolean\n                    title: burn deposits if quorum with vote type no_veto is met\n            description: >-\n              QueryParamsResponse is the response type for the Query/Params RPC\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: params_type\n          description: >-\n            params_type defines which parameters to query for, can be one of\n            \"voting\",\n\n            \"tallying\" or \"deposit\".\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/gov/v1/proposals:\n    get:\n      summary: Proposals queries all proposals based on given status.\n      operationId: Proposals_MNCBG\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              proposals:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    id:\n                      type: string\n                      format: uint64\n                      description: id defines the unique id of the proposal.\n                    messages:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          type_url:\n                            type: string\n                          value:\n                            type: string\n                            format: byte\n                      description: >-\n                        messages are the arbitrary messages to be executed if\n                        the proposal passes.\n                    status:\n                      description: status defines the proposal status.\n                      type: string\n                      enum:\n                        - PROPOSAL_STATUS_UNSPECIFIED\n                        - PROPOSAL_STATUS_DEPOSIT_PERIOD\n                        - PROPOSAL_STATUS_VOTING_PERIOD\n                        - PROPOSAL_STATUS_PASSED\n                        - PROPOSAL_STATUS_REJECTED\n                        - PROPOSAL_STATUS_FAILED\n                      default: PROPOSAL_STATUS_UNSPECIFIED\n                    final_tally_result:\n                      description: >-\n                        final_tally_result is the final tally result of the\n                        proposal. When\n\n                        querying a proposal via gRPC, this field is not\n                        populated until the\n\n                        proposal's voting period has ended.\n                      type: object\n                      properties:\n                        yes_count:\n                          type: string\n                          description: yes_count is the number of yes votes on a proposal.\n                        abstain_count:\n                          type: string\n                          description: >-\n                            abstain_count is the number of abstain votes on a\n                            proposal.\n                        no_count:\n                          type: string\n                          description: no_count is the number of no votes on a proposal.\n                        no_with_veto_count:\n                          type: string\n                          description: >-\n                            no_with_veto_count is the number of no with veto\n                            votes on a proposal.\n                    submit_time:\n                      type: string\n                      format: date-time\n                      description: submit_time is the time of proposal submission.\n                    deposit_end_time:\n                      type: string\n                      format: date-time\n                      description: deposit_end_time is the end time for deposition.\n                    total_deposit:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the\n                          custom method\n\n                          signatures required by gogoproto.\n                      description: total_deposit is the total deposit on the proposal.\n                    voting_start_time:\n                      type: string\n                      format: date-time\n                      description: >-\n                        voting_start_time is the starting time to vote on a\n                        proposal.\n                    voting_end_time:\n                      type: string\n                      format: date-time\n                      description: voting_end_time is the end time of voting on a proposal.\n                    metadata:\n                      type: string\n                      description: >-\n                        metadata is any arbitrary metadata attached to the\n                        proposal.\n                    title:\n                      type: string\n                      description: 'Since: cosmos-sdk 0.47'\n                      title: title is the title of the proposal\n                    summary:\n                      type: string\n                      description: 'Since: cosmos-sdk 0.47'\n                      title: summary is a short summary of the proposal\n                    proposer:\n                      type: string\n                      description: 'Since: cosmos-sdk 0.47'\n                      title: Proposer is the address of the proposal sumbitter\n                  description: >-\n                    Proposal defines the core field members of a governance\n                    proposal.\n                description: proposals defines all the requested governance proposals.\n              pagination:\n                description: pagination defines the pagination in the response.\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n            description: >-\n              QueryProposalsResponse is the response type for the\n              Query/Proposals RPC\n\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: proposal_status\n          description: |-\n            proposal_status defines the status of the proposals.\n\n             - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n             - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\n            period.\n             - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\n            period.\n             - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\n            passed.\n             - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\n            been rejected.\n             - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\n            failed.\n          in: query\n          required: false\n          type: string\n          enum:\n            - PROPOSAL_STATUS_UNSPECIFIED\n            - PROPOSAL_STATUS_DEPOSIT_PERIOD\n            - PROPOSAL_STATUS_VOTING_PERIOD\n            - PROPOSAL_STATUS_PASSED\n            - PROPOSAL_STATUS_REJECTED\n            - PROPOSAL_STATUS_FAILED\n          default: PROPOSAL_STATUS_UNSPECIFIED\n        - name: voter\n          description: voter defines the voter address for the proposals.\n          in: query\n          required: false\n          type: string\n        - name: depositor\n          description: depositor defines the deposit addresses from the proposals.\n          in: query\n          required: false\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/gov/v1/proposals/{proposal_id}:\n    get:\n      summary: Proposal queries proposal details based on ProposalID.\n      operationId: Proposal_M3ACP\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              proposal:\n                type: object\n                properties:\n                  id:\n                    type: string\n                    format: uint64\n                    description: id defines the unique id of the proposal.\n                  messages:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                    description: >-\n                      messages are the arbitrary messages to be executed if the\n                      proposal passes.\n                  status:\n                    description: status defines the proposal status.\n                    type: string\n                    enum:\n                      - PROPOSAL_STATUS_UNSPECIFIED\n                      - PROPOSAL_STATUS_DEPOSIT_PERIOD\n                      - PROPOSAL_STATUS_VOTING_PERIOD\n                      - PROPOSAL_STATUS_PASSED\n                      - PROPOSAL_STATUS_REJECTED\n                      - PROPOSAL_STATUS_FAILED\n                    default: PROPOSAL_STATUS_UNSPECIFIED\n                  final_tally_result:\n                    description: >-\n                      final_tally_result is the final tally result of the\n                      proposal. When\n\n                      querying a proposal via gRPC, this field is not populated\n                      until the\n\n                      proposal's voting period has ended.\n                    type: object\n                    properties:\n                      yes_count:\n                        type: string\n                        description: yes_count is the number of yes votes on a proposal.\n                      abstain_count:\n                        type: string\n                        description: >-\n                          abstain_count is the number of abstain votes on a\n                          proposal.\n                      no_count:\n                        type: string\n                        description: no_count is the number of no votes on a proposal.\n                      no_with_veto_count:\n                        type: string\n                        description: >-\n                          no_with_veto_count is the number of no with veto votes\n                          on a proposal.\n                  submit_time:\n                    type: string\n                    format: date-time\n                    description: submit_time is the time of proposal submission.\n                  deposit_end_time:\n                    type: string\n                    format: date-time\n                    description: deposit_end_time is the end time for deposition.\n                  total_deposit:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                    description: total_deposit is the total deposit on the proposal.\n                  voting_start_time:\n                    type: string\n                    format: date-time\n                    description: >-\n                      voting_start_time is the starting time to vote on a\n                      proposal.\n                  voting_end_time:\n                    type: string\n                    format: date-time\n                    description: voting_end_time is the end time of voting on a proposal.\n                  metadata:\n                    type: string\n                    description: >-\n                      metadata is any arbitrary metadata attached to the\n                      proposal.\n                  title:\n                    type: string\n                    description: 'Since: cosmos-sdk 0.47'\n                    title: title is the title of the proposal\n                  summary:\n                    type: string\n                    description: 'Since: cosmos-sdk 0.47'\n                    title: summary is a short summary of the proposal\n                  proposer:\n                    type: string\n                    description: 'Since: cosmos-sdk 0.47'\n                    title: Proposer is the address of the proposal sumbitter\n                description: >-\n                  Proposal defines the core field members of a governance\n                  proposal.\n            description: >-\n              QueryProposalResponse is the response type for the Query/Proposal\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /cosmos/gov/v1/proposals/{proposal_id}/deposits:\n    get:\n      summary: Deposits queries all deposits of a single proposal.\n      operationId: Deposits_1TZ1V\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              deposits:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    proposal_id:\n                      type: string\n                      format: uint64\n                      description: proposal_id defines the unique id of the proposal.\n                    depositor:\n                      type: string\n                      description: >-\n                        depositor defines the deposit addresses from the\n                        proposals.\n                    amount:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the\n                          custom method\n\n                          signatures required by gogoproto.\n                      description: amount to be deposited by depositor.\n                  description: >-\n                    Deposit defines an amount deposited by an account address to\n                    an active\n\n                    proposal.\n                description: deposits defines the requested deposits.\n              pagination:\n                description: pagination defines the pagination in the response.\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n            description: >-\n              QueryDepositsResponse is the response type for the Query/Deposits\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          type: string\n          format: uint64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/gov/v1/proposals/{proposal_id}/deposits/{depositor}:\n    get:\n      summary: >-\n        Deposit queries single deposit information based proposalID,\n        depositAddr.\n      operationId: Deposit_2YBCE\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              deposit:\n                type: object\n                properties:\n                  proposal_id:\n                    type: string\n                    format: uint64\n                    description: proposal_id defines the unique id of the proposal.\n                  depositor:\n                    type: string\n                    description: >-\n                      depositor defines the deposit addresses from the\n                      proposals.\n                  amount:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                    description: amount to be deposited by depositor.\n                description: >-\n                  Deposit defines an amount deposited by an account address to\n                  an active\n\n                  proposal.\n            description: >-\n              QueryDepositResponse is the response type for the Query/Deposit\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          type: string\n          format: uint64\n        - name: depositor\n          description: depositor defines the deposit addresses from the proposals.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/gov/v1/proposals/{proposal_id}/tally:\n    get:\n      summary: TallyResult queries the tally of a proposal vote.\n      operationId: TallyResult_HD9CX\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              tally:\n                description: tally defines the requested tally.\n                type: object\n                properties:\n                  yes_count:\n                    type: string\n                    description: yes_count is the number of yes votes on a proposal.\n                  abstain_count:\n                    type: string\n                    description: >-\n                      abstain_count is the number of abstain votes on a\n                      proposal.\n                  no_count:\n                    type: string\n                    description: no_count is the number of no votes on a proposal.\n                  no_with_veto_count:\n                    type: string\n                    description: >-\n                      no_with_veto_count is the number of no with veto votes on\n                      a proposal.\n            description: >-\n              QueryTallyResultResponse is the response type for the Query/Tally\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /cosmos/gov/v1/proposals/{proposal_id}/votes:\n    get:\n      summary: Votes queries votes of a given proposal.\n      operationId: Votes_AG3U7\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              votes:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    proposal_id:\n                      type: string\n                      format: uint64\n                      description: proposal_id defines the unique id of the proposal.\n                    voter:\n                      type: string\n                      description: voter is the voter address of the proposal.\n                    options:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          option:\n                            description: >-\n                              option defines the valid vote options, it must not\n                              contain duplicate vote options.\n                            type: string\n                            enum:\n                              - VOTE_OPTION_UNSPECIFIED\n                              - VOTE_OPTION_YES\n                              - VOTE_OPTION_ABSTAIN\n                              - VOTE_OPTION_NO\n                              - VOTE_OPTION_NO_WITH_VETO\n                            default: VOTE_OPTION_UNSPECIFIED\n                          weight:\n                            type: string\n                            description: >-\n                              weight is the vote weight associated with the vote\n                              option.\n                        description: >-\n                          WeightedVoteOption defines a unit of vote for vote\n                          split.\n                      description: options is the weighted vote options.\n                    metadata:\n                      type: string\n                      description: >-\n                        metadata is any  arbitrary metadata to attached to the\n                        vote.\n                  description: >-\n                    Vote defines a vote on a governance proposal.\n\n                    A Vote consists of a proposal ID, the voter, and the vote\n                    option.\n                description: votes defines the queried votes.\n              pagination:\n                description: pagination defines the pagination in the response.\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n            description: >-\n              QueryVotesResponse is the response type for the Query/Votes RPC\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          type: string\n          format: uint64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/gov/v1/proposals/{proposal_id}/votes/{voter}:\n    get:\n      summary: Vote queries voted information based on proposalID, voterAddr.\n      operationId: Vote_CJIO5\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              vote:\n                type: object\n                properties:\n                  proposal_id:\n                    type: string\n                    format: uint64\n                    description: proposal_id defines the unique id of the proposal.\n                  voter:\n                    type: string\n                    description: voter is the voter address of the proposal.\n                  options:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        option:\n                          description: >-\n                            option defines the valid vote options, it must not\n                            contain duplicate vote options.\n                          type: string\n                          enum:\n                            - VOTE_OPTION_UNSPECIFIED\n                            - VOTE_OPTION_YES\n                            - VOTE_OPTION_ABSTAIN\n                            - VOTE_OPTION_NO\n                            - VOTE_OPTION_NO_WITH_VETO\n                          default: VOTE_OPTION_UNSPECIFIED\n                        weight:\n                          type: string\n                          description: >-\n                            weight is the vote weight associated with the vote\n                            option.\n                      description: >-\n                        WeightedVoteOption defines a unit of vote for vote\n                        split.\n                    description: options is the weighted vote options.\n                  metadata:\n                    type: string\n                    description: >-\n                      metadata is any  arbitrary metadata to attached to the\n                      vote.\n                description: >-\n                  Vote defines a vote on a governance proposal.\n\n                  A Vote consists of a proposal ID, the voter, and the vote\n                  option.\n            description: >-\n              QueryVoteResponse is the response type for the Query/Vote RPC\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          type: string\n          format: uint64\n        - name: voter\n          description: voter defines the voter address for the proposals.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/graph/v1beta1/graph_stats:\n    get:\n      operationId: GraphStats_EIHOL\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              cyberlinks:\n                type: string\n                format: uint64\n              particles:\n                type: string\n                format: uint64\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cyber/resources/v1beta1/resources/investmint:\n    get:\n      operationId: Investmint_GWKUV\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              amount:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom\n                  method\n\n                  signatures required by gogoproto.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: amount.denom\n          in: query\n          required: false\n          type: string\n        - name: amount.amount\n          in: query\n          required: false\n          type: string\n        - name: resource\n          in: query\n          required: false\n          type: string\n        - name: length\n          in: query\n          required: false\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /cyber/resources/v1beta1/resources/params:\n    get:\n      operationId: Params_KCXBY\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              params:\n                type: object\n                properties:\n                  max_slots:\n                    type: integer\n                    format: int64\n                  halving_period_volt_blocks:\n                    type: integer\n                    format: int64\n                  halving_period_ampere_blocks:\n                    type: integer\n                    format: int64\n                  base_investmint_period_volt:\n                    type: integer\n                    format: int64\n                  base_investmint_period_ampere:\n                    type: integer\n                    format: int64\n                  min_investmint_period:\n                    type: integer\n                    format: int64\n                  base_investmint_amount_volt:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the\n                      custom method\n\n                      signatures required by gogoproto.\n                  base_investmint_amount_ampere:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the\n                      custom method\n\n                      signatures required by gogoproto.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/base/node/v1beta1/config:\n    get:\n      summary: Config queries for the operator configuration.\n      operationId: Config_CWIZ3\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              minimum_gas_price:\n                type: string\n            description: >-\n              ConfigResponse defines the response structure for the Config gRPC\n              query.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/upgrade/v1beta1/applied_plan/{name}:\n    get:\n      summary: AppliedPlan queries a previously applied upgrade plan by its name.\n      operationId: AppliedPlan_UVH49\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              height:\n                type: string\n                format: int64\n                description: height is the block height at which the plan was applied.\n            description: >-\n              QueryAppliedPlanResponse is the response type for the\n              Query/AppliedPlan RPC\n\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: name\n          description: name is the name of the applied plan to query for.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/upgrade/v1beta1/authority:\n    get:\n      summary: Returns the account with authority to conduct upgrades\n      description: 'Since: cosmos-sdk 0.46'\n      operationId: Authority_2NU82\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              address:\n                type: string\n            description: 'Since: cosmos-sdk 0.46'\n            title: QueryAuthorityResponse is the response type for Query/Authority\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/upgrade/v1beta1/current_plan:\n    get:\n      summary: CurrentPlan queries the current upgrade plan.\n      operationId: CurrentPlan_YGRDZ\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              plan:\n                description: plan is the current upgrade plan.\n                type: object\n                properties:\n                  name:\n                    type: string\n                    description: >-\n                      Sets the name for the upgrade. This name will be used by\n                      the upgraded\n\n                      version of the software to apply any special \"on-upgrade\"\n                      commands during\n\n                      the first BeginBlock method after the upgrade is applied.\n                      It is also used\n\n                      to detect whether a software version can handle a given\n                      upgrade. If no\n\n                      upgrade handler with this name has been set in the\n                      software, it will be\n\n                      assumed that the software is out-of-date when the upgrade\n                      Time or Height is\n\n                      reached and the software will exit.\n                  time:\n                    type: string\n                    format: date-time\n                    description: >-\n                      Deprecated: Time based upgrades have been deprecated. Time\n                      based upgrade logic\n\n                      has been removed from the SDK.\n\n                      If this field is not empty, an error will be thrown.\n                  height:\n                    type: string\n                    format: int64\n                    description: The height at which the upgrade must be performed.\n                  info:\n                    type: string\n                    title: >-\n                      Any application specific upgrade info to be included\n                      on-chain\n\n                      such as a git commit that validators could automatically\n                      upgrade to\n                  upgraded_client_state:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                    description: >-\n                      Deprecated: UpgradedClientState field has been deprecated.\n                      IBC upgrade logic has been\n\n                      moved to the IBC module in the sub module 02-client.\n\n                      If this field is not empty, an error will be thrown.\n            description: >-\n              QueryCurrentPlanResponse is the response type for the\n              Query/CurrentPlan RPC\n\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/upgrade/v1beta1/module_versions:\n    get:\n      summary: ModuleVersions queries the list of module versions from state.\n      description: 'Since: cosmos-sdk 0.43'\n      operationId: ModuleVersions_7VRES\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              module_versions:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    name:\n                      type: string\n                      title: name of the app module\n                    version:\n                      type: string\n                      format: uint64\n                      title: consensus version of the app module\n                  description: |-\n                    ModuleVersion specifies a module and its consensus version.\n\n                    Since: cosmos-sdk 0.43\n                description: >-\n                  module_versions is a list of module names with their consensus\n                  versions.\n            description: >-\n              QueryModuleVersionsResponse is the response type for the\n              Query/ModuleVersions\n\n              RPC method.\n\n\n              Since: cosmos-sdk 0.43\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: module_name\n          description: |-\n            module_name is a field to query a specific module\n            consensus version from state. Leaving this empty will\n            fetch the full list of module versions from state.\n          in: query\n          required: false\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/upgrade/v1beta1/upgraded_consensus_state/{last_height}:\n    get:\n      summary: >-\n        UpgradedConsensusState queries the consensus state that will serve\n\n        as a trusted kernel for the next version of this chain. It will only be\n\n        stored at the last height of this chain.\n\n        UpgradedConsensusState RPC not supported with legacy querier\n\n        This rpc is deprecated now that IBC has its own replacement\n\n        (https://github.com/cosmos/ibc-go/blob/2c880a22e9f9cc75f62b527ca94aa75ce1106001/proto/ibc/core/client/v1/query.proto#L54)\n      operationId: UpgradedConsensusState_DG71K\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              upgraded_consensus_state:\n                type: string\n                format: byte\n                title: 'Since: cosmos-sdk 0.43'\n            description: >-\n              QueryUpgradedConsensusStateResponse is the response type for the\n              Query/UpgradedConsensusState\n\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: last_height\n          description: |-\n            last height of the current chain must be sent in request\n            as this is the height under which next consensus state is stored\n          in: path\n          required: true\n          type: string\n          format: int64\n      tags:\n        - gRPC Gateway API\n  /ibc/apps/fee/v1/channels/{channel_id}/ports/{port_id}/fee_enabled:\n    get:\n      summary: >-\n        FeeEnabledChannel returns true if the provided port and channel\n        identifiers belong to a fee enabled channel\n      operationId: FeeEnabledChannel_840O1\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              fee_enabled:\n                type: boolean\n                title: boolean flag representing the fee enabled channel status\n            title: >-\n              QueryFeeEnabledChannelResponse defines the response type for the\n              FeeEnabledChannel rpc\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: channel_id\n          description: unique channel identifier\n          in: path\n          required: true\n          type: string\n        - name: port_id\n          description: unique port identifier\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /ibc/apps/fee/v1/channels/{channel_id}/ports/{port_id}/incentivized_packets:\n    get:\n      summary: Gets all incentivized packets for a specific channel\n      operationId: IncentivizedPacketsForChannel_YZC9B\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              incentivized_packets:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    packet_id:\n                      title: >-\n                        unique packet identifier comprised of the channel ID,\n                        port ID and sequence\n                      type: object\n                      properties:\n                        port_id:\n                          type: string\n                          title: channel port identifier\n                        channel_id:\n                          type: string\n                          title: channel unique identifier\n                        sequence:\n                          type: string\n                          format: uint64\n                          title: packet sequence\n                    packet_fees:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          fee:\n                            title: >-\n                              fee encapsulates the recv, ack and timeout fees\n                              associated with an IBC packet\n                            type: object\n                            properties:\n                              recv_fee:\n                                type: array\n                                items:\n                                  type: object\n                                  properties:\n                                    denom:\n                                      type: string\n                                    amount:\n                                      type: string\n                                  description: >-\n                                    Coin defines a token with a denomination and\n                                    an amount.\n\n\n                                    NOTE: The amount field is an Int which\n                                    implements the custom method\n\n                                    signatures required by gogoproto.\n                                title: the packet receive fee\n                              ack_fee:\n                                type: array\n                                items:\n                                  type: object\n                                  properties:\n                                    denom:\n                                      type: string\n                                    amount:\n                                      type: string\n                                  description: >-\n                                    Coin defines a token with a denomination and\n                                    an amount.\n\n\n                                    NOTE: The amount field is an Int which\n                                    implements the custom method\n\n                                    signatures required by gogoproto.\n                                title: the packet acknowledgement fee\n                              timeout_fee:\n                                type: array\n                                items:\n                                  type: object\n                                  properties:\n                                    denom:\n                                      type: string\n                                    amount:\n                                      type: string\n                                  description: >-\n                                    Coin defines a token with a denomination and\n                                    an amount.\n\n\n                                    NOTE: The amount field is an Int which\n                                    implements the custom method\n\n                                    signatures required by gogoproto.\n                                title: the packet timeout fee\n                          refund_address:\n                            type: string\n                            title: the refund address for unspent fees\n                          relayers:\n                            type: array\n                            items:\n                              type: string\n                            title: >-\n                              optional list of relayers permitted to receive\n                              fees\n                        title: >-\n                          PacketFee contains ICS29 relayer fees, refund address\n                          and optional list of permitted relayers\n                      title: list of packet fees\n                  title: >-\n                    IdentifiedPacketFees contains a list of type PacketFee and\n                    associated PacketId\n                title: Map of all incentivized_packets\n            title: >-\n              QueryIncentivizedPacketsResponse defines the response type for the\n              incentivized packets RPC\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: channel_id\n          in: path\n          required: true\n          type: string\n        - name: port_id\n          in: path\n          required: true\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n        - name: query_height\n          description: Height to query at.\n          in: query\n          required: false\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /ibc/apps/fee/v1/channels/{channel_id}/relayers/{relayer}/counterparty_payee:\n    get:\n      summary: >-\n        CounterpartyPayee returns the registered counterparty payee for forward\n        relaying\n      operationId: CounterpartyPayee_OX3D8\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              counterparty_payee:\n                type: string\n                title: >-\n                  the counterparty payee address used to compensate forward\n                  relaying\n            title: >-\n              QueryCounterpartyPayeeResponse defines the response type for the\n              CounterpartyPayee rpc\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: channel_id\n          description: unique channel identifier\n          in: path\n          required: true\n          type: string\n        - name: relayer\n          description: the relayer address to which the counterparty is registered\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /ibc/apps/fee/v1/channels/{channel_id}/relayers/{relayer}/payee:\n    get:\n      summary: >-\n        Payee returns the registered payee address for a specific channel given\n        the relayer address\n      operationId: Payee_Y340V\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              payee_address:\n                type: string\n                title: the payee address to which packet fees are paid out\n            title: QueryPayeeResponse defines the response type for the Payee rpc\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: channel_id\n          description: unique channel identifier\n          in: path\n          required: true\n          type: string\n        - name: relayer\n          description: the relayer address to which the distribution address is registered\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/{packet_id.sequence}/incentivized_packet:\n    get:\n      summary: >-\n        IncentivizedPacket returns all packet fees for a packet given its\n        identifier\n      operationId: IncentivizedPacket_FYWES\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              incentivized_packet:\n                type: object\n                properties:\n                  packet_id:\n                    title: >-\n                      unique packet identifier comprised of the channel ID, port\n                      ID and sequence\n                    type: object\n                    properties:\n                      port_id:\n                        type: string\n                        title: channel port identifier\n                      channel_id:\n                        type: string\n                        title: channel unique identifier\n                      sequence:\n                        type: string\n                        format: uint64\n                        title: packet sequence\n                  packet_fees:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        fee:\n                          title: >-\n                            fee encapsulates the recv, ack and timeout fees\n                            associated with an IBC packet\n                          type: object\n                          properties:\n                            recv_fee:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  denom:\n                                    type: string\n                                  amount:\n                                    type: string\n                                description: >-\n                                  Coin defines a token with a denomination and\n                                  an amount.\n\n\n                                  NOTE: The amount field is an Int which\n                                  implements the custom method\n\n                                  signatures required by gogoproto.\n                              title: the packet receive fee\n                            ack_fee:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  denom:\n                                    type: string\n                                  amount:\n                                    type: string\n                                description: >-\n                                  Coin defines a token with a denomination and\n                                  an amount.\n\n\n                                  NOTE: The amount field is an Int which\n                                  implements the custom method\n\n                                  signatures required by gogoproto.\n                              title: the packet acknowledgement fee\n                            timeout_fee:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  denom:\n                                    type: string\n                                  amount:\n                                    type: string\n                                description: >-\n                                  Coin defines a token with a denomination and\n                                  an amount.\n\n\n                                  NOTE: The amount field is an Int which\n                                  implements the custom method\n\n                                  signatures required by gogoproto.\n                              title: the packet timeout fee\n                        refund_address:\n                          type: string\n                          title: the refund address for unspent fees\n                        relayers:\n                          type: array\n                          items:\n                            type: string\n                          title: optional list of relayers permitted to receive fees\n                      title: >-\n                        PacketFee contains ICS29 relayer fees, refund address\n                        and optional list of permitted relayers\n                    title: list of packet fees\n                title: >-\n                  IdentifiedPacketFees contains a list of type PacketFee and\n                  associated PacketId\n            title: >-\n              QueryIncentivizedPacketsResponse defines the response type for the\n              IncentivizedPacket rpc\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: packet_id.channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          type: string\n        - name: packet_id.port_id\n          description: channel port identifier\n          in: path\n          required: true\n          type: string\n        - name: packet_id.sequence\n          description: packet sequence\n          in: path\n          required: true\n          type: string\n          format: uint64\n        - name: query_height\n          description: block height at which to query.\n          in: query\n          required: false\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/{packet_id.sequence}/total_ack_fees:\n    get:\n      summary: >-\n        TotalAckFees returns the total acknowledgement fees for a packet given\n        its identifier\n      operationId: TotalAckFees_SFS3U\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              ack_fees:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom\n                    method\n\n                    signatures required by gogoproto.\n                title: the total packet acknowledgement fees\n            title: >-\n              QueryTotalAckFeesResponse defines the response type for the\n              TotalAckFees rpc\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: packet_id.channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          type: string\n        - name: packet_id.port_id\n          description: channel port identifier\n          in: path\n          required: true\n          type: string\n        - name: packet_id.sequence\n          description: packet sequence\n          in: path\n          required: true\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/{packet_id.sequence}/total_recv_fees:\n    get:\n      summary: >-\n        TotalRecvFees returns the total receive fees for a packet given its\n        identifier\n      operationId: TotalRecvFees_8W02H\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              recv_fees:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom\n                    method\n\n                    signatures required by gogoproto.\n                title: the total packet receive fees\n            title: >-\n              QueryTotalRecvFeesResponse defines the response type for the\n              TotalRecvFees rpc\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: packet_id.channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          type: string\n        - name: packet_id.port_id\n          description: channel port identifier\n          in: path\n          required: true\n          type: string\n        - name: packet_id.sequence\n          description: packet sequence\n          in: path\n          required: true\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/{packet_id.sequence}/total_timeout_fees:\n    get:\n      summary: >-\n        TotalTimeoutFees returns the total timeout fees for a packet given its\n        identifier\n      operationId: TotalTimeoutFees_FQFYL\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              timeout_fees:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom\n                    method\n\n                    signatures required by gogoproto.\n                title: the total packet timeout fees\n            title: >-\n              QueryTotalTimeoutFeesResponse defines the response type for the\n              TotalTimeoutFees rpc\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: packet_id.channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          type: string\n        - name: packet_id.port_id\n          description: channel port identifier\n          in: path\n          required: true\n          type: string\n        - name: packet_id.sequence\n          description: packet sequence\n          in: path\n          required: true\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /ibc/apps/fee/v1/fee_enabled:\n    get:\n      summary: FeeEnabledChannels returns a list of all fee enabled channels\n      operationId: FeeEnabledChannels_00UHI\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              fee_enabled_channels:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    port_id:\n                      type: string\n                      title: unique port identifier\n                    channel_id:\n                      type: string\n                      title: unique channel identifier\n                  title: >-\n                    FeeEnabledChannel contains the PortID & ChannelID for a fee\n                    enabled channel\n                title: list of fee enabled channels\n            title: >-\n              QueryFeeEnabledChannelsResponse defines the response type for the\n              FeeEnabledChannels rpc\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n        - name: query_height\n          description: block height at which to query.\n          in: query\n          required: false\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /ibc/apps/fee/v1/incentivized_packets:\n    get:\n      summary: >-\n        IncentivizedPackets returns all incentivized packets and their\n        associated fees\n      operationId: IncentivizedPackets_0KHDP\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              incentivized_packets:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    packet_id:\n                      title: >-\n                        unique packet identifier comprised of the channel ID,\n                        port ID and sequence\n                      type: object\n                      properties:\n                        port_id:\n                          type: string\n                          title: channel port identifier\n                        channel_id:\n                          type: string\n                          title: channel unique identifier\n                        sequence:\n                          type: string\n                          format: uint64\n                          title: packet sequence\n                    packet_fees:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          fee:\n                            title: >-\n                              fee encapsulates the recv, ack and timeout fees\n                              associated with an IBC packet\n                            type: object\n                            properties:\n                              recv_fee:\n                                type: array\n                                items:\n                                  type: object\n                                  properties:\n                                    denom:\n                                      type: string\n                                    amount:\n                                      type: string\n                                  description: >-\n                                    Coin defines a token with a denomination and\n                                    an amount.\n\n\n                                    NOTE: The amount field is an Int which\n                                    implements the custom method\n\n                                    signatures required by gogoproto.\n                                title: the packet receive fee\n                              ack_fee:\n                                type: array\n                                items:\n                                  type: object\n                                  properties:\n                                    denom:\n                                      type: string\n                                    amount:\n                                      type: string\n                                  description: >-\n                                    Coin defines a token with a denomination and\n                                    an amount.\n\n\n                                    NOTE: The amount field is an Int which\n                                    implements the custom method\n\n                                    signatures required by gogoproto.\n                                title: the packet acknowledgement fee\n                              timeout_fee:\n                                type: array\n                                items:\n                                  type: object\n                                  properties:\n                                    denom:\n                                      type: string\n                                    amount:\n                                      type: string\n                                  description: >-\n                                    Coin defines a token with a denomination and\n                                    an amount.\n\n\n                                    NOTE: The amount field is an Int which\n                                    implements the custom method\n\n                                    signatures required by gogoproto.\n                                title: the packet timeout fee\n                          refund_address:\n                            type: string\n                            title: the refund address for unspent fees\n                          relayers:\n                            type: array\n                            items:\n                              type: string\n                            title: >-\n                              optional list of relayers permitted to receive\n                              fees\n                        title: >-\n                          PacketFee contains ICS29 relayer fees, refund address\n                          and optional list of permitted relayers\n                      title: list of packet fees\n                  title: >-\n                    IdentifiedPacketFees contains a list of type PacketFee and\n                    associated PacketId\n                title: list of identified fees for incentivized packets\n            title: >-\n              QueryIncentivizedPacketsResponse defines the response type for the\n              IncentivizedPackets rpc\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n        - name: query_height\n          description: block height at which to query.\n          in: query\n          required: false\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /cosmos/params/v1beta1/params:\n    get:\n      summary: |-\n        Params queries a specific parameter of a module, given its subspace and\n        key.\n      operationId: Params_VQK7H\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              param:\n                description: param defines the queried parameter.\n                type: object\n                properties:\n                  subspace:\n                    type: string\n                  key:\n                    type: string\n                  value:\n                    type: string\n            description: >-\n              QueryParamsResponse is response type for the Query/Params RPC\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: subspace\n          description: subspace defines the module to query the parameter for.\n          in: query\n          required: false\n          type: string\n        - name: key\n          description: key defines the key of the parameter in the subspace.\n          in: query\n          required: false\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/params/v1beta1/subspaces:\n    get:\n      summary: >-\n        Subspaces queries for all registered subspaces and all keys for a\n        subspace.\n      description: 'Since: cosmos-sdk 0.46'\n      operationId: Subspaces_7GKEQ\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              subspaces:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    subspace:\n                      type: string\n                    keys:\n                      type: array\n                      items:\n                        type: string\n                  description: >-\n                    Subspace defines a parameter subspace name and all the keys\n                    that exist for\n\n                    the subspace.\n\n\n                    Since: cosmos-sdk 0.46\n            description: >-\n              QuerySubspacesResponse defines the response types for querying for\n              all\n\n              registered subspaces and all keys for a subspace.\n\n\n              Since: cosmos-sdk 0.46\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cyber/rank/v1beta1/is_any_link_exist:\n    get:\n      operationId: IsAnyLinkExist_2JCAZ\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              exist:\n                type: boolean\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: from\n          in: query\n          required: false\n          type: string\n        - name: to\n          in: query\n          required: false\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/rank/v1beta1/is_link_exist:\n    get:\n      operationId: IsLinkExist_T429K\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              exist:\n                type: boolean\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: from\n          in: query\n          required: false\n          type: string\n        - name: to\n          in: query\n          required: false\n          type: string\n        - name: address\n          in: query\n          required: false\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/rank/v1beta1/karma/{neuron}:\n    get:\n      operationId: Karma_OCY17\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              karma:\n                type: string\n                format: uint64\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: neuron\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/rank/v1beta1/negentropy:\n    get:\n      operationId: Negentropy_I4QNT\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              negentropy:\n                type: string\n                format: uint64\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cyber/rank/v1beta1/negentropy/{particle}:\n    get:\n      operationId: ParticleNegentropy_9E5ES\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              entropy:\n                type: string\n                format: uint64\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: particle\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/rank/v1beta1/rank/backlinks/{particle}:\n    get:\n      operationId: Backlinks_00QZQ\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              result:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    particle:\n                      type: string\n                    rank:\n                      type: string\n                      format: uint64\n              pagination:\n                type: object\n                properties:\n                  total:\n                    type: integer\n                    format: int64\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: particle\n          in: path\n          required: true\n          type: string\n        - name: pagination.page\n          in: query\n          required: false\n          type: integer\n          format: int64\n        - name: pagination.per_page\n          in: query\n          required: false\n          type: integer\n          format: int64\n      tags:\n        - gRPC Gateway API\n  /cyber/rank/v1beta1/rank/params:\n    get:\n      operationId: Params_L259G\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              params:\n                type: object\n                properties:\n                  calculation_period:\n                    type: string\n                    format: int64\n                  damping_factor:\n                    type: string\n                  tolerance:\n                    type: string\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cyber/rank/v1beta1/rank/rank/{particle}:\n    get:\n      operationId: Rank_U75Y2\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              rank:\n                type: string\n                format: uint64\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: particle\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/rank/v1beta1/rank/search/{particle}:\n    get:\n      operationId: Search_W3CZ3\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              result:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    particle:\n                      type: string\n                    rank:\n                      type: string\n                      format: uint64\n              pagination:\n                type: object\n                properties:\n                  total:\n                    type: integer\n                    format: int64\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: particle\n          in: path\n          required: true\n          type: string\n        - name: pagination.page\n          in: query\n          required: false\n          type: integer\n          format: int64\n        - name: pagination.per_page\n          in: query\n          required: false\n          type: integer\n          format: int64\n      tags:\n        - gRPC Gateway API\n  /cyber/rank/v1beta1/rank/top:\n    get:\n      operationId: Top_M5Z8S\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              result:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    particle:\n                      type: string\n                    rank:\n                      type: string\n                      format: uint64\n              pagination:\n                type: object\n                properties:\n                  total:\n                    type: integer\n                    format: int64\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pagination.page\n          in: query\n          required: false\n          type: integer\n          format: int64\n        - name: pagination.per_page\n          in: query\n          required: false\n          type: integer\n          format: int64\n      tags:\n        - gRPC Gateway API\n  /cosmos/distribution/v1beta1/community_pool:\n    get:\n      summary: CommunityPool queries the community pool coins.\n      operationId: CommunityPool_0US6E\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              pool:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    DecCoin defines a token with a denomination and a decimal\n                    amount.\n\n\n                    NOTE: The amount field is an Dec which implements the custom\n                    method\n\n                    signatures required by gogoproto.\n                description: pool defines community pool's coins.\n            description: >-\n              QueryCommunityPoolResponse is the response type for the\n              Query/CommunityPool\n\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards:\n    get:\n      summary: |-\n        DelegationTotalRewards queries the total rewards accrued by a each\n        validator.\n      operationId: DelegationTotalRewards_WYSIY\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              rewards:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    validator_address:\n                      type: string\n                    reward:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          DecCoin defines a token with a denomination and a\n                          decimal amount.\n\n\n                          NOTE: The amount field is an Dec which implements the\n                          custom method\n\n                          signatures required by gogoproto.\n                  description: |-\n                    DelegationDelegatorReward represents the properties\n                    of a delegator's delegation reward.\n                description: rewards defines all the rewards accrued by a delegator.\n              total:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    DecCoin defines a token with a denomination and a decimal\n                    amount.\n\n\n                    NOTE: The amount field is an Dec which implements the custom\n                    method\n\n                    signatures required by gogoproto.\n                description: total defines the sum of all the rewards.\n            description: |-\n              QueryDelegationTotalRewardsResponse is the response type for the\n              Query/DelegationTotalRewards RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: delegator_address\n          description: delegator_address defines the delegator address to query for.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/{validator_address}:\n    get:\n      summary: DelegationRewards queries the total rewards accrued by a delegation.\n      operationId: DelegationRewards_AZKQ1\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              rewards:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    DecCoin defines a token with a denomination and a decimal\n                    amount.\n\n\n                    NOTE: The amount field is an Dec which implements the custom\n                    method\n\n                    signatures required by gogoproto.\n                description: rewards defines the rewards accrued by a delegation.\n            description: |-\n              QueryDelegationRewardsResponse is the response type for the\n              Query/DelegationRewards RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: delegator_address\n          description: delegator_address defines the delegator address to query for.\n          in: path\n          required: true\n          type: string\n        - name: validator_address\n          description: validator_address defines the validator address to query for.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/distribution/v1beta1/delegators/{delegator_address}/validators:\n    get:\n      summary: DelegatorValidators queries the validators of a delegator.\n      operationId: DelegatorValidators_86WPX\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              validators:\n                type: array\n                items:\n                  type: string\n                description: >-\n                  validators defines the validators a delegator is delegating\n                  for.\n            description: |-\n              QueryDelegatorValidatorsResponse is the response type for the\n              Query/DelegatorValidators RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: delegator_address\n          description: delegator_address defines the delegator address to query for.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/distribution/v1beta1/delegators/{delegator_address}/withdraw_address:\n    get:\n      summary: DelegatorWithdrawAddress queries withdraw address of a delegator.\n      operationId: DelegatorWithdrawAddress_YB7EI\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              withdraw_address:\n                type: string\n                description: withdraw_address defines the delegator address to query for.\n            description: |-\n              QueryDelegatorWithdrawAddressResponse is the response type for the\n              Query/DelegatorWithdrawAddress RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: delegator_address\n          description: delegator_address defines the delegator address to query for.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/distribution/v1beta1/params:\n    get:\n      summary: Params queries params of the distribution module.\n      operationId: Params_T3DPP\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              params:\n                description: params defines the parameters of the module.\n                type: object\n                properties:\n                  community_tax:\n                    type: string\n                  base_proposer_reward:\n                    type: string\n                    description: >-\n                      Deprecated: The base_proposer_reward field is deprecated\n                      and is no longer used\n\n                      in the x/distribution module's reward mechanism.\n                  bonus_proposer_reward:\n                    type: string\n                    description: >-\n                      Deprecated: The bonus_proposer_reward field is deprecated\n                      and is no longer used\n\n                      in the x/distribution module's reward mechanism.\n                  withdraw_addr_enabled:\n                    type: boolean\n            description: >-\n              QueryParamsResponse is the response type for the Query/Params RPC\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/distribution/v1beta1/validators/{validator_address}:\n    get:\n      summary: >-\n        ValidatorDistributionInfo queries validator commission and\n        self-delegation rewards for validator\n      operationId: ValidatorDistributionInfo_FWO9U\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              operator_address:\n                type: string\n                description: operator_address defines the validator operator address.\n              self_bond_rewards:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    DecCoin defines a token with a denomination and a decimal\n                    amount.\n\n\n                    NOTE: The amount field is an Dec which implements the custom\n                    method\n\n                    signatures required by gogoproto.\n                description: self_bond_rewards defines the self delegations rewards.\n              commission:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    DecCoin defines a token with a denomination and a decimal\n                    amount.\n\n\n                    NOTE: The amount field is an Dec which implements the custom\n                    method\n\n                    signatures required by gogoproto.\n                description: commission defines the commission the validator received.\n            description: >-\n              QueryValidatorDistributionInfoResponse is the response type for\n              the Query/ValidatorDistributionInfo RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: validator_address\n          description: validator_address defines the validator address to query for.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/distribution/v1beta1/validators/{validator_address}/commission:\n    get:\n      summary: ValidatorCommission queries accumulated commission for a validator.\n      operationId: ValidatorCommission_BK3UA\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              commission:\n                description: commission defines the commission the validator received.\n                type: object\n                properties:\n                  commission:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        DecCoin defines a token with a denomination and a\n                        decimal amount.\n\n\n                        NOTE: The amount field is an Dec which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n            title: |-\n              QueryValidatorCommissionResponse is the response type for the\n              Query/ValidatorCommission RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: validator_address\n          description: validator_address defines the validator address to query for.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/distribution/v1beta1/validators/{validator_address}/outstanding_rewards:\n    get:\n      summary: ValidatorOutstandingRewards queries rewards of a validator address.\n      operationId: ValidatorOutstandingRewards_GBZ1A\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              rewards:\n                type: object\n                properties:\n                  rewards:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        DecCoin defines a token with a denomination and a\n                        decimal amount.\n\n\n                        NOTE: The amount field is an Dec which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                description: >-\n                  ValidatorOutstandingRewards represents outstanding\n                  (un-withdrawn) rewards\n\n                  for a validator inexpensive to track, allows simple sanity\n                  checks.\n            description: >-\n              QueryValidatorOutstandingRewardsResponse is the response type for\n              the\n\n              Query/ValidatorOutstandingRewards RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: validator_address\n          description: validator_address defines the validator address to query for.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/distribution/v1beta1/validators/{validator_address}/slashes:\n    get:\n      summary: ValidatorSlashes queries slash events of a validator.\n      operationId: ValidatorSlashes_ZIX0V\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              slashes:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    validator_period:\n                      type: string\n                      format: uint64\n                    fraction:\n                      type: string\n                  description: >-\n                    ValidatorSlashEvent represents a validator slash event.\n\n                    Height is implicit within the store key.\n\n                    This is needed to calculate appropriate amount of staking\n                    tokens\n\n                    for delegations which are withdrawn after a slash has\n                    occurred.\n                description: slashes defines the slashes the validator received.\n              pagination:\n                description: pagination defines the pagination in the response.\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n            description: |-\n              QueryValidatorSlashesResponse is the response type for the\n              Query/ValidatorSlashes RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: validator_address\n          description: validator_address defines the validator address to query for.\n          in: path\n          required: true\n          type: string\n        - name: starting_height\n          description: >-\n            starting_height defines the optional starting height to query the\n            slashes.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: ending_height\n          description: >-\n            starting_height defines the optional ending height to query the\n            slashes.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/bank/v1beta1/balances/{address}:\n    get:\n      summary: AllBalances queries the balance of all coins for a single account.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n      operationId: AllBalances_SB2JJ\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              balances:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom\n                    method\n\n                    signatures required by gogoproto.\n                description: balances is the balances of all the coins.\n              pagination:\n                description: pagination defines the pagination in the response.\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n            description: >-\n              QueryAllBalancesResponse is the response type for the\n              Query/AllBalances RPC\n\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: address\n          description: address is the address to query balances for.\n          in: path\n          required: true\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/bank/v1beta1/balances/{address}/by_denom:\n    get:\n      summary: Balance queries the balance of a single coin for a single account.\n      operationId: Balance_3DIWH\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              balance:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom\n                  method\n\n                  signatures required by gogoproto.\n            description: >-\n              QueryBalanceResponse is the response type for the Query/Balance\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: address\n          description: address is the address to query balances for.\n          in: path\n          required: true\n          type: string\n        - name: denom\n          description: denom is the coin denom to query balances for.\n          in: query\n          required: false\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/bank/v1beta1/denom_owners/{denom}:\n    get:\n      summary: >-\n        DenomOwners queries for all account addresses that own a particular\n        token\n\n        denomination.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n\n\n        Since: cosmos-sdk 0.46\n      operationId: DenomOwners_MVQ6C\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              denom_owners:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    address:\n                      type: string\n                      description: >-\n                        address defines the address that owns a particular\n                        denomination.\n                    balance:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                  description: >-\n                    DenomOwner defines structure representing an account that\n                    owns or holds a\n\n                    particular denominated token. It contains the account\n                    address and account\n\n                    balance of the denominated token.\n\n\n                    Since: cosmos-sdk 0.46\n              pagination:\n                description: pagination defines the pagination in the response.\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n            description: >-\n              QueryDenomOwnersResponse defines the RPC response of a DenomOwners\n              RPC query.\n\n\n              Since: cosmos-sdk 0.46\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: denom\n          description: >-\n            denom defines the coin denomination to query all account holders\n            for.\n          in: path\n          required: true\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/bank/v1beta1/denoms_metadata:\n    get:\n      summary: |-\n        DenomsMetadata queries the client metadata for all registered coin\n        denominations.\n      operationId: DenomsMetadata_1QGQ2\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              metadatas:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    description:\n                      type: string\n                    denom_units:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                            description: >-\n                              denom represents the string name of the given\n                              denom unit (e.g uatom).\n                          exponent:\n                            type: integer\n                            format: int64\n                            description: >-\n                              exponent represents power of 10 exponent that one\n                              must\n\n                              raise the base_denom to in order to equal the\n                              given DenomUnit's denom\n\n                              1 denom = 10^exponent base_denom\n\n                              (e.g. with a base_denom of uatom, one can create a\n                              DenomUnit of 'atom' with\n\n                              exponent = 6, thus: 1 atom = 10^6 uatom).\n                          aliases:\n                            type: array\n                            items:\n                              type: string\n                            title: >-\n                              aliases is a list of string aliases for the given\n                              denom\n                        description: |-\n                          DenomUnit represents a struct that describes a given\n                          denomination unit of the basic token.\n                      title: >-\n                        denom_units represents the list of DenomUnit's for a\n                        given coin\n                    base:\n                      type: string\n                      description: >-\n                        base represents the base denom (should be the DenomUnit\n                        with exponent = 0).\n                    display:\n                      type: string\n                      description: |-\n                        display indicates the suggested denom that should be\n                        displayed in clients.\n                    name:\n                      type: string\n                      description: 'Since: cosmos-sdk 0.43'\n                      title: 'name defines the name of the token (eg: Cosmos Atom)'\n                    symbol:\n                      type: string\n                      description: >-\n                        symbol is the token symbol usually shown on exchanges\n                        (eg: ATOM). This can\n\n                        be the same as the display.\n\n\n                        Since: cosmos-sdk 0.43\n                    uri:\n                      type: string\n                      description: >-\n                        URI to a document (on or off-chain) that contains\n                        additional information. Optional.\n\n\n                        Since: cosmos-sdk 0.46\n                    uri_hash:\n                      type: string\n                      description: >-\n                        URIHash is a sha256 hash of a document pointed by URI.\n                        It's used to verify that\n\n                        the document didn't change. Optional.\n\n\n                        Since: cosmos-sdk 0.46\n                  description: |-\n                    Metadata represents a struct that describes\n                    a basic token.\n                description: >-\n                  metadata provides the client information for all the\n                  registered tokens.\n              pagination:\n                description: pagination defines the pagination in the response.\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n            description: >-\n              QueryDenomsMetadataResponse is the response type for the\n              Query/DenomsMetadata RPC\n\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/bank/v1beta1/denoms_metadata/{denom}:\n    get:\n      summary: DenomsMetadata queries the client metadata of a given coin denomination.\n      operationId: DenomMetadata_IWNXK\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              metadata:\n                type: object\n                properties:\n                  description:\n                    type: string\n                  denom_units:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                          description: >-\n                            denom represents the string name of the given denom\n                            unit (e.g uatom).\n                        exponent:\n                          type: integer\n                          format: int64\n                          description: >-\n                            exponent represents power of 10 exponent that one\n                            must\n\n                            raise the base_denom to in order to equal the given\n                            DenomUnit's denom\n\n                            1 denom = 10^exponent base_denom\n\n                            (e.g. with a base_denom of uatom, one can create a\n                            DenomUnit of 'atom' with\n\n                            exponent = 6, thus: 1 atom = 10^6 uatom).\n                        aliases:\n                          type: array\n                          items:\n                            type: string\n                          title: >-\n                            aliases is a list of string aliases for the given\n                            denom\n                      description: |-\n                        DenomUnit represents a struct that describes a given\n                        denomination unit of the basic token.\n                    title: >-\n                      denom_units represents the list of DenomUnit's for a given\n                      coin\n                  base:\n                    type: string\n                    description: >-\n                      base represents the base denom (should be the DenomUnit\n                      with exponent = 0).\n                  display:\n                    type: string\n                    description: |-\n                      display indicates the suggested denom that should be\n                      displayed in clients.\n                  name:\n                    type: string\n                    description: 'Since: cosmos-sdk 0.43'\n                    title: 'name defines the name of the token (eg: Cosmos Atom)'\n                  symbol:\n                    type: string\n                    description: >-\n                      symbol is the token symbol usually shown on exchanges (eg:\n                      ATOM). This can\n\n                      be the same as the display.\n\n\n                      Since: cosmos-sdk 0.43\n                  uri:\n                    type: string\n                    description: >-\n                      URI to a document (on or off-chain) that contains\n                      additional information. Optional.\n\n\n                      Since: cosmos-sdk 0.46\n                  uri_hash:\n                    type: string\n                    description: >-\n                      URIHash is a sha256 hash of a document pointed by URI.\n                      It's used to verify that\n\n                      the document didn't change. Optional.\n\n\n                      Since: cosmos-sdk 0.46\n                description: |-\n                  Metadata represents a struct that describes\n                  a basic token.\n            description: >-\n              QueryDenomMetadataResponse is the response type for the\n              Query/DenomMetadata RPC\n\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: denom\n          description: denom is the coin denom to query the metadata for.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/bank/v1beta1/params:\n    get:\n      summary: Params queries the parameters of x/bank module.\n      operationId: Params_UPITY\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              params:\n                type: object\n                properties:\n                  send_enabled:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        enabled:\n                          type: boolean\n                      description: >-\n                        SendEnabled maps coin denom to a send_enabled status\n                        (whether a denom is\n\n                        sendable).\n                    description: >-\n                      Deprecated: Use of SendEnabled in params is deprecated.\n\n                      For genesis, use the newly added send_enabled field in the\n                      genesis object.\n\n                      Storage, lookup, and manipulation of this information is\n                      now in the keeper.\n\n\n                      As of cosmos-sdk 0.47, this only exists for backwards\n                      compatibility of genesis files.\n                  default_send_enabled:\n                    type: boolean\n                description: Params defines the parameters for the bank module.\n            description: >-\n              QueryParamsResponse defines the response type for querying x/bank\n              parameters.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/bank/v1beta1/send_enabled:\n    get:\n      summary: SendEnabled queries for SendEnabled entries.\n      description: >-\n        This query only returns denominations that have specific SendEnabled\n        settings.\n\n        Any denomination that does not have a specific setting will use the\n        default\n\n        params.default_send_enabled, and will not be returned by this query.\n\n\n        Since: cosmos-sdk 0.47\n      operationId: SendEnabled_V2SG0\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              send_enabled:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    enabled:\n                      type: boolean\n                  description: >-\n                    SendEnabled maps coin denom to a send_enabled status\n                    (whether a denom is\n\n                    sendable).\n              pagination:\n                description: >-\n                  pagination defines the pagination in the response. This field\n                  is only\n\n                  populated if the denoms field in the request is empty.\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n            description: >-\n              QuerySendEnabledResponse defines the RPC response of a SendEnable\n              query.\n\n\n              Since: cosmos-sdk 0.47\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: denoms\n          description: >-\n            denoms is the specific denoms you want look up. Leave empty to get\n            all entries.\n          in: query\n          required: false\n          type: array\n          items:\n            type: string\n          collectionFormat: multi\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/bank/v1beta1/spendable_balances/{address}:\n    get:\n      summary: >-\n        SpendableBalances queries the spendable balance of all coins for a\n        single\n\n        account.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n\n\n        Since: cosmos-sdk 0.46\n      operationId: SpendableBalances_NOU7D\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              balances:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom\n                    method\n\n                    signatures required by gogoproto.\n                description: balances is the spendable balances of all the coins.\n              pagination:\n                description: pagination defines the pagination in the response.\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n            description: >-\n              QuerySpendableBalancesResponse defines the gRPC response structure\n              for querying\n\n              an account's spendable balances.\n\n\n              Since: cosmos-sdk 0.46\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: address\n          description: address is the address to query spendable balances for.\n          in: path\n          required: true\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/bank/v1beta1/spendable_balances/{address}/by_denom:\n    get:\n      summary: >-\n        SpendableBalanceByDenom queries the spendable balance of a single denom\n        for\n\n        a single account.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n\n\n        Since: cosmos-sdk 0.47\n      operationId: SpendableBalanceByDenom_IY25V\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              balance:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom\n                  method\n\n                  signatures required by gogoproto.\n            description: >-\n              QuerySpendableBalanceByDenomResponse defines the gRPC response\n              structure for\n\n              querying an account's spendable balance for a specific denom.\n\n\n              Since: cosmos-sdk 0.47\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: address\n          description: address is the address to query balances for.\n          in: path\n          required: true\n          type: string\n        - name: denom\n          description: denom is the coin denom to query balances for.\n          in: query\n          required: false\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/bank/v1beta1/supply:\n    get:\n      summary: TotalSupply queries the total supply of all coins.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n      operationId: TotalSupply_LCA37\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              supply:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom\n                    method\n\n                    signatures required by gogoproto.\n                title: supply is the supply of the coins\n              pagination:\n                description: |-\n                  pagination defines the pagination in the response.\n\n                  Since: cosmos-sdk 0.43\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n            title: >-\n              QueryTotalSupplyResponse is the response type for the\n              Query/TotalSupply RPC\n\n              method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/bank/v1beta1/supply/by_denom:\n    get:\n      summary: SupplyOf queries the supply of a single coin.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n      operationId: SupplyOf_PD96O\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              amount:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom\n                  method\n\n                  signatures required by gogoproto.\n            description: >-\n              QuerySupplyOfResponse is the response type for the Query/SupplyOf\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: denom\n          description: denom is the coin denom to query balances for.\n          in: query\n          required: false\n          type: string\n      tags:\n        - gRPC Gateway API\n  /ibc/core/connection/v1/client_connections/{client_id}:\n    get:\n      summary: |-\n        ClientConnections queries the connection paths associated with a client\n        state.\n      operationId: ClientConnections_ULSVA\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              connection_paths:\n                type: array\n                items:\n                  type: string\n                description: slice of all the connection paths associated with a client.\n              proof:\n                type: string\n                format: byte\n                title: merkle proof of existence\n              proof_height:\n                title: height at which the proof was generated\n                type: object\n                properties:\n                  revision_number:\n                    type: string\n                    format: uint64\n                    title: the revision that the client is currently on\n                  revision_height:\n                    type: string\n                    format: uint64\n                    title: the height within the given revision\n                description: >-\n                  Normally the RevisionHeight is incremented at each height\n                  while keeping\n\n                  RevisionNumber the same. However some consensus algorithms may\n                  choose to\n\n                  reset the height in certain conditions e.g. hard forks,\n                  state-machine\n\n                  breaking changes In these cases, the RevisionNumber is\n                  incremented so that\n\n                  height continues to be monitonically increasing even as the\n                  RevisionHeight\n\n                  gets reset\n            title: |-\n              QueryClientConnectionsResponse is the response type for the\n              Query/ClientConnections RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: client_id\n          description: client identifier associated with a connection\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /ibc/core/connection/v1/connections:\n    get:\n      summary: Connections queries all the IBC connections of a chain.\n      operationId: Connections_KUGQB\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              connections:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    id:\n                      type: string\n                      description: connection identifier.\n                    client_id:\n                      type: string\n                      description: client associated with this connection.\n                    versions:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          identifier:\n                            type: string\n                            title: unique version identifier\n                          features:\n                            type: array\n                            items:\n                              type: string\n                            title: >-\n                              list of features compatible with the specified\n                              identifier\n                        description: >-\n                          Version defines the versioning scheme used to\n                          negotiate the IBC verison in\n\n                          the connection handshake.\n                      title: >-\n                        IBC version which can be utilised to determine encodings\n                        or protocols for\n\n                        channels or packets utilising this connection\n                    state:\n                      description: current state of the connection end.\n                      type: string\n                      enum:\n                        - STATE_UNINITIALIZED_UNSPECIFIED\n                        - STATE_INIT\n                        - STATE_TRYOPEN\n                        - STATE_OPEN\n                      default: STATE_UNINITIALIZED_UNSPECIFIED\n                    counterparty:\n                      description: counterparty chain associated with this connection.\n                      type: object\n                      properties:\n                        client_id:\n                          type: string\n                          description: >-\n                            identifies the client on the counterparty chain\n                            associated with a given\n\n                            connection.\n                        connection_id:\n                          type: string\n                          description: >-\n                            identifies the connection end on the counterparty\n                            chain associated with a\n\n                            given connection.\n                        prefix:\n                          description: commitment merkle prefix of the counterparty chain.\n                          type: object\n                          properties:\n                            key_prefix:\n                              type: string\n                              format: byte\n                          title: >-\n                            MerklePrefix is merkle path prefixed to the key.\n\n                            The constructed key from the Path and the key will\n                            be append(Path.KeyPath,\n\n                            append(Path.KeyPrefix, key...))\n                    delay_period:\n                      type: string\n                      format: uint64\n                      description: delay period associated with this connection.\n                  description: >-\n                    IdentifiedConnection defines a connection with additional\n                    connection\n\n                    identifier field.\n                description: list of stored connections of the chain.\n              pagination:\n                title: pagination response\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n              height:\n                title: query block height\n                type: object\n                properties:\n                  revision_number:\n                    type: string\n                    format: uint64\n                    title: the revision that the client is currently on\n                  revision_height:\n                    type: string\n                    format: uint64\n                    title: the height within the given revision\n                description: >-\n                  Normally the RevisionHeight is incremented at each height\n                  while keeping\n\n                  RevisionNumber the same. However some consensus algorithms may\n                  choose to\n\n                  reset the height in certain conditions e.g. hard forks,\n                  state-machine\n\n                  breaking changes In these cases, the RevisionNumber is\n                  incremented so that\n\n                  height continues to be monitonically increasing even as the\n                  RevisionHeight\n\n                  gets reset\n            description: >-\n              QueryConnectionsResponse is the response type for the\n              Query/Connections RPC\n\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /ibc/core/connection/v1/connections/{connection_id}:\n    get:\n      summary: Connection queries an IBC connection end.\n      operationId: Connection_OOALY\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              connection:\n                title: connection associated with the request identifier\n                type: object\n                properties:\n                  client_id:\n                    type: string\n                    description: client associated with this connection.\n                  versions:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        identifier:\n                          type: string\n                          title: unique version identifier\n                        features:\n                          type: array\n                          items:\n                            type: string\n                          title: >-\n                            list of features compatible with the specified\n                            identifier\n                      description: >-\n                        Version defines the versioning scheme used to negotiate\n                        the IBC verison in\n\n                        the connection handshake.\n                    description: >-\n                      IBC version which can be utilised to determine encodings\n                      or protocols for\n\n                      channels or packets utilising this connection.\n                  state:\n                    description: current state of the connection end.\n                    type: string\n                    enum:\n                      - STATE_UNINITIALIZED_UNSPECIFIED\n                      - STATE_INIT\n                      - STATE_TRYOPEN\n                      - STATE_OPEN\n                    default: STATE_UNINITIALIZED_UNSPECIFIED\n                  counterparty:\n                    description: counterparty chain associated with this connection.\n                    type: object\n                    properties:\n                      client_id:\n                        type: string\n                        description: >-\n                          identifies the client on the counterparty chain\n                          associated with a given\n\n                          connection.\n                      connection_id:\n                        type: string\n                        description: >-\n                          identifies the connection end on the counterparty\n                          chain associated with a\n\n                          given connection.\n                      prefix:\n                        description: commitment merkle prefix of the counterparty chain.\n                        type: object\n                        properties:\n                          key_prefix:\n                            type: string\n                            format: byte\n                        title: >-\n                          MerklePrefix is merkle path prefixed to the key.\n\n                          The constructed key from the Path and the key will be\n                          append(Path.KeyPath,\n\n                          append(Path.KeyPrefix, key...))\n                  delay_period:\n                    type: string\n                    format: uint64\n                    description: >-\n                      delay period that must pass before a consensus state can\n                      be used for\n\n                      packet-verification NOTE: delay period logic is only\n                      implemented by some\n\n                      clients.\n                description: >-\n                  ConnectionEnd defines a stateful object on a chain connected\n                  to another\n\n                  separate one.\n\n                  NOTE: there must only be 2 defined ConnectionEnds to establish\n\n                  a connection between two chains.\n              proof:\n                type: string\n                format: byte\n                title: merkle proof of existence\n              proof_height:\n                title: height at which the proof was retrieved\n                type: object\n                properties:\n                  revision_number:\n                    type: string\n                    format: uint64\n                    title: the revision that the client is currently on\n                  revision_height:\n                    type: string\n                    format: uint64\n                    title: the height within the given revision\n                description: >-\n                  Normally the RevisionHeight is incremented at each height\n                  while keeping\n\n                  RevisionNumber the same. However some consensus algorithms may\n                  choose to\n\n                  reset the height in certain conditions e.g. hard forks,\n                  state-machine\n\n                  breaking changes In these cases, the RevisionNumber is\n                  incremented so that\n\n                  height continues to be monitonically increasing even as the\n                  RevisionHeight\n\n                  gets reset\n            description: >-\n              QueryConnectionResponse is the response type for the\n              Query/Connection RPC\n\n              method. Besides the connection end, it includes a proof and the\n              height from\n\n              which the proof was retrieved.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: connection_id\n          description: connection unique identifier\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /ibc/core/connection/v1/connections/{connection_id}/client_state:\n    get:\n      summary: |-\n        ConnectionClientState queries the client state associated with the\n        connection.\n      operationId: ConnectionClientState_E50ZS\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              identified_client_state:\n                title: client state associated with the channel\n                type: object\n                properties:\n                  client_id:\n                    type: string\n                    title: client identifier\n                  client_state:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                    title: client state\n                description: >-\n                  IdentifiedClientState defines a client state with an\n                  additional client\n\n                  identifier field.\n              proof:\n                type: string\n                format: byte\n                title: merkle proof of existence\n              proof_height:\n                title: height at which the proof was retrieved\n                type: object\n                properties:\n                  revision_number:\n                    type: string\n                    format: uint64\n                    title: the revision that the client is currently on\n                  revision_height:\n                    type: string\n                    format: uint64\n                    title: the height within the given revision\n                description: >-\n                  Normally the RevisionHeight is incremented at each height\n                  while keeping\n\n                  RevisionNumber the same. However some consensus algorithms may\n                  choose to\n\n                  reset the height in certain conditions e.g. hard forks,\n                  state-machine\n\n                  breaking changes In these cases, the RevisionNumber is\n                  incremented so that\n\n                  height continues to be monitonically increasing even as the\n                  RevisionHeight\n\n                  gets reset\n            title: |-\n              QueryConnectionClientStateResponse is the response type for the\n              Query/ConnectionClientState RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: connection_id\n          description: connection identifier\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /ibc/core/connection/v1/connections/{connection_id}/consensus_state/revision/{revision_number}/height/{revision_height}:\n    get:\n      summary: |-\n        ConnectionConsensusState queries the consensus state associated with the\n        connection.\n      operationId: ConnectionConsensusState_R48NV\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              consensus_state:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n                title: consensus state associated with the channel\n              client_id:\n                type: string\n                title: client ID associated with the consensus state\n              proof:\n                type: string\n                format: byte\n                title: merkle proof of existence\n              proof_height:\n                title: height at which the proof was retrieved\n                type: object\n                properties:\n                  revision_number:\n                    type: string\n                    format: uint64\n                    title: the revision that the client is currently on\n                  revision_height:\n                    type: string\n                    format: uint64\n                    title: the height within the given revision\n                description: >-\n                  Normally the RevisionHeight is incremented at each height\n                  while keeping\n\n                  RevisionNumber the same. However some consensus algorithms may\n                  choose to\n\n                  reset the height in certain conditions e.g. hard forks,\n                  state-machine\n\n                  breaking changes In these cases, the RevisionNumber is\n                  incremented so that\n\n                  height continues to be monitonically increasing even as the\n                  RevisionHeight\n\n                  gets reset\n            title: |-\n              QueryConnectionConsensusStateResponse is the response type for the\n              Query/ConnectionConsensusState RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: connection_id\n          description: connection identifier\n          in: path\n          required: true\n          type: string\n        - name: revision_number\n          in: path\n          required: true\n          type: string\n          format: uint64\n        - name: revision_height\n          in: path\n          required: true\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /ibc/core/connection/v1/params:\n    get:\n      summary: ConnectionParams queries all parameters of the ibc connection submodule.\n      operationId: ConnectionParams_FN616\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              params:\n                description: params defines the parameters of the module.\n                type: object\n                properties:\n                  max_expected_time_per_block:\n                    type: string\n                    format: uint64\n                    description: >-\n                      maximum expected time per block (in nanoseconds), used to\n                      enforce block delay. This parameter should reflect the\n\n                      largest amount of time that the chain might reasonably\n                      take to produce the next block under normal operating\n\n                      conditions. A safe choice is 3-5x the expected time per\n                      block.\n            description: >-\n              QueryConnectionParamsResponse is the response type for the\n              Query/ConnectionParams RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cyber/grid/v1beta1/grid/destination_routed_energy:\n    get:\n      operationId: DestinationRoutedEnergy_1UWZP\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              value:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom\n                    method\n\n                    signatures required by gogoproto.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: destination\n          in: query\n          required: false\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/grid/v1beta1/grid/destination_routes:\n    get:\n      operationId: DestinationRoutes_DSHVX\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              routes:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    source:\n                      type: string\n                    destination:\n                      type: string\n                    name:\n                      type: string\n                    value:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the\n                          custom method\n\n                          signatures required by gogoproto.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: destination\n          in: query\n          required: false\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/grid/v1beta1/grid/params:\n    get:\n      operationId: Params_JC8T4\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              params:\n                type: object\n                properties:\n                  max_routes:\n                    type: integer\n                    format: int64\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cyber/grid/v1beta1/grid/route:\n    get:\n      operationId: Route_DJV9M\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              route:\n                type: object\n                properties:\n                  source:\n                    type: string\n                  destination:\n                    type: string\n                  name:\n                    type: string\n                  value:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: source\n          in: query\n          required: false\n          type: string\n        - name: destination\n          in: query\n          required: false\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/grid/v1beta1/grid/routes:\n    get:\n      operationId: Routes_NX6XT\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              routes:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    source:\n                      type: string\n                    destination:\n                      type: string\n                    name:\n                      type: string\n                    value:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the\n                          custom method\n\n                          signatures required by gogoproto.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cyber/grid/v1beta1/grid/source_routed_energy:\n    get:\n      operationId: SourceRoutedEnergy_15BGT\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              value:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom\n                    method\n\n                    signatures required by gogoproto.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: source\n          in: query\n          required: false\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/grid/v1beta1/grid/source_routes:\n    get:\n      operationId: SourceRoutes_0YJSZ\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              routes:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    source:\n                      type: string\n                    destination:\n                      type: string\n                    name:\n                      type: string\n                    value:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the\n                          custom method\n\n                          signatures required by gogoproto.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: source\n          in: query\n          required: false\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/dmn/v1beta1/dmn/params:\n    get:\n      operationId: Params_KSBWO\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              params:\n                type: object\n                properties:\n                  max_slots:\n                    type: integer\n                    format: int64\n                  max_gas:\n                    type: integer\n                    format: int64\n                  fee_ttl:\n                    type: integer\n                    format: int64\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cyber/dmn/v1beta1/dmn/thought:\n    get:\n      operationId: Thought_N9WGE\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              thought:\n                type: object\n                properties:\n                  program:\n                    type: string\n                  trigger:\n                    type: object\n                    properties:\n                      period:\n                        type: string\n                        format: uint64\n                      block:\n                        type: string\n                        format: uint64\n                  load:\n                    type: object\n                    properties:\n                      input:\n                        type: string\n                      gas_price:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the\n                          custom method\n\n                          signatures required by gogoproto.\n                  name:\n                    type: string\n                  particle:\n                    type: string\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: program\n          in: query\n          required: false\n          type: string\n        - name: name\n          in: query\n          required: false\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/dmn/v1beta1/dmn/thought_stats:\n    get:\n      operationId: ThoughtStats_N3IA1\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              thought_stats:\n                type: object\n                properties:\n                  program:\n                    type: string\n                  name:\n                    type: string\n                  calls:\n                    type: string\n                    format: uint64\n                  fees:\n                    type: string\n                    format: uint64\n                  gas:\n                    type: string\n                    format: uint64\n                  last_block:\n                    type: string\n                    format: uint64\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: program\n          in: query\n          required: false\n          type: string\n        - name: name\n          in: query\n          required: false\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/dmn/v1beta1/dmn/thoughts:\n    get:\n      operationId: Thoughts_U2UB0\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              thoughts:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    program:\n                      type: string\n                    trigger:\n                      type: object\n                      properties:\n                        period:\n                          type: string\n                          format: uint64\n                        block:\n                          type: string\n                          format: uint64\n                    load:\n                      type: object\n                      properties:\n                        input:\n                          type: string\n                        gas_price:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements\n                            the custom method\n\n                            signatures required by gogoproto.\n                    name:\n                      type: string\n                    particle:\n                      type: string\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cyber/dmn/v1beta1/dmn/thoughts_fees:\n    get:\n      operationId: ThoughtsFees_WJZMQ\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              fees:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom\n                    method\n\n                    signatures required by gogoproto.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cyber/dmn/v1beta1/dmn/thoughts_stats:\n    get:\n      operationId: ThoughtsStats_FOF22\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              thoughts_stats:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    program:\n                      type: string\n                    name:\n                      type: string\n                    calls:\n                      type: string\n                      format: uint64\n                    fees:\n                      type: string\n                      format: uint64\n                    gas:\n                      type: string\n                      format: uint64\n                    last_block:\n                      type: string\n                      format: uint64\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/staking/v1beta1/delegations/{delegator_addr}:\n    get:\n      summary: >-\n        DelegatorDelegations queries all delegations of a given delegator\n        address.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n      operationId: DelegatorDelegations_5SDKK\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              delegation_responses:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    delegation:\n                      type: object\n                      properties:\n                        delegator_address:\n                          type: string\n                          description: >-\n                            delegator_address is the bech32-encoded address of\n                            the delegator.\n                        validator_address:\n                          type: string\n                          description: >-\n                            validator_address is the bech32-encoded address of\n                            the validator.\n                        shares:\n                          type: string\n                          description: shares define the delegation shares received.\n                      description: >-\n                        Delegation represents the bond with tokens held by an\n                        account. It is\n\n                        owned by one delegator, and is associated with the\n                        voting power of one\n\n                        validator.\n                    balance:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                  description: >-\n                    DelegationResponse is equivalent to Delegation except that\n                    it contains a\n\n                    balance in addition to shares which is more suitable for\n                    client responses.\n                description: >-\n                  delegation_responses defines all the delegations' info of a\n                  delegator.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: |-\n              QueryDelegatorDelegationsResponse is response type for the\n              Query/DelegatorDelegations RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: delegator_addr\n          description: delegator_addr defines the delegator address to query for.\n          in: path\n          required: true\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations:\n    get:\n      summary: Redelegations queries redelegations of given address.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n      operationId: Redelegations_V11SE\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              redelegation_responses:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    redelegation:\n                      type: object\n                      properties:\n                        delegator_address:\n                          type: string\n                          description: >-\n                            delegator_address is the bech32-encoded address of\n                            the delegator.\n                        validator_src_address:\n                          type: string\n                          description: >-\n                            validator_src_address is the validator redelegation\n                            source operator address.\n                        validator_dst_address:\n                          type: string\n                          description: >-\n                            validator_dst_address is the validator redelegation\n                            destination operator address.\n                        entries:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              creation_height:\n                                type: string\n                                format: int64\n                                description: >-\n                                  creation_height  defines the height which the\n                                  redelegation took place.\n                              completion_time:\n                                type: string\n                                format: date-time\n                                description: >-\n                                  completion_time defines the unix time for\n                                  redelegation completion.\n                              initial_balance:\n                                type: string\n                                description: >-\n                                  initial_balance defines the initial balance\n                                  when redelegation started.\n                              shares_dst:\n                                type: string\n                                description: >-\n                                  shares_dst is the amount of\n                                  destination-validator shares created by\n                                  redelegation.\n                              unbonding_id:\n                                type: string\n                                format: uint64\n                                title: >-\n                                  Incrementing id that uniquely identifies this\n                                  entry\n                              unbonding_on_hold_ref_count:\n                                type: string\n                                format: int64\n                                title: >-\n                                  Strictly positive if this entry's unbonding\n                                  has been stopped by external modules\n                            description: >-\n                              RedelegationEntry defines a redelegation object\n                              with relevant metadata.\n                          description: entries are the redelegation entries.\n                      description: >-\n                        Redelegation contains the list of a particular\n                        delegator's redelegating bonds\n\n                        from a particular source validator to a particular\n                        destination validator.\n                    entries:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          redelegation_entry:\n                            type: object\n                            properties:\n                              creation_height:\n                                type: string\n                                format: int64\n                                description: >-\n                                  creation_height  defines the height which the\n                                  redelegation took place.\n                              completion_time:\n                                type: string\n                                format: date-time\n                                description: >-\n                                  completion_time defines the unix time for\n                                  redelegation completion.\n                              initial_balance:\n                                type: string\n                                description: >-\n                                  initial_balance defines the initial balance\n                                  when redelegation started.\n                              shares_dst:\n                                type: string\n                                description: >-\n                                  shares_dst is the amount of\n                                  destination-validator shares created by\n                                  redelegation.\n                              unbonding_id:\n                                type: string\n                                format: uint64\n                                title: >-\n                                  Incrementing id that uniquely identifies this\n                                  entry\n                              unbonding_on_hold_ref_count:\n                                type: string\n                                format: int64\n                                title: >-\n                                  Strictly positive if this entry's unbonding\n                                  has been stopped by external modules\n                            description: >-\n                              RedelegationEntry defines a redelegation object\n                              with relevant metadata.\n                          balance:\n                            type: string\n                        description: >-\n                          RedelegationEntryResponse is equivalent to a\n                          RedelegationEntry except that it\n\n                          contains a balance in addition to shares which is more\n                          suitable for client\n\n                          responses.\n                  description: >-\n                    RedelegationResponse is equivalent to a Redelegation except\n                    that its entries\n\n                    contain a balance in addition to shares which is more\n                    suitable for client\n\n                    responses.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: >-\n              QueryRedelegationsResponse is response type for the\n              Query/Redelegations RPC\n\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: delegator_addr\n          description: delegator_addr defines the delegator address to query for.\n          in: path\n          required: true\n          type: string\n        - name: src_validator_addr\n          description: src_validator_addr defines the validator address to redelegate from.\n          in: query\n          required: false\n          type: string\n        - name: dst_validator_addr\n          description: dst_validator_addr defines the validator address to redelegate to.\n          in: query\n          required: false\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/staking/v1beta1/delegators/{delegator_addr}/unbonding_delegations:\n    get:\n      summary: >-\n        DelegatorUnbondingDelegations queries all unbonding delegations of a\n        given\n\n        delegator address.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n      operationId: DelegatorUnbondingDelegations_PWG9M\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              unbonding_responses:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    delegator_address:\n                      type: string\n                      description: >-\n                        delegator_address is the bech32-encoded address of the\n                        delegator.\n                    validator_address:\n                      type: string\n                      description: >-\n                        validator_address is the bech32-encoded address of the\n                        validator.\n                    entries:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          creation_height:\n                            type: string\n                            format: int64\n                            description: >-\n                              creation_height is the height which the unbonding\n                              took place.\n                          completion_time:\n                            type: string\n                            format: date-time\n                            description: >-\n                              completion_time is the unix time for unbonding\n                              completion.\n                          initial_balance:\n                            type: string\n                            description: >-\n                              initial_balance defines the tokens initially\n                              scheduled to receive at completion.\n                          balance:\n                            type: string\n                            description: >-\n                              balance defines the tokens to receive at\n                              completion.\n                          unbonding_id:\n                            type: string\n                            format: uint64\n                            title: >-\n                              Incrementing id that uniquely identifies this\n                              entry\n                          unbonding_on_hold_ref_count:\n                            type: string\n                            format: int64\n                            title: >-\n                              Strictly positive if this entry's unbonding has\n                              been stopped by external modules\n                        description: >-\n                          UnbondingDelegationEntry defines an unbonding object\n                          with relevant metadata.\n                      description: entries are the unbonding delegation entries.\n                  description: >-\n                    UnbondingDelegation stores all of a single delegator's\n                    unbonding bonds\n\n                    for a single validator in an time-ordered list.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: >-\n              QueryUnbondingDelegatorDelegationsResponse is response type for\n              the\n\n              Query/UnbondingDelegatorDelegations RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: delegator_addr\n          description: delegator_addr defines the delegator address to query for.\n          in: path\n          required: true\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/staking/v1beta1/delegators/{delegator_addr}/validators:\n    get:\n      summary: |-\n        DelegatorValidators queries all validators info for given delegator\n        address.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n      operationId: DelegatorValidators_ODLEN\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              validators:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    operator_address:\n                      type: string\n                      description: >-\n                        operator_address defines the address of the validator's\n                        operator; bech encoded in JSON.\n                    consensus_pubkey:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                      description: >-\n                        consensus_pubkey is the consensus public key of the\n                        validator, as a Protobuf Any.\n                    jailed:\n                      type: boolean\n                      description: >-\n                        jailed defined whether the validator has been jailed\n                        from bonded status or not.\n                    status:\n                      description: >-\n                        status is the validator status\n                        (bonded/unbonding/unbonded).\n                      type: string\n                      enum:\n                        - BOND_STATUS_UNSPECIFIED\n                        - BOND_STATUS_UNBONDED\n                        - BOND_STATUS_UNBONDING\n                        - BOND_STATUS_BONDED\n                      default: BOND_STATUS_UNSPECIFIED\n                    tokens:\n                      type: string\n                      description: >-\n                        tokens define the delegated tokens (incl.\n                        self-delegation).\n                    delegator_shares:\n                      type: string\n                      description: >-\n                        delegator_shares defines total shares issued to a\n                        validator's delegators.\n                    description:\n                      description: >-\n                        description defines the description terms for the\n                        validator.\n                      type: object\n                      properties:\n                        moniker:\n                          type: string\n                          description: >-\n                            moniker defines a human-readable name for the\n                            validator.\n                        identity:\n                          type: string\n                          description: >-\n                            identity defines an optional identity signature (ex.\n                            UPort or Keybase).\n                        website:\n                          type: string\n                          description: website defines an optional website link.\n                        security_contact:\n                          type: string\n                          description: >-\n                            security_contact defines an optional email for\n                            security contact.\n                        details:\n                          type: string\n                          description: details define other optional details.\n                    unbonding_height:\n                      type: string\n                      format: int64\n                      description: >-\n                        unbonding_height defines, if unbonding, the height at\n                        which this validator has begun unbonding.\n                    unbonding_time:\n                      type: string\n                      format: date-time\n                      description: >-\n                        unbonding_time defines, if unbonding, the min time for\n                        the validator to complete unbonding.\n                    commission:\n                      description: commission defines the commission parameters.\n                      type: object\n                      properties:\n                        commission_rates:\n                          description: >-\n                            commission_rates defines the initial commission\n                            rates to be used for creating a validator.\n                          type: object\n                          properties:\n                            rate:\n                              type: string\n                              description: >-\n                                rate is the commission rate charged to\n                                delegators, as a fraction.\n                            max_rate:\n                              type: string\n                              description: >-\n                                max_rate defines the maximum commission rate\n                                which validator can ever charge, as a fraction.\n                            max_change_rate:\n                              type: string\n                              description: >-\n                                max_change_rate defines the maximum daily\n                                increase of the validator commission, as a\n                                fraction.\n                        update_time:\n                          type: string\n                          format: date-time\n                          description: >-\n                            update_time is the last time the commission rate was\n                            changed.\n                    min_self_delegation:\n                      type: string\n                      description: >-\n                        min_self_delegation is the validator's self declared\n                        minimum self delegation.\n\n\n                        Since: cosmos-sdk 0.46\n                    unbonding_on_hold_ref_count:\n                      type: string\n                      format: int64\n                      title: >-\n                        strictly positive if this validator's unbonding has been\n                        stopped by external modules\n                    unbonding_ids:\n                      type: array\n                      items:\n                        type: string\n                        format: uint64\n                      title: >-\n                        list of unbonding ids, each uniquely identifing an\n                        unbonding of this validator\n                  description: >-\n                    Validator defines a validator, together with the total\n                    amount of the\n\n                    Validator's bond shares and their exchange rate to coins.\n                    Slashing results in\n\n                    a decrease in the exchange rate, allowing correct\n                    calculation of future\n\n                    undelegations without iterating over delegators. When coins\n                    are delegated to\n\n                    this validator, the validator is credited with a delegation\n                    whose number of\n\n                    bond shares is based on the amount of coins delegated\n                    divided by the current\n\n                    exchange rate. Voting power can be calculated as total\n                    bonded shares\n\n                    multiplied by exchange rate.\n                description: validators defines the validators' info of a delegator.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: |-\n              QueryDelegatorValidatorsResponse is response type for the\n              Query/DelegatorValidators RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: delegator_addr\n          description: delegator_addr defines the delegator address to query for.\n          in: path\n          required: true\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/{validator_addr}:\n    get:\n      summary: |-\n        DelegatorValidator queries validator info for given delegator validator\n        pair.\n      operationId: DelegatorValidator_4VGVV\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              validator:\n                type: object\n                properties:\n                  operator_address:\n                    type: string\n                    description: >-\n                      operator_address defines the address of the validator's\n                      operator; bech encoded in JSON.\n                  consensus_pubkey:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                    description: >-\n                      consensus_pubkey is the consensus public key of the\n                      validator, as a Protobuf Any.\n                  jailed:\n                    type: boolean\n                    description: >-\n                      jailed defined whether the validator has been jailed from\n                      bonded status or not.\n                  status:\n                    description: >-\n                      status is the validator status\n                      (bonded/unbonding/unbonded).\n                    type: string\n                    enum:\n                      - BOND_STATUS_UNSPECIFIED\n                      - BOND_STATUS_UNBONDED\n                      - BOND_STATUS_UNBONDING\n                      - BOND_STATUS_BONDED\n                    default: BOND_STATUS_UNSPECIFIED\n                  tokens:\n                    type: string\n                    description: >-\n                      tokens define the delegated tokens (incl.\n                      self-delegation).\n                  delegator_shares:\n                    type: string\n                    description: >-\n                      delegator_shares defines total shares issued to a\n                      validator's delegators.\n                  description:\n                    description: >-\n                      description defines the description terms for the\n                      validator.\n                    type: object\n                    properties:\n                      moniker:\n                        type: string\n                        description: >-\n                          moniker defines a human-readable name for the\n                          validator.\n                      identity:\n                        type: string\n                        description: >-\n                          identity defines an optional identity signature (ex.\n                          UPort or Keybase).\n                      website:\n                        type: string\n                        description: website defines an optional website link.\n                      security_contact:\n                        type: string\n                        description: >-\n                          security_contact defines an optional email for\n                          security contact.\n                      details:\n                        type: string\n                        description: details define other optional details.\n                  unbonding_height:\n                    type: string\n                    format: int64\n                    description: >-\n                      unbonding_height defines, if unbonding, the height at\n                      which this validator has begun unbonding.\n                  unbonding_time:\n                    type: string\n                    format: date-time\n                    description: >-\n                      unbonding_time defines, if unbonding, the min time for the\n                      validator to complete unbonding.\n                  commission:\n                    description: commission defines the commission parameters.\n                    type: object\n                    properties:\n                      commission_rates:\n                        description: >-\n                          commission_rates defines the initial commission rates\n                          to be used for creating a validator.\n                        type: object\n                        properties:\n                          rate:\n                            type: string\n                            description: >-\n                              rate is the commission rate charged to delegators,\n                              as a fraction.\n                          max_rate:\n                            type: string\n                            description: >-\n                              max_rate defines the maximum commission rate which\n                              validator can ever charge, as a fraction.\n                          max_change_rate:\n                            type: string\n                            description: >-\n                              max_change_rate defines the maximum daily increase\n                              of the validator commission, as a fraction.\n                      update_time:\n                        type: string\n                        format: date-time\n                        description: >-\n                          update_time is the last time the commission rate was\n                          changed.\n                  min_self_delegation:\n                    type: string\n                    description: >-\n                      min_self_delegation is the validator's self declared\n                      minimum self delegation.\n\n\n                      Since: cosmos-sdk 0.46\n                  unbonding_on_hold_ref_count:\n                    type: string\n                    format: int64\n                    title: >-\n                      strictly positive if this validator's unbonding has been\n                      stopped by external modules\n                  unbonding_ids:\n                    type: array\n                    items:\n                      type: string\n                      format: uint64\n                    title: >-\n                      list of unbonding ids, each uniquely identifing an\n                      unbonding of this validator\n                description: >-\n                  Validator defines a validator, together with the total amount\n                  of the\n\n                  Validator's bond shares and their exchange rate to coins.\n                  Slashing results in\n\n                  a decrease in the exchange rate, allowing correct calculation\n                  of future\n\n                  undelegations without iterating over delegators. When coins\n                  are delegated to\n\n                  this validator, the validator is credited with a delegation\n                  whose number of\n\n                  bond shares is based on the amount of coins delegated divided\n                  by the current\n\n                  exchange rate. Voting power can be calculated as total bonded\n                  shares\n\n                  multiplied by exchange rate.\n            description: |-\n              QueryDelegatorValidatorResponse response type for the\n              Query/DelegatorValidator RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: delegator_addr\n          description: delegator_addr defines the delegator address to query for.\n          in: path\n          required: true\n          type: string\n        - name: validator_addr\n          description: validator_addr defines the validator address to query for.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/staking/v1beta1/historical_info/{height}:\n    get:\n      summary: HistoricalInfo queries the historical info for given height.\n      operationId: HistoricalInfo_5WZCR\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              hist:\n                description: hist defines the historical info at the given height.\n                type: object\n                properties:\n                  header:\n                    type: object\n                    properties:\n                      version:\n                        title: basic block info\n                        type: object\n                        properties:\n                          block:\n                            type: string\n                            format: uint64\n                          app:\n                            type: string\n                            format: uint64\n                        description: >-\n                          Consensus captures the consensus rules for processing\n                          a block in the blockchain,\n\n                          including all blockchain data structures and the rules\n                          of the application's\n\n                          state transition machine.\n                      chain_id:\n                        type: string\n                      height:\n                        type: string\n                        format: int64\n                      time:\n                        type: string\n                        format: date-time\n                      last_block_id:\n                        title: prev block info\n                        type: object\n                        properties:\n                          hash:\n                            type: string\n                            format: byte\n                          part_set_header:\n                            type: object\n                            properties:\n                              total:\n                                type: integer\n                                format: int64\n                              hash:\n                                type: string\n                                format: byte\n                            title: PartsetHeader\n                      last_commit_hash:\n                        type: string\n                        format: byte\n                        title: hashes of block data\n                      data_hash:\n                        type: string\n                        format: byte\n                      validators_hash:\n                        type: string\n                        format: byte\n                        title: hashes from the app output from the prev block\n                      next_validators_hash:\n                        type: string\n                        format: byte\n                      consensus_hash:\n                        type: string\n                        format: byte\n                      app_hash:\n                        type: string\n                        format: byte\n                      last_results_hash:\n                        type: string\n                        format: byte\n                      evidence_hash:\n                        type: string\n                        format: byte\n                        title: consensus info\n                      proposer_address:\n                        type: string\n                        format: byte\n                    description: Header defines the structure of a block header.\n                  valset:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        operator_address:\n                          type: string\n                          description: >-\n                            operator_address defines the address of the\n                            validator's operator; bech encoded in JSON.\n                        consensus_pubkey:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                          description: >-\n                            consensus_pubkey is the consensus public key of the\n                            validator, as a Protobuf Any.\n                        jailed:\n                          type: boolean\n                          description: >-\n                            jailed defined whether the validator has been jailed\n                            from bonded status or not.\n                        status:\n                          description: >-\n                            status is the validator status\n                            (bonded/unbonding/unbonded).\n                          type: string\n                          enum:\n                            - BOND_STATUS_UNSPECIFIED\n                            - BOND_STATUS_UNBONDED\n                            - BOND_STATUS_UNBONDING\n                            - BOND_STATUS_BONDED\n                          default: BOND_STATUS_UNSPECIFIED\n                        tokens:\n                          type: string\n                          description: >-\n                            tokens define the delegated tokens (incl.\n                            self-delegation).\n                        delegator_shares:\n                          type: string\n                          description: >-\n                            delegator_shares defines total shares issued to a\n                            validator's delegators.\n                        description:\n                          description: >-\n                            description defines the description terms for the\n                            validator.\n                          type: object\n                          properties:\n                            moniker:\n                              type: string\n                              description: >-\n                                moniker defines a human-readable name for the\n                                validator.\n                            identity:\n                              type: string\n                              description: >-\n                                identity defines an optional identity signature\n                                (ex. UPort or Keybase).\n                            website:\n                              type: string\n                              description: website defines an optional website link.\n                            security_contact:\n                              type: string\n                              description: >-\n                                security_contact defines an optional email for\n                                security contact.\n                            details:\n                              type: string\n                              description: details define other optional details.\n                        unbonding_height:\n                          type: string\n                          format: int64\n                          description: >-\n                            unbonding_height defines, if unbonding, the height\n                            at which this validator has begun unbonding.\n                        unbonding_time:\n                          type: string\n                          format: date-time\n                          description: >-\n                            unbonding_time defines, if unbonding, the min time\n                            for the validator to complete unbonding.\n                        commission:\n                          description: commission defines the commission parameters.\n                          type: object\n                          properties:\n                            commission_rates:\n                              description: >-\n                                commission_rates defines the initial commission\n                                rates to be used for creating a validator.\n                              type: object\n                              properties:\n                                rate:\n                                  type: string\n                                  description: >-\n                                    rate is the commission rate charged to\n                                    delegators, as a fraction.\n                                max_rate:\n                                  type: string\n                                  description: >-\n                                    max_rate defines the maximum commission rate\n                                    which validator can ever charge, as a\n                                    fraction.\n                                max_change_rate:\n                                  type: string\n                                  description: >-\n                                    max_change_rate defines the maximum daily\n                                    increase of the validator commission, as a\n                                    fraction.\n                            update_time:\n                              type: string\n                              format: date-time\n                              description: >-\n                                update_time is the last time the commission rate\n                                was changed.\n                        min_self_delegation:\n                          type: string\n                          description: >-\n                            min_self_delegation is the validator's self declared\n                            minimum self delegation.\n\n\n                            Since: cosmos-sdk 0.46\n                        unbonding_on_hold_ref_count:\n                          type: string\n                          format: int64\n                          title: >-\n                            strictly positive if this validator's unbonding has\n                            been stopped by external modules\n                        unbonding_ids:\n                          type: array\n                          items:\n                            type: string\n                            format: uint64\n                          title: >-\n                            list of unbonding ids, each uniquely identifing an\n                            unbonding of this validator\n                      description: >-\n                        Validator defines a validator, together with the total\n                        amount of the\n\n                        Validator's bond shares and their exchange rate to\n                        coins. Slashing results in\n\n                        a decrease in the exchange rate, allowing correct\n                        calculation of future\n\n                        undelegations without iterating over delegators. When\n                        coins are delegated to\n\n                        this validator, the validator is credited with a\n                        delegation whose number of\n\n                        bond shares is based on the amount of coins delegated\n                        divided by the current\n\n                        exchange rate. Voting power can be calculated as total\n                        bonded shares\n\n                        multiplied by exchange rate.\n            description: >-\n              QueryHistoricalInfoResponse is response type for the\n              Query/HistoricalInfo RPC\n\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: height\n          description: height defines at which height to query the historical info.\n          in: path\n          required: true\n          type: string\n          format: int64\n      tags:\n        - gRPC Gateway API\n  /cosmos/staking/v1beta1/params:\n    get:\n      summary: Parameters queries the staking parameters.\n      operationId: Params_2OHI6\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              params:\n                description: params holds all the parameters of this module.\n                type: object\n                properties:\n                  unbonding_time:\n                    type: string\n                    description: unbonding_time is the time duration of unbonding.\n                  max_validators:\n                    type: integer\n                    format: int64\n                    description: max_validators is the maximum number of validators.\n                  max_entries:\n                    type: integer\n                    format: int64\n                    description: >-\n                      max_entries is the max entries for either unbonding\n                      delegation or redelegation (per pair/trio).\n                  historical_entries:\n                    type: integer\n                    format: int64\n                    description: >-\n                      historical_entries is the number of historical entries to\n                      persist.\n                  bond_denom:\n                    type: string\n                    description: bond_denom defines the bondable coin denomination.\n                  min_commission_rate:\n                    type: string\n                    title: >-\n                      min_commission_rate is the chain-wide minimum commission\n                      rate that a validator can charge their delegators\n            description: >-\n              QueryParamsResponse is response type for the Query/Params RPC\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/staking/v1beta1/pool:\n    get:\n      summary: Pool queries the pool info.\n      operationId: Pool_YT1XX\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              pool:\n                description: pool defines the pool info.\n                type: object\n                properties:\n                  not_bonded_tokens:\n                    type: string\n                  bonded_tokens:\n                    type: string\n            description: QueryPoolResponse is response type for the Query/Pool RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/staking/v1beta1/validators:\n    get:\n      summary: Validators queries all validators that match the given status.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n      operationId: Validators_8C5VK\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              validators:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    operator_address:\n                      type: string\n                      description: >-\n                        operator_address defines the address of the validator's\n                        operator; bech encoded in JSON.\n                    consensus_pubkey:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                      description: >-\n                        consensus_pubkey is the consensus public key of the\n                        validator, as a Protobuf Any.\n                    jailed:\n                      type: boolean\n                      description: >-\n                        jailed defined whether the validator has been jailed\n                        from bonded status or not.\n                    status:\n                      description: >-\n                        status is the validator status\n                        (bonded/unbonding/unbonded).\n                      type: string\n                      enum:\n                        - BOND_STATUS_UNSPECIFIED\n                        - BOND_STATUS_UNBONDED\n                        - BOND_STATUS_UNBONDING\n                        - BOND_STATUS_BONDED\n                      default: BOND_STATUS_UNSPECIFIED\n                    tokens:\n                      type: string\n                      description: >-\n                        tokens define the delegated tokens (incl.\n                        self-delegation).\n                    delegator_shares:\n                      type: string\n                      description: >-\n                        delegator_shares defines total shares issued to a\n                        validator's delegators.\n                    description:\n                      description: >-\n                        description defines the description terms for the\n                        validator.\n                      type: object\n                      properties:\n                        moniker:\n                          type: string\n                          description: >-\n                            moniker defines a human-readable name for the\n                            validator.\n                        identity:\n                          type: string\n                          description: >-\n                            identity defines an optional identity signature (ex.\n                            UPort or Keybase).\n                        website:\n                          type: string\n                          description: website defines an optional website link.\n                        security_contact:\n                          type: string\n                          description: >-\n                            security_contact defines an optional email for\n                            security contact.\n                        details:\n                          type: string\n                          description: details define other optional details.\n                    unbonding_height:\n                      type: string\n                      format: int64\n                      description: >-\n                        unbonding_height defines, if unbonding, the height at\n                        which this validator has begun unbonding.\n                    unbonding_time:\n                      type: string\n                      format: date-time\n                      description: >-\n                        unbonding_time defines, if unbonding, the min time for\n                        the validator to complete unbonding.\n                    commission:\n                      description: commission defines the commission parameters.\n                      type: object\n                      properties:\n                        commission_rates:\n                          description: >-\n                            commission_rates defines the initial commission\n                            rates to be used for creating a validator.\n                          type: object\n                          properties:\n                            rate:\n                              type: string\n                              description: >-\n                                rate is the commission rate charged to\n                                delegators, as a fraction.\n                            max_rate:\n                              type: string\n                              description: >-\n                                max_rate defines the maximum commission rate\n                                which validator can ever charge, as a fraction.\n                            max_change_rate:\n                              type: string\n                              description: >-\n                                max_change_rate defines the maximum daily\n                                increase of the validator commission, as a\n                                fraction.\n                        update_time:\n                          type: string\n                          format: date-time\n                          description: >-\n                            update_time is the last time the commission rate was\n                            changed.\n                    min_self_delegation:\n                      type: string\n                      description: >-\n                        min_self_delegation is the validator's self declared\n                        minimum self delegation.\n\n\n                        Since: cosmos-sdk 0.46\n                    unbonding_on_hold_ref_count:\n                      type: string\n                      format: int64\n                      title: >-\n                        strictly positive if this validator's unbonding has been\n                        stopped by external modules\n                    unbonding_ids:\n                      type: array\n                      items:\n                        type: string\n                        format: uint64\n                      title: >-\n                        list of unbonding ids, each uniquely identifing an\n                        unbonding of this validator\n                  description: >-\n                    Validator defines a validator, together with the total\n                    amount of the\n\n                    Validator's bond shares and their exchange rate to coins.\n                    Slashing results in\n\n                    a decrease in the exchange rate, allowing correct\n                    calculation of future\n\n                    undelegations without iterating over delegators. When coins\n                    are delegated to\n\n                    this validator, the validator is credited with a delegation\n                    whose number of\n\n                    bond shares is based on the amount of coins delegated\n                    divided by the current\n\n                    exchange rate. Voting power can be calculated as total\n                    bonded shares\n\n                    multiplied by exchange rate.\n                description: validators contains all the queried validators.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            title: >-\n              QueryValidatorsResponse is response type for the Query/Validators\n              RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: status\n          description: status enables to query for validators matching a given status.\n          in: query\n          required: false\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/staking/v1beta1/validators/{validator_addr}:\n    get:\n      summary: Validator queries validator info for given validator address.\n      operationId: Validator_50V8E\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              validator:\n                type: object\n                properties:\n                  operator_address:\n                    type: string\n                    description: >-\n                      operator_address defines the address of the validator's\n                      operator; bech encoded in JSON.\n                  consensus_pubkey:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                    description: >-\n                      consensus_pubkey is the consensus public key of the\n                      validator, as a Protobuf Any.\n                  jailed:\n                    type: boolean\n                    description: >-\n                      jailed defined whether the validator has been jailed from\n                      bonded status or not.\n                  status:\n                    description: >-\n                      status is the validator status\n                      (bonded/unbonding/unbonded).\n                    type: string\n                    enum:\n                      - BOND_STATUS_UNSPECIFIED\n                      - BOND_STATUS_UNBONDED\n                      - BOND_STATUS_UNBONDING\n                      - BOND_STATUS_BONDED\n                    default: BOND_STATUS_UNSPECIFIED\n                  tokens:\n                    type: string\n                    description: >-\n                      tokens define the delegated tokens (incl.\n                      self-delegation).\n                  delegator_shares:\n                    type: string\n                    description: >-\n                      delegator_shares defines total shares issued to a\n                      validator's delegators.\n                  description:\n                    description: >-\n                      description defines the description terms for the\n                      validator.\n                    type: object\n                    properties:\n                      moniker:\n                        type: string\n                        description: >-\n                          moniker defines a human-readable name for the\n                          validator.\n                      identity:\n                        type: string\n                        description: >-\n                          identity defines an optional identity signature (ex.\n                          UPort or Keybase).\n                      website:\n                        type: string\n                        description: website defines an optional website link.\n                      security_contact:\n                        type: string\n                        description: >-\n                          security_contact defines an optional email for\n                          security contact.\n                      details:\n                        type: string\n                        description: details define other optional details.\n                  unbonding_height:\n                    type: string\n                    format: int64\n                    description: >-\n                      unbonding_height defines, if unbonding, the height at\n                      which this validator has begun unbonding.\n                  unbonding_time:\n                    type: string\n                    format: date-time\n                    description: >-\n                      unbonding_time defines, if unbonding, the min time for the\n                      validator to complete unbonding.\n                  commission:\n                    description: commission defines the commission parameters.\n                    type: object\n                    properties:\n                      commission_rates:\n                        description: >-\n                          commission_rates defines the initial commission rates\n                          to be used for creating a validator.\n                        type: object\n                        properties:\n                          rate:\n                            type: string\n                            description: >-\n                              rate is the commission rate charged to delegators,\n                              as a fraction.\n                          max_rate:\n                            type: string\n                            description: >-\n                              max_rate defines the maximum commission rate which\n                              validator can ever charge, as a fraction.\n                          max_change_rate:\n                            type: string\n                            description: >-\n                              max_change_rate defines the maximum daily increase\n                              of the validator commission, as a fraction.\n                      update_time:\n                        type: string\n                        format: date-time\n                        description: >-\n                          update_time is the last time the commission rate was\n                          changed.\n                  min_self_delegation:\n                    type: string\n                    description: >-\n                      min_self_delegation is the validator's self declared\n                      minimum self delegation.\n\n\n                      Since: cosmos-sdk 0.46\n                  unbonding_on_hold_ref_count:\n                    type: string\n                    format: int64\n                    title: >-\n                      strictly positive if this validator's unbonding has been\n                      stopped by external modules\n                  unbonding_ids:\n                    type: array\n                    items:\n                      type: string\n                      format: uint64\n                    title: >-\n                      list of unbonding ids, each uniquely identifing an\n                      unbonding of this validator\n                description: >-\n                  Validator defines a validator, together with the total amount\n                  of the\n\n                  Validator's bond shares and their exchange rate to coins.\n                  Slashing results in\n\n                  a decrease in the exchange rate, allowing correct calculation\n                  of future\n\n                  undelegations without iterating over delegators. When coins\n                  are delegated to\n\n                  this validator, the validator is credited with a delegation\n                  whose number of\n\n                  bond shares is based on the amount of coins delegated divided\n                  by the current\n\n                  exchange rate. Voting power can be calculated as total bonded\n                  shares\n\n                  multiplied by exchange rate.\n            title: >-\n              QueryValidatorResponse is response type for the Query/Validator\n              RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: validator_addr\n          description: validator_addr defines the validator address to query for.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/staking/v1beta1/validators/{validator_addr}/delegations:\n    get:\n      summary: ValidatorDelegations queries delegate info for given validator.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n      operationId: ValidatorDelegations_WQPT6\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              delegation_responses:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    delegation:\n                      type: object\n                      properties:\n                        delegator_address:\n                          type: string\n                          description: >-\n                            delegator_address is the bech32-encoded address of\n                            the delegator.\n                        validator_address:\n                          type: string\n                          description: >-\n                            validator_address is the bech32-encoded address of\n                            the validator.\n                        shares:\n                          type: string\n                          description: shares define the delegation shares received.\n                      description: >-\n                        Delegation represents the bond with tokens held by an\n                        account. It is\n\n                        owned by one delegator, and is associated with the\n                        voting power of one\n\n                        validator.\n                    balance:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                  description: >-\n                    DelegationResponse is equivalent to Delegation except that\n                    it contains a\n\n                    balance in addition to shares which is more suitable for\n                    client responses.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            title: |-\n              QueryValidatorDelegationsResponse is response type for the\n              Query/ValidatorDelegations RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: validator_addr\n          description: validator_addr defines the validator address to query for.\n          in: path\n          required: true\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}:\n    get:\n      summary: Delegation queries delegate info for given validator delegator pair.\n      operationId: Delegation_KEKGD\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              delegation_response:\n                type: object\n                properties:\n                  delegation:\n                    type: object\n                    properties:\n                      delegator_address:\n                        type: string\n                        description: >-\n                          delegator_address is the bech32-encoded address of the\n                          delegator.\n                      validator_address:\n                        type: string\n                        description: >-\n                          validator_address is the bech32-encoded address of the\n                          validator.\n                      shares:\n                        type: string\n                        description: shares define the delegation shares received.\n                    description: >-\n                      Delegation represents the bond with tokens held by an\n                      account. It is\n\n                      owned by one delegator, and is associated with the voting\n                      power of one\n\n                      validator.\n                  balance:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the\n                      custom method\n\n                      signatures required by gogoproto.\n                description: >-\n                  DelegationResponse is equivalent to Delegation except that it\n                  contains a\n\n                  balance in addition to shares which is more suitable for\n                  client responses.\n            description: >-\n              QueryDelegationResponse is response type for the Query/Delegation\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: validator_addr\n          description: validator_addr defines the validator address to query for.\n          in: path\n          required: true\n          type: string\n        - name: delegator_addr\n          description: delegator_addr defines the delegator address to query for.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}/unbonding_delegation:\n    get:\n      summary: |-\n        UnbondingDelegation queries unbonding info for given validator delegator\n        pair.\n      operationId: UnbondingDelegation_ZYWZV\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              unbond:\n                type: object\n                properties:\n                  delegator_address:\n                    type: string\n                    description: >-\n                      delegator_address is the bech32-encoded address of the\n                      delegator.\n                  validator_address:\n                    type: string\n                    description: >-\n                      validator_address is the bech32-encoded address of the\n                      validator.\n                  entries:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        creation_height:\n                          type: string\n                          format: int64\n                          description: >-\n                            creation_height is the height which the unbonding\n                            took place.\n                        completion_time:\n                          type: string\n                          format: date-time\n                          description: >-\n                            completion_time is the unix time for unbonding\n                            completion.\n                        initial_balance:\n                          type: string\n                          description: >-\n                            initial_balance defines the tokens initially\n                            scheduled to receive at completion.\n                        balance:\n                          type: string\n                          description: balance defines the tokens to receive at completion.\n                        unbonding_id:\n                          type: string\n                          format: uint64\n                          title: Incrementing id that uniquely identifies this entry\n                        unbonding_on_hold_ref_count:\n                          type: string\n                          format: int64\n                          title: >-\n                            Strictly positive if this entry's unbonding has been\n                            stopped by external modules\n                      description: >-\n                        UnbondingDelegationEntry defines an unbonding object\n                        with relevant metadata.\n                    description: entries are the unbonding delegation entries.\n                description: >-\n                  UnbondingDelegation stores all of a single delegator's\n                  unbonding bonds\n\n                  for a single validator in an time-ordered list.\n            description: >-\n              QueryDelegationResponse is response type for the\n              Query/UnbondingDelegation\n\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: validator_addr\n          description: validator_addr defines the validator address to query for.\n          in: path\n          required: true\n          type: string\n        - name: delegator_addr\n          description: delegator_addr defines the delegator address to query for.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/staking/v1beta1/validators/{validator_addr}/unbonding_delegations:\n    get:\n      summary: >-\n        ValidatorUnbondingDelegations queries unbonding delegations of a\n        validator.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n      operationId: ValidatorUnbondingDelegations_2MTRI\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              unbonding_responses:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    delegator_address:\n                      type: string\n                      description: >-\n                        delegator_address is the bech32-encoded address of the\n                        delegator.\n                    validator_address:\n                      type: string\n                      description: >-\n                        validator_address is the bech32-encoded address of the\n                        validator.\n                    entries:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          creation_height:\n                            type: string\n                            format: int64\n                            description: >-\n                              creation_height is the height which the unbonding\n                              took place.\n                          completion_time:\n                            type: string\n                            format: date-time\n                            description: >-\n                              completion_time is the unix time for unbonding\n                              completion.\n                          initial_balance:\n                            type: string\n                            description: >-\n                              initial_balance defines the tokens initially\n                              scheduled to receive at completion.\n                          balance:\n                            type: string\n                            description: >-\n                              balance defines the tokens to receive at\n                              completion.\n                          unbonding_id:\n                            type: string\n                            format: uint64\n                            title: >-\n                              Incrementing id that uniquely identifies this\n                              entry\n                          unbonding_on_hold_ref_count:\n                            type: string\n                            format: int64\n                            title: >-\n                              Strictly positive if this entry's unbonding has\n                              been stopped by external modules\n                        description: >-\n                          UnbondingDelegationEntry defines an unbonding object\n                          with relevant metadata.\n                      description: entries are the unbonding delegation entries.\n                  description: >-\n                    UnbondingDelegation stores all of a single delegator's\n                    unbonding bonds\n\n                    for a single validator in an time-ordered list.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: >-\n              QueryValidatorUnbondingDelegationsResponse is response type for\n              the\n\n              Query/ValidatorUnbondingDelegations RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: validator_addr\n          description: validator_addr defines the validator address to query for.\n          in: path\n          required: true\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /ibc/apps/transfer/v1/channels/{channel_id}/ports/{port_id}/escrow_address:\n    get:\n      summary: >-\n        EscrowAddress returns the escrow address for a particular port and\n        channel id.\n      operationId: EscrowAddress_H4ZU3\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              escrow_address:\n                type: string\n                title: the escrow account address\n            description: >-\n              QueryEscrowAddressResponse is the response type of the\n              EscrowAddress RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: channel_id\n          description: unique channel identifier\n          in: path\n          required: true\n          type: string\n        - name: port_id\n          description: unique port identifier\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /ibc/apps/transfer/v1/denom_hashes/{trace}:\n    get:\n      summary: DenomHash queries a denomination hash information.\n      operationId: DenomHash_BMCJ0\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              hash:\n                type: string\n                description: hash (in hex format) of the denomination trace information.\n            description: >-\n              QueryDenomHashResponse is the response type for the\n              Query/DenomHash RPC\n\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: trace\n          description: The denomination trace ([port_id]/[channel_id])+/[denom]\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /ibc/apps/transfer/v1/denom_traces:\n    get:\n      summary: DenomTraces queries all denomination traces.\n      operationId: DenomTraces_UYI2F\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              denom_traces:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    path:\n                      type: string\n                      description: >-\n                        path defines the chain of port/channel identifiers used\n                        for tracing the\n\n                        source of the fungible token.\n                    base_denom:\n                      type: string\n                      description: base denomination of the relayed fungible token.\n                  description: >-\n                    DenomTrace contains the base denomination for ICS20 fungible\n                    tokens and the\n\n                    source tracing information path.\n                description: denom_traces returns all denominations trace information.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: >-\n              QueryConnectionsResponse is the response type for the\n              Query/DenomTraces RPC\n\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /ibc/apps/transfer/v1/denom_traces/{hash}:\n    get:\n      summary: DenomTrace queries a denomination trace information.\n      operationId: DenomTrace_3PQDP\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              denom_trace:\n                type: object\n                properties:\n                  path:\n                    type: string\n                    description: >-\n                      path defines the chain of port/channel identifiers used\n                      for tracing the\n\n                      source of the fungible token.\n                  base_denom:\n                    type: string\n                    description: base denomination of the relayed fungible token.\n                description: >-\n                  DenomTrace contains the base denomination for ICS20 fungible\n                  tokens and the\n\n                  source tracing information path.\n            description: >-\n              QueryDenomTraceResponse is the response type for the\n              Query/DenomTrace RPC\n\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: hash\n          description: >-\n            hash (in hex format) or denom (full denom with ibc prefix) of the\n            denomination trace information.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /ibc/apps/transfer/v1/denoms/{denom}/total_escrow:\n    get:\n      summary: >-\n        TotalEscrowForDenom returns the total amount of tokens in escrow based\n        on the denom.\n      operationId: TotalEscrowForDenom_GBGAA\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              amount:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom\n                  method\n\n                  signatures required by gogoproto.\n            description: >-\n              QueryTotalEscrowForDenomResponse is the response type for\n              TotalEscrowForDenom RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: denom\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /ibc/apps/transfer/v1/params:\n    get:\n      summary: Params queries all parameters of the ibc-transfer module.\n      operationId: Params_4CJ8D\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              params:\n                description: params defines the parameters of the module.\n                type: object\n                properties:\n                  send_enabled:\n                    type: boolean\n                    description: >-\n                      send_enabled enables or disables all cross-chain token\n                      transfers from this\n\n                      chain.\n                  receive_enabled:\n                    type: boolean\n                    description: >-\n                      receive_enabled enables or disables all cross-chain token\n                      transfers to this\n\n                      chain.\n            description: >-\n              QueryParamsResponse is the response type for the Query/Params RPC\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/tx/v1beta1/decode:\n    post:\n      summary: TxDecode decodes the transaction.\n      description: 'Since: cosmos-sdk 0.47'\n      operationId: TxDecode_08PMV\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              tx:\n                description: tx is the decoded transaction.\n                type: object\n                properties:\n                  body:\n                    title: body is the processable content of the transaction\n                    type: object\n                    properties:\n                      messages:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                        description: >-\n                          messages is a list of messages to be executed. The\n                          required signers of\n\n                          those messages define the number and order of elements\n                          in AuthInfo's\n\n                          signer_infos and Tx's signatures. Each required signer\n                          address is added to\n\n                          the list only the first time it occurs.\n\n                          By convention, the first required signer (usually from\n                          the first message)\n\n                          is referred to as the primary signer and pays the fee\n                          for the whole\n\n                          transaction.\n                      memo:\n                        type: string\n                        description: >-\n                          memo is any arbitrary note/comment to be added to the\n                          transaction.\n\n                          WARNING: in clients, any publicly exposed text should\n                          not be called memo,\n\n                          but should be called `note` instead (see\n                          https://github.com/cosmos/cosmos-sdk/issues/9122).\n                      timeout_height:\n                        type: string\n                        format: uint64\n                        title: >-\n                          timeout is the block height after which this\n                          transaction will not\n\n                          be processed by the chain\n                      extension_options:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                        title: >-\n                          extension_options are arbitrary options that can be\n                          added by chains\n\n                          when the default options are not sufficient. If any of\n                          these are present\n\n                          and can't be handled, the transaction will be rejected\n                      non_critical_extension_options:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                        title: >-\n                          extension_options are arbitrary options that can be\n                          added by chains\n\n                          when the default options are not sufficient. If any of\n                          these are present\n\n                          and can't be handled, they will be ignored\n                    description: >-\n                      TxBody is the body of a transaction that all signers sign\n                      over.\n                  auth_info:\n                    title: >-\n                      auth_info is the authorization related content of the\n                      transaction,\n\n                      specifically signers, signer modes and fee\n                    type: object\n                    properties:\n                      signer_infos:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            public_key:\n                              type: object\n                              properties:\n                                type_url:\n                                  type: string\n                                value:\n                                  type: string\n                                  format: byte\n                              description: >-\n                                public_key is the public key of the signer. It\n                                is optional for accounts\n\n                                that already exist in state. If unset, the\n                                verifier can use the required \\\n\n                                signer address for this position and lookup the\n                                public key.\n                            mode_info:\n                              title: >-\n                                mode_info describes the signing mode of the\n                                signer and is a nested\n\n                                structure to support nested multisig pubkey's\n                              type: object\n                              properties:\n                                single:\n                                  title: single represents a single signer\n                                  type: object\n                                  properties:\n                                    mode:\n                                      title: >-\n                                        mode is the signing mode of the single\n                                        signer\n                                      type: string\n                                      enum:\n                                        - SIGN_MODE_UNSPECIFIED\n                                        - SIGN_MODE_DIRECT\n                                        - SIGN_MODE_TEXTUAL\n                                        - SIGN_MODE_DIRECT_AUX\n                                        - SIGN_MODE_LEGACY_AMINO_JSON\n                                        - SIGN_MODE_EIP_191\n                                      default: SIGN_MODE_UNSPECIFIED\n                                      description: >-\n                                        SignMode represents a signing mode with\n                                        its own security guarantees.\n\n\n                                        This enum should be considered a\n                                        registry of all known sign modes\n\n                                        in the Cosmos ecosystem. Apps are not\n                                        expected to support all known\n\n                                        sign modes. Apps that would like to\n                                        support custom  sign modes are\n\n                                        encouraged to open a small PR against\n                                        this file to add a new case\n\n                                        to this SignMode enum describing their\n                                        sign mode so that different\n\n                                        apps have a consistent version of this\n                                        enum.\n\n                                         - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                        rejected.\n                                         - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                        verified with raw bytes from Tx.\n                                         - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                        human-readable textual representation on\n                                        top of the binary representation\n\n                                        from SIGN_MODE_DIRECT. It is currently\n                                        not supported.\n                                         - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                        SignDocDirectAux. As opposed to\n                                        SIGN_MODE_DIRECT, this sign mode does\n                                        not\n\n                                        require signers signing over other\n                                        signers' `signer_info`. It also allows\n\n                                        for adding Tips in transactions.\n\n\n                                        Since: cosmos-sdk 0.46\n                                         - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                        Amino JSON and will be removed in the\n                                        future.\n                                         - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                        SDK. Ref:\n                                        https://eips.ethereum.org/EIPS/eip-191\n\n\n                                        Currently, SIGN_MODE_EIP_191 is\n                                        registered as a SignMode enum variant,\n\n                                        but is not implemented on the SDK by\n                                        default. To enable EIP-191, you need\n\n                                        to pass a custom `TxConfig` that has an\n                                        implementation of\n\n                                        `SignModeHandler` for EIP-191. The SDK\n                                        may decide to fully support\n\n                                        EIP-191 in the future.\n\n\n                                        Since: cosmos-sdk 0.45.2\n                                multi:\n                                  title: multi represents a nested multisig signer\n                                  type: object\n                                  properties:\n                                    bitarray:\n                                      title: >-\n                                        bitarray specifies which keys within the\n                                        multisig are signing\n                                      type: object\n                                      properties:\n                                        extra_bits_stored:\n                                          type: integer\n                                          format: int64\n                                        elems:\n                                          type: string\n                                          format: byte\n                                      description: >-\n                                        CompactBitArray is an implementation of\n                                        a space efficient bit array.\n\n                                        This is used to ensure that the encoded\n                                        data takes up a minimal amount of\n\n                                        space after proto encoding.\n\n                                        This is not thread safe, and is not\n                                        intended for concurrent usage.\n                                    mode_infos:\n                                      type: array\n                                      items: {}\n                                      title: >-\n                                        mode_infos is the corresponding modes of\n                                        the signers of the multisig\n\n                                        which could include nested multisig\n                                        public keys\n                              description: >-\n                                ModeInfo describes the signing mode of a single\n                                or nested multisig signer.\n                            sequence:\n                              type: string\n                              format: uint64\n                              description: >-\n                                sequence is the sequence of the account, which\n                                describes the\n\n                                number of committed transactions signed by a\n                                given address. It is used to\n\n                                prevent replay attacks.\n                          description: >-\n                            SignerInfo describes the public key and signing mode\n                            of a single top-level\n\n                            signer.\n                        description: >-\n                          signer_infos defines the signing modes for the\n                          required signers. The number\n\n                          and order of elements must match the required signers\n                          from TxBody's\n\n                          messages. The first element is the primary signer and\n                          the one which pays\n\n                          the fee.\n                      fee:\n                        description: >-\n                          Fee is the fee and gas limit for the transaction. The\n                          first signer is the\n\n                          primary signer and the one which pays the fee. The fee\n                          can be calculated\n\n                          based on the cost of evaluating the body and doing\n                          signature verification\n\n                          of the signers. This can be estimated via simulation.\n                        type: object\n                        properties:\n                          amount:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                denom:\n                                  type: string\n                                amount:\n                                  type: string\n                              description: >-\n                                Coin defines a token with a denomination and an\n                                amount.\n\n\n                                NOTE: The amount field is an Int which\n                                implements the custom method\n\n                                signatures required by gogoproto.\n                            title: amount is the amount of coins to be paid as a fee\n                          gas_limit:\n                            type: string\n                            format: uint64\n                            title: >-\n                              gas_limit is the maximum gas that can be used in\n                              transaction processing\n\n                              before an out of gas error occurs\n                          payer:\n                            type: string\n                            description: >-\n                              if unset, the first signer is responsible for\n                              paying the fees. If set, the specified account\n                              must pay the fees.\n\n                              the payer must be a tx signer (and thus have\n                              signed this field in AuthInfo).\n\n                              setting this field does *not* change the ordering\n                              of required signers for the transaction.\n                          granter:\n                            type: string\n                            title: >-\n                              if set, the fee payer (either the first signer or\n                              the value of the payer field) requests that a fee\n                              grant be used\n\n                              to pay fees instead of the fee payer's own\n                              balance. If an appropriate fee grant does not\n                              exist or the chain does\n\n                              not support fee grants, this will fail\n                      tip:\n                        description: >-\n                          Tip is the optional tip used for transactions fees\n                          paid in another denom.\n\n\n                          This field is ignored if the chain didn't enable tips,\n                          i.e. didn't add the\n\n                          `TipDecorator` in its posthandler.\n\n\n                          Since: cosmos-sdk 0.46\n                        type: object\n                        properties:\n                          amount:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                denom:\n                                  type: string\n                                amount:\n                                  type: string\n                              description: >-\n                                Coin defines a token with a denomination and an\n                                amount.\n\n\n                                NOTE: The amount field is an Int which\n                                implements the custom method\n\n                                signatures required by gogoproto.\n                            title: amount is the amount of the tip\n                          tipper:\n                            type: string\n                            title: >-\n                              tipper is the address of the account paying for\n                              the tip\n                    description: >-\n                      AuthInfo describes the fee and signer modes that are used\n                      to sign a\n\n                      transaction.\n                  signatures:\n                    type: array\n                    items:\n                      type: string\n                      format: byte\n                    description: >-\n                      signatures is a list of signatures that matches the length\n                      and order of\n\n                      AuthInfo's signer_infos to allow connecting signature meta\n                      information like\n\n                      public key and signing mode by position.\n            description: |-\n              TxDecodeResponse is the response type for the\n              Service.TxDecode method.\n\n              Since: cosmos-sdk 0.47\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: body\n          in: body\n          required: true\n          schema:\n            type: object\n            properties:\n              tx_bytes:\n                type: string\n                format: byte\n                description: tx_bytes is the raw transaction.\n            description: |-\n              TxDecodeRequest is the request type for the Service.TxDecode\n              RPC method.\n\n              Since: cosmos-sdk 0.47\n      tags:\n        - gRPC Gateway API\n  /cosmos/tx/v1beta1/decode/amino:\n    post:\n      summary: TxDecodeAmino decodes an Amino transaction from encoded bytes to JSON.\n      description: 'Since: cosmos-sdk 0.47'\n      operationId: TxDecodeAmino_AUUEJ\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              amino_json:\n                type: string\n            description: >-\n              TxDecodeAminoResponse is the response type for the\n              Service.TxDecodeAmino\n\n              RPC method.\n\n\n              Since: cosmos-sdk 0.47\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: body\n          in: body\n          required: true\n          schema:\n            type: object\n            properties:\n              amino_binary:\n                type: string\n                format: byte\n            description: >-\n              TxDecodeAminoRequest is the request type for the\n              Service.TxDecodeAmino\n\n              RPC method.\n\n\n              Since: cosmos-sdk 0.47\n      tags:\n        - gRPC Gateway API\n  /cosmos/tx/v1beta1/encode:\n    post:\n      summary: TxEncode encodes the transaction.\n      description: 'Since: cosmos-sdk 0.47'\n      operationId: TxEncode_SOL4O\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              tx_bytes:\n                type: string\n                format: byte\n                description: tx_bytes is the encoded transaction bytes.\n            description: |-\n              TxEncodeResponse is the response type for the\n              Service.TxEncode method.\n\n              Since: cosmos-sdk 0.47\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: body\n          in: body\n          required: true\n          schema:\n            type: object\n            properties:\n              tx:\n                description: tx is the transaction to encode.\n                type: object\n                properties:\n                  body:\n                    title: body is the processable content of the transaction\n                    type: object\n                    properties:\n                      messages:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                        description: >-\n                          messages is a list of messages to be executed. The\n                          required signers of\n\n                          those messages define the number and order of elements\n                          in AuthInfo's\n\n                          signer_infos and Tx's signatures. Each required signer\n                          address is added to\n\n                          the list only the first time it occurs.\n\n                          By convention, the first required signer (usually from\n                          the first message)\n\n                          is referred to as the primary signer and pays the fee\n                          for the whole\n\n                          transaction.\n                      memo:\n                        type: string\n                        description: >-\n                          memo is any arbitrary note/comment to be added to the\n                          transaction.\n\n                          WARNING: in clients, any publicly exposed text should\n                          not be called memo,\n\n                          but should be called `note` instead (see\n                          https://github.com/cosmos/cosmos-sdk/issues/9122).\n                      timeout_height:\n                        type: string\n                        format: uint64\n                        title: >-\n                          timeout is the block height after which this\n                          transaction will not\n\n                          be processed by the chain\n                      extension_options:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                        title: >-\n                          extension_options are arbitrary options that can be\n                          added by chains\n\n                          when the default options are not sufficient. If any of\n                          these are present\n\n                          and can't be handled, the transaction will be rejected\n                      non_critical_extension_options:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                        title: >-\n                          extension_options are arbitrary options that can be\n                          added by chains\n\n                          when the default options are not sufficient. If any of\n                          these are present\n\n                          and can't be handled, they will be ignored\n                    description: >-\n                      TxBody is the body of a transaction that all signers sign\n                      over.\n                  auth_info:\n                    title: >-\n                      auth_info is the authorization related content of the\n                      transaction,\n\n                      specifically signers, signer modes and fee\n                    type: object\n                    properties:\n                      signer_infos:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            public_key:\n                              type: object\n                              properties:\n                                type_url:\n                                  type: string\n                                value:\n                                  type: string\n                                  format: byte\n                              description: >-\n                                public_key is the public key of the signer. It\n                                is optional for accounts\n\n                                that already exist in state. If unset, the\n                                verifier can use the required \\\n\n                                signer address for this position and lookup the\n                                public key.\n                            mode_info:\n                              title: >-\n                                mode_info describes the signing mode of the\n                                signer and is a nested\n\n                                structure to support nested multisig pubkey's\n                              type: object\n                              properties:\n                                single:\n                                  title: single represents a single signer\n                                  type: object\n                                  properties:\n                                    mode:\n                                      title: >-\n                                        mode is the signing mode of the single\n                                        signer\n                                      type: string\n                                      enum:\n                                        - SIGN_MODE_UNSPECIFIED\n                                        - SIGN_MODE_DIRECT\n                                        - SIGN_MODE_TEXTUAL\n                                        - SIGN_MODE_DIRECT_AUX\n                                        - SIGN_MODE_LEGACY_AMINO_JSON\n                                        - SIGN_MODE_EIP_191\n                                      default: SIGN_MODE_UNSPECIFIED\n                                      description: >-\n                                        SignMode represents a signing mode with\n                                        its own security guarantees.\n\n\n                                        This enum should be considered a\n                                        registry of all known sign modes\n\n                                        in the Cosmos ecosystem. Apps are not\n                                        expected to support all known\n\n                                        sign modes. Apps that would like to\n                                        support custom  sign modes are\n\n                                        encouraged to open a small PR against\n                                        this file to add a new case\n\n                                        to this SignMode enum describing their\n                                        sign mode so that different\n\n                                        apps have a consistent version of this\n                                        enum.\n\n                                         - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                        rejected.\n                                         - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                        verified with raw bytes from Tx.\n                                         - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                        human-readable textual representation on\n                                        top of the binary representation\n\n                                        from SIGN_MODE_DIRECT. It is currently\n                                        not supported.\n                                         - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                        SignDocDirectAux. As opposed to\n                                        SIGN_MODE_DIRECT, this sign mode does\n                                        not\n\n                                        require signers signing over other\n                                        signers' `signer_info`. It also allows\n\n                                        for adding Tips in transactions.\n\n\n                                        Since: cosmos-sdk 0.46\n                                         - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                        Amino JSON and will be removed in the\n                                        future.\n                                         - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                        SDK. Ref:\n                                        https://eips.ethereum.org/EIPS/eip-191\n\n\n                                        Currently, SIGN_MODE_EIP_191 is\n                                        registered as a SignMode enum variant,\n\n                                        but is not implemented on the SDK by\n                                        default. To enable EIP-191, you need\n\n                                        to pass a custom `TxConfig` that has an\n                                        implementation of\n\n                                        `SignModeHandler` for EIP-191. The SDK\n                                        may decide to fully support\n\n                                        EIP-191 in the future.\n\n\n                                        Since: cosmos-sdk 0.45.2\n                                multi:\n                                  title: multi represents a nested multisig signer\n                                  type: object\n                                  properties:\n                                    bitarray:\n                                      title: >-\n                                        bitarray specifies which keys within the\n                                        multisig are signing\n                                      type: object\n                                      properties:\n                                        extra_bits_stored:\n                                          type: integer\n                                          format: int64\n                                        elems:\n                                          type: string\n                                          format: byte\n                                      description: >-\n                                        CompactBitArray is an implementation of\n                                        a space efficient bit array.\n\n                                        This is used to ensure that the encoded\n                                        data takes up a minimal amount of\n\n                                        space after proto encoding.\n\n                                        This is not thread safe, and is not\n                                        intended for concurrent usage.\n                                    mode_infos:\n                                      type: array\n                                      items: {}\n                                      title: >-\n                                        mode_infos is the corresponding modes of\n                                        the signers of the multisig\n\n                                        which could include nested multisig\n                                        public keys\n                              description: >-\n                                ModeInfo describes the signing mode of a single\n                                or nested multisig signer.\n                            sequence:\n                              type: string\n                              format: uint64\n                              description: >-\n                                sequence is the sequence of the account, which\n                                describes the\n\n                                number of committed transactions signed by a\n                                given address. It is used to\n\n                                prevent replay attacks.\n                          description: >-\n                            SignerInfo describes the public key and signing mode\n                            of a single top-level\n\n                            signer.\n                        description: >-\n                          signer_infos defines the signing modes for the\n                          required signers. The number\n\n                          and order of elements must match the required signers\n                          from TxBody's\n\n                          messages. The first element is the primary signer and\n                          the one which pays\n\n                          the fee.\n                      fee:\n                        description: >-\n                          Fee is the fee and gas limit for the transaction. The\n                          first signer is the\n\n                          primary signer and the one which pays the fee. The fee\n                          can be calculated\n\n                          based on the cost of evaluating the body and doing\n                          signature verification\n\n                          of the signers. This can be estimated via simulation.\n                        type: object\n                        properties:\n                          amount:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                denom:\n                                  type: string\n                                amount:\n                                  type: string\n                              description: >-\n                                Coin defines a token with a denomination and an\n                                amount.\n\n\n                                NOTE: The amount field is an Int which\n                                implements the custom method\n\n                                signatures required by gogoproto.\n                            title: amount is the amount of coins to be paid as a fee\n                          gas_limit:\n                            type: string\n                            format: uint64\n                            title: >-\n                              gas_limit is the maximum gas that can be used in\n                              transaction processing\n\n                              before an out of gas error occurs\n                          payer:\n                            type: string\n                            description: >-\n                              if unset, the first signer is responsible for\n                              paying the fees. If set, the specified account\n                              must pay the fees.\n\n                              the payer must be a tx signer (and thus have\n                              signed this field in AuthInfo).\n\n                              setting this field does *not* change the ordering\n                              of required signers for the transaction.\n                          granter:\n                            type: string\n                            title: >-\n                              if set, the fee payer (either the first signer or\n                              the value of the payer field) requests that a fee\n                              grant be used\n\n                              to pay fees instead of the fee payer's own\n                              balance. If an appropriate fee grant does not\n                              exist or the chain does\n\n                              not support fee grants, this will fail\n                      tip:\n                        description: >-\n                          Tip is the optional tip used for transactions fees\n                          paid in another denom.\n\n\n                          This field is ignored if the chain didn't enable tips,\n                          i.e. didn't add the\n\n                          `TipDecorator` in its posthandler.\n\n\n                          Since: cosmos-sdk 0.46\n                        type: object\n                        properties:\n                          amount:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                denom:\n                                  type: string\n                                amount:\n                                  type: string\n                              description: >-\n                                Coin defines a token with a denomination and an\n                                amount.\n\n\n                                NOTE: The amount field is an Int which\n                                implements the custom method\n\n                                signatures required by gogoproto.\n                            title: amount is the amount of the tip\n                          tipper:\n                            type: string\n                            title: >-\n                              tipper is the address of the account paying for\n                              the tip\n                    description: >-\n                      AuthInfo describes the fee and signer modes that are used\n                      to sign a\n\n                      transaction.\n                  signatures:\n                    type: array\n                    items:\n                      type: string\n                      format: byte\n                    description: >-\n                      signatures is a list of signatures that matches the length\n                      and order of\n\n                      AuthInfo's signer_infos to allow connecting signature meta\n                      information like\n\n                      public key and signing mode by position.\n            description: |-\n              TxEncodeRequest is the request type for the Service.TxEncode\n              RPC method.\n\n              Since: cosmos-sdk 0.47\n      tags:\n        - gRPC Gateway API\n  /cosmos/tx/v1beta1/encode/amino:\n    post:\n      summary: TxEncodeAmino encodes an Amino transaction from JSON to encoded bytes.\n      description: 'Since: cosmos-sdk 0.47'\n      operationId: TxEncodeAmino_4NFNG\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              amino_binary:\n                type: string\n                format: byte\n            description: >-\n              TxEncodeAminoResponse is the response type for the\n              Service.TxEncodeAmino\n\n              RPC method.\n\n\n              Since: cosmos-sdk 0.47\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: body\n          in: body\n          required: true\n          schema:\n            type: object\n            properties:\n              amino_json:\n                type: string\n            description: >-\n              TxEncodeAminoRequest is the request type for the\n              Service.TxEncodeAmino\n\n              RPC method.\n\n\n              Since: cosmos-sdk 0.47\n      tags:\n        - gRPC Gateway API\n  /cosmos/tx/v1beta1/simulate:\n    post:\n      summary: Simulate simulates executing a transaction for estimating gas usage.\n      operationId: Simulate_UY2GZ\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              gas_info:\n                description: gas_info is the information about gas used in the simulation.\n                type: object\n                properties:\n                  gas_wanted:\n                    type: string\n                    format: uint64\n                    description: >-\n                      GasWanted is the maximum units of work we allow this tx to\n                      perform.\n                  gas_used:\n                    type: string\n                    format: uint64\n                    description: GasUsed is the amount of gas actually consumed.\n              result:\n                description: result is the result of the simulation.\n                type: object\n                properties:\n                  data:\n                    type: string\n                    format: byte\n                    description: >-\n                      Data is any data returned from message or handler\n                      execution. It MUST be\n\n                      length prefixed in order to separate data from multiple\n                      message executions.\n\n                      Deprecated. This field is still populated, but prefer\n                      msg_response instead\n\n                      because it also contains the Msg response typeURL.\n                  log:\n                    type: string\n                    description: >-\n                      Log contains the log information from message or handler\n                      execution.\n                  events:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type:\n                          type: string\n                        attributes:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              key:\n                                type: string\n                              value:\n                                type: string\n                              index:\n                                type: boolean\n                            description: >-\n                              EventAttribute is a single key-value pair,\n                              associated with an event.\n                      description: >-\n                        Event allows application developers to attach additional\n                        information to\n\n                        ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx\n                        and ResponseDeliverTx.\n\n                        Later, transactions may be queried using these events.\n                    description: >-\n                      Events contains a slice of Event objects that were emitted\n                      during message\n\n                      or handler execution.\n                  msg_responses:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                    description: >-\n                      msg_responses contains the Msg handler responses type\n                      packed in Anys.\n\n\n                      Since: cosmos-sdk 0.46\n            description: |-\n              SimulateResponse is the response type for the\n              Service.SimulateRPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: body\n          in: body\n          required: true\n          schema:\n            type: object\n            properties:\n              tx:\n                description: |-\n                  tx is the transaction to simulate.\n                  Deprecated. Send raw tx bytes instead.\n                type: object\n                properties:\n                  body:\n                    title: body is the processable content of the transaction\n                    type: object\n                    properties:\n                      messages:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                        description: >-\n                          messages is a list of messages to be executed. The\n                          required signers of\n\n                          those messages define the number and order of elements\n                          in AuthInfo's\n\n                          signer_infos and Tx's signatures. Each required signer\n                          address is added to\n\n                          the list only the first time it occurs.\n\n                          By convention, the first required signer (usually from\n                          the first message)\n\n                          is referred to as the primary signer and pays the fee\n                          for the whole\n\n                          transaction.\n                      memo:\n                        type: string\n                        description: >-\n                          memo is any arbitrary note/comment to be added to the\n                          transaction.\n\n                          WARNING: in clients, any publicly exposed text should\n                          not be called memo,\n\n                          but should be called `note` instead (see\n                          https://github.com/cosmos/cosmos-sdk/issues/9122).\n                      timeout_height:\n                        type: string\n                        format: uint64\n                        title: >-\n                          timeout is the block height after which this\n                          transaction will not\n\n                          be processed by the chain\n                      extension_options:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                        title: >-\n                          extension_options are arbitrary options that can be\n                          added by chains\n\n                          when the default options are not sufficient. If any of\n                          these are present\n\n                          and can't be handled, the transaction will be rejected\n                      non_critical_extension_options:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                        title: >-\n                          extension_options are arbitrary options that can be\n                          added by chains\n\n                          when the default options are not sufficient. If any of\n                          these are present\n\n                          and can't be handled, they will be ignored\n                    description: >-\n                      TxBody is the body of a transaction that all signers sign\n                      over.\n                  auth_info:\n                    title: >-\n                      auth_info is the authorization related content of the\n                      transaction,\n\n                      specifically signers, signer modes and fee\n                    type: object\n                    properties:\n                      signer_infos:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            public_key:\n                              type: object\n                              properties:\n                                type_url:\n                                  type: string\n                                value:\n                                  type: string\n                                  format: byte\n                              description: >-\n                                public_key is the public key of the signer. It\n                                is optional for accounts\n\n                                that already exist in state. If unset, the\n                                verifier can use the required \\\n\n                                signer address for this position and lookup the\n                                public key.\n                            mode_info:\n                              title: >-\n                                mode_info describes the signing mode of the\n                                signer and is a nested\n\n                                structure to support nested multisig pubkey's\n                              type: object\n                              properties:\n                                single:\n                                  title: single represents a single signer\n                                  type: object\n                                  properties:\n                                    mode:\n                                      title: >-\n                                        mode is the signing mode of the single\n                                        signer\n                                      type: string\n                                      enum:\n                                        - SIGN_MODE_UNSPECIFIED\n                                        - SIGN_MODE_DIRECT\n                                        - SIGN_MODE_TEXTUAL\n                                        - SIGN_MODE_DIRECT_AUX\n                                        - SIGN_MODE_LEGACY_AMINO_JSON\n                                        - SIGN_MODE_EIP_191\n                                      default: SIGN_MODE_UNSPECIFIED\n                                      description: >-\n                                        SignMode represents a signing mode with\n                                        its own security guarantees.\n\n\n                                        This enum should be considered a\n                                        registry of all known sign modes\n\n                                        in the Cosmos ecosystem. Apps are not\n                                        expected to support all known\n\n                                        sign modes. Apps that would like to\n                                        support custom  sign modes are\n\n                                        encouraged to open a small PR against\n                                        this file to add a new case\n\n                                        to this SignMode enum describing their\n                                        sign mode so that different\n\n                                        apps have a consistent version of this\n                                        enum.\n\n                                         - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                        rejected.\n                                         - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                        verified with raw bytes from Tx.\n                                         - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                        human-readable textual representation on\n                                        top of the binary representation\n\n                                        from SIGN_MODE_DIRECT. It is currently\n                                        not supported.\n                                         - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                        SignDocDirectAux. As opposed to\n                                        SIGN_MODE_DIRECT, this sign mode does\n                                        not\n\n                                        require signers signing over other\n                                        signers' `signer_info`. It also allows\n\n                                        for adding Tips in transactions.\n\n\n                                        Since: cosmos-sdk 0.46\n                                         - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                        Amino JSON and will be removed in the\n                                        future.\n                                         - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                        SDK. Ref:\n                                        https://eips.ethereum.org/EIPS/eip-191\n\n\n                                        Currently, SIGN_MODE_EIP_191 is\n                                        registered as a SignMode enum variant,\n\n                                        but is not implemented on the SDK by\n                                        default. To enable EIP-191, you need\n\n                                        to pass a custom `TxConfig` that has an\n                                        implementation of\n\n                                        `SignModeHandler` for EIP-191. The SDK\n                                        may decide to fully support\n\n                                        EIP-191 in the future.\n\n\n                                        Since: cosmos-sdk 0.45.2\n                                multi:\n                                  title: multi represents a nested multisig signer\n                                  type: object\n                                  properties:\n                                    bitarray:\n                                      title: >-\n                                        bitarray specifies which keys within the\n                                        multisig are signing\n                                      type: object\n                                      properties:\n                                        extra_bits_stored:\n                                          type: integer\n                                          format: int64\n                                        elems:\n                                          type: string\n                                          format: byte\n                                      description: >-\n                                        CompactBitArray is an implementation of\n                                        a space efficient bit array.\n\n                                        This is used to ensure that the encoded\n                                        data takes up a minimal amount of\n\n                                        space after proto encoding.\n\n                                        This is not thread safe, and is not\n                                        intended for concurrent usage.\n                                    mode_infos:\n                                      type: array\n                                      items: {}\n                                      title: >-\n                                        mode_infos is the corresponding modes of\n                                        the signers of the multisig\n\n                                        which could include nested multisig\n                                        public keys\n                              description: >-\n                                ModeInfo describes the signing mode of a single\n                                or nested multisig signer.\n                            sequence:\n                              type: string\n                              format: uint64\n                              description: >-\n                                sequence is the sequence of the account, which\n                                describes the\n\n                                number of committed transactions signed by a\n                                given address. It is used to\n\n                                prevent replay attacks.\n                          description: >-\n                            SignerInfo describes the public key and signing mode\n                            of a single top-level\n\n                            signer.\n                        description: >-\n                          signer_infos defines the signing modes for the\n                          required signers. The number\n\n                          and order of elements must match the required signers\n                          from TxBody's\n\n                          messages. The first element is the primary signer and\n                          the one which pays\n\n                          the fee.\n                      fee:\n                        description: >-\n                          Fee is the fee and gas limit for the transaction. The\n                          first signer is the\n\n                          primary signer and the one which pays the fee. The fee\n                          can be calculated\n\n                          based on the cost of evaluating the body and doing\n                          signature verification\n\n                          of the signers. This can be estimated via simulation.\n                        type: object\n                        properties:\n                          amount:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                denom:\n                                  type: string\n                                amount:\n                                  type: string\n                              description: >-\n                                Coin defines a token with a denomination and an\n                                amount.\n\n\n                                NOTE: The amount field is an Int which\n                                implements the custom method\n\n                                signatures required by gogoproto.\n                            title: amount is the amount of coins to be paid as a fee\n                          gas_limit:\n                            type: string\n                            format: uint64\n                            title: >-\n                              gas_limit is the maximum gas that can be used in\n                              transaction processing\n\n                              before an out of gas error occurs\n                          payer:\n                            type: string\n                            description: >-\n                              if unset, the first signer is responsible for\n                              paying the fees. If set, the specified account\n                              must pay the fees.\n\n                              the payer must be a tx signer (and thus have\n                              signed this field in AuthInfo).\n\n                              setting this field does *not* change the ordering\n                              of required signers for the transaction.\n                          granter:\n                            type: string\n                            title: >-\n                              if set, the fee payer (either the first signer or\n                              the value of the payer field) requests that a fee\n                              grant be used\n\n                              to pay fees instead of the fee payer's own\n                              balance. If an appropriate fee grant does not\n                              exist or the chain does\n\n                              not support fee grants, this will fail\n                      tip:\n                        description: >-\n                          Tip is the optional tip used for transactions fees\n                          paid in another denom.\n\n\n                          This field is ignored if the chain didn't enable tips,\n                          i.e. didn't add the\n\n                          `TipDecorator` in its posthandler.\n\n\n                          Since: cosmos-sdk 0.46\n                        type: object\n                        properties:\n                          amount:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                denom:\n                                  type: string\n                                amount:\n                                  type: string\n                              description: >-\n                                Coin defines a token with a denomination and an\n                                amount.\n\n\n                                NOTE: The amount field is an Int which\n                                implements the custom method\n\n                                signatures required by gogoproto.\n                            title: amount is the amount of the tip\n                          tipper:\n                            type: string\n                            title: >-\n                              tipper is the address of the account paying for\n                              the tip\n                    description: >-\n                      AuthInfo describes the fee and signer modes that are used\n                      to sign a\n\n                      transaction.\n                  signatures:\n                    type: array\n                    items:\n                      type: string\n                      format: byte\n                    description: >-\n                      signatures is a list of signatures that matches the length\n                      and order of\n\n                      AuthInfo's signer_infos to allow connecting signature meta\n                      information like\n\n                      public key and signing mode by position.\n              tx_bytes:\n                type: string\n                format: byte\n                description: |-\n                  tx_bytes is the raw transaction.\n\n                  Since: cosmos-sdk 0.43\n            description: |-\n              SimulateRequest is the request type for the Service.Simulate\n              RPC method.\n      tags:\n        - gRPC Gateway API\n  /cosmos/tx/v1beta1/txs:\n    get:\n      summary: GetTxsEvent fetches txs by event.\n      operationId: GetTxsEvent_KWYMH\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              txs:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    body:\n                      title: body is the processable content of the transaction\n                      type: object\n                      properties:\n                        messages:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              type_url:\n                                type: string\n                              value:\n                                type: string\n                                format: byte\n                          description: >-\n                            messages is a list of messages to be executed. The\n                            required signers of\n\n                            those messages define the number and order of\n                            elements in AuthInfo's\n\n                            signer_infos and Tx's signatures. Each required\n                            signer address is added to\n\n                            the list only the first time it occurs.\n\n                            By convention, the first required signer (usually\n                            from the first message)\n\n                            is referred to as the primary signer and pays the\n                            fee for the whole\n\n                            transaction.\n                        memo:\n                          type: string\n                          description: >-\n                            memo is any arbitrary note/comment to be added to\n                            the transaction.\n\n                            WARNING: in clients, any publicly exposed text\n                            should not be called memo,\n\n                            but should be called `note` instead (see\n                            https://github.com/cosmos/cosmos-sdk/issues/9122).\n                        timeout_height:\n                          type: string\n                          format: uint64\n                          title: >-\n                            timeout is the block height after which this\n                            transaction will not\n\n                            be processed by the chain\n                        extension_options:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              type_url:\n                                type: string\n                              value:\n                                type: string\n                                format: byte\n                          title: >-\n                            extension_options are arbitrary options that can be\n                            added by chains\n\n                            when the default options are not sufficient. If any\n                            of these are present\n\n                            and can't be handled, the transaction will be\n                            rejected\n                        non_critical_extension_options:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              type_url:\n                                type: string\n                              value:\n                                type: string\n                                format: byte\n                          title: >-\n                            extension_options are arbitrary options that can be\n                            added by chains\n\n                            when the default options are not sufficient. If any\n                            of these are present\n\n                            and can't be handled, they will be ignored\n                      description: >-\n                        TxBody is the body of a transaction that all signers\n                        sign over.\n                    auth_info:\n                      title: >-\n                        auth_info is the authorization related content of the\n                        transaction,\n\n                        specifically signers, signer modes and fee\n                      type: object\n                      properties:\n                        signer_infos:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              public_key:\n                                type: object\n                                properties:\n                                  type_url:\n                                    type: string\n                                  value:\n                                    type: string\n                                    format: byte\n                                description: >-\n                                  public_key is the public key of the signer. It\n                                  is optional for accounts\n\n                                  that already exist in state. If unset, the\n                                  verifier can use the required \\\n\n                                  signer address for this position and lookup\n                                  the public key.\n                              mode_info:\n                                title: >-\n                                  mode_info describes the signing mode of the\n                                  signer and is a nested\n\n                                  structure to support nested multisig pubkey's\n                                type: object\n                                properties:\n                                  single:\n                                    title: single represents a single signer\n                                    type: object\n                                    properties:\n                                      mode:\n                                        title: >-\n                                          mode is the signing mode of the single\n                                          signer\n                                        type: string\n                                        enum:\n                                          - SIGN_MODE_UNSPECIFIED\n                                          - SIGN_MODE_DIRECT\n                                          - SIGN_MODE_TEXTUAL\n                                          - SIGN_MODE_DIRECT_AUX\n                                          - SIGN_MODE_LEGACY_AMINO_JSON\n                                          - SIGN_MODE_EIP_191\n                                        default: SIGN_MODE_UNSPECIFIED\n                                        description: >-\n                                          SignMode represents a signing mode with\n                                          its own security guarantees.\n\n\n                                          This enum should be considered a\n                                          registry of all known sign modes\n\n                                          in the Cosmos ecosystem. Apps are not\n                                          expected to support all known\n\n                                          sign modes. Apps that would like to\n                                          support custom  sign modes are\n\n                                          encouraged to open a small PR against\n                                          this file to add a new case\n\n                                          to this SignMode enum describing their\n                                          sign mode so that different\n\n                                          apps have a consistent version of this\n                                          enum.\n\n                                           - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                          rejected.\n                                           - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                          verified with raw bytes from Tx.\n                                           - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                          human-readable textual representation on\n                                          top of the binary representation\n\n                                          from SIGN_MODE_DIRECT. It is currently\n                                          not supported.\n                                           - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                          SignDocDirectAux. As opposed to\n                                          SIGN_MODE_DIRECT, this sign mode does\n                                          not\n\n                                          require signers signing over other\n                                          signers' `signer_info`. It also allows\n\n                                          for adding Tips in transactions.\n\n\n                                          Since: cosmos-sdk 0.46\n                                           - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                          Amino JSON and will be removed in the\n                                          future.\n                                           - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                          SDK. Ref:\n                                          https://eips.ethereum.org/EIPS/eip-191\n\n\n                                          Currently, SIGN_MODE_EIP_191 is\n                                          registered as a SignMode enum variant,\n\n                                          but is not implemented on the SDK by\n                                          default. To enable EIP-191, you need\n\n                                          to pass a custom `TxConfig` that has an\n                                          implementation of\n\n                                          `SignModeHandler` for EIP-191. The SDK\n                                          may decide to fully support\n\n                                          EIP-191 in the future.\n\n\n                                          Since: cosmos-sdk 0.45.2\n                                  multi:\n                                    title: multi represents a nested multisig signer\n                                    type: object\n                                    properties:\n                                      bitarray:\n                                        title: >-\n                                          bitarray specifies which keys within the\n                                          multisig are signing\n                                        type: object\n                                        properties:\n                                          extra_bits_stored:\n                                            type: integer\n                                            format: int64\n                                          elems:\n                                            type: string\n                                            format: byte\n                                        description: >-\n                                          CompactBitArray is an implementation of\n                                          a space efficient bit array.\n\n                                          This is used to ensure that the encoded\n                                          data takes up a minimal amount of\n\n                                          space after proto encoding.\n\n                                          This is not thread safe, and is not\n                                          intended for concurrent usage.\n                                      mode_infos:\n                                        type: array\n                                        items: {}\n                                        title: >-\n                                          mode_infos is the corresponding modes of\n                                          the signers of the multisig\n\n                                          which could include nested multisig\n                                          public keys\n                                description: >-\n                                  ModeInfo describes the signing mode of a\n                                  single or nested multisig signer.\n                              sequence:\n                                type: string\n                                format: uint64\n                                description: >-\n                                  sequence is the sequence of the account, which\n                                  describes the\n\n                                  number of committed transactions signed by a\n                                  given address. It is used to\n\n                                  prevent replay attacks.\n                            description: >-\n                              SignerInfo describes the public key and signing\n                              mode of a single top-level\n\n                              signer.\n                          description: >-\n                            signer_infos defines the signing modes for the\n                            required signers. The number\n\n                            and order of elements must match the required\n                            signers from TxBody's\n\n                            messages. The first element is the primary signer\n                            and the one which pays\n\n                            the fee.\n                        fee:\n                          description: >-\n                            Fee is the fee and gas limit for the transaction.\n                            The first signer is the\n\n                            primary signer and the one which pays the fee. The\n                            fee can be calculated\n\n                            based on the cost of evaluating the body and doing\n                            signature verification\n\n                            of the signers. This can be estimated via\n                            simulation.\n                          type: object\n                          properties:\n                            amount:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  denom:\n                                    type: string\n                                  amount:\n                                    type: string\n                                description: >-\n                                  Coin defines a token with a denomination and\n                                  an amount.\n\n\n                                  NOTE: The amount field is an Int which\n                                  implements the custom method\n\n                                  signatures required by gogoproto.\n                              title: >-\n                                amount is the amount of coins to be paid as a\n                                fee\n                            gas_limit:\n                              type: string\n                              format: uint64\n                              title: >-\n                                gas_limit is the maximum gas that can be used in\n                                transaction processing\n\n                                before an out of gas error occurs\n                            payer:\n                              type: string\n                              description: >-\n                                if unset, the first signer is responsible for\n                                paying the fees. If set, the specified account\n                                must pay the fees.\n\n                                the payer must be a tx signer (and thus have\n                                signed this field in AuthInfo).\n\n                                setting this field does *not* change the\n                                ordering of required signers for the\n                                transaction.\n                            granter:\n                              type: string\n                              title: >-\n                                if set, the fee payer (either the first signer\n                                or the value of the payer field) requests that a\n                                fee grant be used\n\n                                to pay fees instead of the fee payer's own\n                                balance. If an appropriate fee grant does not\n                                exist or the chain does\n\n                                not support fee grants, this will fail\n                        tip:\n                          description: >-\n                            Tip is the optional tip used for transactions fees\n                            paid in another denom.\n\n\n                            This field is ignored if the chain didn't enable\n                            tips, i.e. didn't add the\n\n                            `TipDecorator` in its posthandler.\n\n\n                            Since: cosmos-sdk 0.46\n                          type: object\n                          properties:\n                            amount:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  denom:\n                                    type: string\n                                  amount:\n                                    type: string\n                                description: >-\n                                  Coin defines a token with a denomination and\n                                  an amount.\n\n\n                                  NOTE: The amount field is an Int which\n                                  implements the custom method\n\n                                  signatures required by gogoproto.\n                              title: amount is the amount of the tip\n                            tipper:\n                              type: string\n                              title: >-\n                                tipper is the address of the account paying for\n                                the tip\n                      description: >-\n                        AuthInfo describes the fee and signer modes that are\n                        used to sign a\n\n                        transaction.\n                    signatures:\n                      type: array\n                      items:\n                        type: string\n                        format: byte\n                      description: >-\n                        signatures is a list of signatures that matches the\n                        length and order of\n\n                        AuthInfo's signer_infos to allow connecting signature\n                        meta information like\n\n                        public key and signing mode by position.\n                  description: Tx is the standard type used for broadcasting transactions.\n                description: txs is the list of queried transactions.\n              tx_responses:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    height:\n                      type: string\n                      format: int64\n                      title: The block height\n                    txhash:\n                      type: string\n                      description: The transaction hash.\n                    codespace:\n                      type: string\n                      title: Namespace for the Code\n                    code:\n                      type: integer\n                      format: int64\n                      description: Response code.\n                    data:\n                      type: string\n                      description: Result bytes, if any.\n                    raw_log:\n                      type: string\n                      description: >-\n                        The output of the application's logger (raw string). May\n                        be\n\n                        non-deterministic.\n                    logs:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          msg_index:\n                            type: integer\n                            format: int64\n                          log:\n                            type: string\n                          events:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                type:\n                                  type: string\n                                attributes:\n                                  type: array\n                                  items:\n                                    type: object\n                                    properties:\n                                      key:\n                                        type: string\n                                      value:\n                                        type: string\n                                    description: >-\n                                      Attribute defines an attribute wrapper\n                                      where the key and value are\n\n                                      strings instead of raw bytes.\n                              description: >-\n                                StringEvent defines en Event object wrapper\n                                where all the attributes\n\n                                contain key/value pairs that are strings instead\n                                of raw bytes.\n                            description: >-\n                              Events contains a slice of Event objects that were\n                              emitted during some\n\n                              execution.\n                        description: >-\n                          ABCIMessageLog defines a structure containing an\n                          indexed tx ABCI message log.\n                      description: >-\n                        The output of the application's logger (typed). May be\n                        non-deterministic.\n                    info:\n                      type: string\n                      description: Additional information. May be non-deterministic.\n                    gas_wanted:\n                      type: string\n                      format: int64\n                      description: Amount of gas requested for transaction.\n                    gas_used:\n                      type: string\n                      format: int64\n                      description: Amount of gas consumed by transaction.\n                    tx:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                      description: The request transaction bytes.\n                    timestamp:\n                      type: string\n                      description: >-\n                        Time of the previous block. For heights > 1, it's the\n                        weighted median of\n\n                        the timestamps of the valid votes in the\n                        block.LastCommit. For height == 1,\n\n                        it's genesis time.\n                    events:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          type:\n                            type: string\n                          attributes:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                key:\n                                  type: string\n                                value:\n                                  type: string\n                                index:\n                                  type: boolean\n                              description: >-\n                                EventAttribute is a single key-value pair,\n                                associated with an event.\n                        description: >-\n                          Event allows application developers to attach\n                          additional information to\n\n                          ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx\n                          and ResponseDeliverTx.\n\n                          Later, transactions may be queried using these events.\n                      description: >-\n                        Events defines all the events emitted by processing a\n                        transaction. Note,\n\n                        these events include those emitted by processing all the\n                        messages and those\n\n                        emitted from the ante. Whereas Logs contains the events,\n                        with\n\n                        additional metadata, emitted only by processing the\n                        messages.\n\n\n                        Since: cosmos-sdk 0.42.11, 0.44.5, 0.45\n                  description: >-\n                    TxResponse defines a structure containing relevant tx data\n                    and metadata. The\n\n                    tags are stringified and the log is JSON decoded.\n                description: tx_responses is the list of queried TxResponses.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n              total:\n                type: string\n                format: uint64\n                title: total is total number of results available\n            description: >-\n              GetTxsEventResponse is the response type for the\n              Service.TxsByEvents\n\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: events\n          description: events is the list of transaction event type.\n          in: query\n          required: false\n          type: array\n          items:\n            type: string\n          collectionFormat: multi\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n        - name: order_by\n          description: |2-\n             - ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults to ASC in this case.\n             - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order\n             - ORDER_BY_DESC: ORDER_BY_DESC defines descending order\n          in: query\n          required: false\n          type: string\n          enum:\n            - ORDER_BY_UNSPECIFIED\n            - ORDER_BY_ASC\n            - ORDER_BY_DESC\n          default: ORDER_BY_UNSPECIFIED\n        - name: page\n          description: >-\n            page is the page number to query, starts at 1. If not provided, will\n            default to first page.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n    post:\n      summary: BroadcastTx broadcast transaction.\n      operationId: BroadcastTx_N4T1X\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              tx_response:\n                type: object\n                properties:\n                  height:\n                    type: string\n                    format: int64\n                    title: The block height\n                  txhash:\n                    type: string\n                    description: The transaction hash.\n                  codespace:\n                    type: string\n                    title: Namespace for the Code\n                  code:\n                    type: integer\n                    format: int64\n                    description: Response code.\n                  data:\n                    type: string\n                    description: Result bytes, if any.\n                  raw_log:\n                    type: string\n                    description: >-\n                      The output of the application's logger (raw string). May\n                      be\n\n                      non-deterministic.\n                  logs:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        msg_index:\n                          type: integer\n                          format: int64\n                        log:\n                          type: string\n                        events:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              type:\n                                type: string\n                              attributes:\n                                type: array\n                                items:\n                                  type: object\n                                  properties:\n                                    key:\n                                      type: string\n                                    value:\n                                      type: string\n                                  description: >-\n                                    Attribute defines an attribute wrapper where\n                                    the key and value are\n\n                                    strings instead of raw bytes.\n                            description: >-\n                              StringEvent defines en Event object wrapper where\n                              all the attributes\n\n                              contain key/value pairs that are strings instead\n                              of raw bytes.\n                          description: >-\n                            Events contains a slice of Event objects that were\n                            emitted during some\n\n                            execution.\n                      description: >-\n                        ABCIMessageLog defines a structure containing an indexed\n                        tx ABCI message log.\n                    description: >-\n                      The output of the application's logger (typed). May be\n                      non-deterministic.\n                  info:\n                    type: string\n                    description: Additional information. May be non-deterministic.\n                  gas_wanted:\n                    type: string\n                    format: int64\n                    description: Amount of gas requested for transaction.\n                  gas_used:\n                    type: string\n                    format: int64\n                    description: Amount of gas consumed by transaction.\n                  tx:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                    description: The request transaction bytes.\n                  timestamp:\n                    type: string\n                    description: >-\n                      Time of the previous block. For heights > 1, it's the\n                      weighted median of\n\n                      the timestamps of the valid votes in the block.LastCommit.\n                      For height == 1,\n\n                      it's genesis time.\n                  events:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type:\n                          type: string\n                        attributes:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              key:\n                                type: string\n                              value:\n                                type: string\n                              index:\n                                type: boolean\n                            description: >-\n                              EventAttribute is a single key-value pair,\n                              associated with an event.\n                      description: >-\n                        Event allows application developers to attach additional\n                        information to\n\n                        ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx\n                        and ResponseDeliverTx.\n\n                        Later, transactions may be queried using these events.\n                    description: >-\n                      Events defines all the events emitted by processing a\n                      transaction. Note,\n\n                      these events include those emitted by processing all the\n                      messages and those\n\n                      emitted from the ante. Whereas Logs contains the events,\n                      with\n\n                      additional metadata, emitted only by processing the\n                      messages.\n\n\n                      Since: cosmos-sdk 0.42.11, 0.44.5, 0.45\n                description: >-\n                  TxResponse defines a structure containing relevant tx data and\n                  metadata. The\n\n                  tags are stringified and the log is JSON decoded.\n            description: |-\n              BroadcastTxResponse is the response type for the\n              Service.BroadcastTx method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: body\n          in: body\n          required: true\n          schema:\n            type: object\n            properties:\n              tx_bytes:\n                type: string\n                format: byte\n                description: tx_bytes is the raw transaction.\n              mode:\n                type: string\n                enum:\n                  - BROADCAST_MODE_UNSPECIFIED\n                  - BROADCAST_MODE_BLOCK\n                  - BROADCAST_MODE_SYNC\n                  - BROADCAST_MODE_ASYNC\n                default: BROADCAST_MODE_UNSPECIFIED\n                description: >-\n                  BroadcastMode specifies the broadcast mode for the\n                  TxService.Broadcast RPC method.\n\n                   - BROADCAST_MODE_UNSPECIFIED: zero-value for mode ordering\n                   - BROADCAST_MODE_BLOCK: DEPRECATED: use BROADCAST_MODE_SYNC instead,\n                  BROADCAST_MODE_BLOCK is not supported by the SDK from v0.47.x\n                  onwards.\n                   - BROADCAST_MODE_SYNC: BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits for\n                  a CheckTx execution response only.\n                   - BROADCAST_MODE_ASYNC: BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client returns\n                  immediately.\n            description: >-\n              BroadcastTxRequest is the request type for the\n              Service.BroadcastTxRequest\n\n              RPC method.\n      tags:\n        - gRPC Gateway API\n  /cosmos/tx/v1beta1/txs/block/{height}:\n    get:\n      summary: GetBlockWithTxs fetches a block with decoded txs.\n      description: 'Since: cosmos-sdk 0.45.2'\n      operationId: GetBlockWithTxs_1EZ44\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              txs:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    body:\n                      title: body is the processable content of the transaction\n                      type: object\n                      properties:\n                        messages:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              type_url:\n                                type: string\n                              value:\n                                type: string\n                                format: byte\n                          description: >-\n                            messages is a list of messages to be executed. The\n                            required signers of\n\n                            those messages define the number and order of\n                            elements in AuthInfo's\n\n                            signer_infos and Tx's signatures. Each required\n                            signer address is added to\n\n                            the list only the first time it occurs.\n\n                            By convention, the first required signer (usually\n                            from the first message)\n\n                            is referred to as the primary signer and pays the\n                            fee for the whole\n\n                            transaction.\n                        memo:\n                          type: string\n                          description: >-\n                            memo is any arbitrary note/comment to be added to\n                            the transaction.\n\n                            WARNING: in clients, any publicly exposed text\n                            should not be called memo,\n\n                            but should be called `note` instead (see\n                            https://github.com/cosmos/cosmos-sdk/issues/9122).\n                        timeout_height:\n                          type: string\n                          format: uint64\n                          title: >-\n                            timeout is the block height after which this\n                            transaction will not\n\n                            be processed by the chain\n                        extension_options:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              type_url:\n                                type: string\n                              value:\n                                type: string\n                                format: byte\n                          title: >-\n                            extension_options are arbitrary options that can be\n                            added by chains\n\n                            when the default options are not sufficient. If any\n                            of these are present\n\n                            and can't be handled, the transaction will be\n                            rejected\n                        non_critical_extension_options:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              type_url:\n                                type: string\n                              value:\n                                type: string\n                                format: byte\n                          title: >-\n                            extension_options are arbitrary options that can be\n                            added by chains\n\n                            when the default options are not sufficient. If any\n                            of these are present\n\n                            and can't be handled, they will be ignored\n                      description: >-\n                        TxBody is the body of a transaction that all signers\n                        sign over.\n                    auth_info:\n                      title: >-\n                        auth_info is the authorization related content of the\n                        transaction,\n\n                        specifically signers, signer modes and fee\n                      type: object\n                      properties:\n                        signer_infos:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              public_key:\n                                type: object\n                                properties:\n                                  type_url:\n                                    type: string\n                                  value:\n                                    type: string\n                                    format: byte\n                                description: >-\n                                  public_key is the public key of the signer. It\n                                  is optional for accounts\n\n                                  that already exist in state. If unset, the\n                                  verifier can use the required \\\n\n                                  signer address for this position and lookup\n                                  the public key.\n                              mode_info:\n                                title: >-\n                                  mode_info describes the signing mode of the\n                                  signer and is a nested\n\n                                  structure to support nested multisig pubkey's\n                                type: object\n                                properties:\n                                  single:\n                                    title: single represents a single signer\n                                    type: object\n                                    properties:\n                                      mode:\n                                        title: >-\n                                          mode is the signing mode of the single\n                                          signer\n                                        type: string\n                                        enum:\n                                          - SIGN_MODE_UNSPECIFIED\n                                          - SIGN_MODE_DIRECT\n                                          - SIGN_MODE_TEXTUAL\n                                          - SIGN_MODE_DIRECT_AUX\n                                          - SIGN_MODE_LEGACY_AMINO_JSON\n                                          - SIGN_MODE_EIP_191\n                                        default: SIGN_MODE_UNSPECIFIED\n                                        description: >-\n                                          SignMode represents a signing mode with\n                                          its own security guarantees.\n\n\n                                          This enum should be considered a\n                                          registry of all known sign modes\n\n                                          in the Cosmos ecosystem. Apps are not\n                                          expected to support all known\n\n                                          sign modes. Apps that would like to\n                                          support custom  sign modes are\n\n                                          encouraged to open a small PR against\n                                          this file to add a new case\n\n                                          to this SignMode enum describing their\n                                          sign mode so that different\n\n                                          apps have a consistent version of this\n                                          enum.\n\n                                           - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                          rejected.\n                                           - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                          verified with raw bytes from Tx.\n                                           - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                          human-readable textual representation on\n                                          top of the binary representation\n\n                                          from SIGN_MODE_DIRECT. It is currently\n                                          not supported.\n                                           - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                          SignDocDirectAux. As opposed to\n                                          SIGN_MODE_DIRECT, this sign mode does\n                                          not\n\n                                          require signers signing over other\n                                          signers' `signer_info`. It also allows\n\n                                          for adding Tips in transactions.\n\n\n                                          Since: cosmos-sdk 0.46\n                                           - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                          Amino JSON and will be removed in the\n                                          future.\n                                           - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                          SDK. Ref:\n                                          https://eips.ethereum.org/EIPS/eip-191\n\n\n                                          Currently, SIGN_MODE_EIP_191 is\n                                          registered as a SignMode enum variant,\n\n                                          but is not implemented on the SDK by\n                                          default. To enable EIP-191, you need\n\n                                          to pass a custom `TxConfig` that has an\n                                          implementation of\n\n                                          `SignModeHandler` for EIP-191. The SDK\n                                          may decide to fully support\n\n                                          EIP-191 in the future.\n\n\n                                          Since: cosmos-sdk 0.45.2\n                                  multi:\n                                    title: multi represents a nested multisig signer\n                                    type: object\n                                    properties:\n                                      bitarray:\n                                        title: >-\n                                          bitarray specifies which keys within the\n                                          multisig are signing\n                                        type: object\n                                        properties:\n                                          extra_bits_stored:\n                                            type: integer\n                                            format: int64\n                                          elems:\n                                            type: string\n                                            format: byte\n                                        description: >-\n                                          CompactBitArray is an implementation of\n                                          a space efficient bit array.\n\n                                          This is used to ensure that the encoded\n                                          data takes up a minimal amount of\n\n                                          space after proto encoding.\n\n                                          This is not thread safe, and is not\n                                          intended for concurrent usage.\n                                      mode_infos:\n                                        type: array\n                                        items: {}\n                                        title: >-\n                                          mode_infos is the corresponding modes of\n                                          the signers of the multisig\n\n                                          which could include nested multisig\n                                          public keys\n                                description: >-\n                                  ModeInfo describes the signing mode of a\n                                  single or nested multisig signer.\n                              sequence:\n                                type: string\n                                format: uint64\n                                description: >-\n                                  sequence is the sequence of the account, which\n                                  describes the\n\n                                  number of committed transactions signed by a\n                                  given address. It is used to\n\n                                  prevent replay attacks.\n                            description: >-\n                              SignerInfo describes the public key and signing\n                              mode of a single top-level\n\n                              signer.\n                          description: >-\n                            signer_infos defines the signing modes for the\n                            required signers. The number\n\n                            and order of elements must match the required\n                            signers from TxBody's\n\n                            messages. The first element is the primary signer\n                            and the one which pays\n\n                            the fee.\n                        fee:\n                          description: >-\n                            Fee is the fee and gas limit for the transaction.\n                            The first signer is the\n\n                            primary signer and the one which pays the fee. The\n                            fee can be calculated\n\n                            based on the cost of evaluating the body and doing\n                            signature verification\n\n                            of the signers. This can be estimated via\n                            simulation.\n                          type: object\n                          properties:\n                            amount:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  denom:\n                                    type: string\n                                  amount:\n                                    type: string\n                                description: >-\n                                  Coin defines a token with a denomination and\n                                  an amount.\n\n\n                                  NOTE: The amount field is an Int which\n                                  implements the custom method\n\n                                  signatures required by gogoproto.\n                              title: >-\n                                amount is the amount of coins to be paid as a\n                                fee\n                            gas_limit:\n                              type: string\n                              format: uint64\n                              title: >-\n                                gas_limit is the maximum gas that can be used in\n                                transaction processing\n\n                                before an out of gas error occurs\n                            payer:\n                              type: string\n                              description: >-\n                                if unset, the first signer is responsible for\n                                paying the fees. If set, the specified account\n                                must pay the fees.\n\n                                the payer must be a tx signer (and thus have\n                                signed this field in AuthInfo).\n\n                                setting this field does *not* change the\n                                ordering of required signers for the\n                                transaction.\n                            granter:\n                              type: string\n                              title: >-\n                                if set, the fee payer (either the first signer\n                                or the value of the payer field) requests that a\n                                fee grant be used\n\n                                to pay fees instead of the fee payer's own\n                                balance. If an appropriate fee grant does not\n                                exist or the chain does\n\n                                not support fee grants, this will fail\n                        tip:\n                          description: >-\n                            Tip is the optional tip used for transactions fees\n                            paid in another denom.\n\n\n                            This field is ignored if the chain didn't enable\n                            tips, i.e. didn't add the\n\n                            `TipDecorator` in its posthandler.\n\n\n                            Since: cosmos-sdk 0.46\n                          type: object\n                          properties:\n                            amount:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  denom:\n                                    type: string\n                                  amount:\n                                    type: string\n                                description: >-\n                                  Coin defines a token with a denomination and\n                                  an amount.\n\n\n                                  NOTE: The amount field is an Int which\n                                  implements the custom method\n\n                                  signatures required by gogoproto.\n                              title: amount is the amount of the tip\n                            tipper:\n                              type: string\n                              title: >-\n                                tipper is the address of the account paying for\n                                the tip\n                      description: >-\n                        AuthInfo describes the fee and signer modes that are\n                        used to sign a\n\n                        transaction.\n                    signatures:\n                      type: array\n                      items:\n                        type: string\n                        format: byte\n                      description: >-\n                        signatures is a list of signatures that matches the\n                        length and order of\n\n                        AuthInfo's signer_infos to allow connecting signature\n                        meta information like\n\n                        public key and signing mode by position.\n                  description: Tx is the standard type used for broadcasting transactions.\n                description: txs are the transactions in the block.\n              block_id:\n                type: object\n                properties:\n                  hash:\n                    type: string\n                    format: byte\n                  part_set_header:\n                    type: object\n                    properties:\n                      total:\n                        type: integer\n                        format: int64\n                      hash:\n                        type: string\n                        format: byte\n                    title: PartsetHeader\n                title: BlockID\n              block:\n                type: object\n                properties:\n                  header:\n                    type: object\n                    properties:\n                      version:\n                        title: basic block info\n                        type: object\n                        properties:\n                          block:\n                            type: string\n                            format: uint64\n                          app:\n                            type: string\n                            format: uint64\n                        description: >-\n                          Consensus captures the consensus rules for processing\n                          a block in the blockchain,\n\n                          including all blockchain data structures and the rules\n                          of the application's\n\n                          state transition machine.\n                      chain_id:\n                        type: string\n                      height:\n                        type: string\n                        format: int64\n                      time:\n                        type: string\n                        format: date-time\n                      last_block_id:\n                        title: prev block info\n                        type: object\n                        properties:\n                          hash:\n                            type: string\n                            format: byte\n                          part_set_header:\n                            type: object\n                            properties:\n                              total:\n                                type: integer\n                                format: int64\n                              hash:\n                                type: string\n                                format: byte\n                            title: PartsetHeader\n                      last_commit_hash:\n                        type: string\n                        format: byte\n                        title: hashes of block data\n                      data_hash:\n                        type: string\n                        format: byte\n                      validators_hash:\n                        type: string\n                        format: byte\n                        title: hashes from the app output from the prev block\n                      next_validators_hash:\n                        type: string\n                        format: byte\n                      consensus_hash:\n                        type: string\n                        format: byte\n                      app_hash:\n                        type: string\n                        format: byte\n                      last_results_hash:\n                        type: string\n                        format: byte\n                      evidence_hash:\n                        type: string\n                        format: byte\n                        title: consensus info\n                      proposer_address:\n                        type: string\n                        format: byte\n                    description: Header defines the structure of a block header.\n                  data:\n                    type: object\n                    properties:\n                      txs:\n                        type: array\n                        items:\n                          type: string\n                          format: byte\n                        description: >-\n                          Txs that will be applied by state @ block.Height+1.\n\n                          NOTE: not all txs here are valid.  We're just agreeing\n                          on the order first.\n\n                          This means that block.AppHash does not include these\n                          txs.\n                    title: >-\n                      Data contains the set of transactions included in the\n                      block\n                  evidence:\n                    type: object\n                    properties:\n                      evidence:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            duplicate_vote_evidence:\n                              type: object\n                              properties:\n                                vote_a:\n                                  type: object\n                                  properties:\n                                    type:\n                                      type: string\n                                      enum:\n                                        - SIGNED_MSG_TYPE_UNKNOWN\n                                        - SIGNED_MSG_TYPE_PREVOTE\n                                        - SIGNED_MSG_TYPE_PRECOMMIT\n                                        - SIGNED_MSG_TYPE_PROPOSAL\n                                      default: SIGNED_MSG_TYPE_UNKNOWN\n                                      description: >-\n                                        SignedMsgType is a type of signed\n                                        message in the consensus.\n\n                                         - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                         - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                                    height:\n                                      type: string\n                                      format: int64\n                                    round:\n                                      type: integer\n                                      format: int32\n                                    block_id:\n                                      type: object\n                                      properties:\n                                        hash:\n                                          type: string\n                                          format: byte\n                                        part_set_header:\n                                          type: object\n                                          properties:\n                                            total:\n                                              type: integer\n                                              format: int64\n                                            hash:\n                                              type: string\n                                              format: byte\n                                          title: PartsetHeader\n                                      title: BlockID\n                                    timestamp:\n                                      type: string\n                                      format: date-time\n                                    validator_address:\n                                      type: string\n                                      format: byte\n                                    validator_index:\n                                      type: integer\n                                      format: int32\n                                    signature:\n                                      type: string\n                                      format: byte\n                                  description: >-\n                                    Vote represents a prevote, precommit, or\n                                    commit vote from validators for\n\n                                    consensus.\n                                vote_b:\n                                  type: object\n                                  properties:\n                                    type:\n                                      type: string\n                                      enum:\n                                        - SIGNED_MSG_TYPE_UNKNOWN\n                                        - SIGNED_MSG_TYPE_PREVOTE\n                                        - SIGNED_MSG_TYPE_PRECOMMIT\n                                        - SIGNED_MSG_TYPE_PROPOSAL\n                                      default: SIGNED_MSG_TYPE_UNKNOWN\n                                      description: >-\n                                        SignedMsgType is a type of signed\n                                        message in the consensus.\n\n                                         - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                         - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                                    height:\n                                      type: string\n                                      format: int64\n                                    round:\n                                      type: integer\n                                      format: int32\n                                    block_id:\n                                      type: object\n                                      properties:\n                                        hash:\n                                          type: string\n                                          format: byte\n                                        part_set_header:\n                                          type: object\n                                          properties:\n                                            total:\n                                              type: integer\n                                              format: int64\n                                            hash:\n                                              type: string\n                                              format: byte\n                                          title: PartsetHeader\n                                      title: BlockID\n                                    timestamp:\n                                      type: string\n                                      format: date-time\n                                    validator_address:\n                                      type: string\n                                      format: byte\n                                    validator_index:\n                                      type: integer\n                                      format: int32\n                                    signature:\n                                      type: string\n                                      format: byte\n                                  description: >-\n                                    Vote represents a prevote, precommit, or\n                                    commit vote from validators for\n\n                                    consensus.\n                                total_voting_power:\n                                  type: string\n                                  format: int64\n                                validator_power:\n                                  type: string\n                                  format: int64\n                                timestamp:\n                                  type: string\n                                  format: date-time\n                              description: >-\n                                DuplicateVoteEvidence contains evidence of a\n                                validator signed two conflicting votes.\n                            light_client_attack_evidence:\n                              type: object\n                              properties:\n                                conflicting_block:\n                                  type: object\n                                  properties:\n                                    signed_header:\n                                      type: object\n                                      properties:\n                                        header:\n                                          type: object\n                                          properties:\n                                            version:\n                                              title: basic block info\n                                              type: object\n                                              properties:\n                                                block:\n                                                  type: string\n                                                  format: uint64\n                                                app:\n                                                  type: string\n                                                  format: uint64\n                                              description: >-\n                                                Consensus captures the consensus rules\n                                                for processing a block in the\n                                                blockchain,\n\n                                                including all blockchain data structures\n                                                and the rules of the application's\n\n                                                state transition machine.\n                                            chain_id:\n                                              type: string\n                                            height:\n                                              type: string\n                                              format: int64\n                                            time:\n                                              type: string\n                                              format: date-time\n                                            last_block_id:\n                                              title: prev block info\n                                              type: object\n                                              properties:\n                                                hash:\n                                                  type: string\n                                                  format: byte\n                                                part_set_header:\n                                                  type: object\n                                                  properties:\n                                                    total:\n                                                      type: integer\n                                                      format: int64\n                                                    hash:\n                                                      type: string\n                                                      format: byte\n                                                  title: PartsetHeader\n                                            last_commit_hash:\n                                              type: string\n                                              format: byte\n                                              title: hashes of block data\n                                            data_hash:\n                                              type: string\n                                              format: byte\n                                            validators_hash:\n                                              type: string\n                                              format: byte\n                                              title: >-\n                                                hashes from the app output from the prev\n                                                block\n                                            next_validators_hash:\n                                              type: string\n                                              format: byte\n                                            consensus_hash:\n                                              type: string\n                                              format: byte\n                                            app_hash:\n                                              type: string\n                                              format: byte\n                                            last_results_hash:\n                                              type: string\n                                              format: byte\n                                            evidence_hash:\n                                              type: string\n                                              format: byte\n                                              title: consensus info\n                                            proposer_address:\n                                              type: string\n                                              format: byte\n                                          description: >-\n                                            Header defines the structure of a block\n                                            header.\n                                        commit:\n                                          type: object\n                                          properties:\n                                            height:\n                                              type: string\n                                              format: int64\n                                            round:\n                                              type: integer\n                                              format: int32\n                                            block_id:\n                                              type: object\n                                              properties:\n                                                hash:\n                                                  type: string\n                                                  format: byte\n                                                part_set_header:\n                                                  type: object\n                                                  properties:\n                                                    total:\n                                                      type: integer\n                                                      format: int64\n                                                    hash:\n                                                      type: string\n                                                      format: byte\n                                                  title: PartsetHeader\n                                              title: BlockID\n                                            signatures:\n                                              type: array\n                                              items:\n                                                type: object\n                                                properties:\n                                                  block_id_flag:\n                                                    type: string\n                                                    enum:\n                                                      - BLOCK_ID_FLAG_UNKNOWN\n                                                      - BLOCK_ID_FLAG_ABSENT\n                                                      - BLOCK_ID_FLAG_COMMIT\n                                                      - BLOCK_ID_FLAG_NIL\n                                                    default: BLOCK_ID_FLAG_UNKNOWN\n                                                    title: >-\n                                                      BlockIdFlag indicates which BlcokID the\n                                                      signature is for\n                                                  validator_address:\n                                                    type: string\n                                                    format: byte\n                                                  timestamp:\n                                                    type: string\n                                                    format: date-time\n                                                  signature:\n                                                    type: string\n                                                    format: byte\n                                                description: >-\n                                                  CommitSig is a part of the Vote included\n                                                  in a Commit.\n                                          description: >-\n                                            Commit contains the evidence that a\n                                            block was committed by a set of\n                                            validators.\n                                    validator_set:\n                                      type: object\n                                      properties:\n                                        validators:\n                                          type: array\n                                          items:\n                                            type: object\n                                            properties:\n                                              address:\n                                                type: string\n                                                format: byte\n                                              pub_key:\n                                                type: object\n                                                properties:\n                                                  ed25519:\n                                                    type: string\n                                                    format: byte\n                                                  secp256k1:\n                                                    type: string\n                                                    format: byte\n                                                title: >-\n                                                  PublicKey defines the keys available for\n                                                  use with Validators\n                                              voting_power:\n                                                type: string\n                                                format: int64\n                                              proposer_priority:\n                                                type: string\n                                                format: int64\n                                        proposer:\n                                          type: object\n                                          properties:\n                                            address:\n                                              type: string\n                                              format: byte\n                                            pub_key:\n                                              type: object\n                                              properties:\n                                                ed25519:\n                                                  type: string\n                                                  format: byte\n                                                secp256k1:\n                                                  type: string\n                                                  format: byte\n                                              title: >-\n                                                PublicKey defines the keys available for\n                                                use with Validators\n                                            voting_power:\n                                              type: string\n                                              format: int64\n                                            proposer_priority:\n                                              type: string\n                                              format: int64\n                                        total_voting_power:\n                                          type: string\n                                          format: int64\n                                common_height:\n                                  type: string\n                                  format: int64\n                                byzantine_validators:\n                                  type: array\n                                  items:\n                                    type: object\n                                    properties:\n                                      address:\n                                        type: string\n                                        format: byte\n                                      pub_key:\n                                        type: object\n                                        properties:\n                                          ed25519:\n                                            type: string\n                                            format: byte\n                                          secp256k1:\n                                            type: string\n                                            format: byte\n                                        title: >-\n                                          PublicKey defines the keys available for\n                                          use with Validators\n                                      voting_power:\n                                        type: string\n                                        format: int64\n                                      proposer_priority:\n                                        type: string\n                                        format: int64\n                                total_voting_power:\n                                  type: string\n                                  format: int64\n                                timestamp:\n                                  type: string\n                                  format: date-time\n                              description: >-\n                                LightClientAttackEvidence contains evidence of a\n                                set of validators attempting to mislead a light\n                                client.\n                  last_commit:\n                    type: object\n                    properties:\n                      height:\n                        type: string\n                        format: int64\n                      round:\n                        type: integer\n                        format: int32\n                      block_id:\n                        type: object\n                        properties:\n                          hash:\n                            type: string\n                            format: byte\n                          part_set_header:\n                            type: object\n                            properties:\n                              total:\n                                type: integer\n                                format: int64\n                              hash:\n                                type: string\n                                format: byte\n                            title: PartsetHeader\n                        title: BlockID\n                      signatures:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            block_id_flag:\n                              type: string\n                              enum:\n                                - BLOCK_ID_FLAG_UNKNOWN\n                                - BLOCK_ID_FLAG_ABSENT\n                                - BLOCK_ID_FLAG_COMMIT\n                                - BLOCK_ID_FLAG_NIL\n                              default: BLOCK_ID_FLAG_UNKNOWN\n                              title: >-\n                                BlockIdFlag indicates which BlcokID the\n                                signature is for\n                            validator_address:\n                              type: string\n                              format: byte\n                            timestamp:\n                              type: string\n                              format: date-time\n                            signature:\n                              type: string\n                              format: byte\n                          description: >-\n                            CommitSig is a part of the Vote included in a\n                            Commit.\n                    description: >-\n                      Commit contains the evidence that a block was committed by\n                      a set of validators.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: >-\n              GetBlockWithTxsResponse is the response type for the\n              Service.GetBlockWithTxs method.\n\n\n              Since: cosmos-sdk 0.45.2\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: height\n          description: height is the height of the block to query.\n          in: path\n          required: true\n          type: string\n          format: int64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/tx/v1beta1/txs/{hash}:\n    get:\n      summary: GetTx fetches a tx by hash.\n      operationId: GetTx_71CB4\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              tx:\n                type: object\n                properties:\n                  body:\n                    title: body is the processable content of the transaction\n                    type: object\n                    properties:\n                      messages:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                        description: >-\n                          messages is a list of messages to be executed. The\n                          required signers of\n\n                          those messages define the number and order of elements\n                          in AuthInfo's\n\n                          signer_infos and Tx's signatures. Each required signer\n                          address is added to\n\n                          the list only the first time it occurs.\n\n                          By convention, the first required signer (usually from\n                          the first message)\n\n                          is referred to as the primary signer and pays the fee\n                          for the whole\n\n                          transaction.\n                      memo:\n                        type: string\n                        description: >-\n                          memo is any arbitrary note/comment to be added to the\n                          transaction.\n\n                          WARNING: in clients, any publicly exposed text should\n                          not be called memo,\n\n                          but should be called `note` instead (see\n                          https://github.com/cosmos/cosmos-sdk/issues/9122).\n                      timeout_height:\n                        type: string\n                        format: uint64\n                        title: >-\n                          timeout is the block height after which this\n                          transaction will not\n\n                          be processed by the chain\n                      extension_options:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                        title: >-\n                          extension_options are arbitrary options that can be\n                          added by chains\n\n                          when the default options are not sufficient. If any of\n                          these are present\n\n                          and can't be handled, the transaction will be rejected\n                      non_critical_extension_options:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            type_url:\n                              type: string\n                            value:\n                              type: string\n                              format: byte\n                        title: >-\n                          extension_options are arbitrary options that can be\n                          added by chains\n\n                          when the default options are not sufficient. If any of\n                          these are present\n\n                          and can't be handled, they will be ignored\n                    description: >-\n                      TxBody is the body of a transaction that all signers sign\n                      over.\n                  auth_info:\n                    title: >-\n                      auth_info is the authorization related content of the\n                      transaction,\n\n                      specifically signers, signer modes and fee\n                    type: object\n                    properties:\n                      signer_infos:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            public_key:\n                              type: object\n                              properties:\n                                type_url:\n                                  type: string\n                                value:\n                                  type: string\n                                  format: byte\n                              description: >-\n                                public_key is the public key of the signer. It\n                                is optional for accounts\n\n                                that already exist in state. If unset, the\n                                verifier can use the required \\\n\n                                signer address for this position and lookup the\n                                public key.\n                            mode_info:\n                              title: >-\n                                mode_info describes the signing mode of the\n                                signer and is a nested\n\n                                structure to support nested multisig pubkey's\n                              type: object\n                              properties:\n                                single:\n                                  title: single represents a single signer\n                                  type: object\n                                  properties:\n                                    mode:\n                                      title: >-\n                                        mode is the signing mode of the single\n                                        signer\n                                      type: string\n                                      enum:\n                                        - SIGN_MODE_UNSPECIFIED\n                                        - SIGN_MODE_DIRECT\n                                        - SIGN_MODE_TEXTUAL\n                                        - SIGN_MODE_DIRECT_AUX\n                                        - SIGN_MODE_LEGACY_AMINO_JSON\n                                        - SIGN_MODE_EIP_191\n                                      default: SIGN_MODE_UNSPECIFIED\n                                      description: >-\n                                        SignMode represents a signing mode with\n                                        its own security guarantees.\n\n\n                                        This enum should be considered a\n                                        registry of all known sign modes\n\n                                        in the Cosmos ecosystem. Apps are not\n                                        expected to support all known\n\n                                        sign modes. Apps that would like to\n                                        support custom  sign modes are\n\n                                        encouraged to open a small PR against\n                                        this file to add a new case\n\n                                        to this SignMode enum describing their\n                                        sign mode so that different\n\n                                        apps have a consistent version of this\n                                        enum.\n\n                                         - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                        rejected.\n                                         - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                        verified with raw bytes from Tx.\n                                         - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                        human-readable textual representation on\n                                        top of the binary representation\n\n                                        from SIGN_MODE_DIRECT. It is currently\n                                        not supported.\n                                         - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                        SignDocDirectAux. As opposed to\n                                        SIGN_MODE_DIRECT, this sign mode does\n                                        not\n\n                                        require signers signing over other\n                                        signers' `signer_info`. It also allows\n\n                                        for adding Tips in transactions.\n\n\n                                        Since: cosmos-sdk 0.46\n                                         - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                        Amino JSON and will be removed in the\n                                        future.\n                                         - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                        SDK. Ref:\n                                        https://eips.ethereum.org/EIPS/eip-191\n\n\n                                        Currently, SIGN_MODE_EIP_191 is\n                                        registered as a SignMode enum variant,\n\n                                        but is not implemented on the SDK by\n                                        default. To enable EIP-191, you need\n\n                                        to pass a custom `TxConfig` that has an\n                                        implementation of\n\n                                        `SignModeHandler` for EIP-191. The SDK\n                                        may decide to fully support\n\n                                        EIP-191 in the future.\n\n\n                                        Since: cosmos-sdk 0.45.2\n                                multi:\n                                  title: multi represents a nested multisig signer\n                                  type: object\n                                  properties:\n                                    bitarray:\n                                      title: >-\n                                        bitarray specifies which keys within the\n                                        multisig are signing\n                                      type: object\n                                      properties:\n                                        extra_bits_stored:\n                                          type: integer\n                                          format: int64\n                                        elems:\n                                          type: string\n                                          format: byte\n                                      description: >-\n                                        CompactBitArray is an implementation of\n                                        a space efficient bit array.\n\n                                        This is used to ensure that the encoded\n                                        data takes up a minimal amount of\n\n                                        space after proto encoding.\n\n                                        This is not thread safe, and is not\n                                        intended for concurrent usage.\n                                    mode_infos:\n                                      type: array\n                                      items: {}\n                                      title: >-\n                                        mode_infos is the corresponding modes of\n                                        the signers of the multisig\n\n                                        which could include nested multisig\n                                        public keys\n                              description: >-\n                                ModeInfo describes the signing mode of a single\n                                or nested multisig signer.\n                            sequence:\n                              type: string\n                              format: uint64\n                              description: >-\n                                sequence is the sequence of the account, which\n                                describes the\n\n                                number of committed transactions signed by a\n                                given address. It is used to\n\n                                prevent replay attacks.\n                          description: >-\n                            SignerInfo describes the public key and signing mode\n                            of a single top-level\n\n                            signer.\n                        description: >-\n                          signer_infos defines the signing modes for the\n                          required signers. The number\n\n                          and order of elements must match the required signers\n                          from TxBody's\n\n                          messages. The first element is the primary signer and\n                          the one which pays\n\n                          the fee.\n                      fee:\n                        description: >-\n                          Fee is the fee and gas limit for the transaction. The\n                          first signer is the\n\n                          primary signer and the one which pays the fee. The fee\n                          can be calculated\n\n                          based on the cost of evaluating the body and doing\n                          signature verification\n\n                          of the signers. This can be estimated via simulation.\n                        type: object\n                        properties:\n                          amount:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                denom:\n                                  type: string\n                                amount:\n                                  type: string\n                              description: >-\n                                Coin defines a token with a denomination and an\n                                amount.\n\n\n                                NOTE: The amount field is an Int which\n                                implements the custom method\n\n                                signatures required by gogoproto.\n                            title: amount is the amount of coins to be paid as a fee\n                          gas_limit:\n                            type: string\n                            format: uint64\n                            title: >-\n                              gas_limit is the maximum gas that can be used in\n                              transaction processing\n\n                              before an out of gas error occurs\n                          payer:\n                            type: string\n                            description: >-\n                              if unset, the first signer is responsible for\n                              paying the fees. If set, the specified account\n                              must pay the fees.\n\n                              the payer must be a tx signer (and thus have\n                              signed this field in AuthInfo).\n\n                              setting this field does *not* change the ordering\n                              of required signers for the transaction.\n                          granter:\n                            type: string\n                            title: >-\n                              if set, the fee payer (either the first signer or\n                              the value of the payer field) requests that a fee\n                              grant be used\n\n                              to pay fees instead of the fee payer's own\n                              balance. If an appropriate fee grant does not\n                              exist or the chain does\n\n                              not support fee grants, this will fail\n                      tip:\n                        description: >-\n                          Tip is the optional tip used for transactions fees\n                          paid in another denom.\n\n\n                          This field is ignored if the chain didn't enable tips,\n                          i.e. didn't add the\n\n                          `TipDecorator` in its posthandler.\n\n\n                          Since: cosmos-sdk 0.46\n                        type: object\n                        properties:\n                          amount:\n                            type: array\n                            items:\n                              type: object\n                              properties:\n                                denom:\n                                  type: string\n                                amount:\n                                  type: string\n                              description: >-\n                                Coin defines a token with a denomination and an\n                                amount.\n\n\n                                NOTE: The amount field is an Int which\n                                implements the custom method\n\n                                signatures required by gogoproto.\n                            title: amount is the amount of the tip\n                          tipper:\n                            type: string\n                            title: >-\n                              tipper is the address of the account paying for\n                              the tip\n                    description: >-\n                      AuthInfo describes the fee and signer modes that are used\n                      to sign a\n\n                      transaction.\n                  signatures:\n                    type: array\n                    items:\n                      type: string\n                      format: byte\n                    description: >-\n                      signatures is a list of signatures that matches the length\n                      and order of\n\n                      AuthInfo's signer_infos to allow connecting signature meta\n                      information like\n\n                      public key and signing mode by position.\n                description: Tx is the standard type used for broadcasting transactions.\n              tx_response:\n                type: object\n                properties:\n                  height:\n                    type: string\n                    format: int64\n                    title: The block height\n                  txhash:\n                    type: string\n                    description: The transaction hash.\n                  codespace:\n                    type: string\n                    title: Namespace for the Code\n                  code:\n                    type: integer\n                    format: int64\n                    description: Response code.\n                  data:\n                    type: string\n                    description: Result bytes, if any.\n                  raw_log:\n                    type: string\n                    description: >-\n                      The output of the application's logger (raw string). May\n                      be\n\n                      non-deterministic.\n                  logs:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        msg_index:\n                          type: integer\n                          format: int64\n                        log:\n                          type: string\n                        events:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              type:\n                                type: string\n                              attributes:\n                                type: array\n                                items:\n                                  type: object\n                                  properties:\n                                    key:\n                                      type: string\n                                    value:\n                                      type: string\n                                  description: >-\n                                    Attribute defines an attribute wrapper where\n                                    the key and value are\n\n                                    strings instead of raw bytes.\n                            description: >-\n                              StringEvent defines en Event object wrapper where\n                              all the attributes\n\n                              contain key/value pairs that are strings instead\n                              of raw bytes.\n                          description: >-\n                            Events contains a slice of Event objects that were\n                            emitted during some\n\n                            execution.\n                      description: >-\n                        ABCIMessageLog defines a structure containing an indexed\n                        tx ABCI message log.\n                    description: >-\n                      The output of the application's logger (typed). May be\n                      non-deterministic.\n                  info:\n                    type: string\n                    description: Additional information. May be non-deterministic.\n                  gas_wanted:\n                    type: string\n                    format: int64\n                    description: Amount of gas requested for transaction.\n                  gas_used:\n                    type: string\n                    format: int64\n                    description: Amount of gas consumed by transaction.\n                  tx:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                    description: The request transaction bytes.\n                  timestamp:\n                    type: string\n                    description: >-\n                      Time of the previous block. For heights > 1, it's the\n                      weighted median of\n\n                      the timestamps of the valid votes in the block.LastCommit.\n                      For height == 1,\n\n                      it's genesis time.\n                  events:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type:\n                          type: string\n                        attributes:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              key:\n                                type: string\n                              value:\n                                type: string\n                              index:\n                                type: boolean\n                            description: >-\n                              EventAttribute is a single key-value pair,\n                              associated with an event.\n                      description: >-\n                        Event allows application developers to attach additional\n                        information to\n\n                        ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx\n                        and ResponseDeliverTx.\n\n                        Later, transactions may be queried using these events.\n                    description: >-\n                      Events defines all the events emitted by processing a\n                      transaction. Note,\n\n                      these events include those emitted by processing all the\n                      messages and those\n\n                      emitted from the ante. Whereas Logs contains the events,\n                      with\n\n                      additional metadata, emitted only by processing the\n                      messages.\n\n\n                      Since: cosmos-sdk 0.42.11, 0.44.5, 0.45\n                description: >-\n                  TxResponse defines a structure containing relevant tx data and\n                  metadata. The\n\n                  tags are stringified and the log is JSON decoded.\n            description: GetTxResponse is the response type for the Service.GetTx method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: hash\n          description: hash is the tx hash to query, encoded as a hex string.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/clock/v1/contracts:\n    get:\n      summary: ClockContracts\n      operationId: ClockContracts_R3OXP\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              clock_contracts:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    contract_address:\n                      type: string\n                      description: The address of the contract.\n                    is_jailed:\n                      type: boolean\n                      description: The jail status of the contract.\n                  description: |-\n                    This object is used to store the contract address and the\n                    jail status of the contract.\n                description: clock_contracts are the clock contracts.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: >-\n              QueryClockContractsResponse is the response type for the\n              Query/ClockContracts\n\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cyber/clock/v1/contracts/{contract_address}:\n    get:\n      summary: ClockContract\n      operationId: ClockContract_U8RUX\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              clock_contract:\n                type: object\n                properties:\n                  contract_address:\n                    type: string\n                    description: The address of the contract.\n                  is_jailed:\n                    type: boolean\n                    description: The jail status of the contract.\n                description: |-\n                  This object is used to store the contract address and the\n                  jail status of the contract.\n            description: >-\n              QueryClockContractResponse is the response type for the\n              Query/ClockContract\n\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: contract_address\n          description: contract_address is the address of the contract to query.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/clock/v1/params:\n    get:\n      summary: Params\n      operationId: Params_7NU4D\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              params:\n                type: object\n                properties:\n                  contract_gas_limit:\n                    type: string\n                    format: uint64\n                    description: >-\n                      contract_gas_limit defines the maximum amount of gas that\n                      can be used by a\n\n                      contract.\n                description: Params defines the set of module parameters.\n            description: >-\n              QueryClockContractsResponse is the response type for the\n              Query/ClockContracts\n\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /ibc/core/channel/v1/channels:\n    get:\n      summary: Channels queries all the IBC channels of a chain.\n      operationId: Channels_XUUVY\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              channels:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    state:\n                      title: current state of the channel end\n                      type: string\n                      enum:\n                        - STATE_UNINITIALIZED_UNSPECIFIED\n                        - STATE_INIT\n                        - STATE_TRYOPEN\n                        - STATE_OPEN\n                        - STATE_CLOSED\n                      default: STATE_UNINITIALIZED_UNSPECIFIED\n                      description: >-\n                        State defines if a channel is in one of the following\n                        states:\n\n                        CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n                         - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n                         - STATE_INIT: A channel has just started the opening handshake.\n                         - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n                         - STATE_OPEN: A channel has completed the handshake. Open channels are\n                        ready to send and receive packets.\n                         - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\n                        packets.\n                    ordering:\n                      title: whether the channel is ordered or unordered\n                      type: string\n                      enum:\n                        - ORDER_NONE_UNSPECIFIED\n                        - ORDER_UNORDERED\n                        - ORDER_ORDERED\n                      default: ORDER_NONE_UNSPECIFIED\n                      description: >-\n                        - ORDER_NONE_UNSPECIFIED: zero-value for channel\n                        ordering\n                         - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\n                        which they were sent.\n                         - ORDER_ORDERED: packets are delivered exactly in the order which they were sent\n                    counterparty:\n                      title: counterparty channel end\n                      type: object\n                      properties:\n                        port_id:\n                          type: string\n                          description: >-\n                            port on the counterparty chain which owns the other\n                            end of the channel.\n                        channel_id:\n                          type: string\n                          title: channel end on the counterparty chain\n                    connection_hops:\n                      type: array\n                      items:\n                        type: string\n                      title: >-\n                        list of connection identifiers, in order, along which\n                        packets sent on\n\n                        this channel will travel\n                    version:\n                      type: string\n                      title: >-\n                        opaque channel version, which is agreed upon during the\n                        handshake\n                    port_id:\n                      type: string\n                      title: port identifier\n                    channel_id:\n                      type: string\n                      title: channel identifier\n                  description: >-\n                    IdentifiedChannel defines a channel with additional port and\n                    channel\n\n                    identifier fields.\n                description: list of stored channels of the chain.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n                title: pagination response\n              height:\n                title: query block height\n                type: object\n                properties:\n                  revision_number:\n                    type: string\n                    format: uint64\n                    title: the revision that the client is currently on\n                  revision_height:\n                    type: string\n                    format: uint64\n                    title: the height within the given revision\n                description: >-\n                  Normally the RevisionHeight is incremented at each height\n                  while keeping\n\n                  RevisionNumber the same. However some consensus algorithms may\n                  choose to\n\n                  reset the height in certain conditions e.g. hard forks,\n                  state-machine\n\n                  breaking changes In these cases, the RevisionNumber is\n                  incremented so that\n\n                  height continues to be monitonically increasing even as the\n                  RevisionHeight\n\n                  gets reset\n            description: >-\n              QueryChannelsResponse is the response type for the Query/Channels\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}:\n    get:\n      summary: Channel queries an IBC Channel.\n      operationId: Channel_ENVYK\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              channel:\n                title: channel associated with the request identifiers\n                type: object\n                properties:\n                  state:\n                    title: current state of the channel end\n                    type: string\n                    enum:\n                      - STATE_UNINITIALIZED_UNSPECIFIED\n                      - STATE_INIT\n                      - STATE_TRYOPEN\n                      - STATE_OPEN\n                      - STATE_CLOSED\n                    default: STATE_UNINITIALIZED_UNSPECIFIED\n                    description: >-\n                      State defines if a channel is in one of the following\n                      states:\n\n                      CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n                       - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n                       - STATE_INIT: A channel has just started the opening handshake.\n                       - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n                       - STATE_OPEN: A channel has completed the handshake. Open channels are\n                      ready to send and receive packets.\n                       - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\n                      packets.\n                  ordering:\n                    title: whether the channel is ordered or unordered\n                    type: string\n                    enum:\n                      - ORDER_NONE_UNSPECIFIED\n                      - ORDER_UNORDERED\n                      - ORDER_ORDERED\n                    default: ORDER_NONE_UNSPECIFIED\n                    description: |-\n                      - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering\n                       - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\n                      which they were sent.\n                       - ORDER_ORDERED: packets are delivered exactly in the order which they were sent\n                  counterparty:\n                    title: counterparty channel end\n                    type: object\n                    properties:\n                      port_id:\n                        type: string\n                        description: >-\n                          port on the counterparty chain which owns the other\n                          end of the channel.\n                      channel_id:\n                        type: string\n                        title: channel end on the counterparty chain\n                  connection_hops:\n                    type: array\n                    items:\n                      type: string\n                    title: >-\n                      list of connection identifiers, in order, along which\n                      packets sent on\n\n                      this channel will travel\n                  version:\n                    type: string\n                    title: >-\n                      opaque channel version, which is agreed upon during the\n                      handshake\n                description: >-\n                  Channel defines pipeline for exactly-once packet delivery\n                  between specific\n\n                  modules on separate blockchains, which has at least one end\n                  capable of\n\n                  sending packets and one end capable of receiving packets.\n              proof:\n                type: string\n                format: byte\n                title: merkle proof of existence\n              proof_height:\n                title: height at which the proof was retrieved\n                type: object\n                properties:\n                  revision_number:\n                    type: string\n                    format: uint64\n                    title: the revision that the client is currently on\n                  revision_height:\n                    type: string\n                    format: uint64\n                    title: the height within the given revision\n                description: >-\n                  Normally the RevisionHeight is incremented at each height\n                  while keeping\n\n                  RevisionNumber the same. However some consensus algorithms may\n                  choose to\n\n                  reset the height in certain conditions e.g. hard forks,\n                  state-machine\n\n                  breaking changes In these cases, the RevisionNumber is\n                  incremented so that\n\n                  height continues to be monitonically increasing even as the\n                  RevisionHeight\n\n                  gets reset\n            description: >-\n              QueryChannelResponse is the response type for the Query/Channel\n              RPC method.\n\n              Besides the Channel end, it includes a proof and the height from\n              which the\n\n              proof was retrieved.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/client_state:\n    get:\n      summary: >-\n        ChannelClientState queries for the client state for the channel\n        associated\n\n        with the provided channel identifiers.\n      operationId: ChannelClientState_928AQ\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              identified_client_state:\n                title: client state associated with the channel\n                type: object\n                properties:\n                  client_id:\n                    type: string\n                    title: client identifier\n                  client_state:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                    title: client state\n                description: >-\n                  IdentifiedClientState defines a client state with an\n                  additional client\n\n                  identifier field.\n              proof:\n                type: string\n                format: byte\n                title: merkle proof of existence\n              proof_height:\n                title: height at which the proof was retrieved\n                type: object\n                properties:\n                  revision_number:\n                    type: string\n                    format: uint64\n                    title: the revision that the client is currently on\n                  revision_height:\n                    type: string\n                    format: uint64\n                    title: the height within the given revision\n                description: >-\n                  Normally the RevisionHeight is incremented at each height\n                  while keeping\n\n                  RevisionNumber the same. However some consensus algorithms may\n                  choose to\n\n                  reset the height in certain conditions e.g. hard forks,\n                  state-machine\n\n                  breaking changes In these cases, the RevisionNumber is\n                  incremented so that\n\n                  height continues to be monitonically increasing even as the\n                  RevisionHeight\n\n                  gets reset\n            title: |-\n              QueryChannelClientStateResponse is the Response type for the\n              Query/QueryChannelClientState RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/consensus_state/revision/{revision_number}/height/{revision_height}:\n    get:\n      summary: |-\n        ChannelConsensusState queries for the consensus state for the channel\n        associated with the provided channel identifiers.\n      operationId: ChannelConsensusState_TYNC0\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              consensus_state:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n                title: consensus state associated with the channel\n              client_id:\n                type: string\n                title: client ID associated with the consensus state\n              proof:\n                type: string\n                format: byte\n                title: merkle proof of existence\n              proof_height:\n                title: height at which the proof was retrieved\n                type: object\n                properties:\n                  revision_number:\n                    type: string\n                    format: uint64\n                    title: the revision that the client is currently on\n                  revision_height:\n                    type: string\n                    format: uint64\n                    title: the height within the given revision\n                description: >-\n                  Normally the RevisionHeight is incremented at each height\n                  while keeping\n\n                  RevisionNumber the same. However some consensus algorithms may\n                  choose to\n\n                  reset the height in certain conditions e.g. hard forks,\n                  state-machine\n\n                  breaking changes In these cases, the RevisionNumber is\n                  incremented so that\n\n                  height continues to be monitonically increasing even as the\n                  RevisionHeight\n\n                  gets reset\n            title: |-\n              QueryChannelClientStateResponse is the Response type for the\n              Query/QueryChannelClientState RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          type: string\n        - name: revision_number\n          description: revision number of the consensus state\n          in: path\n          required: true\n          type: string\n          format: uint64\n        - name: revision_height\n          description: revision height of the consensus state\n          in: path\n          required: true\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence:\n    get:\n      summary: >-\n        NextSequenceReceive returns the next receive sequence for a given\n        channel.\n      operationId: NextSequenceReceive_GMBZC\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              next_sequence_receive:\n                type: string\n                format: uint64\n                title: next sequence receive number\n              proof:\n                type: string\n                format: byte\n                title: merkle proof of existence\n              proof_height:\n                title: height at which the proof was retrieved\n                type: object\n                properties:\n                  revision_number:\n                    type: string\n                    format: uint64\n                    title: the revision that the client is currently on\n                  revision_height:\n                    type: string\n                    format: uint64\n                    title: the height within the given revision\n                description: >-\n                  Normally the RevisionHeight is incremented at each height\n                  while keeping\n\n                  RevisionNumber the same. However some consensus algorithms may\n                  choose to\n\n                  reset the height in certain conditions e.g. hard forks,\n                  state-machine\n\n                  breaking changes In these cases, the RevisionNumber is\n                  incremented so that\n\n                  height continues to be monitonically increasing even as the\n                  RevisionHeight\n\n                  gets reset\n            title: |-\n              QuerySequenceResponse is the request type for the\n              Query/QueryNextSequenceReceiveResponse RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements:\n    get:\n      summary: >-\n        PacketAcknowledgements returns all the packet acknowledgements\n        associated\n\n        with a channel.\n      operationId: PacketAcknowledgements_L275E\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              acknowledgements:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    port_id:\n                      type: string\n                      description: channel port identifier.\n                    channel_id:\n                      type: string\n                      description: channel unique identifier.\n                    sequence:\n                      type: string\n                      format: uint64\n                      description: packet sequence.\n                    data:\n                      type: string\n                      format: byte\n                      description: embedded data that represents packet state.\n                  description: >-\n                    PacketState defines the generic type necessary to retrieve\n                    and store\n\n                    packet commitments, acknowledgements, and receipts.\n\n                    Caller is responsible for knowing the context necessary to\n                    interpret this\n\n                    state as a commitment, acknowledgement, or a receipt.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n                title: pagination response\n              height:\n                title: query block height\n                type: object\n                properties:\n                  revision_number:\n                    type: string\n                    format: uint64\n                    title: the revision that the client is currently on\n                  revision_height:\n                    type: string\n                    format: uint64\n                    title: the height within the given revision\n                description: >-\n                  Normally the RevisionHeight is incremented at each height\n                  while keeping\n\n                  RevisionNumber the same. However some consensus algorithms may\n                  choose to\n\n                  reset the height in certain conditions e.g. hard forks,\n                  state-machine\n\n                  breaking changes In these cases, the RevisionNumber is\n                  incremented so that\n\n                  height continues to be monitonically increasing even as the\n                  RevisionHeight\n\n                  gets reset\n            title: |-\n              QueryPacketAcknowledgemetsResponse is the request type for the\n              Query/QueryPacketAcknowledgements RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n        - name: packet_commitment_sequences\n          description: list of packet sequences.\n          in: query\n          required: false\n          type: array\n          items:\n            type: string\n            format: uint64\n          collectionFormat: multi\n      tags:\n        - gRPC Gateway API\n  /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}:\n    get:\n      summary: PacketAcknowledgement queries a stored packet acknowledgement hash.\n      operationId: PacketAcknowledgement_ZZJJ8\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              acknowledgement:\n                type: string\n                format: byte\n                title: packet associated with the request fields\n              proof:\n                type: string\n                format: byte\n                title: merkle proof of existence\n              proof_height:\n                title: height at which the proof was retrieved\n                type: object\n                properties:\n                  revision_number:\n                    type: string\n                    format: uint64\n                    title: the revision that the client is currently on\n                  revision_height:\n                    type: string\n                    format: uint64\n                    title: the height within the given revision\n                description: >-\n                  Normally the RevisionHeight is incremented at each height\n                  while keeping\n\n                  RevisionNumber the same. However some consensus algorithms may\n                  choose to\n\n                  reset the height in certain conditions e.g. hard forks,\n                  state-machine\n\n                  breaking changes In these cases, the RevisionNumber is\n                  incremented so that\n\n                  height continues to be monitonically increasing even as the\n                  RevisionHeight\n\n                  gets reset\n            title: >-\n              QueryPacketAcknowledgementResponse defines the client query\n              response for a\n\n              packet which also includes a proof and the height from which the\n\n              proof was retrieved\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          type: string\n        - name: sequence\n          description: packet sequence\n          in: path\n          required: true\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments:\n    get:\n      summary: |-\n        PacketCommitments returns all the packet commitments hashes associated\n        with a channel.\n      operationId: PacketCommitments_LZDD2\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              commitments:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    port_id:\n                      type: string\n                      description: channel port identifier.\n                    channel_id:\n                      type: string\n                      description: channel unique identifier.\n                    sequence:\n                      type: string\n                      format: uint64\n                      description: packet sequence.\n                    data:\n                      type: string\n                      format: byte\n                      description: embedded data that represents packet state.\n                  description: >-\n                    PacketState defines the generic type necessary to retrieve\n                    and store\n\n                    packet commitments, acknowledgements, and receipts.\n\n                    Caller is responsible for knowing the context necessary to\n                    interpret this\n\n                    state as a commitment, acknowledgement, or a receipt.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n                title: pagination response\n              height:\n                title: query block height\n                type: object\n                properties:\n                  revision_number:\n                    type: string\n                    format: uint64\n                    title: the revision that the client is currently on\n                  revision_height:\n                    type: string\n                    format: uint64\n                    title: the height within the given revision\n                description: >-\n                  Normally the RevisionHeight is incremented at each height\n                  while keeping\n\n                  RevisionNumber the same. However some consensus algorithms may\n                  choose to\n\n                  reset the height in certain conditions e.g. hard forks,\n                  state-machine\n\n                  breaking changes In these cases, the RevisionNumber is\n                  incremented so that\n\n                  height continues to be monitonically increasing even as the\n                  RevisionHeight\n\n                  gets reset\n            title: |-\n              QueryPacketCommitmentsResponse is the request type for the\n              Query/QueryPacketCommitments RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks:\n    get:\n      summary: >-\n        UnreceivedAcks returns all the unreceived IBC acknowledgements\n        associated\n\n        with a channel and sequences.\n      operationId: UnreceivedAcks_GU76R\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              sequences:\n                type: array\n                items:\n                  type: string\n                  format: uint64\n                title: list of unreceived acknowledgement sequences\n              height:\n                title: query block height\n                type: object\n                properties:\n                  revision_number:\n                    type: string\n                    format: uint64\n                    title: the revision that the client is currently on\n                  revision_height:\n                    type: string\n                    format: uint64\n                    title: the height within the given revision\n                description: >-\n                  Normally the RevisionHeight is incremented at each height\n                  while keeping\n\n                  RevisionNumber the same. However some consensus algorithms may\n                  choose to\n\n                  reset the height in certain conditions e.g. hard forks,\n                  state-machine\n\n                  breaking changes In these cases, the RevisionNumber is\n                  incremented so that\n\n                  height continues to be monitonically increasing even as the\n                  RevisionHeight\n\n                  gets reset\n            title: |-\n              QueryUnreceivedAcksResponse is the response type for the\n              Query/UnreceivedAcks RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          type: string\n        - name: packet_ack_sequences\n          description: list of acknowledgement sequences\n          in: path\n          required: true\n          type: array\n          items:\n            type: string\n            format: uint64\n          collectionFormat: csv\n          minItems: 1\n      tags:\n        - gRPC Gateway API\n  /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/unreceived_packets:\n    get:\n      summary: >-\n        UnreceivedPackets returns all the unreceived IBC packets associated with\n        a\n\n        channel and sequences.\n      operationId: UnreceivedPackets_13T8R\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              sequences:\n                type: array\n                items:\n                  type: string\n                  format: uint64\n                title: list of unreceived packet sequences\n              height:\n                title: query block height\n                type: object\n                properties:\n                  revision_number:\n                    type: string\n                    format: uint64\n                    title: the revision that the client is currently on\n                  revision_height:\n                    type: string\n                    format: uint64\n                    title: the height within the given revision\n                description: >-\n                  Normally the RevisionHeight is incremented at each height\n                  while keeping\n\n                  RevisionNumber the same. However some consensus algorithms may\n                  choose to\n\n                  reset the height in certain conditions e.g. hard forks,\n                  state-machine\n\n                  breaking changes In these cases, the RevisionNumber is\n                  incremented so that\n\n                  height continues to be monitonically increasing even as the\n                  RevisionHeight\n\n                  gets reset\n            title: |-\n              QueryUnreceivedPacketsResponse is the response type for the\n              Query/UnreceivedPacketCommitments RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          type: string\n        - name: packet_commitment_sequences\n          description: list of packet sequences\n          in: path\n          required: true\n          type: array\n          items:\n            type: string\n            format: uint64\n          collectionFormat: csv\n          minItems: 1\n      tags:\n        - gRPC Gateway API\n  /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence}:\n    get:\n      summary: PacketCommitment queries a stored packet commitment hash.\n      operationId: PacketCommitment_4UP5U\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              commitment:\n                type: string\n                format: byte\n                title: packet associated with the request fields\n              proof:\n                type: string\n                format: byte\n                title: merkle proof of existence\n              proof_height:\n                title: height at which the proof was retrieved\n                type: object\n                properties:\n                  revision_number:\n                    type: string\n                    format: uint64\n                    title: the revision that the client is currently on\n                  revision_height:\n                    type: string\n                    format: uint64\n                    title: the height within the given revision\n                description: >-\n                  Normally the RevisionHeight is incremented at each height\n                  while keeping\n\n                  RevisionNumber the same. However some consensus algorithms may\n                  choose to\n\n                  reset the height in certain conditions e.g. hard forks,\n                  state-machine\n\n                  breaking changes In these cases, the RevisionNumber is\n                  incremented so that\n\n                  height continues to be monitonically increasing even as the\n                  RevisionHeight\n\n                  gets reset\n            title: >-\n              QueryPacketCommitmentResponse defines the client query response\n              for a packet\n\n              which also includes a proof and the height from which the proof\n              was\n\n              retrieved\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          type: string\n        - name: sequence\n          description: packet sequence\n          in: path\n          required: true\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence}:\n    get:\n      summary: >-\n        PacketReceipt queries if a given packet sequence has been received on\n        the\n\n        queried chain\n      operationId: PacketReceipt_907ZV\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              received:\n                type: boolean\n                title: success flag for if receipt exists\n              proof:\n                type: string\n                format: byte\n                title: merkle proof of existence\n              proof_height:\n                title: height at which the proof was retrieved\n                type: object\n                properties:\n                  revision_number:\n                    type: string\n                    format: uint64\n                    title: the revision that the client is currently on\n                  revision_height:\n                    type: string\n                    format: uint64\n                    title: the height within the given revision\n                description: >-\n                  Normally the RevisionHeight is incremented at each height\n                  while keeping\n\n                  RevisionNumber the same. However some consensus algorithms may\n                  choose to\n\n                  reset the height in certain conditions e.g. hard forks,\n                  state-machine\n\n                  breaking changes In these cases, the RevisionNumber is\n                  incremented so that\n\n                  height continues to be monitonically increasing even as the\n                  RevisionHeight\n\n                  gets reset\n            title: >-\n              QueryPacketReceiptResponse defines the client query response for a\n              packet\n\n              receipt which also includes a proof, and the height from which the\n              proof was\n\n              retrieved\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: channel_id\n          description: channel unique identifier\n          in: path\n          required: true\n          type: string\n        - name: port_id\n          description: port unique identifier\n          in: path\n          required: true\n          type: string\n        - name: sequence\n          description: packet sequence\n          in: path\n          required: true\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /ibc/core/channel/v1/connections/{connection}/channels:\n    get:\n      summary: |-\n        ConnectionChannels queries all the channels associated with a connection\n        end.\n      operationId: ConnectionChannels_DKEMY\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              channels:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    state:\n                      title: current state of the channel end\n                      type: string\n                      enum:\n                        - STATE_UNINITIALIZED_UNSPECIFIED\n                        - STATE_INIT\n                        - STATE_TRYOPEN\n                        - STATE_OPEN\n                        - STATE_CLOSED\n                      default: STATE_UNINITIALIZED_UNSPECIFIED\n                      description: >-\n                        State defines if a channel is in one of the following\n                        states:\n\n                        CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n                         - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n                         - STATE_INIT: A channel has just started the opening handshake.\n                         - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n                         - STATE_OPEN: A channel has completed the handshake. Open channels are\n                        ready to send and receive packets.\n                         - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\n                        packets.\n                    ordering:\n                      title: whether the channel is ordered or unordered\n                      type: string\n                      enum:\n                        - ORDER_NONE_UNSPECIFIED\n                        - ORDER_UNORDERED\n                        - ORDER_ORDERED\n                      default: ORDER_NONE_UNSPECIFIED\n                      description: >-\n                        - ORDER_NONE_UNSPECIFIED: zero-value for channel\n                        ordering\n                         - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\n                        which they were sent.\n                         - ORDER_ORDERED: packets are delivered exactly in the order which they were sent\n                    counterparty:\n                      title: counterparty channel end\n                      type: object\n                      properties:\n                        port_id:\n                          type: string\n                          description: >-\n                            port on the counterparty chain which owns the other\n                            end of the channel.\n                        channel_id:\n                          type: string\n                          title: channel end on the counterparty chain\n                    connection_hops:\n                      type: array\n                      items:\n                        type: string\n                      title: >-\n                        list of connection identifiers, in order, along which\n                        packets sent on\n\n                        this channel will travel\n                    version:\n                      type: string\n                      title: >-\n                        opaque channel version, which is agreed upon during the\n                        handshake\n                    port_id:\n                      type: string\n                      title: port identifier\n                    channel_id:\n                      type: string\n                      title: channel identifier\n                  description: >-\n                    IdentifiedChannel defines a channel with additional port and\n                    channel\n\n                    identifier fields.\n                description: list of channels associated with a connection.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n                title: pagination response\n              height:\n                title: query block height\n                type: object\n                properties:\n                  revision_number:\n                    type: string\n                    format: uint64\n                    title: the revision that the client is currently on\n                  revision_height:\n                    type: string\n                    format: uint64\n                    title: the height within the given revision\n                description: >-\n                  Normally the RevisionHeight is incremented at each height\n                  while keeping\n\n                  RevisionNumber the same. However some consensus algorithms may\n                  choose to\n\n                  reset the height in certain conditions e.g. hard forks,\n                  state-machine\n\n                  breaking changes In these cases, the RevisionNumber is\n                  incremented so that\n\n                  height continues to be monitonically increasing even as the\n                  RevisionHeight\n\n                  gets reset\n            title: |-\n              QueryConnectionChannelsResponse is the Response type for the\n              Query/QueryConnectionChannels RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: connection\n          description: connection unique identifier\n          in: path\n          required: true\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/auth/v1beta1/account_info/{address}:\n    get:\n      summary: AccountInfo queries account info which is common to all account types.\n      description: 'Since: cosmos-sdk 0.47'\n      operationId: AccountInfo_J8GK9\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              info:\n                description: info is the account info which is represented by BaseAccount.\n                type: object\n                properties:\n                  address:\n                    type: string\n                  pub_key:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                  account_number:\n                    type: string\n                    format: uint64\n                  sequence:\n                    type: string\n                    format: uint64\n            description: |-\n              QueryAccountInfoResponse is the Query/AccountInfo response type.\n\n              Since: cosmos-sdk 0.47\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: address\n          description: address is the account address string.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/auth/v1beta1/accounts:\n    get:\n      summary: Accounts returns all the existing accounts.\n      description: >-\n        When called from another module, this query might consume a high amount\n        of\n\n        gas if the pagination field is incorrectly set.\n\n\n        Since: cosmos-sdk 0.43\n      operationId: Accounts_EI4FZ\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              accounts:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n                title: accounts are the existing accounts\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: >-\n              QueryAccountsResponse is the response type for the Query/Accounts\n              RPC method.\n\n\n              Since: cosmos-sdk 0.43\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/auth/v1beta1/accounts/{address}:\n    get:\n      summary: Account returns account details based on address.\n      operationId: Account_GVO8V\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              account:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n                description: account defines the account of the corresponding address.\n            description: >-\n              QueryAccountResponse is the response type for the Query/Account\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: address\n          description: address defines the address to query for.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/auth/v1beta1/address_by_id/{id}:\n    get:\n      summary: AccountAddressByID returns account address based on account number.\n      description: 'Since: cosmos-sdk 0.46.2'\n      operationId: AccountAddressByID_OE1HP\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              account_address:\n                type: string\n            description: 'Since: cosmos-sdk 0.46.2'\n            title: >-\n              QueryAccountAddressByIDResponse is the response type for\n              AccountAddressByID rpc method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: id\n          description: |-\n            Deprecated, use account_id instead\n\n            id is the account number of the address to be queried. This field\n            should have been an uint64 (like all account numbers), and will be\n            updated to uint64 in a future version of the auth query.\n          in: path\n          required: true\n          type: string\n          format: int64\n        - name: account_id\n          description: |-\n            account_id is the account number of the address to be queried.\n\n            Since: cosmos-sdk 0.47\n          in: query\n          required: false\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /cosmos/auth/v1beta1/bech32:\n    get:\n      summary: Bech32Prefix queries bech32Prefix\n      description: 'Since: cosmos-sdk 0.46'\n      operationId: Bech32Prefix_1OIJM\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              bech32_prefix:\n                type: string\n            description: >-\n              Bech32PrefixResponse is the response type for Bech32Prefix rpc\n              method.\n\n\n              Since: cosmos-sdk 0.46\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/auth/v1beta1/bech32/{address_bytes}:\n    get:\n      summary: AddressBytesToString converts Account Address bytes to string\n      description: 'Since: cosmos-sdk 0.46'\n      operationId: AddressBytesToString_P2TYK\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              address_string:\n                type: string\n            description: >-\n              AddressBytesToStringResponse is the response type for\n              AddressString rpc method.\n\n\n              Since: cosmos-sdk 0.46\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: address_bytes\n          in: path\n          required: true\n          type: string\n          format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/auth/v1beta1/bech32/{address_string}:\n    get:\n      summary: AddressStringToBytes converts Address string to bytes\n      description: 'Since: cosmos-sdk 0.46'\n      operationId: AddressStringToBytes_2ADP0\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              address_bytes:\n                type: string\n                format: byte\n            description: >-\n              AddressStringToBytesResponse is the response type for AddressBytes\n              rpc method.\n\n\n              Since: cosmos-sdk 0.46\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: address_string\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/auth/v1beta1/module_accounts:\n    get:\n      summary: ModuleAccounts returns all the existing module accounts.\n      description: 'Since: cosmos-sdk 0.46'\n      operationId: ModuleAccounts_A46V7\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              accounts:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n            description: >-\n              QueryModuleAccountsResponse is the response type for the\n              Query/ModuleAccounts RPC method.\n\n\n              Since: cosmos-sdk 0.46\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/auth/v1beta1/module_accounts/{name}:\n    get:\n      summary: ModuleAccountByName returns the module account info by module name\n      operationId: ModuleAccountByName_R830P\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              account:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n            description: >-\n              QueryModuleAccountByNameResponse is the response type for the\n              Query/ModuleAccountByName RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: name\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/auth/v1beta1/params:\n    get:\n      summary: Params queries all parameters.\n      operationId: Params_NV54V\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              params:\n                description: params defines the parameters of the module.\n                type: object\n                properties:\n                  max_memo_characters:\n                    type: string\n                    format: uint64\n                  tx_sig_limit:\n                    type: string\n                    format: uint64\n                  tx_size_cost_per_byte:\n                    type: string\n                    format: uint64\n                  sig_verify_cost_ed25519:\n                    type: string\n                    format: uint64\n                  sig_verify_cost_secp256k1:\n                    type: string\n                    format: uint64\n            description: >-\n              QueryParamsResponse is the response type for the Query/Params RPC\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/evidence/v1beta1/evidence:\n    get:\n      summary: AllEvidence queries all evidence.\n      operationId: AllEvidence_WTNNZ\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              evidence:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n                description: evidence returns all evidences.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: >-\n              QueryAllEvidenceResponse is the response type for the\n              Query/AllEvidence RPC\n\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/evidence/v1beta1/evidence/{hash}:\n    get:\n      summary: Evidence queries evidence based on evidence hash.\n      operationId: Evidence_VCI4U\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              evidence:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n                description: evidence returns the requested evidence.\n            description: >-\n              QueryEvidenceResponse is the response type for the Query/Evidence\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: hash\n          description: |-\n            hash defines the evidence hash of the requested evidence.\n\n            Since: cosmos-sdk 0.47\n          in: path\n          required: true\n          type: string\n        - name: evidence_hash\n          description: |-\n            evidence_hash defines the hash of the requested evidence.\n            Deprecated: Use hash, a HEX encoded string, instead.\n          in: query\n          required: false\n          type: string\n          format: byte\n      tags:\n        - gRPC Gateway API\n  /ibc/core/client/v1/client_states:\n    get:\n      summary: ClientStates queries all the IBC light clients of a chain.\n      operationId: ClientStates_G5T1X\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              client_states:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    client_id:\n                      type: string\n                      title: client identifier\n                    client_state:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                      title: client state\n                  description: >-\n                    IdentifiedClientState defines a client state with an\n                    additional client\n\n                    identifier field.\n                description: list of stored ClientStates of the chain.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n                title: pagination response\n            description: >-\n              QueryClientStatesResponse is the response type for the\n              Query/ClientStates RPC\n\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /ibc/core/client/v1/client_states/{client_id}:\n    get:\n      summary: ClientState queries an IBC light client.\n      operationId: ClientState_ET75Z\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              client_state:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n                title: client state associated with the request identifier\n              proof:\n                type: string\n                format: byte\n                title: merkle proof of existence\n              proof_height:\n                title: height at which the proof was retrieved\n                type: object\n                properties:\n                  revision_number:\n                    type: string\n                    format: uint64\n                    title: the revision that the client is currently on\n                  revision_height:\n                    type: string\n                    format: uint64\n                    title: the height within the given revision\n                description: >-\n                  Normally the RevisionHeight is incremented at each height\n                  while keeping\n\n                  RevisionNumber the same. However some consensus algorithms may\n                  choose to\n\n                  reset the height in certain conditions e.g. hard forks,\n                  state-machine\n\n                  breaking changes In these cases, the RevisionNumber is\n                  incremented so that\n\n                  height continues to be monitonically increasing even as the\n                  RevisionHeight\n\n                  gets reset\n            description: >-\n              QueryClientStateResponse is the response type for the\n              Query/ClientState RPC\n\n              method. Besides the client state, it includes a proof and the\n              height from\n\n              which the proof was retrieved.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: client_id\n          description: client state unique identifier\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /ibc/core/client/v1/client_status/{client_id}:\n    get:\n      summary: Status queries the status of an IBC client.\n      operationId: ClientStatus_I48L1\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              status:\n                type: string\n            description: >-\n              QueryClientStatusResponse is the response type for the\n              Query/ClientStatus RPC\n\n              method. It returns the current status of the IBC client.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: client_id\n          description: client unique identifier\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /ibc/core/client/v1/consensus_states/{client_id}:\n    get:\n      summary: |-\n        ConsensusStates queries all the consensus state associated with a given\n        client.\n      operationId: ConsensusStates_OEIZR\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              consensus_states:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    height:\n                      title: consensus state height\n                      type: object\n                      properties:\n                        revision_number:\n                          type: string\n                          format: uint64\n                          title: the revision that the client is currently on\n                        revision_height:\n                          type: string\n                          format: uint64\n                          title: the height within the given revision\n                      description: >-\n                        Normally the RevisionHeight is incremented at each\n                        height while keeping\n\n                        RevisionNumber the same. However some consensus\n                        algorithms may choose to\n\n                        reset the height in certain conditions e.g. hard forks,\n                        state-machine\n\n                        breaking changes In these cases, the RevisionNumber is\n                        incremented so that\n\n                        height continues to be monitonically increasing even as\n                        the RevisionHeight\n\n                        gets reset\n                    consensus_state:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                      title: consensus state\n                  description: >-\n                    ConsensusStateWithHeight defines a consensus state with an\n                    additional height\n\n                    field.\n                title: consensus states associated with the identifier\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n                title: pagination response\n            title: |-\n              QueryConsensusStatesResponse is the response type for the\n              Query/ConsensusStates RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: client_id\n          description: client identifier\n          in: path\n          required: true\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /ibc/core/client/v1/consensus_states/{client_id}/heights:\n    get:\n      summary: >-\n        ConsensusStateHeights queries the height of every consensus states\n        associated with a given client.\n      operationId: ConsensusStateHeights_03B71\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              consensus_state_heights:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    revision_number:\n                      type: string\n                      format: uint64\n                      title: the revision that the client is currently on\n                    revision_height:\n                      type: string\n                      format: uint64\n                      title: the height within the given revision\n                  description: >-\n                    Normally the RevisionHeight is incremented at each height\n                    while keeping\n\n                    RevisionNumber the same. However some consensus algorithms\n                    may choose to\n\n                    reset the height in certain conditions e.g. hard forks,\n                    state-machine\n\n                    breaking changes In these cases, the RevisionNumber is\n                    incremented so that\n\n                    height continues to be monitonically increasing even as the\n                    RevisionHeight\n\n                    gets reset\n                  title: >-\n                    Height is a monotonically increasing data type\n\n                    that can be compared against another Height for the purposes\n                    of updating and\n\n                    freezing clients\n                title: consensus state heights\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n                title: pagination response\n            title: |-\n              QueryConsensusStateHeightsResponse is the response type for the\n              Query/ConsensusStateHeights RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: client_id\n          description: client identifier\n          in: path\n          required: true\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /ibc/core/client/v1/consensus_states/{client_id}/revision/{revision_number}/height/{revision_height}:\n    get:\n      summary: >-\n        ConsensusState queries a consensus state associated with a client state\n        at\n\n        a given height.\n      operationId: ConsensusState_AYG3G\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              consensus_state:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n                title: >-\n                  consensus state associated with the client identifier at the\n                  given height\n              proof:\n                type: string\n                format: byte\n                title: merkle proof of existence\n              proof_height:\n                type: object\n                properties:\n                  revision_number:\n                    type: string\n                    format: uint64\n                    title: the revision that the client is currently on\n                  revision_height:\n                    type: string\n                    format: uint64\n                    title: the height within the given revision\n                description: >-\n                  Normally the RevisionHeight is incremented at each height\n                  while keeping\n\n                  RevisionNumber the same. However some consensus algorithms may\n                  choose to\n\n                  reset the height in certain conditions e.g. hard forks,\n                  state-machine\n\n                  breaking changes In these cases, the RevisionNumber is\n                  incremented so that\n\n                  height continues to be monitonically increasing even as the\n                  RevisionHeight\n\n                  gets reset\n                title: >-\n                  Height is a monotonically increasing data type\n\n                  that can be compared against another Height for the purposes\n                  of updating and\n\n                  freezing clients\n            title: >-\n              QueryConsensusStateResponse is the response type for the\n              Query/ConsensusState\n\n              RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: client_id\n          description: client identifier\n          in: path\n          required: true\n          type: string\n        - name: revision_number\n          description: consensus state revision number\n          in: path\n          required: true\n          type: string\n          format: uint64\n        - name: revision_height\n          description: consensus state revision height\n          in: path\n          required: true\n          type: string\n          format: uint64\n        - name: latest_height\n          description: >-\n            latest_height overrrides the height field and queries the latest\n            stored\n\n            ConsensusState.\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /ibc/core/client/v1/params:\n    get:\n      summary: ClientParams queries all parameters of the ibc client submodule.\n      operationId: ClientParams_XMXO9\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              params:\n                description: params defines the parameters of the module.\n                type: object\n                properties:\n                  allowed_clients:\n                    type: array\n                    items:\n                      type: string\n                    description: >-\n                      allowed_clients defines the list of allowed client state\n                      types which can be created\n\n                      and interacted with. If a client type is removed from the\n                      allowed clients list, usage\n\n                      of this client will be disabled until it is added again to\n                      the list.\n            description: >-\n              QueryClientParamsResponse is the response type for the\n              Query/ClientParams RPC\n\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /ibc/core/client/v1/upgraded_client_states:\n    get:\n      summary: UpgradedClientState queries an Upgraded IBC light client.\n      operationId: UpgradedClientState_0T6RN\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              upgraded_client_state:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n                title: client state associated with the request identifier\n            description: |-\n              QueryUpgradedClientStateResponse is the response type for the\n              Query/UpgradedClientState RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /ibc/core/client/v1/upgraded_consensus_states:\n    get:\n      summary: UpgradedConsensusState queries an Upgraded IBC consensus state.\n      operationId: UpgradedConsensusState_T13SE\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              upgraded_consensus_state:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n                title: Consensus state associated with the request identifier\n            description: |-\n              QueryUpgradedConsensusStateResponse is the response type for the\n              Query/UpgradedConsensusState RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/authz/v1beta1/grants:\n    get:\n      summary: Returns list of `Authorization`, granted to the grantee by the granter.\n      operationId: Grants_OHMNO\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              grants:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    authorization:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                    expiration:\n                      type: string\n                      format: date-time\n                      title: >-\n                        time when the grant will expire and will be pruned. If\n                        null, then the grant\n\n                        doesn't have a time expiration (other conditions  in\n                        `authorization`\n\n                        may apply to invalidate the grant)\n                  description: |-\n                    Grant gives permissions to execute\n                    the provide method with expiration time.\n                description: >-\n                  authorizations is a list of grants granted for grantee by\n                  granter.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: >-\n              QueryGrantsResponse is the response type for the\n              Query/Authorizations RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: granter\n          in: query\n          required: false\n          type: string\n        - name: grantee\n          in: query\n          required: false\n          type: string\n        - name: msg_type_url\n          description: >-\n            Optional, msg_type_url, when set, will query only grants matching\n            given msg type.\n          in: query\n          required: false\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/authz/v1beta1/grants/grantee/{grantee}:\n    get:\n      summary: GranteeGrants returns a list of `GrantAuthorization` by grantee.\n      description: 'Since: cosmos-sdk 0.46'\n      operationId: GranteeGrants_2HZ2F\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              grants:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    granter:\n                      type: string\n                    grantee:\n                      type: string\n                    authorization:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                    expiration:\n                      type: string\n                      format: date-time\n                  title: >-\n                    GrantAuthorization extends a grant with both the addresses\n                    of the grantee and granter.\n\n                    It is used in genesis.proto and query.proto\n                description: grants is a list of grants granted to the grantee.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: >-\n              QueryGranteeGrantsResponse is the response type for the\n              Query/GranteeGrants RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: grantee\n          in: path\n          required: true\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/authz/v1beta1/grants/granter/{granter}:\n    get:\n      summary: GranterGrants returns list of `GrantAuthorization`, granted by granter.\n      description: 'Since: cosmos-sdk 0.46'\n      operationId: GranterGrants_5J801\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              grants:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    granter:\n                      type: string\n                    grantee:\n                      type: string\n                    authorization:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                    expiration:\n                      type: string\n                      format: date-time\n                  title: >-\n                    GrantAuthorization extends a grant with both the addresses\n                    of the grantee and granter.\n\n                    It is used in genesis.proto and query.proto\n                description: grants is a list of grants granted by the granter.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: >-\n              QueryGranterGrantsResponse is the response type for the\n              Query/GranterGrants RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: granter\n          in: path\n          required: true\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/liquidity/v1beta1/params:\n    get:\n      summary: Get all parameters of the liquidity module.\n      operationId: Params_PSZ1M\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              params:\n                description: params holds all the parameters of this module.\n                type: object\n                properties:\n                  pool_types:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        id:\n                          type: integer\n                          format: int64\n                          title: >-\n                            This is the id of the pool_type that is used as\n                            pool_type_id for pool\n\n                            creation. In this version, only pool-type-id 1 is\n                            supported.\n\n                            {\"id\":1,\"name\":\"ConstantProductLiquidityPool\",\"min_reserve_coin_num\":2,\"max_reserve_coin_num\":2,\"description\":\"\"}\n                        name:\n                          type: string\n                          description: name of the pool type.\n                        min_reserve_coin_num:\n                          type: integer\n                          format: int64\n                          description: >-\n                            minimum number of reserveCoins for\n                            LiquidityPoolType, only 2 reserve coins\n\n                            are supported.\n                        max_reserve_coin_num:\n                          type: integer\n                          format: int64\n                          description: >-\n                            maximum number of reserveCoins for\n                            LiquidityPoolType, only 2 reserve coins\n\n                            are supported.\n                        description:\n                          type: string\n                          description: description of the pool type.\n                      description: >-\n                        Structure for the pool type to distinguish the\n                        characteristics of the reserve\n\n                        pools.\n                    title: list of available pool types\n                  min_init_deposit_amount:\n                    type: string\n                    description: >-\n                      Minimum number of coins to be deposited to the liquidity\n                      pool on pool\n\n                      creation.\n                  init_pool_coin_mint_amount:\n                    type: string\n                    description: Initial mint amount of pool coins upon pool creation.\n                  max_reserve_coin_amount:\n                    type: string\n                    description: >-\n                      Limit the size of each liquidity pool to minimize risk. In\n                      development, set\n\n                      to 0 for no limit. In production, set a limit.\n                  pool_creation_fee:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                    description: >-\n                      Fee paid to create a Liquidity Pool. Set a fee to prevent\n                      spamming.\n                  swap_fee_rate:\n                    type: string\n                    description: Swap fee rate for every executed swap.\n                  withdraw_fee_rate:\n                    type: string\n                    description: >-\n                      Reserve coin withdrawal with less proportion by\n                      withdrawFeeRate.\n                  max_order_amount_ratio:\n                    type: string\n                    description: >-\n                      Maximum ratio of reserve coins that can be ordered at a\n                      swap order.\n                  unit_batch_height:\n                    type: integer\n                    format: int64\n                    description: The smallest unit batch height for every liquidity pool.\n                  circuit_breaker_enabled:\n                    type: boolean\n                    description: >-\n                      Circuit breaker enables or disables transaction messages\n                      in liquidity\n\n                      module.\n            description: >-\n              the response type for the QueryParamsResponse RPC method. This\n              includes\n\n              current parameter of the liquidity module.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/liquidity/v1beta1/pools:\n    get:\n      summary: Get existing liquidity pools.\n      operationId: LiquidityPools_W7CWM\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              pools:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    id:\n                      type: string\n                      format: uint64\n                      title: id of the pool\n                    type_id:\n                      type: integer\n                      format: int64\n                      title: id of the pool_type\n                    reserve_coin_denoms:\n                      type: array\n                      items:\n                        type: string\n                      title: denoms of reserve coin pair of the pool\n                    reserve_account_address:\n                      type: string\n                      title: reserve account address of the pool\n                    pool_coin_denom:\n                      type: string\n                      title: denom of pool coin of the pool\n                  description: >-\n                    Pool defines the liquidity pool that contains pool\n                    information.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: >-\n              the response type for the QueryLiquidityPoolsResponse RPC method.\n              This\n\n              includes a list of all existing liquidity pools and paging results\n              that\n\n              contain next_key and total count.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/liquidity/v1beta1/pools/pool_coin_denom/{pool_coin_denom}:\n    get:\n      summary: Get specific liquidity pool corresponding to the pool_coin_denom.\n      operationId: LiquidityPoolByPoolCoinDenom_90R2T\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              pool:\n                type: object\n                properties:\n                  id:\n                    type: string\n                    format: uint64\n                    title: id of the pool\n                  type_id:\n                    type: integer\n                    format: int64\n                    title: id of the pool_type\n                  reserve_coin_denoms:\n                    type: array\n                    items:\n                      type: string\n                    title: denoms of reserve coin pair of the pool\n                  reserve_account_address:\n                    type: string\n                    title: reserve account address of the pool\n                  pool_coin_denom:\n                    type: string\n                    title: denom of pool coin of the pool\n                description: >-\n                  Pool defines the liquidity pool that contains pool\n                  information.\n            description: >-\n              the response type for the QueryLiquidityPoolResponse RPC method.\n              Returns the\n\n              liquidity pool that corresponds to the requested pool_id.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pool_coin_denom\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/liquidity/v1beta1/pools/reserve_acc/{reserve_acc}:\n    get:\n      summary: Get specific liquidity pool corresponding to the reserve account.\n      operationId: LiquidityPoolByReserveAcc_824YS\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              pool:\n                type: object\n                properties:\n                  id:\n                    type: string\n                    format: uint64\n                    title: id of the pool\n                  type_id:\n                    type: integer\n                    format: int64\n                    title: id of the pool_type\n                  reserve_coin_denoms:\n                    type: array\n                    items:\n                      type: string\n                    title: denoms of reserve coin pair of the pool\n                  reserve_account_address:\n                    type: string\n                    title: reserve account address of the pool\n                  pool_coin_denom:\n                    type: string\n                    title: denom of pool coin of the pool\n                description: >-\n                  Pool defines the liquidity pool that contains pool\n                  information.\n            description: >-\n              the response type for the QueryLiquidityPoolResponse RPC method.\n              Returns the\n\n              liquidity pool that corresponds to the requested pool_id.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: reserve_acc\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/liquidity/v1beta1/pools/{pool_id}:\n    get:\n      summary: Get specific liquidity pool.\n      operationId: LiquidityPool_GVMM2\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              pool:\n                type: object\n                properties:\n                  id:\n                    type: string\n                    format: uint64\n                    title: id of the pool\n                  type_id:\n                    type: integer\n                    format: int64\n                    title: id of the pool_type\n                  reserve_coin_denoms:\n                    type: array\n                    items:\n                      type: string\n                    title: denoms of reserve coin pair of the pool\n                  reserve_account_address:\n                    type: string\n                    title: reserve account address of the pool\n                  pool_coin_denom:\n                    type: string\n                    title: denom of pool coin of the pool\n                description: >-\n                  Pool defines the liquidity pool that contains pool\n                  information.\n            description: >-\n              the response type for the QueryLiquidityPoolResponse RPC method.\n              Returns the\n\n              liquidity pool that corresponds to the requested pool_id.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pool_id\n          in: path\n          required: true\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /cosmos/liquidity/v1beta1/pools/{pool_id}/batch:\n    get:\n      summary: Get the pool's current batch.\n      operationId: LiquidityPoolBatch_80103\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              batch:\n                type: object\n                properties:\n                  pool_id:\n                    type: string\n                    format: uint64\n                    title: id of the pool\n                  index:\n                    type: string\n                    format: uint64\n                    title: index of this batch\n                  begin_height:\n                    type: string\n                    format: int64\n                    title: height where this batch is started\n                  deposit_msg_index:\n                    type: string\n                    format: uint64\n                    title: last index of DepositMsgStates\n                  withdraw_msg_index:\n                    type: string\n                    format: uint64\n                    title: last index of WithdrawMsgStates\n                  swap_msg_index:\n                    type: string\n                    format: uint64\n                    title: last index of SwapMsgStates\n                  executed:\n                    type: boolean\n                    title: true if executed, false if not executed\n                description: >-\n                  PoolBatch defines the batch or batches of a given liquidity\n                  pool that\n\n                  contains indexes of deposit, withdraw, and swap messages.\n                  Index param\n\n                  increments by 1 if the pool id is same.\n            description: >-\n              the response type for the QueryLiquidityPoolBatchResponse RPC\n              method. Returns\n\n              the liquidity pool batch that corresponds to the requested\n              pool_id.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pool_id\n          description: id of the target pool for query\n          in: path\n          required: true\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /cosmos/liquidity/v1beta1/pools/{pool_id}/batch/deposits:\n    get:\n      summary: Get all deposit messages in the pool's current batch.\n      operationId: PoolBatchDepositMsgs_POD1A\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              deposits:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    msg_height:\n                      type: string\n                      format: int64\n                      title: height where this message is appended to the batch\n                    msg_index:\n                      type: string\n                      format: uint64\n                      title: index of this deposit message in this liquidity pool\n                    executed:\n                      type: boolean\n                      title: true if executed on this batch, false if not executed\n                    succeeded:\n                      type: boolean\n                      title: >-\n                        true if executed successfully on this batch, false if\n                        failed\n                    to_be_deleted:\n                      type: boolean\n                      title: >-\n                        true if ready to be deleted on kvstore, false if not\n                        ready to be deleted\n                    msg:\n                      title: MsgDepositWithinBatch\n                      type: object\n                      properties:\n                        depositor_address:\n                          type: string\n                        pool_id:\n                          type: string\n                          format: uint64\n                          title: id of the target pool\n                        deposit_coins:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              denom:\n                                type: string\n                              amount:\n                                type: string\n                            description: >-\n                              Coin defines a token with a denomination and an\n                              amount.\n\n\n                              NOTE: The amount field is an Int which implements\n                              the custom method\n\n                              signatures required by gogoproto.\n                          title: reserve coin pair of the pool to deposit\n                      description: >-\n                        `MsgDepositWithinBatch defines` an `sdk.Msg` type that\n                        supports submitting\n\n                        a deposit request to the batch of the liquidity pool.\n\n                        Deposit is submitted to the batch of the Liquidity pool\n                        with the specified\n\n                        `pool_id`, `deposit_coins` for reserve.\n\n                        This request is stacked in the batch of the liquidity\n                        pool, is not processed\n\n                        immediately, and is processed in the `endblock` at the\n                        same time as other\n\n                        requests.\n\n\n                        See:\n\n                        https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n                  description: >-\n                    DepositMsgState defines the state of deposit message that\n                    contains state\n\n                    information as it is processed in the next batch or batches.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: >-\n              the response type for the QueryPoolBatchDeposit RPC method. This\n              includes a\n\n              list of all currently existing deposit messages of the batch and\n              paging\n\n              results that contain next_key and total count.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pool_id\n          description: id of the target pool for query\n          in: path\n          required: true\n          type: string\n          format: uint64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/liquidity/v1beta1/pools/{pool_id}/batch/deposits/{msg_index}:\n    get:\n      summary: Get a specific deposit message in the pool's current batch.\n      operationId: PoolBatchDepositMsg_DLP6J\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              deposit:\n                type: object\n                properties:\n                  msg_height:\n                    type: string\n                    format: int64\n                    title: height where this message is appended to the batch\n                  msg_index:\n                    type: string\n                    format: uint64\n                    title: index of this deposit message in this liquidity pool\n                  executed:\n                    type: boolean\n                    title: true if executed on this batch, false if not executed\n                  succeeded:\n                    type: boolean\n                    title: >-\n                      true if executed successfully on this batch, false if\n                      failed\n                  to_be_deleted:\n                    type: boolean\n                    title: >-\n                      true if ready to be deleted on kvstore, false if not ready\n                      to be deleted\n                  msg:\n                    title: MsgDepositWithinBatch\n                    type: object\n                    properties:\n                      depositor_address:\n                        type: string\n                      pool_id:\n                        type: string\n                        format: uint64\n                        title: id of the target pool\n                      deposit_coins:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements\n                            the custom method\n\n                            signatures required by gogoproto.\n                        title: reserve coin pair of the pool to deposit\n                    description: >-\n                      `MsgDepositWithinBatch defines` an `sdk.Msg` type that\n                      supports submitting\n\n                      a deposit request to the batch of the liquidity pool.\n\n                      Deposit is submitted to the batch of the Liquidity pool\n                      with the specified\n\n                      `pool_id`, `deposit_coins` for reserve.\n\n                      This request is stacked in the batch of the liquidity\n                      pool, is not processed\n\n                      immediately, and is processed in the `endblock` at the\n                      same time as other\n\n                      requests.\n\n\n                      See:\n\n                      https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n                description: >-\n                  DepositMsgState defines the state of deposit message that\n                  contains state\n\n                  information as it is processed in the next batch or batches.\n            description: >-\n              the response type for the QueryPoolBatchDepositMsg RPC method.\n              This includes\n\n              a batch swap message of the batch.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pool_id\n          description: id of the target pool for query\n          in: path\n          required: true\n          type: string\n          format: uint64\n        - name: msg_index\n          description: target msg_index of the pool\n          in: path\n          required: true\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /cosmos/liquidity/v1beta1/pools/{pool_id}/batch/swaps:\n    get:\n      summary: Get all swap messages in the pool's current batch.\n      operationId: PoolBatchSwapMsgs_YUF1Y\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              swaps:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    msg_height:\n                      type: string\n                      format: int64\n                      title: height where this message is appended to the batch\n                    msg_index:\n                      type: string\n                      format: uint64\n                      title: index of this swap message in this liquidity pool\n                    executed:\n                      type: boolean\n                      title: true if executed on this batch, false if not executed\n                    succeeded:\n                      type: boolean\n                      title: >-\n                        true if executed successfully on this batch, false if\n                        failed\n                    to_be_deleted:\n                      type: boolean\n                      title: >-\n                        true if ready to be deleted on kvstore, false if not\n                        ready to be deleted\n                    order_expiry_height:\n                      type: string\n                      format: int64\n                      title: >-\n                        swap orders are cancelled when current height is equal\n                        to or higher than\n\n                        ExpiryHeight\n                    exchanged_offer_coin:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                      title: offer coin exchanged until now\n                    remaining_offer_coin:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                      title: offer coin currently remaining to be exchanged\n                    reserved_offer_coin_fee:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                      title: reserve fee for pays fee in half offer coin\n                    msg:\n                      title: MsgSwapWithinBatch\n                      type: object\n                      properties:\n                        swap_requester_address:\n                          type: string\n                          title: address of swap requester\n                        pool_id:\n                          type: string\n                          format: uint64\n                          description: >-\n                            id of swap type, must match the value in the pool.\n                            Only `swap_type_id` 1 is\n\n                            supported.\n                        swap_type_id:\n                          type: integer\n                          format: int64\n                          description: id of swap type. Must match the value in the pool.\n                        offer_coin:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements\n                            the custom method\n\n                            signatures required by gogoproto.\n                        demand_coin_denom:\n                          type: string\n                          description: >-\n                            denom of demand coin to be exchanged on the swap\n                            request, must match the\n\n                            denom in the pool.\n                        offer_coin_fee:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements\n                            the custom method\n\n                            signatures required by gogoproto.\n                        order_price:\n                          type: string\n                          description: >-\n                            limit order price for the order, the price is the\n                            exchange ratio of X/Y\n\n                            where X is the amount of the first coin and Y is the\n                            amount\n\n                            of the second coin when their denoms are sorted\n                            alphabetically.\n                      description: >-\n                        `MsgSwapWithinBatch` defines an sdk.Msg type that\n                        supports submitting a swap\n\n                        offer request to the batch of the liquidity pool. Submit\n                        swap offer to the\n\n                        liquidity pool batch with the specified the `pool_id`,\n                        `swap_type_id`,\n\n                        `demand_coin_denom` with the coin and the price you're\n                        offering\n\n                        and `offer_coin_fee` must be half of offer coin amount *\n                        current\n\n                        `params.swap_fee_rate` and ceil for reservation to pay\n                        fees. This request is\n\n                        stacked in the batch of the liquidity pool, is not\n                        processed immediately, and\n\n                        is processed in the `endblock` at the same time as other\n                        requests. You must\n\n                        request the same fields as the pool. Only the default\n                        `swap_type_id` 1 is\n\n                        supported.\n\n\n                        See:\n                        https://github.com/gravity-devs/liquidity/tree/develop/doc\n\n                        https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n                  description: >-\n                    SwapMsgState defines the state of the swap message that\n                    contains state\n\n                    information as the message is processed in the next batch or\n                    batches.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: >-\n              the response type for the QueryPoolBatchSwapMsgs RPC method. This\n              includes\n\n              list of all currently existing swap messages of the batch and\n              paging results\n\n              that contain next_key and total count.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pool_id\n          description: id of the target pool for query\n          in: path\n          required: true\n          type: string\n          format: uint64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/liquidity/v1beta1/pools/{pool_id}/batch/swaps/{msg_index}:\n    get:\n      summary: Get a specific swap message in the pool's current batch.\n      operationId: PoolBatchSwapMsg_X08QJ\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              swap:\n                type: object\n                properties:\n                  msg_height:\n                    type: string\n                    format: int64\n                    title: height where this message is appended to the batch\n                  msg_index:\n                    type: string\n                    format: uint64\n                    title: index of this swap message in this liquidity pool\n                  executed:\n                    type: boolean\n                    title: true if executed on this batch, false if not executed\n                  succeeded:\n                    type: boolean\n                    title: >-\n                      true if executed successfully on this batch, false if\n                      failed\n                  to_be_deleted:\n                    type: boolean\n                    title: >-\n                      true if ready to be deleted on kvstore, false if not ready\n                      to be deleted\n                  order_expiry_height:\n                    type: string\n                    format: int64\n                    title: >-\n                      swap orders are cancelled when current height is equal to\n                      or higher than\n\n                      ExpiryHeight\n                  exchanged_offer_coin:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the\n                      custom method\n\n                      signatures required by gogoproto.\n                    title: offer coin exchanged until now\n                  remaining_offer_coin:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the\n                      custom method\n\n                      signatures required by gogoproto.\n                    title: offer coin currently remaining to be exchanged\n                  reserved_offer_coin_fee:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the\n                      custom method\n\n                      signatures required by gogoproto.\n                    title: reserve fee for pays fee in half offer coin\n                  msg:\n                    title: MsgSwapWithinBatch\n                    type: object\n                    properties:\n                      swap_requester_address:\n                        type: string\n                        title: address of swap requester\n                      pool_id:\n                        type: string\n                        format: uint64\n                        description: >-\n                          id of swap type, must match the value in the pool.\n                          Only `swap_type_id` 1 is\n\n                          supported.\n                      swap_type_id:\n                        type: integer\n                        format: int64\n                        description: id of swap type. Must match the value in the pool.\n                      offer_coin:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the\n                          custom method\n\n                          signatures required by gogoproto.\n                      demand_coin_denom:\n                        type: string\n                        description: >-\n                          denom of demand coin to be exchanged on the swap\n                          request, must match the\n\n                          denom in the pool.\n                      offer_coin_fee:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the\n                          custom method\n\n                          signatures required by gogoproto.\n                      order_price:\n                        type: string\n                        description: >-\n                          limit order price for the order, the price is the\n                          exchange ratio of X/Y\n\n                          where X is the amount of the first coin and Y is the\n                          amount\n\n                          of the second coin when their denoms are sorted\n                          alphabetically.\n                    description: >-\n                      `MsgSwapWithinBatch` defines an sdk.Msg type that supports\n                      submitting a swap\n\n                      offer request to the batch of the liquidity pool. Submit\n                      swap offer to the\n\n                      liquidity pool batch with the specified the `pool_id`,\n                      `swap_type_id`,\n\n                      `demand_coin_denom` with the coin and the price you're\n                      offering\n\n                      and `offer_coin_fee` must be half of offer coin amount *\n                      current\n\n                      `params.swap_fee_rate` and ceil for reservation to pay\n                      fees. This request is\n\n                      stacked in the batch of the liquidity pool, is not\n                      processed immediately, and\n\n                      is processed in the `endblock` at the same time as other\n                      requests. You must\n\n                      request the same fields as the pool. Only the default\n                      `swap_type_id` 1 is\n\n                      supported.\n\n\n                      See:\n                      https://github.com/gravity-devs/liquidity/tree/develop/doc\n\n                      https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n                description: >-\n                  SwapMsgState defines the state of the swap message that\n                  contains state\n\n                  information as the message is processed in the next batch or\n                  batches.\n            description: >-\n              the response type for the QueryPoolBatchSwapMsg RPC method. This\n              includes a\n\n              batch swap message of the batch.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pool_id\n          description: id of the target pool for query\n          in: path\n          required: true\n          type: string\n          format: uint64\n        - name: msg_index\n          description: target msg_index of the pool\n          in: path\n          required: true\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /cosmos/liquidity/v1beta1/pools/{pool_id}/batch/withdraws:\n    get:\n      summary: Get all withdraw messages in the pool's current batch.\n      operationId: PoolBatchWithdrawMsgs_605RT\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              withdraws:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    msg_height:\n                      type: string\n                      format: int64\n                      title: height where this message is appended to the batch\n                    msg_index:\n                      type: string\n                      format: uint64\n                      title: index of this withdraw message in this liquidity pool\n                    executed:\n                      type: boolean\n                      title: true if executed on this batch, false if not executed\n                    succeeded:\n                      type: boolean\n                      title: >-\n                        true if executed successfully on this batch, false if\n                        failed\n                    to_be_deleted:\n                      type: boolean\n                      title: >-\n                        true if ready to be deleted on kvstore, false if not\n                        ready to be deleted\n                    msg:\n                      title: MsgWithdrawWithinBatch\n                      type: object\n                      properties:\n                        withdrawer_address:\n                          type: string\n                        pool_id:\n                          type: string\n                          format: uint64\n                          title: id of the target pool\n                        pool_coin:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements\n                            the custom method\n\n                            signatures required by gogoproto.\n                      description: >-\n                        `MsgWithdrawWithinBatch` defines an `sdk.Msg` type that\n                        supports submitting\n\n                        a withdraw request to the batch of the liquidity pool.\n\n                        Withdraw is submitted to the batch from the Liquidity\n                        pool with the\n\n                        specified `pool_id`, `pool_coin` of the pool.\n\n                        This request is stacked in the batch of the liquidity\n                        pool, is not processed\n\n                        immediately, and is processed in the `endblock` at the\n                        same time as other\n\n                        requests.\n\n\n                        See:\n\n                        https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n                  description: >-\n                    WithdrawMsgState defines the state of the withdraw message\n                    that contains\n\n                    state information as the message is processed in the next\n                    batch or batches.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: >-\n              the response type for the QueryPoolBatchWithdraw RPC method. This\n              includes a\n\n              list of all currently existing withdraw messages of the batch and\n              paging\n\n              results that contain next_key and total count.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pool_id\n          description: id of the target pool for query\n          in: path\n          required: true\n          type: string\n          format: uint64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/liquidity/v1beta1/pools/{pool_id}/batch/withdraws/{msg_index}:\n    get:\n      summary: Get a specific withdraw message in the pool's current batch.\n      operationId: PoolBatchWithdrawMsg_84SDG\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              withdraw:\n                type: object\n                properties:\n                  msg_height:\n                    type: string\n                    format: int64\n                    title: height where this message is appended to the batch\n                  msg_index:\n                    type: string\n                    format: uint64\n                    title: index of this withdraw message in this liquidity pool\n                  executed:\n                    type: boolean\n                    title: true if executed on this batch, false if not executed\n                  succeeded:\n                    type: boolean\n                    title: >-\n                      true if executed successfully on this batch, false if\n                      failed\n                  to_be_deleted:\n                    type: boolean\n                    title: >-\n                      true if ready to be deleted on kvstore, false if not ready\n                      to be deleted\n                  msg:\n                    title: MsgWithdrawWithinBatch\n                    type: object\n                    properties:\n                      withdrawer_address:\n                        type: string\n                      pool_id:\n                        type: string\n                        format: uint64\n                        title: id of the target pool\n                      pool_coin:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the\n                          custom method\n\n                          signatures required by gogoproto.\n                    description: >-\n                      `MsgWithdrawWithinBatch` defines an `sdk.Msg` type that\n                      supports submitting\n\n                      a withdraw request to the batch of the liquidity pool.\n\n                      Withdraw is submitted to the batch from the Liquidity pool\n                      with the\n\n                      specified `pool_id`, `pool_coin` of the pool.\n\n                      This request is stacked in the batch of the liquidity\n                      pool, is not processed\n\n                      immediately, and is processed in the `endblock` at the\n                      same time as other\n\n                      requests.\n\n\n                      See:\n\n                      https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n                description: >-\n                  WithdrawMsgState defines the state of the withdraw message\n                  that contains\n\n                  state information as the message is processed in the next\n                  batch or batches.\n            description: >-\n              the response type for the QueryPoolBatchWithdrawMsg RPC method.\n              This includes\n\n              a batch swap message of the batch.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pool_id\n          description: id of the target pool for query\n          in: path\n          required: true\n          type: string\n          format: uint64\n        - name: msg_index\n          description: target msg_index of the pool\n          in: path\n          required: true\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /cosmwasm/wasm/v1/code:\n    get:\n      summary: Codes gets the metadata for all stored wasm codes\n      operationId: Codes_7UDV9\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              code_infos:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    code_id:\n                      type: string\n                      format: uint64\n                    creator:\n                      type: string\n                    data_hash:\n                      type: string\n                      format: byte\n                    instantiate_permission:\n                      type: object\n                      properties:\n                        permission:\n                          type: string\n                          enum:\n                            - ACCESS_TYPE_UNSPECIFIED\n                            - ACCESS_TYPE_NOBODY\n                            - ACCESS_TYPE_EVERYBODY\n                            - ACCESS_TYPE_ANY_OF_ADDRESSES\n                          default: ACCESS_TYPE_UNSPECIFIED\n                          description: >-\n                            - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified\n                            placeholder for empty value\n                             - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n                             - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n                             - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n                          title: AccessType permission types\n                        addresses:\n                          type: array\n                          items:\n                            type: string\n                      description: AccessConfig access control type.\n                  title: CodeInfoResponse contains code meta data from CodeInfo\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            title: >-\n              QueryCodesResponse is the response type for the Query/Codes RPC\n              method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmwasm/wasm/v1/code/{code_id}:\n    get:\n      summary: Code gets the binary code and metadata for a singe wasm code\n      operationId: Code_2D1PE\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              code_info:\n                type: object\n                properties:\n                  code_id:\n                    type: string\n                    format: uint64\n                  creator:\n                    type: string\n                  data_hash:\n                    type: string\n                    format: byte\n                  instantiate_permission:\n                    type: object\n                    properties:\n                      permission:\n                        type: string\n                        enum:\n                          - ACCESS_TYPE_UNSPECIFIED\n                          - ACCESS_TYPE_NOBODY\n                          - ACCESS_TYPE_EVERYBODY\n                          - ACCESS_TYPE_ANY_OF_ADDRESSES\n                        default: ACCESS_TYPE_UNSPECIFIED\n                        description: >-\n                          - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified\n                          placeholder for empty value\n                           - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n                           - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n                           - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n                        title: AccessType permission types\n                      addresses:\n                        type: array\n                        items:\n                          type: string\n                    description: AccessConfig access control type.\n                title: CodeInfoResponse contains code meta data from CodeInfo\n              data:\n                type: string\n                format: byte\n            title: >-\n              QueryCodeResponse is the response type for the Query/Code RPC\n              method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: code_id\n          in: path\n          required: true\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /cosmwasm/wasm/v1/code/{code_id}/contracts:\n    get:\n      summary: ContractsByCode lists all smart contracts for a code id\n      operationId: ContractsByCode_DCS9B\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              contracts:\n                type: array\n                items:\n                  type: string\n                title: contracts are a set of contract addresses\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            title: |-\n              QueryContractsByCodeResponse is the response type for the\n              Query/ContractsByCode RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: code_id\n          in: path\n          required: true\n          type: string\n          format: uint64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmwasm/wasm/v1/codes/params:\n    get:\n      summary: Params gets the module params\n      operationId: Params_0NI93\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              params:\n                description: params defines the parameters of the module.\n                type: object\n                properties:\n                  code_upload_access:\n                    type: object\n                    properties:\n                      permission:\n                        type: string\n                        enum:\n                          - ACCESS_TYPE_UNSPECIFIED\n                          - ACCESS_TYPE_NOBODY\n                          - ACCESS_TYPE_EVERYBODY\n                          - ACCESS_TYPE_ANY_OF_ADDRESSES\n                        default: ACCESS_TYPE_UNSPECIFIED\n                        description: >-\n                          - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified\n                          placeholder for empty value\n                           - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n                           - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n                           - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n                        title: AccessType permission types\n                      addresses:\n                        type: array\n                        items:\n                          type: string\n                    description: AccessConfig access control type.\n                  instantiate_default_permission:\n                    type: string\n                    enum:\n                      - ACCESS_TYPE_UNSPECIFIED\n                      - ACCESS_TYPE_NOBODY\n                      - ACCESS_TYPE_EVERYBODY\n                      - ACCESS_TYPE_ANY_OF_ADDRESSES\n                    default: ACCESS_TYPE_UNSPECIFIED\n                    description: >-\n                      - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified\n                      placeholder for empty value\n                       - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n                       - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n                       - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n                    title: AccessType permission types\n            description: >-\n              QueryParamsResponse is the response type for the Query/Params RPC\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmwasm/wasm/v1/codes/pinned:\n    get:\n      summary: PinnedCodes gets the pinned code ids\n      operationId: PinnedCodes_W6G74\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              code_ids:\n                type: array\n                items:\n                  type: string\n                  format: uint64\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            title: |-\n              QueryPinnedCodesResponse is the response type for the\n              Query/PinnedCodes RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmwasm/wasm/v1/contract/{address}:\n    get:\n      summary: ContractInfo gets the contract meta data\n      operationId: ContractInfo_6MJBN\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              address:\n                type: string\n                title: address is the address of the contract\n              contract_info:\n                type: object\n                properties:\n                  code_id:\n                    type: string\n                    format: uint64\n                    title: CodeID is the reference to the stored Wasm code\n                  creator:\n                    type: string\n                    title: Creator address who initially instantiated the contract\n                  admin:\n                    type: string\n                    title: Admin is an optional address that can execute migrations\n                  label:\n                    type: string\n                    description: >-\n                      Label is optional metadata to be stored with a contract\n                      instance.\n                  created:\n                    description: Created Tx position when the contract was instantiated.\n                    type: object\n                    properties:\n                      block_height:\n                        type: string\n                        format: uint64\n                        title: BlockHeight is the block the contract was created at\n                      tx_index:\n                        type: string\n                        format: uint64\n                        title: >-\n                          TxIndex is a monotonic counter within the block\n                          (actual transaction index,\n\n                          or gas consumed)\n                  ibc_port_id:\n                    type: string\n                  extension:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                    description: >-\n                      Extension is an extension point to store custom metadata\n                      within the\n\n                      persistence model.\n                title: ContractInfo stores a WASM contract instance\n            title: >-\n              QueryContractInfoResponse is the response type for the\n              Query/ContractInfo RPC\n\n              method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: address\n          description: address is the address of the contract to query\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmwasm/wasm/v1/contract/{address}/history:\n    get:\n      summary: ContractHistory gets the contract code history\n      operationId: ContractHistory_5CXKC\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              entries:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    operation:\n                      type: string\n                      enum:\n                        - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED\n                        - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT\n                        - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE\n                        - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS\n                      default: CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED\n                      description: >-\n                        - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED:\n                        ContractCodeHistoryOperationTypeUnspecified placeholder\n                        for empty value\n                         - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT: ContractCodeHistoryOperationTypeInit on chain contract instantiation\n                         - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE: ContractCodeHistoryOperationTypeMigrate code migration\n                         - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS: ContractCodeHistoryOperationTypeGenesis based on genesis data\n                      title: >-\n                        ContractCodeHistoryOperationType actions that caused a\n                        code change\n                    code_id:\n                      type: string\n                      format: uint64\n                      title: CodeID is the reference to the stored WASM code\n                    updated:\n                      description: Updated Tx position when the operation was executed.\n                      type: object\n                      properties:\n                        block_height:\n                          type: string\n                          format: uint64\n                          title: BlockHeight is the block the contract was created at\n                        tx_index:\n                          type: string\n                          format: uint64\n                          title: >-\n                            TxIndex is a monotonic counter within the block\n                            (actual transaction index,\n\n                            or gas consumed)\n                    msg:\n                      type: string\n                      format: byte\n                  description: ContractCodeHistoryEntry metadata to a contract.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            title: |-\n              QueryContractHistoryResponse is the response type for the\n              Query/ContractHistory RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: address\n          description: address is the address of the contract to query\n          in: path\n          required: true\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmwasm/wasm/v1/contract/{address}/raw/{query_data}:\n    get:\n      summary: RawContractState gets single key from the raw store data of a contract\n      operationId: RawContractState_HN7KQ\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              data:\n                type: string\n                format: byte\n                title: Data contains the raw store data\n            title: |-\n              QueryRawContractStateResponse is the response type for the\n              Query/RawContractState RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: address\n          description: address is the address of the contract\n          in: path\n          required: true\n          type: string\n        - name: query_data\n          in: path\n          required: true\n          type: string\n          format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmwasm/wasm/v1/contract/{address}/smart/{query_data}:\n    get:\n      summary: SmartContractState get smart query result from the contract\n      operationId: SmartContractState_7RZK1\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              data:\n                type: string\n                format: byte\n                title: Data contains the json data returned from the smart contract\n            title: |-\n              QuerySmartContractStateResponse is the response type for the\n              Query/SmartContractState RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: address\n          description: address is the address of the contract\n          in: path\n          required: true\n          type: string\n        - name: query_data\n          description: QueryData contains the query data passed to the contract\n          in: path\n          required: true\n          type: string\n          format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmwasm/wasm/v1/contract/{address}/state:\n    get:\n      summary: AllContractState gets all raw store data for a single contract\n      operationId: AllContractState_8F65W\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              models:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    key:\n                      type: string\n                      format: byte\n                      title: hex-encode key to read it better (this is often ascii)\n                    value:\n                      type: string\n                      format: byte\n                      title: base64-encode raw value\n                  title: Model is a struct that holds a KV pair\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            title: |-\n              QueryAllContractStateResponse is the response type for the\n              Query/AllContractState RPC method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: address\n          description: address is the address of the contract\n          in: path\n          required: true\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmwasm/wasm/v1/contracts/creator/{creator_address}:\n    get:\n      summary: ContractsByCreator gets the contracts by creator\n      operationId: ContractsByCreator_Y148N\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              contract_addresses:\n                type: array\n                items:\n                  type: string\n                title: ContractAddresses result set\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: |-\n              QueryContractsByCreatorResponse is the response type for the\n              Query/ContractsByCreator RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: creator_address\n          description: CreatorAddress is the address of contract creator\n          in: path\n          required: true\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cyber/bandwidth/v1beta1/bandwidth/load:\n    get:\n      operationId: Load_3QI57\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              load:\n                type: string\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cyber/bandwidth/v1beta1/bandwidth/neuron/{neuron}:\n    get:\n      operationId: NeuronBandwidth_1DGP1\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              neuron_bandwidth:\n                type: object\n                properties:\n                  neuron:\n                    type: string\n                  remained_value:\n                    type: string\n                    format: uint64\n                  last_updated_block:\n                    type: string\n                    format: uint64\n                  max_value:\n                    type: string\n                    format: uint64\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: neuron\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cyber/bandwidth/v1beta1/bandwidth/params:\n    get:\n      operationId: Params_B8C0X\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              params:\n                type: object\n                properties:\n                  recovery_period:\n                    type: string\n                    format: uint64\n                  adjust_price_period:\n                    type: string\n                    format: uint64\n                  base_price:\n                    type: string\n                  base_load:\n                    type: string\n                  max_block_bandwidth:\n                    type: string\n                    format: uint64\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cyber/bandwidth/v1beta1/bandwidth/price:\n    get:\n      operationId: Price_LCDUB\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              price:\n                type: string\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cyber/bandwidth/v1beta1/bandwidth/total:\n    get:\n      operationId: TotalBandwidth_7HIK3\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              total_bandwidth:\n                type: string\n                format: uint64\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/base/tendermint/v1beta1/abci_query:\n    get:\n      summary: >-\n        ABCIQuery defines a query handler that supports ABCI queries directly to\n        the\n\n        application, bypassing Tendermint completely. The ABCI query must\n        contain\n\n        a valid and supported path, including app, custom, p2p, and store.\n      description: 'Since: cosmos-sdk 0.46'\n      operationId: ABCIQuery_5ACTN\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              code:\n                type: integer\n                format: int64\n              log:\n                type: string\n              info:\n                type: string\n              index:\n                type: string\n                format: int64\n              key:\n                type: string\n                format: byte\n              value:\n                type: string\n                format: byte\n              proof_ops:\n                type: object\n                properties:\n                  ops:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type:\n                          type: string\n                        key:\n                          type: string\n                          format: byte\n                        data:\n                          type: string\n                          format: byte\n                      description: >-\n                        ProofOp defines an operation used for calculating Merkle\n                        root. The data could\n\n                        be arbitrary format, providing necessary data for\n                        example neighbouring node\n\n                        hash.\n\n\n                        Note: This type is a duplicate of the ProofOp proto type\n                        defined in Tendermint.\n                description: >-\n                  ProofOps is Merkle proof defined by the list of ProofOps.\n\n\n                  Note: This type is a duplicate of the ProofOps proto type\n                  defined in Tendermint.\n              height:\n                type: string\n                format: int64\n              codespace:\n                type: string\n            description: >-\n              ABCIQueryResponse defines the response structure for the ABCIQuery\n              gRPC query.\n\n\n              Note: This type is a duplicate of the ResponseQuery proto type\n              defined in\n\n              Tendermint.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: data\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: path\n          in: query\n          required: false\n          type: string\n        - name: height\n          in: query\n          required: false\n          type: string\n          format: int64\n        - name: prove\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/base/tendermint/v1beta1/blocks/latest:\n    get:\n      summary: GetLatestBlock returns the latest block.\n      operationId: GetLatestBlock_QLNC7\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              block_id:\n                type: object\n                properties:\n                  hash:\n                    type: string\n                    format: byte\n                  part_set_header:\n                    type: object\n                    properties:\n                      total:\n                        type: integer\n                        format: int64\n                      hash:\n                        type: string\n                        format: byte\n                    title: PartsetHeader\n                title: BlockID\n              block:\n                type: object\n                properties:\n                  header:\n                    type: object\n                    properties:\n                      version:\n                        title: basic block info\n                        type: object\n                        properties:\n                          block:\n                            type: string\n                            format: uint64\n                          app:\n                            type: string\n                            format: uint64\n                        description: >-\n                          Consensus captures the consensus rules for processing\n                          a block in the blockchain,\n\n                          including all blockchain data structures and the rules\n                          of the application's\n\n                          state transition machine.\n                      chain_id:\n                        type: string\n                      height:\n                        type: string\n                        format: int64\n                      time:\n                        type: string\n                        format: date-time\n                      last_block_id:\n                        title: prev block info\n                        type: object\n                        properties:\n                          hash:\n                            type: string\n                            format: byte\n                          part_set_header:\n                            type: object\n                            properties:\n                              total:\n                                type: integer\n                                format: int64\n                              hash:\n                                type: string\n                                format: byte\n                            title: PartsetHeader\n                      last_commit_hash:\n                        type: string\n                        format: byte\n                        title: hashes of block data\n                      data_hash:\n                        type: string\n                        format: byte\n                      validators_hash:\n                        type: string\n                        format: byte\n                        title: hashes from the app output from the prev block\n                      next_validators_hash:\n                        type: string\n                        format: byte\n                      consensus_hash:\n                        type: string\n                        format: byte\n                      app_hash:\n                        type: string\n                        format: byte\n                      last_results_hash:\n                        type: string\n                        format: byte\n                      evidence_hash:\n                        type: string\n                        format: byte\n                        title: consensus info\n                      proposer_address:\n                        type: string\n                        format: byte\n                    description: Header defines the structure of a block header.\n                  data:\n                    type: object\n                    properties:\n                      txs:\n                        type: array\n                        items:\n                          type: string\n                          format: byte\n                        description: >-\n                          Txs that will be applied by state @ block.Height+1.\n\n                          NOTE: not all txs here are valid.  We're just agreeing\n                          on the order first.\n\n                          This means that block.AppHash does not include these\n                          txs.\n                    title: >-\n                      Data contains the set of transactions included in the\n                      block\n                  evidence:\n                    type: object\n                    properties:\n                      evidence:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            duplicate_vote_evidence:\n                              type: object\n                              properties:\n                                vote_a:\n                                  type: object\n                                  properties:\n                                    type:\n                                      type: string\n                                      enum:\n                                        - SIGNED_MSG_TYPE_UNKNOWN\n                                        - SIGNED_MSG_TYPE_PREVOTE\n                                        - SIGNED_MSG_TYPE_PRECOMMIT\n                                        - SIGNED_MSG_TYPE_PROPOSAL\n                                      default: SIGNED_MSG_TYPE_UNKNOWN\n                                      description: >-\n                                        SignedMsgType is a type of signed\n                                        message in the consensus.\n\n                                         - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                         - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                                    height:\n                                      type: string\n                                      format: int64\n                                    round:\n                                      type: integer\n                                      format: int32\n                                    block_id:\n                                      type: object\n                                      properties:\n                                        hash:\n                                          type: string\n                                          format: byte\n                                        part_set_header:\n                                          type: object\n                                          properties:\n                                            total:\n                                              type: integer\n                                              format: int64\n                                            hash:\n                                              type: string\n                                              format: byte\n                                          title: PartsetHeader\n                                      title: BlockID\n                                    timestamp:\n                                      type: string\n                                      format: date-time\n                                    validator_address:\n                                      type: string\n                                      format: byte\n                                    validator_index:\n                                      type: integer\n                                      format: int32\n                                    signature:\n                                      type: string\n                                      format: byte\n                                  description: >-\n                                    Vote represents a prevote, precommit, or\n                                    commit vote from validators for\n\n                                    consensus.\n                                vote_b:\n                                  type: object\n                                  properties:\n                                    type:\n                                      type: string\n                                      enum:\n                                        - SIGNED_MSG_TYPE_UNKNOWN\n                                        - SIGNED_MSG_TYPE_PREVOTE\n                                        - SIGNED_MSG_TYPE_PRECOMMIT\n                                        - SIGNED_MSG_TYPE_PROPOSAL\n                                      default: SIGNED_MSG_TYPE_UNKNOWN\n                                      description: >-\n                                        SignedMsgType is a type of signed\n                                        message in the consensus.\n\n                                         - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                         - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                                    height:\n                                      type: string\n                                      format: int64\n                                    round:\n                                      type: integer\n                                      format: int32\n                                    block_id:\n                                      type: object\n                                      properties:\n                                        hash:\n                                          type: string\n                                          format: byte\n                                        part_set_header:\n                                          type: object\n                                          properties:\n                                            total:\n                                              type: integer\n                                              format: int64\n                                            hash:\n                                              type: string\n                                              format: byte\n                                          title: PartsetHeader\n                                      title: BlockID\n                                    timestamp:\n                                      type: string\n                                      format: date-time\n                                    validator_address:\n                                      type: string\n                                      format: byte\n                                    validator_index:\n                                      type: integer\n                                      format: int32\n                                    signature:\n                                      type: string\n                                      format: byte\n                                  description: >-\n                                    Vote represents a prevote, precommit, or\n                                    commit vote from validators for\n\n                                    consensus.\n                                total_voting_power:\n                                  type: string\n                                  format: int64\n                                validator_power:\n                                  type: string\n                                  format: int64\n                                timestamp:\n                                  type: string\n                                  format: date-time\n                              description: >-\n                                DuplicateVoteEvidence contains evidence of a\n                                validator signed two conflicting votes.\n                            light_client_attack_evidence:\n                              type: object\n                              properties:\n                                conflicting_block:\n                                  type: object\n                                  properties:\n                                    signed_header:\n                                      type: object\n                                      properties:\n                                        header:\n                                          type: object\n                                          properties:\n                                            version:\n                                              title: basic block info\n                                              type: object\n                                              properties:\n                                                block:\n                                                  type: string\n                                                  format: uint64\n                                                app:\n                                                  type: string\n                                                  format: uint64\n                                              description: >-\n                                                Consensus captures the consensus rules\n                                                for processing a block in the\n                                                blockchain,\n\n                                                including all blockchain data structures\n                                                and the rules of the application's\n\n                                                state transition machine.\n                                            chain_id:\n                                              type: string\n                                            height:\n                                              type: string\n                                              format: int64\n                                            time:\n                                              type: string\n                                              format: date-time\n                                            last_block_id:\n                                              title: prev block info\n                                              type: object\n                                              properties:\n                                                hash:\n                                                  type: string\n                                                  format: byte\n                                                part_set_header:\n                                                  type: object\n                                                  properties:\n                                                    total:\n                                                      type: integer\n                                                      format: int64\n                                                    hash:\n                                                      type: string\n                                                      format: byte\n                                                  title: PartsetHeader\n                                            last_commit_hash:\n                                              type: string\n                                              format: byte\n                                              title: hashes of block data\n                                            data_hash:\n                                              type: string\n                                              format: byte\n                                            validators_hash:\n                                              type: string\n                                              format: byte\n                                              title: >-\n                                                hashes from the app output from the prev\n                                                block\n                                            next_validators_hash:\n                                              type: string\n                                              format: byte\n                                            consensus_hash:\n                                              type: string\n                                              format: byte\n                                            app_hash:\n                                              type: string\n                                              format: byte\n                                            last_results_hash:\n                                              type: string\n                                              format: byte\n                                            evidence_hash:\n                                              type: string\n                                              format: byte\n                                              title: consensus info\n                                            proposer_address:\n                                              type: string\n                                              format: byte\n                                          description: >-\n                                            Header defines the structure of a block\n                                            header.\n                                        commit:\n                                          type: object\n                                          properties:\n                                            height:\n                                              type: string\n                                              format: int64\n                                            round:\n                                              type: integer\n                                              format: int32\n                                            block_id:\n                                              type: object\n                                              properties:\n                                                hash:\n                                                  type: string\n                                                  format: byte\n                                                part_set_header:\n                                                  type: object\n                                                  properties:\n                                                    total:\n                                                      type: integer\n                                                      format: int64\n                                                    hash:\n                                                      type: string\n                                                      format: byte\n                                                  title: PartsetHeader\n                                              title: BlockID\n                                            signatures:\n                                              type: array\n                                              items:\n                                                type: object\n                                                properties:\n                                                  block_id_flag:\n                                                    type: string\n                                                    enum:\n                                                      - BLOCK_ID_FLAG_UNKNOWN\n                                                      - BLOCK_ID_FLAG_ABSENT\n                                                      - BLOCK_ID_FLAG_COMMIT\n                                                      - BLOCK_ID_FLAG_NIL\n                                                    default: BLOCK_ID_FLAG_UNKNOWN\n                                                    title: >-\n                                                      BlockIdFlag indicates which BlcokID the\n                                                      signature is for\n                                                  validator_address:\n                                                    type: string\n                                                    format: byte\n                                                  timestamp:\n                                                    type: string\n                                                    format: date-time\n                                                  signature:\n                                                    type: string\n                                                    format: byte\n                                                description: >-\n                                                  CommitSig is a part of the Vote included\n                                                  in a Commit.\n                                          description: >-\n                                            Commit contains the evidence that a\n                                            block was committed by a set of\n                                            validators.\n                                    validator_set:\n                                      type: object\n                                      properties:\n                                        validators:\n                                          type: array\n                                          items:\n                                            type: object\n                                            properties:\n                                              address:\n                                                type: string\n                                                format: byte\n                                              pub_key:\n                                                type: object\n                                                properties:\n                                                  ed25519:\n                                                    type: string\n                                                    format: byte\n                                                  secp256k1:\n                                                    type: string\n                                                    format: byte\n                                                title: >-\n                                                  PublicKey defines the keys available for\n                                                  use with Validators\n                                              voting_power:\n                                                type: string\n                                                format: int64\n                                              proposer_priority:\n                                                type: string\n                                                format: int64\n                                        proposer:\n                                          type: object\n                                          properties:\n                                            address:\n                                              type: string\n                                              format: byte\n                                            pub_key:\n                                              type: object\n                                              properties:\n                                                ed25519:\n                                                  type: string\n                                                  format: byte\n                                                secp256k1:\n                                                  type: string\n                                                  format: byte\n                                              title: >-\n                                                PublicKey defines the keys available for\n                                                use with Validators\n                                            voting_power:\n                                              type: string\n                                              format: int64\n                                            proposer_priority:\n                                              type: string\n                                              format: int64\n                                        total_voting_power:\n                                          type: string\n                                          format: int64\n                                common_height:\n                                  type: string\n                                  format: int64\n                                byzantine_validators:\n                                  type: array\n                                  items:\n                                    type: object\n                                    properties:\n                                      address:\n                                        type: string\n                                        format: byte\n                                      pub_key:\n                                        type: object\n                                        properties:\n                                          ed25519:\n                                            type: string\n                                            format: byte\n                                          secp256k1:\n                                            type: string\n                                            format: byte\n                                        title: >-\n                                          PublicKey defines the keys available for\n                                          use with Validators\n                                      voting_power:\n                                        type: string\n                                        format: int64\n                                      proposer_priority:\n                                        type: string\n                                        format: int64\n                                total_voting_power:\n                                  type: string\n                                  format: int64\n                                timestamp:\n                                  type: string\n                                  format: date-time\n                              description: >-\n                                LightClientAttackEvidence contains evidence of a\n                                set of validators attempting to mislead a light\n                                client.\n                  last_commit:\n                    type: object\n                    properties:\n                      height:\n                        type: string\n                        format: int64\n                      round:\n                        type: integer\n                        format: int32\n                      block_id:\n                        type: object\n                        properties:\n                          hash:\n                            type: string\n                            format: byte\n                          part_set_header:\n                            type: object\n                            properties:\n                              total:\n                                type: integer\n                                format: int64\n                              hash:\n                                type: string\n                                format: byte\n                            title: PartsetHeader\n                        title: BlockID\n                      signatures:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            block_id_flag:\n                              type: string\n                              enum:\n                                - BLOCK_ID_FLAG_UNKNOWN\n                                - BLOCK_ID_FLAG_ABSENT\n                                - BLOCK_ID_FLAG_COMMIT\n                                - BLOCK_ID_FLAG_NIL\n                              default: BLOCK_ID_FLAG_UNKNOWN\n                              title: >-\n                                BlockIdFlag indicates which BlcokID the\n                                signature is for\n                            validator_address:\n                              type: string\n                              format: byte\n                            timestamp:\n                              type: string\n                              format: date-time\n                            signature:\n                              type: string\n                              format: byte\n                          description: >-\n                            CommitSig is a part of the Vote included in a\n                            Commit.\n                    description: >-\n                      Commit contains the evidence that a block was committed by\n                      a set of validators.\n                title: 'Deprecated: please use `sdk_block` instead'\n              sdk_block:\n                title: 'Since: cosmos-sdk 0.47'\n                type: object\n                properties:\n                  header:\n                    type: object\n                    properties:\n                      version:\n                        title: basic block info\n                        type: object\n                        properties:\n                          block:\n                            type: string\n                            format: uint64\n                          app:\n                            type: string\n                            format: uint64\n                        description: >-\n                          Consensus captures the consensus rules for processing\n                          a block in the blockchain,\n\n                          including all blockchain data structures and the rules\n                          of the application's\n\n                          state transition machine.\n                      chain_id:\n                        type: string\n                      height:\n                        type: string\n                        format: int64\n                      time:\n                        type: string\n                        format: date-time\n                      last_block_id:\n                        type: object\n                        properties:\n                          hash:\n                            type: string\n                            format: byte\n                          part_set_header:\n                            type: object\n                            properties:\n                              total:\n                                type: integer\n                                format: int64\n                              hash:\n                                type: string\n                                format: byte\n                            title: PartsetHeader\n                        title: BlockID\n                      last_commit_hash:\n                        type: string\n                        format: byte\n                        title: hashes of block data\n                      data_hash:\n                        type: string\n                        format: byte\n                      validators_hash:\n                        type: string\n                        format: byte\n                        title: hashes from the app output from the prev block\n                      next_validators_hash:\n                        type: string\n                        format: byte\n                      consensus_hash:\n                        type: string\n                        format: byte\n                      app_hash:\n                        type: string\n                        format: byte\n                      last_results_hash:\n                        type: string\n                        format: byte\n                      evidence_hash:\n                        type: string\n                        format: byte\n                        title: consensus info\n                      proposer_address:\n                        type: string\n                        description: >-\n                          proposer_address is the original block proposer\n                          address, formatted as a Bech32 string.\n\n                          In Tendermint, this type is `bytes`, but in the SDK,\n                          we convert it to a Bech32 string\n\n                          for better UX.\n                    description: Header defines the structure of a Tendermint block header.\n                  data:\n                    type: object\n                    properties:\n                      txs:\n                        type: array\n                        items:\n                          type: string\n                          format: byte\n                        description: >-\n                          Txs that will be applied by state @ block.Height+1.\n\n                          NOTE: not all txs here are valid.  We're just agreeing\n                          on the order first.\n\n                          This means that block.AppHash does not include these\n                          txs.\n                    title: >-\n                      Data contains the set of transactions included in the\n                      block\n                  evidence:\n                    type: object\n                    properties:\n                      evidence:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            duplicate_vote_evidence:\n                              type: object\n                              properties:\n                                vote_a:\n                                  type: object\n                                  properties:\n                                    type:\n                                      type: string\n                                      enum:\n                                        - SIGNED_MSG_TYPE_UNKNOWN\n                                        - SIGNED_MSG_TYPE_PREVOTE\n                                        - SIGNED_MSG_TYPE_PRECOMMIT\n                                        - SIGNED_MSG_TYPE_PROPOSAL\n                                      default: SIGNED_MSG_TYPE_UNKNOWN\n                                      description: >-\n                                        SignedMsgType is a type of signed\n                                        message in the consensus.\n\n                                         - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                         - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                                    height:\n                                      type: string\n                                      format: int64\n                                    round:\n                                      type: integer\n                                      format: int32\n                                    block_id:\n                                      type: object\n                                      properties:\n                                        hash:\n                                          type: string\n                                          format: byte\n                                        part_set_header:\n                                          type: object\n                                          properties:\n                                            total:\n                                              type: integer\n                                              format: int64\n                                            hash:\n                                              type: string\n                                              format: byte\n                                          title: PartsetHeader\n                                      title: BlockID\n                                    timestamp:\n                                      type: string\n                                      format: date-time\n                                    validator_address:\n                                      type: string\n                                      format: byte\n                                    validator_index:\n                                      type: integer\n                                      format: int32\n                                    signature:\n                                      type: string\n                                      format: byte\n                                  description: >-\n                                    Vote represents a prevote, precommit, or\n                                    commit vote from validators for\n\n                                    consensus.\n                                vote_b:\n                                  type: object\n                                  properties:\n                                    type:\n                                      type: string\n                                      enum:\n                                        - SIGNED_MSG_TYPE_UNKNOWN\n                                        - SIGNED_MSG_TYPE_PREVOTE\n                                        - SIGNED_MSG_TYPE_PRECOMMIT\n                                        - SIGNED_MSG_TYPE_PROPOSAL\n                                      default: SIGNED_MSG_TYPE_UNKNOWN\n                                      description: >-\n                                        SignedMsgType is a type of signed\n                                        message in the consensus.\n\n                                         - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                         - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                                    height:\n                                      type: string\n                                      format: int64\n                                    round:\n                                      type: integer\n                                      format: int32\n                                    block_id:\n                                      type: object\n                                      properties:\n                                        hash:\n                                          type: string\n                                          format: byte\n                                        part_set_header:\n                                          type: object\n                                          properties:\n                                            total:\n                                              type: integer\n                                              format: int64\n                                            hash:\n                                              type: string\n                                              format: byte\n                                          title: PartsetHeader\n                                      title: BlockID\n                                    timestamp:\n                                      type: string\n                                      format: date-time\n                                    validator_address:\n                                      type: string\n                                      format: byte\n                                    validator_index:\n                                      type: integer\n                                      format: int32\n                                    signature:\n                                      type: string\n                                      format: byte\n                                  description: >-\n                                    Vote represents a prevote, precommit, or\n                                    commit vote from validators for\n\n                                    consensus.\n                                total_voting_power:\n                                  type: string\n                                  format: int64\n                                validator_power:\n                                  type: string\n                                  format: int64\n                                timestamp:\n                                  type: string\n                                  format: date-time\n                              description: >-\n                                DuplicateVoteEvidence contains evidence of a\n                                validator signed two conflicting votes.\n                            light_client_attack_evidence:\n                              type: object\n                              properties:\n                                conflicting_block:\n                                  type: object\n                                  properties:\n                                    signed_header:\n                                      type: object\n                                      properties:\n                                        header:\n                                          type: object\n                                          properties:\n                                            version:\n                                              title: basic block info\n                                              type: object\n                                              properties:\n                                                block:\n                                                  type: string\n                                                  format: uint64\n                                                app:\n                                                  type: string\n                                                  format: uint64\n                                              description: >-\n                                                Consensus captures the consensus rules\n                                                for processing a block in the\n                                                blockchain,\n\n                                                including all blockchain data structures\n                                                and the rules of the application's\n\n                                                state transition machine.\n                                            chain_id:\n                                              type: string\n                                            height:\n                                              type: string\n                                              format: int64\n                                            time:\n                                              type: string\n                                              format: date-time\n                                            last_block_id:\n                                              title: prev block info\n                                              type: object\n                                              properties:\n                                                hash:\n                                                  type: string\n                                                  format: byte\n                                                part_set_header:\n                                                  type: object\n                                                  properties:\n                                                    total:\n                                                      type: integer\n                                                      format: int64\n                                                    hash:\n                                                      type: string\n                                                      format: byte\n                                                  title: PartsetHeader\n                                            last_commit_hash:\n                                              type: string\n                                              format: byte\n                                              title: hashes of block data\n                                            data_hash:\n                                              type: string\n                                              format: byte\n                                            validators_hash:\n                                              type: string\n                                              format: byte\n                                              title: >-\n                                                hashes from the app output from the prev\n                                                block\n                                            next_validators_hash:\n                                              type: string\n                                              format: byte\n                                            consensus_hash:\n                                              type: string\n                                              format: byte\n                                            app_hash:\n                                              type: string\n                                              format: byte\n                                            last_results_hash:\n                                              type: string\n                                              format: byte\n                                            evidence_hash:\n                                              type: string\n                                              format: byte\n                                              title: consensus info\n                                            proposer_address:\n                                              type: string\n                                              format: byte\n                                          description: >-\n                                            Header defines the structure of a block\n                                            header.\n                                        commit:\n                                          type: object\n                                          properties:\n                                            height:\n                                              type: string\n                                              format: int64\n                                            round:\n                                              type: integer\n                                              format: int32\n                                            block_id:\n                                              type: object\n                                              properties:\n                                                hash:\n                                                  type: string\n                                                  format: byte\n                                                part_set_header:\n                                                  type: object\n                                                  properties:\n                                                    total:\n                                                      type: integer\n                                                      format: int64\n                                                    hash:\n                                                      type: string\n                                                      format: byte\n                                                  title: PartsetHeader\n                                              title: BlockID\n                                            signatures:\n                                              type: array\n                                              items:\n                                                type: object\n                                                properties:\n                                                  block_id_flag:\n                                                    type: string\n                                                    enum:\n                                                      - BLOCK_ID_FLAG_UNKNOWN\n                                                      - BLOCK_ID_FLAG_ABSENT\n                                                      - BLOCK_ID_FLAG_COMMIT\n                                                      - BLOCK_ID_FLAG_NIL\n                                                    default: BLOCK_ID_FLAG_UNKNOWN\n                                                    title: >-\n                                                      BlockIdFlag indicates which BlcokID the\n                                                      signature is for\n                                                  validator_address:\n                                                    type: string\n                                                    format: byte\n                                                  timestamp:\n                                                    type: string\n                                                    format: date-time\n                                                  signature:\n                                                    type: string\n                                                    format: byte\n                                                description: >-\n                                                  CommitSig is a part of the Vote included\n                                                  in a Commit.\n                                          description: >-\n                                            Commit contains the evidence that a\n                                            block was committed by a set of\n                                            validators.\n                                    validator_set:\n                                      type: object\n                                      properties:\n                                        validators:\n                                          type: array\n                                          items:\n                                            type: object\n                                            properties:\n                                              address:\n                                                type: string\n                                                format: byte\n                                              pub_key:\n                                                type: object\n                                                properties:\n                                                  ed25519:\n                                                    type: string\n                                                    format: byte\n                                                  secp256k1:\n                                                    type: string\n                                                    format: byte\n                                                title: >-\n                                                  PublicKey defines the keys available for\n                                                  use with Validators\n                                              voting_power:\n                                                type: string\n                                                format: int64\n                                              proposer_priority:\n                                                type: string\n                                                format: int64\n                                        proposer:\n                                          type: object\n                                          properties:\n                                            address:\n                                              type: string\n                                              format: byte\n                                            pub_key:\n                                              type: object\n                                              properties:\n                                                ed25519:\n                                                  type: string\n                                                  format: byte\n                                                secp256k1:\n                                                  type: string\n                                                  format: byte\n                                              title: >-\n                                                PublicKey defines the keys available for\n                                                use with Validators\n                                            voting_power:\n                                              type: string\n                                              format: int64\n                                            proposer_priority:\n                                              type: string\n                                              format: int64\n                                        total_voting_power:\n                                          type: string\n                                          format: int64\n                                common_height:\n                                  type: string\n                                  format: int64\n                                byzantine_validators:\n                                  type: array\n                                  items:\n                                    type: object\n                                    properties:\n                                      address:\n                                        type: string\n                                        format: byte\n                                      pub_key:\n                                        type: object\n                                        properties:\n                                          ed25519:\n                                            type: string\n                                            format: byte\n                                          secp256k1:\n                                            type: string\n                                            format: byte\n                                        title: >-\n                                          PublicKey defines the keys available for\n                                          use with Validators\n                                      voting_power:\n                                        type: string\n                                        format: int64\n                                      proposer_priority:\n                                        type: string\n                                        format: int64\n                                total_voting_power:\n                                  type: string\n                                  format: int64\n                                timestamp:\n                                  type: string\n                                  format: date-time\n                              description: >-\n                                LightClientAttackEvidence contains evidence of a\n                                set of validators attempting to mislead a light\n                                client.\n                  last_commit:\n                    type: object\n                    properties:\n                      height:\n                        type: string\n                        format: int64\n                      round:\n                        type: integer\n                        format: int32\n                      block_id:\n                        type: object\n                        properties:\n                          hash:\n                            type: string\n                            format: byte\n                          part_set_header:\n                            type: object\n                            properties:\n                              total:\n                                type: integer\n                                format: int64\n                              hash:\n                                type: string\n                                format: byte\n                            title: PartsetHeader\n                        title: BlockID\n                      signatures:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            block_id_flag:\n                              type: string\n                              enum:\n                                - BLOCK_ID_FLAG_UNKNOWN\n                                - BLOCK_ID_FLAG_ABSENT\n                                - BLOCK_ID_FLAG_COMMIT\n                                - BLOCK_ID_FLAG_NIL\n                              default: BLOCK_ID_FLAG_UNKNOWN\n                              title: >-\n                                BlockIdFlag indicates which BlcokID the\n                                signature is for\n                            validator_address:\n                              type: string\n                              format: byte\n                            timestamp:\n                              type: string\n                              format: date-time\n                            signature:\n                              type: string\n                              format: byte\n                          description: >-\n                            CommitSig is a part of the Vote included in a\n                            Commit.\n                    description: >-\n                      Commit contains the evidence that a block was committed by\n                      a set of validators.\n                description: >-\n                  Block is tendermint type Block, with the Header proposer\n                  address\n\n                  field converted to bech32 string.\n            description: >-\n              GetLatestBlockResponse is the response type for the\n              Query/GetLatestBlock RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/base/tendermint/v1beta1/blocks/{height}:\n    get:\n      summary: GetBlockByHeight queries block for given height.\n      operationId: GetBlockByHeight_FSKO8\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              block_id:\n                type: object\n                properties:\n                  hash:\n                    type: string\n                    format: byte\n                  part_set_header:\n                    type: object\n                    properties:\n                      total:\n                        type: integer\n                        format: int64\n                      hash:\n                        type: string\n                        format: byte\n                    title: PartsetHeader\n                title: BlockID\n              block:\n                type: object\n                properties:\n                  header:\n                    type: object\n                    properties:\n                      version:\n                        title: basic block info\n                        type: object\n                        properties:\n                          block:\n                            type: string\n                            format: uint64\n                          app:\n                            type: string\n                            format: uint64\n                        description: >-\n                          Consensus captures the consensus rules for processing\n                          a block in the blockchain,\n\n                          including all blockchain data structures and the rules\n                          of the application's\n\n                          state transition machine.\n                      chain_id:\n                        type: string\n                      height:\n                        type: string\n                        format: int64\n                      time:\n                        type: string\n                        format: date-time\n                      last_block_id:\n                        title: prev block info\n                        type: object\n                        properties:\n                          hash:\n                            type: string\n                            format: byte\n                          part_set_header:\n                            type: object\n                            properties:\n                              total:\n                                type: integer\n                                format: int64\n                              hash:\n                                type: string\n                                format: byte\n                            title: PartsetHeader\n                      last_commit_hash:\n                        type: string\n                        format: byte\n                        title: hashes of block data\n                      data_hash:\n                        type: string\n                        format: byte\n                      validators_hash:\n                        type: string\n                        format: byte\n                        title: hashes from the app output from the prev block\n                      next_validators_hash:\n                        type: string\n                        format: byte\n                      consensus_hash:\n                        type: string\n                        format: byte\n                      app_hash:\n                        type: string\n                        format: byte\n                      last_results_hash:\n                        type: string\n                        format: byte\n                      evidence_hash:\n                        type: string\n                        format: byte\n                        title: consensus info\n                      proposer_address:\n                        type: string\n                        format: byte\n                    description: Header defines the structure of a block header.\n                  data:\n                    type: object\n                    properties:\n                      txs:\n                        type: array\n                        items:\n                          type: string\n                          format: byte\n                        description: >-\n                          Txs that will be applied by state @ block.Height+1.\n\n                          NOTE: not all txs here are valid.  We're just agreeing\n                          on the order first.\n\n                          This means that block.AppHash does not include these\n                          txs.\n                    title: >-\n                      Data contains the set of transactions included in the\n                      block\n                  evidence:\n                    type: object\n                    properties:\n                      evidence:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            duplicate_vote_evidence:\n                              type: object\n                              properties:\n                                vote_a:\n                                  type: object\n                                  properties:\n                                    type:\n                                      type: string\n                                      enum:\n                                        - SIGNED_MSG_TYPE_UNKNOWN\n                                        - SIGNED_MSG_TYPE_PREVOTE\n                                        - SIGNED_MSG_TYPE_PRECOMMIT\n                                        - SIGNED_MSG_TYPE_PROPOSAL\n                                      default: SIGNED_MSG_TYPE_UNKNOWN\n                                      description: >-\n                                        SignedMsgType is a type of signed\n                                        message in the consensus.\n\n                                         - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                         - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                                    height:\n                                      type: string\n                                      format: int64\n                                    round:\n                                      type: integer\n                                      format: int32\n                                    block_id:\n                                      type: object\n                                      properties:\n                                        hash:\n                                          type: string\n                                          format: byte\n                                        part_set_header:\n                                          type: object\n                                          properties:\n                                            total:\n                                              type: integer\n                                              format: int64\n                                            hash:\n                                              type: string\n                                              format: byte\n                                          title: PartsetHeader\n                                      title: BlockID\n                                    timestamp:\n                                      type: string\n                                      format: date-time\n                                    validator_address:\n                                      type: string\n                                      format: byte\n                                    validator_index:\n                                      type: integer\n                                      format: int32\n                                    signature:\n                                      type: string\n                                      format: byte\n                                  description: >-\n                                    Vote represents a prevote, precommit, or\n                                    commit vote from validators for\n\n                                    consensus.\n                                vote_b:\n                                  type: object\n                                  properties:\n                                    type:\n                                      type: string\n                                      enum:\n                                        - SIGNED_MSG_TYPE_UNKNOWN\n                                        - SIGNED_MSG_TYPE_PREVOTE\n                                        - SIGNED_MSG_TYPE_PRECOMMIT\n                                        - SIGNED_MSG_TYPE_PROPOSAL\n                                      default: SIGNED_MSG_TYPE_UNKNOWN\n                                      description: >-\n                                        SignedMsgType is a type of signed\n                                        message in the consensus.\n\n                                         - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                         - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                                    height:\n                                      type: string\n                                      format: int64\n                                    round:\n                                      type: integer\n                                      format: int32\n                                    block_id:\n                                      type: object\n                                      properties:\n                                        hash:\n                                          type: string\n                                          format: byte\n                                        part_set_header:\n                                          type: object\n                                          properties:\n                                            total:\n                                              type: integer\n                                              format: int64\n                                            hash:\n                                              type: string\n                                              format: byte\n                                          title: PartsetHeader\n                                      title: BlockID\n                                    timestamp:\n                                      type: string\n                                      format: date-time\n                                    validator_address:\n                                      type: string\n                                      format: byte\n                                    validator_index:\n                                      type: integer\n                                      format: int32\n                                    signature:\n                                      type: string\n                                      format: byte\n                                  description: >-\n                                    Vote represents a prevote, precommit, or\n                                    commit vote from validators for\n\n                                    consensus.\n                                total_voting_power:\n                                  type: string\n                                  format: int64\n                                validator_power:\n                                  type: string\n                                  format: int64\n                                timestamp:\n                                  type: string\n                                  format: date-time\n                              description: >-\n                                DuplicateVoteEvidence contains evidence of a\n                                validator signed two conflicting votes.\n                            light_client_attack_evidence:\n                              type: object\n                              properties:\n                                conflicting_block:\n                                  type: object\n                                  properties:\n                                    signed_header:\n                                      type: object\n                                      properties:\n                                        header:\n                                          type: object\n                                          properties:\n                                            version:\n                                              title: basic block info\n                                              type: object\n                                              properties:\n                                                block:\n                                                  type: string\n                                                  format: uint64\n                                                app:\n                                                  type: string\n                                                  format: uint64\n                                              description: >-\n                                                Consensus captures the consensus rules\n                                                for processing a block in the\n                                                blockchain,\n\n                                                including all blockchain data structures\n                                                and the rules of the application's\n\n                                                state transition machine.\n                                            chain_id:\n                                              type: string\n                                            height:\n                                              type: string\n                                              format: int64\n                                            time:\n                                              type: string\n                                              format: date-time\n                                            last_block_id:\n                                              title: prev block info\n                                              type: object\n                                              properties:\n                                                hash:\n                                                  type: string\n                                                  format: byte\n                                                part_set_header:\n                                                  type: object\n                                                  properties:\n                                                    total:\n                                                      type: integer\n                                                      format: int64\n                                                    hash:\n                                                      type: string\n                                                      format: byte\n                                                  title: PartsetHeader\n                                            last_commit_hash:\n                                              type: string\n                                              format: byte\n                                              title: hashes of block data\n                                            data_hash:\n                                              type: string\n                                              format: byte\n                                            validators_hash:\n                                              type: string\n                                              format: byte\n                                              title: >-\n                                                hashes from the app output from the prev\n                                                block\n                                            next_validators_hash:\n                                              type: string\n                                              format: byte\n                                            consensus_hash:\n                                              type: string\n                                              format: byte\n                                            app_hash:\n                                              type: string\n                                              format: byte\n                                            last_results_hash:\n                                              type: string\n                                              format: byte\n                                            evidence_hash:\n                                              type: string\n                                              format: byte\n                                              title: consensus info\n                                            proposer_address:\n                                              type: string\n                                              format: byte\n                                          description: >-\n                                            Header defines the structure of a block\n                                            header.\n                                        commit:\n                                          type: object\n                                          properties:\n                                            height:\n                                              type: string\n                                              format: int64\n                                            round:\n                                              type: integer\n                                              format: int32\n                                            block_id:\n                                              type: object\n                                              properties:\n                                                hash:\n                                                  type: string\n                                                  format: byte\n                                                part_set_header:\n                                                  type: object\n                                                  properties:\n                                                    total:\n                                                      type: integer\n                                                      format: int64\n                                                    hash:\n                                                      type: string\n                                                      format: byte\n                                                  title: PartsetHeader\n                                              title: BlockID\n                                            signatures:\n                                              type: array\n                                              items:\n                                                type: object\n                                                properties:\n                                                  block_id_flag:\n                                                    type: string\n                                                    enum:\n                                                      - BLOCK_ID_FLAG_UNKNOWN\n                                                      - BLOCK_ID_FLAG_ABSENT\n                                                      - BLOCK_ID_FLAG_COMMIT\n                                                      - BLOCK_ID_FLAG_NIL\n                                                    default: BLOCK_ID_FLAG_UNKNOWN\n                                                    title: >-\n                                                      BlockIdFlag indicates which BlcokID the\n                                                      signature is for\n                                                  validator_address:\n                                                    type: string\n                                                    format: byte\n                                                  timestamp:\n                                                    type: string\n                                                    format: date-time\n                                                  signature:\n                                                    type: string\n                                                    format: byte\n                                                description: >-\n                                                  CommitSig is a part of the Vote included\n                                                  in a Commit.\n                                          description: >-\n                                            Commit contains the evidence that a\n                                            block was committed by a set of\n                                            validators.\n                                    validator_set:\n                                      type: object\n                                      properties:\n                                        validators:\n                                          type: array\n                                          items:\n                                            type: object\n                                            properties:\n                                              address:\n                                                type: string\n                                                format: byte\n                                              pub_key:\n                                                type: object\n                                                properties:\n                                                  ed25519:\n                                                    type: string\n                                                    format: byte\n                                                  secp256k1:\n                                                    type: string\n                                                    format: byte\n                                                title: >-\n                                                  PublicKey defines the keys available for\n                                                  use with Validators\n                                              voting_power:\n                                                type: string\n                                                format: int64\n                                              proposer_priority:\n                                                type: string\n                                                format: int64\n                                        proposer:\n                                          type: object\n                                          properties:\n                                            address:\n                                              type: string\n                                              format: byte\n                                            pub_key:\n                                              type: object\n                                              properties:\n                                                ed25519:\n                                                  type: string\n                                                  format: byte\n                                                secp256k1:\n                                                  type: string\n                                                  format: byte\n                                              title: >-\n                                                PublicKey defines the keys available for\n                                                use with Validators\n                                            voting_power:\n                                              type: string\n                                              format: int64\n                                            proposer_priority:\n                                              type: string\n                                              format: int64\n                                        total_voting_power:\n                                          type: string\n                                          format: int64\n                                common_height:\n                                  type: string\n                                  format: int64\n                                byzantine_validators:\n                                  type: array\n                                  items:\n                                    type: object\n                                    properties:\n                                      address:\n                                        type: string\n                                        format: byte\n                                      pub_key:\n                                        type: object\n                                        properties:\n                                          ed25519:\n                                            type: string\n                                            format: byte\n                                          secp256k1:\n                                            type: string\n                                            format: byte\n                                        title: >-\n                                          PublicKey defines the keys available for\n                                          use with Validators\n                                      voting_power:\n                                        type: string\n                                        format: int64\n                                      proposer_priority:\n                                        type: string\n                                        format: int64\n                                total_voting_power:\n                                  type: string\n                                  format: int64\n                                timestamp:\n                                  type: string\n                                  format: date-time\n                              description: >-\n                                LightClientAttackEvidence contains evidence of a\n                                set of validators attempting to mislead a light\n                                client.\n                  last_commit:\n                    type: object\n                    properties:\n                      height:\n                        type: string\n                        format: int64\n                      round:\n                        type: integer\n                        format: int32\n                      block_id:\n                        type: object\n                        properties:\n                          hash:\n                            type: string\n                            format: byte\n                          part_set_header:\n                            type: object\n                            properties:\n                              total:\n                                type: integer\n                                format: int64\n                              hash:\n                                type: string\n                                format: byte\n                            title: PartsetHeader\n                        title: BlockID\n                      signatures:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            block_id_flag:\n                              type: string\n                              enum:\n                                - BLOCK_ID_FLAG_UNKNOWN\n                                - BLOCK_ID_FLAG_ABSENT\n                                - BLOCK_ID_FLAG_COMMIT\n                                - BLOCK_ID_FLAG_NIL\n                              default: BLOCK_ID_FLAG_UNKNOWN\n                              title: >-\n                                BlockIdFlag indicates which BlcokID the\n                                signature is for\n                            validator_address:\n                              type: string\n                              format: byte\n                            timestamp:\n                              type: string\n                              format: date-time\n                            signature:\n                              type: string\n                              format: byte\n                          description: >-\n                            CommitSig is a part of the Vote included in a\n                            Commit.\n                    description: >-\n                      Commit contains the evidence that a block was committed by\n                      a set of validators.\n                title: 'Deprecated: please use `sdk_block` instead'\n              sdk_block:\n                title: 'Since: cosmos-sdk 0.47'\n                type: object\n                properties:\n                  header:\n                    type: object\n                    properties:\n                      version:\n                        title: basic block info\n                        type: object\n                        properties:\n                          block:\n                            type: string\n                            format: uint64\n                          app:\n                            type: string\n                            format: uint64\n                        description: >-\n                          Consensus captures the consensus rules for processing\n                          a block in the blockchain,\n\n                          including all blockchain data structures and the rules\n                          of the application's\n\n                          state transition machine.\n                      chain_id:\n                        type: string\n                      height:\n                        type: string\n                        format: int64\n                      time:\n                        type: string\n                        format: date-time\n                      last_block_id:\n                        type: object\n                        properties:\n                          hash:\n                            type: string\n                            format: byte\n                          part_set_header:\n                            type: object\n                            properties:\n                              total:\n                                type: integer\n                                format: int64\n                              hash:\n                                type: string\n                                format: byte\n                            title: PartsetHeader\n                        title: BlockID\n                      last_commit_hash:\n                        type: string\n                        format: byte\n                        title: hashes of block data\n                      data_hash:\n                        type: string\n                        format: byte\n                      validators_hash:\n                        type: string\n                        format: byte\n                        title: hashes from the app output from the prev block\n                      next_validators_hash:\n                        type: string\n                        format: byte\n                      consensus_hash:\n                        type: string\n                        format: byte\n                      app_hash:\n                        type: string\n                        format: byte\n                      last_results_hash:\n                        type: string\n                        format: byte\n                      evidence_hash:\n                        type: string\n                        format: byte\n                        title: consensus info\n                      proposer_address:\n                        type: string\n                        description: >-\n                          proposer_address is the original block proposer\n                          address, formatted as a Bech32 string.\n\n                          In Tendermint, this type is `bytes`, but in the SDK,\n                          we convert it to a Bech32 string\n\n                          for better UX.\n                    description: Header defines the structure of a Tendermint block header.\n                  data:\n                    type: object\n                    properties:\n                      txs:\n                        type: array\n                        items:\n                          type: string\n                          format: byte\n                        description: >-\n                          Txs that will be applied by state @ block.Height+1.\n\n                          NOTE: not all txs here are valid.  We're just agreeing\n                          on the order first.\n\n                          This means that block.AppHash does not include these\n                          txs.\n                    title: >-\n                      Data contains the set of transactions included in the\n                      block\n                  evidence:\n                    type: object\n                    properties:\n                      evidence:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            duplicate_vote_evidence:\n                              type: object\n                              properties:\n                                vote_a:\n                                  type: object\n                                  properties:\n                                    type:\n                                      type: string\n                                      enum:\n                                        - SIGNED_MSG_TYPE_UNKNOWN\n                                        - SIGNED_MSG_TYPE_PREVOTE\n                                        - SIGNED_MSG_TYPE_PRECOMMIT\n                                        - SIGNED_MSG_TYPE_PROPOSAL\n                                      default: SIGNED_MSG_TYPE_UNKNOWN\n                                      description: >-\n                                        SignedMsgType is a type of signed\n                                        message in the consensus.\n\n                                         - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                         - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                                    height:\n                                      type: string\n                                      format: int64\n                                    round:\n                                      type: integer\n                                      format: int32\n                                    block_id:\n                                      type: object\n                                      properties:\n                                        hash:\n                                          type: string\n                                          format: byte\n                                        part_set_header:\n                                          type: object\n                                          properties:\n                                            total:\n                                              type: integer\n                                              format: int64\n                                            hash:\n                                              type: string\n                                              format: byte\n                                          title: PartsetHeader\n                                      title: BlockID\n                                    timestamp:\n                                      type: string\n                                      format: date-time\n                                    validator_address:\n                                      type: string\n                                      format: byte\n                                    validator_index:\n                                      type: integer\n                                      format: int32\n                                    signature:\n                                      type: string\n                                      format: byte\n                                  description: >-\n                                    Vote represents a prevote, precommit, or\n                                    commit vote from validators for\n\n                                    consensus.\n                                vote_b:\n                                  type: object\n                                  properties:\n                                    type:\n                                      type: string\n                                      enum:\n                                        - SIGNED_MSG_TYPE_UNKNOWN\n                                        - SIGNED_MSG_TYPE_PREVOTE\n                                        - SIGNED_MSG_TYPE_PRECOMMIT\n                                        - SIGNED_MSG_TYPE_PROPOSAL\n                                      default: SIGNED_MSG_TYPE_UNKNOWN\n                                      description: >-\n                                        SignedMsgType is a type of signed\n                                        message in the consensus.\n\n                                         - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                         - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                                    height:\n                                      type: string\n                                      format: int64\n                                    round:\n                                      type: integer\n                                      format: int32\n                                    block_id:\n                                      type: object\n                                      properties:\n                                        hash:\n                                          type: string\n                                          format: byte\n                                        part_set_header:\n                                          type: object\n                                          properties:\n                                            total:\n                                              type: integer\n                                              format: int64\n                                            hash:\n                                              type: string\n                                              format: byte\n                                          title: PartsetHeader\n                                      title: BlockID\n                                    timestamp:\n                                      type: string\n                                      format: date-time\n                                    validator_address:\n                                      type: string\n                                      format: byte\n                                    validator_index:\n                                      type: integer\n                                      format: int32\n                                    signature:\n                                      type: string\n                                      format: byte\n                                  description: >-\n                                    Vote represents a prevote, precommit, or\n                                    commit vote from validators for\n\n                                    consensus.\n                                total_voting_power:\n                                  type: string\n                                  format: int64\n                                validator_power:\n                                  type: string\n                                  format: int64\n                                timestamp:\n                                  type: string\n                                  format: date-time\n                              description: >-\n                                DuplicateVoteEvidence contains evidence of a\n                                validator signed two conflicting votes.\n                            light_client_attack_evidence:\n                              type: object\n                              properties:\n                                conflicting_block:\n                                  type: object\n                                  properties:\n                                    signed_header:\n                                      type: object\n                                      properties:\n                                        header:\n                                          type: object\n                                          properties:\n                                            version:\n                                              title: basic block info\n                                              type: object\n                                              properties:\n                                                block:\n                                                  type: string\n                                                  format: uint64\n                                                app:\n                                                  type: string\n                                                  format: uint64\n                                              description: >-\n                                                Consensus captures the consensus rules\n                                                for processing a block in the\n                                                blockchain,\n\n                                                including all blockchain data structures\n                                                and the rules of the application's\n\n                                                state transition machine.\n                                            chain_id:\n                                              type: string\n                                            height:\n                                              type: string\n                                              format: int64\n                                            time:\n                                              type: string\n                                              format: date-time\n                                            last_block_id:\n                                              title: prev block info\n                                              type: object\n                                              properties:\n                                                hash:\n                                                  type: string\n                                                  format: byte\n                                                part_set_header:\n                                                  type: object\n                                                  properties:\n                                                    total:\n                                                      type: integer\n                                                      format: int64\n                                                    hash:\n                                                      type: string\n                                                      format: byte\n                                                  title: PartsetHeader\n                                            last_commit_hash:\n                                              type: string\n                                              format: byte\n                                              title: hashes of block data\n                                            data_hash:\n                                              type: string\n                                              format: byte\n                                            validators_hash:\n                                              type: string\n                                              format: byte\n                                              title: >-\n                                                hashes from the app output from the prev\n                                                block\n                                            next_validators_hash:\n                                              type: string\n                                              format: byte\n                                            consensus_hash:\n                                              type: string\n                                              format: byte\n                                            app_hash:\n                                              type: string\n                                              format: byte\n                                            last_results_hash:\n                                              type: string\n                                              format: byte\n                                            evidence_hash:\n                                              type: string\n                                              format: byte\n                                              title: consensus info\n                                            proposer_address:\n                                              type: string\n                                              format: byte\n                                          description: >-\n                                            Header defines the structure of a block\n                                            header.\n                                        commit:\n                                          type: object\n                                          properties:\n                                            height:\n                                              type: string\n                                              format: int64\n                                            round:\n                                              type: integer\n                                              format: int32\n                                            block_id:\n                                              type: object\n                                              properties:\n                                                hash:\n                                                  type: string\n                                                  format: byte\n                                                part_set_header:\n                                                  type: object\n                                                  properties:\n                                                    total:\n                                                      type: integer\n                                                      format: int64\n                                                    hash:\n                                                      type: string\n                                                      format: byte\n                                                  title: PartsetHeader\n                                              title: BlockID\n                                            signatures:\n                                              type: array\n                                              items:\n                                                type: object\n                                                properties:\n                                                  block_id_flag:\n                                                    type: string\n                                                    enum:\n                                                      - BLOCK_ID_FLAG_UNKNOWN\n                                                      - BLOCK_ID_FLAG_ABSENT\n                                                      - BLOCK_ID_FLAG_COMMIT\n                                                      - BLOCK_ID_FLAG_NIL\n                                                    default: BLOCK_ID_FLAG_UNKNOWN\n                                                    title: >-\n                                                      BlockIdFlag indicates which BlcokID the\n                                                      signature is for\n                                                  validator_address:\n                                                    type: string\n                                                    format: byte\n                                                  timestamp:\n                                                    type: string\n                                                    format: date-time\n                                                  signature:\n                                                    type: string\n                                                    format: byte\n                                                description: >-\n                                                  CommitSig is a part of the Vote included\n                                                  in a Commit.\n                                          description: >-\n                                            Commit contains the evidence that a\n                                            block was committed by a set of\n                                            validators.\n                                    validator_set:\n                                      type: object\n                                      properties:\n                                        validators:\n                                          type: array\n                                          items:\n                                            type: object\n                                            properties:\n                                              address:\n                                                type: string\n                                                format: byte\n                                              pub_key:\n                                                type: object\n                                                properties:\n                                                  ed25519:\n                                                    type: string\n                                                    format: byte\n                                                  secp256k1:\n                                                    type: string\n                                                    format: byte\n                                                title: >-\n                                                  PublicKey defines the keys available for\n                                                  use with Validators\n                                              voting_power:\n                                                type: string\n                                                format: int64\n                                              proposer_priority:\n                                                type: string\n                                                format: int64\n                                        proposer:\n                                          type: object\n                                          properties:\n                                            address:\n                                              type: string\n                                              format: byte\n                                            pub_key:\n                                              type: object\n                                              properties:\n                                                ed25519:\n                                                  type: string\n                                                  format: byte\n                                                secp256k1:\n                                                  type: string\n                                                  format: byte\n                                              title: >-\n                                                PublicKey defines the keys available for\n                                                use with Validators\n                                            voting_power:\n                                              type: string\n                                              format: int64\n                                            proposer_priority:\n                                              type: string\n                                              format: int64\n                                        total_voting_power:\n                                          type: string\n                                          format: int64\n                                common_height:\n                                  type: string\n                                  format: int64\n                                byzantine_validators:\n                                  type: array\n                                  items:\n                                    type: object\n                                    properties:\n                                      address:\n                                        type: string\n                                        format: byte\n                                      pub_key:\n                                        type: object\n                                        properties:\n                                          ed25519:\n                                            type: string\n                                            format: byte\n                                          secp256k1:\n                                            type: string\n                                            format: byte\n                                        title: >-\n                                          PublicKey defines the keys available for\n                                          use with Validators\n                                      voting_power:\n                                        type: string\n                                        format: int64\n                                      proposer_priority:\n                                        type: string\n                                        format: int64\n                                total_voting_power:\n                                  type: string\n                                  format: int64\n                                timestamp:\n                                  type: string\n                                  format: date-time\n                              description: >-\n                                LightClientAttackEvidence contains evidence of a\n                                set of validators attempting to mislead a light\n                                client.\n                  last_commit:\n                    type: object\n                    properties:\n                      height:\n                        type: string\n                        format: int64\n                      round:\n                        type: integer\n                        format: int32\n                      block_id:\n                        type: object\n                        properties:\n                          hash:\n                            type: string\n                            format: byte\n                          part_set_header:\n                            type: object\n                            properties:\n                              total:\n                                type: integer\n                                format: int64\n                              hash:\n                                type: string\n                                format: byte\n                            title: PartsetHeader\n                        title: BlockID\n                      signatures:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            block_id_flag:\n                              type: string\n                              enum:\n                                - BLOCK_ID_FLAG_UNKNOWN\n                                - BLOCK_ID_FLAG_ABSENT\n                                - BLOCK_ID_FLAG_COMMIT\n                                - BLOCK_ID_FLAG_NIL\n                              default: BLOCK_ID_FLAG_UNKNOWN\n                              title: >-\n                                BlockIdFlag indicates which BlcokID the\n                                signature is for\n                            validator_address:\n                              type: string\n                              format: byte\n                            timestamp:\n                              type: string\n                              format: date-time\n                            signature:\n                              type: string\n                              format: byte\n                          description: >-\n                            CommitSig is a part of the Vote included in a\n                            Commit.\n                    description: >-\n                      Commit contains the evidence that a block was committed by\n                      a set of validators.\n                description: >-\n                  Block is tendermint type Block, with the Header proposer\n                  address\n\n                  field converted to bech32 string.\n            description: >-\n              GetBlockByHeightResponse is the response type for the\n              Query/GetBlockByHeight RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: height\n          in: path\n          required: true\n          type: string\n          format: int64\n      tags:\n        - gRPC Gateway API\n  /cosmos/base/tendermint/v1beta1/node_info:\n    get:\n      summary: GetNodeInfo queries the current node info.\n      operationId: GetNodeInfo_IVP7S\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              default_node_info:\n                type: object\n                properties:\n                  protocol_version:\n                    type: object\n                    properties:\n                      p2p:\n                        type: string\n                        format: uint64\n                      block:\n                        type: string\n                        format: uint64\n                      app:\n                        type: string\n                        format: uint64\n                  default_node_id:\n                    type: string\n                  listen_addr:\n                    type: string\n                  network:\n                    type: string\n                  version:\n                    type: string\n                  channels:\n                    type: string\n                    format: byte\n                  moniker:\n                    type: string\n                  other:\n                    type: object\n                    properties:\n                      tx_index:\n                        type: string\n                      rpc_address:\n                        type: string\n              application_version:\n                type: object\n                properties:\n                  name:\n                    type: string\n                  app_name:\n                    type: string\n                  version:\n                    type: string\n                  git_commit:\n                    type: string\n                  build_tags:\n                    type: string\n                  go_version:\n                    type: string\n                  build_deps:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        path:\n                          type: string\n                          title: module path\n                        version:\n                          type: string\n                          title: module version\n                        sum:\n                          type: string\n                          title: checksum\n                      title: Module is the type for VersionInfo\n                  cosmos_sdk_version:\n                    type: string\n                    title: 'Since: cosmos-sdk 0.43'\n                description: VersionInfo is the type for the GetNodeInfoResponse message.\n            description: >-\n              GetNodeInfoResponse is the response type for the Query/GetNodeInfo\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/base/tendermint/v1beta1/syncing:\n    get:\n      summary: GetSyncing queries node syncing.\n      operationId: GetSyncing_9SHWP\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              syncing:\n                type: boolean\n            description: >-\n              GetSyncingResponse is the response type for the Query/GetSyncing\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/base/tendermint/v1beta1/validatorsets/latest:\n    get:\n      summary: GetLatestValidatorSet queries latest validator-set.\n      operationId: GetLatestValidatorSet_Y0S55\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              block_height:\n                type: string\n                format: int64\n              validators:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    address:\n                      type: string\n                    pub_key:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                    voting_power:\n                      type: string\n                      format: int64\n                    proposer_priority:\n                      type: string\n                      format: int64\n                  description: Validator is the type for the validator-set.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: >-\n              GetLatestValidatorSetResponse is the response type for the\n              Query/GetValidatorSetByHeight RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/base/tendermint/v1beta1/validatorsets/{height}:\n    get:\n      summary: GetValidatorSetByHeight queries validator-set at a given height.\n      operationId: GetValidatorSetByHeight_WR03D\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              block_height:\n                type: string\n                format: int64\n              validators:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    address:\n                      type: string\n                    pub_key:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                    voting_power:\n                      type: string\n                      format: int64\n                    proposer_priority:\n                      type: string\n                      format: int64\n                  description: Validator is the type for the validator-set.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: >-\n              GetValidatorSetByHeightResponse is the response type for the\n              Query/GetValidatorSetByHeight RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: height\n          in: path\n          required: true\n          type: string\n          format: int64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/slashing/v1beta1/params:\n    get:\n      summary: Params queries the parameters of slashing module\n      operationId: Params_MFGZ0\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              params:\n                type: object\n                properties:\n                  signed_blocks_window:\n                    type: string\n                    format: int64\n                  min_signed_per_window:\n                    type: string\n                    format: byte\n                  downtime_jail_duration:\n                    type: string\n                  slash_fraction_double_sign:\n                    type: string\n                    format: byte\n                  slash_fraction_downtime:\n                    type: string\n                    format: byte\n                description: >-\n                  Params represents the parameters used for by the slashing\n                  module.\n            title: >-\n              QueryParamsResponse is the response type for the Query/Params RPC\n              method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/slashing/v1beta1/signing_infos:\n    get:\n      summary: SigningInfos queries signing info of all validators\n      operationId: SigningInfos_SD3H8\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              info:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    address:\n                      type: string\n                    start_height:\n                      type: string\n                      format: int64\n                      title: >-\n                        Height at which validator was first a candidate OR was\n                        unjailed\n                    index_offset:\n                      type: string\n                      format: int64\n                      description: >-\n                        Index which is incremented each time the validator was a\n                        bonded\n\n                        in a block and may have signed a precommit or not. This\n                        in conjunction with the\n\n                        `SignedBlocksWindow` param determines the index in the\n                        `MissedBlocksBitArray`.\n                    jailed_until:\n                      type: string\n                      format: date-time\n                      description: >-\n                        Timestamp until which the validator is jailed due to\n                        liveness downtime.\n                    tombstoned:\n                      type: boolean\n                      description: >-\n                        Whether or not a validator has been tombstoned (killed\n                        out of validator set). It is set\n\n                        once the validator commits an equivocation or for any\n                        other configured misbehiavor.\n                    missed_blocks_counter:\n                      type: string\n                      format: int64\n                      description: >-\n                        A counter kept to avoid unnecessary array reads.\n\n                        Note that `Sum(MissedBlocksBitArray)` always equals\n                        `MissedBlocksCounter`.\n                  description: >-\n                    ValidatorSigningInfo defines a validator's signing info for\n                    monitoring their\n\n                    liveness activity.\n                title: info is the signing info of all validators\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            title: >-\n              QuerySigningInfosResponse is the response type for the\n              Query/SigningInfos RPC\n\n              method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/slashing/v1beta1/signing_infos/{cons_address}:\n    get:\n      summary: SigningInfo queries the signing info of given cons address\n      operationId: SigningInfo_2HQ8N\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              val_signing_info:\n                type: object\n                properties:\n                  address:\n                    type: string\n                  start_height:\n                    type: string\n                    format: int64\n                    title: >-\n                      Height at which validator was first a candidate OR was\n                      unjailed\n                  index_offset:\n                    type: string\n                    format: int64\n                    description: >-\n                      Index which is incremented each time the validator was a\n                      bonded\n\n                      in a block and may have signed a precommit or not. This in\n                      conjunction with the\n\n                      `SignedBlocksWindow` param determines the index in the\n                      `MissedBlocksBitArray`.\n                  jailed_until:\n                    type: string\n                    format: date-time\n                    description: >-\n                      Timestamp until which the validator is jailed due to\n                      liveness downtime.\n                  tombstoned:\n                    type: boolean\n                    description: >-\n                      Whether or not a validator has been tombstoned (killed out\n                      of validator set). It is set\n\n                      once the validator commits an equivocation or for any\n                      other configured misbehiavor.\n                  missed_blocks_counter:\n                    type: string\n                    format: int64\n                    description: >-\n                      A counter kept to avoid unnecessary array reads.\n\n                      Note that `Sum(MissedBlocksBitArray)` always equals\n                      `MissedBlocksCounter`.\n                description: >-\n                  ValidatorSigningInfo defines a validator's signing info for\n                  monitoring their\n\n                  liveness activity.\n                title: >-\n                  val_signing_info is the signing info of requested val cons\n                  address\n            title: >-\n              QuerySigningInfoResponse is the response type for the\n              Query/SigningInfo RPC\n\n              method\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: cons_address\n          description: cons_address is the address to query signing info of\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/gov/v1beta1/params/{params_type}:\n    get:\n      summary: Params queries all parameters of the gov module.\n      operationId: Params_PJJN8\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              voting_params:\n                description: voting_params defines the parameters related to voting.\n                type: object\n                properties:\n                  voting_period:\n                    type: string\n                    description: Duration of the voting period.\n              deposit_params:\n                description: deposit_params defines the parameters related to deposit.\n                type: object\n                properties:\n                  min_deposit:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                    description: Minimum deposit for a proposal to enter voting period.\n                  max_deposit_period:\n                    type: string\n                    description: >-\n                      Maximum period for Atom holders to deposit on a proposal.\n                      Initial value: 2\n\n                      months.\n              tally_params:\n                description: tally_params defines the parameters related to tally.\n                type: object\n                properties:\n                  quorum:\n                    type: string\n                    format: byte\n                    description: >-\n                      Minimum percentage of total stake needed to vote for a\n                      result to be\n\n                      considered valid.\n                  threshold:\n                    type: string\n                    format: byte\n                    description: >-\n                      Minimum proportion of Yes votes for proposal to pass.\n                      Default value: 0.5.\n                  veto_threshold:\n                    type: string\n                    format: byte\n                    description: >-\n                      Minimum value of Veto votes to Total votes ratio for\n                      proposal to be\n\n                      vetoed. Default value: 1/3.\n            description: >-\n              QueryParamsResponse is the response type for the Query/Params RPC\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: params_type\n          description: >-\n            params_type defines which parameters to query for, can be one of\n            \"voting\",\n\n            \"tallying\" or \"deposit\".\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/gov/v1beta1/proposals:\n    get:\n      summary: Proposals queries all proposals based on given status.\n      operationId: Proposals_XD66Y\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              proposals:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    proposal_id:\n                      type: string\n                      format: uint64\n                      description: proposal_id defines the unique id of the proposal.\n                    content:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                      description: content is the proposal's content.\n                    status:\n                      description: status defines the proposal status.\n                      type: string\n                      enum:\n                        - PROPOSAL_STATUS_UNSPECIFIED\n                        - PROPOSAL_STATUS_DEPOSIT_PERIOD\n                        - PROPOSAL_STATUS_VOTING_PERIOD\n                        - PROPOSAL_STATUS_PASSED\n                        - PROPOSAL_STATUS_REJECTED\n                        - PROPOSAL_STATUS_FAILED\n                      default: PROPOSAL_STATUS_UNSPECIFIED\n                    final_tally_result:\n                      description: >-\n                        final_tally_result is the final tally result of the\n                        proposal. When\n\n                        querying a proposal via gRPC, this field is not\n                        populated until the\n\n                        proposal's voting period has ended.\n                      type: object\n                      properties:\n                        'yes':\n                          type: string\n                          description: yes is the number of yes votes on a proposal.\n                        abstain:\n                          type: string\n                          description: >-\n                            abstain is the number of abstain votes on a\n                            proposal.\n                        'no':\n                          type: string\n                          description: no is the number of no votes on a proposal.\n                        no_with_veto:\n                          type: string\n                          description: >-\n                            no_with_veto is the number of no with veto votes on\n                            a proposal.\n                    submit_time:\n                      type: string\n                      format: date-time\n                      description: submit_time is the time of proposal submission.\n                    deposit_end_time:\n                      type: string\n                      format: date-time\n                      description: deposit_end_time is the end time for deposition.\n                    total_deposit:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the\n                          custom method\n\n                          signatures required by gogoproto.\n                      description: total_deposit is the total deposit on the proposal.\n                    voting_start_time:\n                      type: string\n                      format: date-time\n                      description: >-\n                        voting_start_time is the starting time to vote on a\n                        proposal.\n                    voting_end_time:\n                      type: string\n                      format: date-time\n                      description: voting_end_time is the end time of voting on a proposal.\n                  description: >-\n                    Proposal defines the core field members of a governance\n                    proposal.\n                description: proposals defines all the requested governance proposals.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: >-\n              QueryProposalsResponse is the response type for the\n              Query/Proposals RPC\n\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: proposal_status\n          description: |-\n            proposal_status defines the status of the proposals.\n\n             - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n             - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\n            period.\n             - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\n            period.\n             - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\n            passed.\n             - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\n            been rejected.\n             - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\n            failed.\n          in: query\n          required: false\n          type: string\n          enum:\n            - PROPOSAL_STATUS_UNSPECIFIED\n            - PROPOSAL_STATUS_DEPOSIT_PERIOD\n            - PROPOSAL_STATUS_VOTING_PERIOD\n            - PROPOSAL_STATUS_PASSED\n            - PROPOSAL_STATUS_REJECTED\n            - PROPOSAL_STATUS_FAILED\n          default: PROPOSAL_STATUS_UNSPECIFIED\n        - name: voter\n          description: voter defines the voter address for the proposals.\n          in: query\n          required: false\n          type: string\n        - name: depositor\n          description: depositor defines the deposit addresses from the proposals.\n          in: query\n          required: false\n          type: string\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/gov/v1beta1/proposals/{proposal_id}:\n    get:\n      summary: Proposal queries proposal details based on ProposalID.\n      operationId: Proposal_Q4TVD\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              proposal:\n                type: object\n                properties:\n                  proposal_id:\n                    type: string\n                    format: uint64\n                    description: proposal_id defines the unique id of the proposal.\n                  content:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                    description: content is the proposal's content.\n                  status:\n                    description: status defines the proposal status.\n                    type: string\n                    enum:\n                      - PROPOSAL_STATUS_UNSPECIFIED\n                      - PROPOSAL_STATUS_DEPOSIT_PERIOD\n                      - PROPOSAL_STATUS_VOTING_PERIOD\n                      - PROPOSAL_STATUS_PASSED\n                      - PROPOSAL_STATUS_REJECTED\n                      - PROPOSAL_STATUS_FAILED\n                    default: PROPOSAL_STATUS_UNSPECIFIED\n                  final_tally_result:\n                    description: >-\n                      final_tally_result is the final tally result of the\n                      proposal. When\n\n                      querying a proposal via gRPC, this field is not populated\n                      until the\n\n                      proposal's voting period has ended.\n                    type: object\n                    properties:\n                      'yes':\n                        type: string\n                        description: yes is the number of yes votes on a proposal.\n                      abstain:\n                        type: string\n                        description: abstain is the number of abstain votes on a proposal.\n                      'no':\n                        type: string\n                        description: no is the number of no votes on a proposal.\n                      no_with_veto:\n                        type: string\n                        description: >-\n                          no_with_veto is the number of no with veto votes on a\n                          proposal.\n                  submit_time:\n                    type: string\n                    format: date-time\n                    description: submit_time is the time of proposal submission.\n                  deposit_end_time:\n                    type: string\n                    format: date-time\n                    description: deposit_end_time is the end time for deposition.\n                  total_deposit:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                    description: total_deposit is the total deposit on the proposal.\n                  voting_start_time:\n                    type: string\n                    format: date-time\n                    description: >-\n                      voting_start_time is the starting time to vote on a\n                      proposal.\n                  voting_end_time:\n                    type: string\n                    format: date-time\n                    description: voting_end_time is the end time of voting on a proposal.\n                description: >-\n                  Proposal defines the core field members of a governance\n                  proposal.\n            description: >-\n              QueryProposalResponse is the response type for the Query/Proposal\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /cosmos/gov/v1beta1/proposals/{proposal_id}/deposits:\n    get:\n      summary: Deposits queries all deposits of a single proposal.\n      operationId: Deposits_1L75C\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              deposits:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    proposal_id:\n                      type: string\n                      format: uint64\n                      description: proposal_id defines the unique id of the proposal.\n                    depositor:\n                      type: string\n                      description: >-\n                        depositor defines the deposit addresses from the\n                        proposals.\n                    amount:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the\n                          custom method\n\n                          signatures required by gogoproto.\n                      description: amount to be deposited by depositor.\n                  description: >-\n                    Deposit defines an amount deposited by an account address to\n                    an active\n\n                    proposal.\n                description: deposits defines the requested deposits.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: >-\n              QueryDepositsResponse is the response type for the Query/Deposits\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          type: string\n          format: uint64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor}:\n    get:\n      summary: >-\n        Deposit queries single deposit information based proposalID,\n        depositAddr.\n      operationId: Deposit_VE3QO\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              deposit:\n                type: object\n                properties:\n                  proposal_id:\n                    type: string\n                    format: uint64\n                    description: proposal_id defines the unique id of the proposal.\n                  depositor:\n                    type: string\n                    description: >-\n                      depositor defines the deposit addresses from the\n                      proposals.\n                  amount:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                    description: amount to be deposited by depositor.\n                description: >-\n                  Deposit defines an amount deposited by an account address to\n                  an active\n\n                  proposal.\n            description: >-\n              QueryDepositResponse is the response type for the Query/Deposit\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          type: string\n          format: uint64\n        - name: depositor\n          description: depositor defines the deposit addresses from the proposals.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/gov/v1beta1/proposals/{proposal_id}/tally:\n    get:\n      summary: TallyResult queries the tally of a proposal vote.\n      operationId: TallyResult_WW72B\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              tally:\n                description: tally defines the requested tally.\n                type: object\n                properties:\n                  'yes':\n                    type: string\n                    description: yes is the number of yes votes on a proposal.\n                  abstain:\n                    type: string\n                    description: abstain is the number of abstain votes on a proposal.\n                  'no':\n                    type: string\n                    description: no is the number of no votes on a proposal.\n                  no_with_veto:\n                    type: string\n                    description: >-\n                      no_with_veto is the number of no with veto votes on a\n                      proposal.\n            description: >-\n              QueryTallyResultResponse is the response type for the Query/Tally\n              RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          type: string\n          format: uint64\n      tags:\n        - gRPC Gateway API\n  /cosmos/gov/v1beta1/proposals/{proposal_id}/votes:\n    get:\n      summary: Votes queries votes of a given proposal.\n      operationId: Votes_M6ZAN\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              votes:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    proposal_id:\n                      type: string\n                      format: uint64\n                      description: proposal_id defines the unique id of the proposal.\n                    voter:\n                      type: string\n                      description: voter is the voter address of the proposal.\n                    option:\n                      description: >-\n                        Deprecated: Prefer to use `options` instead. This field\n                        is set in queries\n\n                        if and only if `len(options) == 1` and that option has\n                        weight 1. In all\n\n                        other cases, this field will default to\n                        VOTE_OPTION_UNSPECIFIED.\n                      type: string\n                      enum:\n                        - VOTE_OPTION_UNSPECIFIED\n                        - VOTE_OPTION_YES\n                        - VOTE_OPTION_ABSTAIN\n                        - VOTE_OPTION_NO\n                        - VOTE_OPTION_NO_WITH_VETO\n                      default: VOTE_OPTION_UNSPECIFIED\n                    options:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          option:\n                            description: >-\n                              option defines the valid vote options, it must not\n                              contain duplicate vote options.\n                            type: string\n                            enum:\n                              - VOTE_OPTION_UNSPECIFIED\n                              - VOTE_OPTION_YES\n                              - VOTE_OPTION_ABSTAIN\n                              - VOTE_OPTION_NO\n                              - VOTE_OPTION_NO_WITH_VETO\n                            default: VOTE_OPTION_UNSPECIFIED\n                          weight:\n                            type: string\n                            description: >-\n                              weight is the vote weight associated with the vote\n                              option.\n                        description: >-\n                          WeightedVoteOption defines a unit of vote for vote\n                          split.\n\n\n                          Since: cosmos-sdk 0.43\n                      description: |-\n                        options is the weighted vote options.\n\n                        Since: cosmos-sdk 0.43\n                  description: >-\n                    Vote defines a vote on a governance proposal.\n\n                    A Vote consists of a proposal ID, the voter, and the vote\n                    option.\n                description: votes defines the queried votes.\n              pagination:\n                type: object\n                properties:\n                  next_key:\n                    type: string\n                    format: byte\n                    description: |-\n                      next_key is the key to be passed to PageRequest.key to\n                      query the next page most efficiently. It will be empty if\n                      there are no more results.\n                  total:\n                    type: string\n                    format: uint64\n                    title: >-\n                      total is total number of results available if\n                      PageRequest.count_total\n\n                      was set, its value is undefined otherwise\n                description: >-\n                  PageResponse is to be embedded in gRPC response messages where\n                  the\n\n                  corresponding request message has used PageRequest.\n\n                   message SomeResponse {\n                           repeated Bar results = 1;\n                           PageResponse page = 2;\n                   }\n            description: >-\n              QueryVotesResponse is the response type for the Query/Votes RPC\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          type: string\n          format: uint64\n        - name: pagination.key\n          description: |-\n            key is a value returned in PageResponse.next_key to begin\n            querying the next page most efficiently. Only one of offset or key\n            should be set.\n          in: query\n          required: false\n          type: string\n          format: byte\n        - name: pagination.offset\n          description: >-\n            offset is a numeric offset that can be used when key is unavailable.\n\n            It is less efficient than using key. Only one of offset or key\n            should\n\n            be set.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.limit\n          description: >-\n            limit is the total number of results to be returned in the result\n            page.\n\n            If left empty it will default to a value to be set by each app.\n          in: query\n          required: false\n          type: string\n          format: uint64\n        - name: pagination.count_total\n          description: >-\n            count_total is set to true  to indicate that the result set should\n            include\n\n            a count of the total number of items available for pagination in\n            UIs.\n\n            count_total is only respected when offset is used. It is ignored\n            when key\n\n            is set.\n          in: query\n          required: false\n          type: boolean\n        - name: pagination.reverse\n          description: >-\n            reverse is set to true if results are to be returned in the\n            descending order.\n\n\n            Since: cosmos-sdk 0.43\n          in: query\n          required: false\n          type: boolean\n      tags:\n        - gRPC Gateway API\n  /cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter}:\n    get:\n      summary: Vote queries voted information based on proposalID, voterAddr.\n      operationId: Vote_4I9SV\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              vote:\n                type: object\n                properties:\n                  proposal_id:\n                    type: string\n                    format: uint64\n                    description: proposal_id defines the unique id of the proposal.\n                  voter:\n                    type: string\n                    description: voter is the voter address of the proposal.\n                  option:\n                    description: >-\n                      Deprecated: Prefer to use `options` instead. This field is\n                      set in queries\n\n                      if and only if `len(options) == 1` and that option has\n                      weight 1. In all\n\n                      other cases, this field will default to\n                      VOTE_OPTION_UNSPECIFIED.\n                    type: string\n                    enum:\n                      - VOTE_OPTION_UNSPECIFIED\n                      - VOTE_OPTION_YES\n                      - VOTE_OPTION_ABSTAIN\n                      - VOTE_OPTION_NO\n                      - VOTE_OPTION_NO_WITH_VETO\n                    default: VOTE_OPTION_UNSPECIFIED\n                  options:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        option:\n                          description: >-\n                            option defines the valid vote options, it must not\n                            contain duplicate vote options.\n                          type: string\n                          enum:\n                            - VOTE_OPTION_UNSPECIFIED\n                            - VOTE_OPTION_YES\n                            - VOTE_OPTION_ABSTAIN\n                            - VOTE_OPTION_NO\n                            - VOTE_OPTION_NO_WITH_VETO\n                          default: VOTE_OPTION_UNSPECIFIED\n                        weight:\n                          type: string\n                          description: >-\n                            weight is the vote weight associated with the vote\n                            option.\n                      description: >-\n                        WeightedVoteOption defines a unit of vote for vote\n                        split.\n\n\n                        Since: cosmos-sdk 0.43\n                    description: |-\n                      options is the weighted vote options.\n\n                      Since: cosmos-sdk 0.43\n                description: >-\n                  Vote defines a vote on a governance proposal.\n\n                  A Vote consists of a proposal ID, the voter, and the vote\n                  option.\n            description: >-\n              QueryVoteResponse is the response type for the Query/Vote RPC\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      parameters:\n        - name: proposal_id\n          description: proposal_id defines the unique id of the proposal.\n          in: path\n          required: true\n          type: string\n          format: uint64\n        - name: voter\n          description: voter defines the voter address for the proposals.\n          in: path\n          required: true\n          type: string\n      tags:\n        - gRPC Gateway API\n  /cosmos/mint/v1beta1/annual_provisions:\n    get:\n      summary: AnnualProvisions current minting annual provisions value.\n      operationId: AnnualProvisions_JHHBU\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              annual_provisions:\n                type: string\n                format: byte\n                description: >-\n                  annual_provisions is the current minting annual provisions\n                  value.\n            description: |-\n              QueryAnnualProvisionsResponse is the response type for the\n              Query/AnnualProvisions RPC method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/mint/v1beta1/inflation:\n    get:\n      summary: Inflation returns the current minting inflation value.\n      operationId: Inflation_RXNBT\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              inflation:\n                type: string\n                format: byte\n                description: inflation is the current minting inflation value.\n            description: >-\n              QueryInflationResponse is the response type for the\n              Query/Inflation RPC\n\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\n  /cosmos/mint/v1beta1/params:\n    get:\n      summary: Params returns the total set of minting parameters.\n      operationId: Params_3M1PF\n      responses:\n        '200':\n          description: A successful response.\n          schema:\n            type: object\n            properties:\n              params:\n                description: params defines the parameters of the module.\n                type: object\n                properties:\n                  mint_denom:\n                    type: string\n                    title: type of coin to mint\n                  inflation_rate_change:\n                    type: string\n                    title: maximum annual change in inflation rate\n                  inflation_max:\n                    type: string\n                    title: maximum inflation rate\n                  inflation_min:\n                    type: string\n                    title: minimum inflation rate\n                  goal_bonded:\n                    type: string\n                    title: goal of percent bonded atoms\n                  blocks_per_year:\n                    type: string\n                    format: uint64\n                    title: expected blocks per year\n            description: >-\n              QueryParamsResponse is the response type for the Query/Params RPC\n              method.\n        default:\n          description: An unexpected error response.\n          schema:\n            type: object\n            properties:\n              error:\n                type: string\n              code:\n                type: integer\n                format: int32\n              message:\n                type: string\n              details:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n      tags:\n        - gRPC Gateway API\ndefinitions:\n  cosmos.consensus.v1.QueryParamsResponse:\n    type: object\n    properties:\n      params:\n        description: >-\n          params are the tendermint consensus params stored in the consensus\n          module.\n\n          Please note that `params.version` is not populated in this response,\n          it is\n\n          tracked separately in the x/upgrade module.\n        type: object\n        properties:\n          block:\n            type: object\n            properties:\n              max_bytes:\n                type: string\n                format: int64\n                title: |-\n                  Max block size, in bytes.\n                  Note: must be greater than 0\n              max_gas:\n                type: string\n                format: int64\n                title: |-\n                  Max gas per block.\n                  Note: must be greater or equal to -1\n            description: BlockParams contains limits on the block size.\n          evidence:\n            type: object\n            properties:\n              max_age_num_blocks:\n                type: string\n                format: int64\n                description: >-\n                  Max age of evidence, in blocks.\n\n\n                  The basic formula for calculating this is: MaxAgeDuration /\n                  {average block\n\n                  time}.\n              max_age_duration:\n                type: string\n                description: >-\n                  Max age of evidence, in time.\n\n\n                  It should correspond with an app's \"unbonding period\" or other\n                  similar\n\n                  mechanism for handling [Nothing-At-Stake\n\n                  attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed).\n              max_bytes:\n                type: string\n                format: int64\n                title: >-\n                  This sets the maximum size of total evidence in bytes that can\n                  be committed in a single block.\n\n                  and should fall comfortably under the max block bytes.\n\n                  Default is 1048576 or 1MB\n            description: EvidenceParams determine how we handle evidence of malfeasance.\n          validator:\n            type: object\n            properties:\n              pub_key_types:\n                type: array\n                items:\n                  type: string\n            description: |-\n              ValidatorParams restrict the public key types validators can use.\n              NOTE: uses ABCI pubkey naming, not Amino names.\n          version:\n            type: object\n            properties:\n              app:\n                type: string\n                format: uint64\n            description: VersionParams contains the ABCI application version.\n    description: >-\n      QueryParamsResponse defines the response type for querying x/consensus\n      parameters.\n  google.protobuf.Any:\n    type: object\n    properties:\n      type_url:\n        type: string\n      value:\n        type: string\n        format: byte\n  grpc.gateway.runtime.Error:\n    type: object\n    properties:\n      error:\n        type: string\n      code:\n        type: integer\n        format: int32\n      message:\n        type: string\n      details:\n        type: array\n        items:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n  tendermint.types.BlockParams:\n    type: object\n    properties:\n      max_bytes:\n        type: string\n        format: int64\n        title: |-\n          Max block size, in bytes.\n          Note: must be greater than 0\n      max_gas:\n        type: string\n        format: int64\n        title: |-\n          Max gas per block.\n          Note: must be greater or equal to -1\n    description: BlockParams contains limits on the block size.\n  tendermint.types.ConsensusParams:\n    type: object\n    properties:\n      block:\n        type: object\n        properties:\n          max_bytes:\n            type: string\n            format: int64\n            title: |-\n              Max block size, in bytes.\n              Note: must be greater than 0\n          max_gas:\n            type: string\n            format: int64\n            title: |-\n              Max gas per block.\n              Note: must be greater or equal to -1\n        description: BlockParams contains limits on the block size.\n      evidence:\n        type: object\n        properties:\n          max_age_num_blocks:\n            type: string\n            format: int64\n            description: >-\n              Max age of evidence, in blocks.\n\n\n              The basic formula for calculating this is: MaxAgeDuration /\n              {average block\n\n              time}.\n          max_age_duration:\n            type: string\n            description: >-\n              Max age of evidence, in time.\n\n\n              It should correspond with an app's \"unbonding period\" or other\n              similar\n\n              mechanism for handling [Nothing-At-Stake\n\n              attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed).\n          max_bytes:\n            type: string\n            format: int64\n            title: >-\n              This sets the maximum size of total evidence in bytes that can be\n              committed in a single block.\n\n              and should fall comfortably under the max block bytes.\n\n              Default is 1048576 or 1MB\n        description: EvidenceParams determine how we handle evidence of malfeasance.\n      validator:\n        type: object\n        properties:\n          pub_key_types:\n            type: array\n            items:\n              type: string\n        description: |-\n          ValidatorParams restrict the public key types validators can use.\n          NOTE: uses ABCI pubkey naming, not Amino names.\n      version:\n        type: object\n        properties:\n          app:\n            type: string\n            format: uint64\n        description: VersionParams contains the ABCI application version.\n    description: |-\n      ConsensusParams contains consensus critical parameters that determine the\n      validity of blocks.\n  tendermint.types.EvidenceParams:\n    type: object\n    properties:\n      max_age_num_blocks:\n        type: string\n        format: int64\n        description: >-\n          Max age of evidence, in blocks.\n\n\n          The basic formula for calculating this is: MaxAgeDuration / {average\n          block\n\n          time}.\n      max_age_duration:\n        type: string\n        description: >-\n          Max age of evidence, in time.\n\n\n          It should correspond with an app's \"unbonding period\" or other similar\n\n          mechanism for handling [Nothing-At-Stake\n\n          attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed).\n      max_bytes:\n        type: string\n        format: int64\n        title: >-\n          This sets the maximum size of total evidence in bytes that can be\n          committed in a single block.\n\n          and should fall comfortably under the max block bytes.\n\n          Default is 1048576 or 1MB\n    description: EvidenceParams determine how we handle evidence of malfeasance.\n  tendermint.types.ValidatorParams:\n    type: object\n    properties:\n      pub_key_types:\n        type: array\n        items:\n          type: string\n    description: |-\n      ValidatorParams restrict the public key types validators can use.\n      NOTE: uses ABCI pubkey naming, not Amino names.\n  tendermint.types.VersionParams:\n    type: object\n    properties:\n      app:\n        type: string\n        format: uint64\n    description: VersionParams contains the ABCI application version.\n  cosmos.base.query.v1beta1.PageRequest:\n    type: object\n    properties:\n      key:\n        type: string\n        format: byte\n        description: |-\n          key is a value returned in PageResponse.next_key to begin\n          querying the next page most efficiently. Only one of offset or key\n          should be set.\n      offset:\n        type: string\n        format: uint64\n        description: |-\n          offset is a numeric offset that can be used when key is unavailable.\n          It is less efficient than using key. Only one of offset or key should\n          be set.\n      limit:\n        type: string\n        format: uint64\n        description: >-\n          limit is the total number of results to be returned in the result\n          page.\n\n          If left empty it will default to a value to be set by each app.\n      count_total:\n        type: boolean\n        description: >-\n          count_total is set to true  to indicate that the result set should\n          include\n\n          a count of the total number of items available for pagination in UIs.\n\n          count_total is only respected when offset is used. It is ignored when\n          key\n\n          is set.\n      reverse:\n        type: boolean\n        description: >-\n          reverse is set to true if results are to be returned in the descending\n          order.\n\n\n          Since: cosmos-sdk 0.43\n    description: |-\n      message SomeRequest {\n               Foo some_parameter = 1;\n               PageRequest pagination = 2;\n       }\n    title: |-\n      PageRequest is to be embedded in gRPC request messages for efficient\n      pagination. Ex:\n  cosmos.base.query.v1beta1.PageResponse:\n    type: object\n    properties:\n      next_key:\n        type: string\n        format: byte\n        description: |-\n          next_key is the key to be passed to PageRequest.key to\n          query the next page most efficiently. It will be empty if\n          there are no more results.\n      total:\n        type: string\n        format: uint64\n        title: |-\n          total is total number of results available if PageRequest.count_total\n          was set, its value is undefined otherwise\n    description: |-\n      PageResponse is to be embedded in gRPC response messages where the\n      corresponding request message has used PageRequest.\n\n       message SomeResponse {\n               repeated Bar results = 1;\n               PageResponse page = 2;\n       }\n  cosmos.feegrant.v1beta1.Grant:\n    type: object\n    properties:\n      granter:\n        type: string\n        description: >-\n          granter is the address of the user granting an allowance of their\n          funds.\n      grantee:\n        type: string\n        description: >-\n          grantee is the address of the user being granted an allowance of\n          another user's funds.\n      allowance:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n        description: allowance can be any of basic, periodic, allowed fee allowance.\n    title: Grant is stored in the KVStore to record a grant with full context\n  cosmos.feegrant.v1beta1.QueryAllowanceResponse:\n    type: object\n    properties:\n      allowance:\n        description: allowance is a allowance granted for grantee by granter.\n        type: object\n        properties:\n          granter:\n            type: string\n            description: >-\n              granter is the address of the user granting an allowance of their\n              funds.\n          grantee:\n            type: string\n            description: >-\n              grantee is the address of the user being granted an allowance of\n              another user's funds.\n          allowance:\n            type: object\n            properties:\n              type_url:\n                type: string\n              value:\n                type: string\n                format: byte\n            description: allowance can be any of basic, periodic, allowed fee allowance.\n        title: Grant is stored in the KVStore to record a grant with full context\n    description: >-\n      QueryAllowanceResponse is the response type for the Query/Allowance RPC\n      method.\n  cosmos.feegrant.v1beta1.QueryAllowancesByGranterResponse:\n    type: object\n    properties:\n      allowances:\n        type: array\n        items:\n          type: object\n          properties:\n            granter:\n              type: string\n              description: >-\n                granter is the address of the user granting an allowance of\n                their funds.\n            grantee:\n              type: string\n              description: >-\n                grantee is the address of the user being granted an allowance of\n                another user's funds.\n            allowance:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n              description: allowance can be any of basic, periodic, allowed fee allowance.\n          title: Grant is stored in the KVStore to record a grant with full context\n        description: allowances that have been issued by the granter.\n      pagination:\n        description: pagination defines an pagination for the response.\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n    description: >-\n      QueryAllowancesByGranterResponse is the response type for the\n      Query/AllowancesByGranter RPC method.\n\n\n      Since: cosmos-sdk 0.46\n  cosmos.feegrant.v1beta1.QueryAllowancesResponse:\n    type: object\n    properties:\n      allowances:\n        type: array\n        items:\n          type: object\n          properties:\n            granter:\n              type: string\n              description: >-\n                granter is the address of the user granting an allowance of\n                their funds.\n            grantee:\n              type: string\n              description: >-\n                grantee is the address of the user being granted an allowance of\n                another user's funds.\n            allowance:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n              description: allowance can be any of basic, periodic, allowed fee allowance.\n          title: Grant is stored in the KVStore to record a grant with full context\n        description: allowances are allowance's granted for grantee by granter.\n      pagination:\n        description: pagination defines an pagination for the response.\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n    description: >-\n      QueryAllowancesResponse is the response type for the Query/Allowances RPC\n      method.\n  cosmos.base.v1beta1.Coin:\n    type: object\n    properties:\n      denom:\n        type: string\n      amount:\n        type: string\n    description: |-\n      Coin defines a token with a denomination and an amount.\n\n      NOTE: The amount field is an Int which implements the custom method\n      signatures required by gogoproto.\n  cosmos.gov.v1.Deposit:\n    type: object\n    properties:\n      proposal_id:\n        type: string\n        format: uint64\n        description: proposal_id defines the unique id of the proposal.\n      depositor:\n        type: string\n        description: depositor defines the deposit addresses from the proposals.\n      amount:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        description: amount to be deposited by depositor.\n    description: |-\n      Deposit defines an amount deposited by an account address to an active\n      proposal.\n  cosmos.gov.v1.DepositParams:\n    type: object\n    properties:\n      min_deposit:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        description: Minimum deposit for a proposal to enter voting period.\n      max_deposit_period:\n        type: string\n        description: >-\n          Maximum period for Atom holders to deposit on a proposal. Initial\n          value: 2\n\n          months.\n    description: DepositParams defines the params for deposits on governance proposals.\n  cosmos.gov.v1.Params:\n    type: object\n    properties:\n      min_deposit:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        description: Minimum deposit for a proposal to enter voting period.\n      max_deposit_period:\n        type: string\n        description: >-\n          Maximum period for Atom holders to deposit on a proposal. Initial\n          value: 2\n\n          months.\n      voting_period:\n        type: string\n        description: Duration of the voting period.\n      quorum:\n        type: string\n        description: |-\n          Minimum percentage of total stake needed to vote for a result to be\n           considered valid.\n      threshold:\n        type: string\n        description: >-\n          Minimum proportion of Yes votes for proposal to pass. Default value:\n          0.5.\n      veto_threshold:\n        type: string\n        description: |-\n          Minimum value of Veto votes to Total votes ratio for proposal to be\n           vetoed. Default value: 1/3.\n      min_initial_deposit_ratio:\n        type: string\n        description: >-\n          The ratio representing the proportion of the deposit value that must\n          be paid at proposal submission.\n      burn_vote_quorum:\n        type: boolean\n        title: burn deposits if a proposal does not meet quorum\n      burn_proposal_deposit_prevote:\n        type: boolean\n        title: burn deposits if the proposal does not enter voting period\n      burn_vote_veto:\n        type: boolean\n        title: burn deposits if quorum with vote type no_veto is met\n    description: |-\n      Params defines the parameters for the x/gov module.\n\n      Since: cosmos-sdk 0.47\n  cosmos.gov.v1.Proposal:\n    type: object\n    properties:\n      id:\n        type: string\n        format: uint64\n        description: id defines the unique id of the proposal.\n      messages:\n        type: array\n        items:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n        description: >-\n          messages are the arbitrary messages to be executed if the proposal\n          passes.\n      status:\n        description: status defines the proposal status.\n        type: string\n        enum:\n          - PROPOSAL_STATUS_UNSPECIFIED\n          - PROPOSAL_STATUS_DEPOSIT_PERIOD\n          - PROPOSAL_STATUS_VOTING_PERIOD\n          - PROPOSAL_STATUS_PASSED\n          - PROPOSAL_STATUS_REJECTED\n          - PROPOSAL_STATUS_FAILED\n        default: PROPOSAL_STATUS_UNSPECIFIED\n      final_tally_result:\n        description: |-\n          final_tally_result is the final tally result of the proposal. When\n          querying a proposal via gRPC, this field is not populated until the\n          proposal's voting period has ended.\n        type: object\n        properties:\n          yes_count:\n            type: string\n            description: yes_count is the number of yes votes on a proposal.\n          abstain_count:\n            type: string\n            description: abstain_count is the number of abstain votes on a proposal.\n          no_count:\n            type: string\n            description: no_count is the number of no votes on a proposal.\n          no_with_veto_count:\n            type: string\n            description: >-\n              no_with_veto_count is the number of no with veto votes on a\n              proposal.\n      submit_time:\n        type: string\n        format: date-time\n        description: submit_time is the time of proposal submission.\n      deposit_end_time:\n        type: string\n        format: date-time\n        description: deposit_end_time is the end time for deposition.\n      total_deposit:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        description: total_deposit is the total deposit on the proposal.\n      voting_start_time:\n        type: string\n        format: date-time\n        description: voting_start_time is the starting time to vote on a proposal.\n      voting_end_time:\n        type: string\n        format: date-time\n        description: voting_end_time is the end time of voting on a proposal.\n      metadata:\n        type: string\n        description: metadata is any arbitrary metadata attached to the proposal.\n      title:\n        type: string\n        description: 'Since: cosmos-sdk 0.47'\n        title: title is the title of the proposal\n      summary:\n        type: string\n        description: 'Since: cosmos-sdk 0.47'\n        title: summary is a short summary of the proposal\n      proposer:\n        type: string\n        description: 'Since: cosmos-sdk 0.47'\n        title: Proposer is the address of the proposal sumbitter\n    description: Proposal defines the core field members of a governance proposal.\n  cosmos.gov.v1.ProposalStatus:\n    type: string\n    enum:\n      - PROPOSAL_STATUS_UNSPECIFIED\n      - PROPOSAL_STATUS_DEPOSIT_PERIOD\n      - PROPOSAL_STATUS_VOTING_PERIOD\n      - PROPOSAL_STATUS_PASSED\n      - PROPOSAL_STATUS_REJECTED\n      - PROPOSAL_STATUS_FAILED\n    default: PROPOSAL_STATUS_UNSPECIFIED\n    description: |-\n      ProposalStatus enumerates the valid statuses of a proposal.\n\n       - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n       - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\n      period.\n       - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\n      period.\n       - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\n      passed.\n       - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\n      been rejected.\n       - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\n      failed.\n  cosmos.gov.v1.QueryDepositResponse:\n    type: object\n    properties:\n      deposit:\n        type: object\n        properties:\n          proposal_id:\n            type: string\n            format: uint64\n            description: proposal_id defines the unique id of the proposal.\n          depositor:\n            type: string\n            description: depositor defines the deposit addresses from the proposals.\n          amount:\n            type: array\n            items:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom\n                method\n\n                signatures required by gogoproto.\n            description: amount to be deposited by depositor.\n        description: |-\n          Deposit defines an amount deposited by an account address to an active\n          proposal.\n    description: >-\n      QueryDepositResponse is the response type for the Query/Deposit RPC\n      method.\n  cosmos.gov.v1.QueryDepositsResponse:\n    type: object\n    properties:\n      deposits:\n        type: array\n        items:\n          type: object\n          properties:\n            proposal_id:\n              type: string\n              format: uint64\n              description: proposal_id defines the unique id of the proposal.\n            depositor:\n              type: string\n              description: depositor defines the deposit addresses from the proposals.\n            amount:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom\n                  method\n\n                  signatures required by gogoproto.\n              description: amount to be deposited by depositor.\n          description: >-\n            Deposit defines an amount deposited by an account address to an\n            active\n\n            proposal.\n        description: deposits defines the requested deposits.\n      pagination:\n        description: pagination defines the pagination in the response.\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n    description: >-\n      QueryDepositsResponse is the response type for the Query/Deposits RPC\n      method.\n  cosmos.gov.v1.QueryParamsResponse:\n    type: object\n    properties:\n      voting_params:\n        description: |-\n          Deprecated: Prefer to use `params` instead.\n          voting_params defines the parameters related to voting.\n        type: object\n        properties:\n          voting_period:\n            type: string\n            description: Duration of the voting period.\n      deposit_params:\n        description: |-\n          Deprecated: Prefer to use `params` instead.\n          deposit_params defines the parameters related to deposit.\n        type: object\n        properties:\n          min_deposit:\n            type: array\n            items:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom\n                method\n\n                signatures required by gogoproto.\n            description: Minimum deposit for a proposal to enter voting period.\n          max_deposit_period:\n            type: string\n            description: >-\n              Maximum period for Atom holders to deposit on a proposal. Initial\n              value: 2\n\n              months.\n      tally_params:\n        description: |-\n          Deprecated: Prefer to use `params` instead.\n          tally_params defines the parameters related to tally.\n        type: object\n        properties:\n          quorum:\n            type: string\n            description: >-\n              Minimum percentage of total stake needed to vote for a result to\n              be\n\n              considered valid.\n          threshold:\n            type: string\n            description: >-\n              Minimum proportion of Yes votes for proposal to pass. Default\n              value: 0.5.\n          veto_threshold:\n            type: string\n            description: >-\n              Minimum value of Veto votes to Total votes ratio for proposal to\n              be\n\n              vetoed. Default value: 1/3.\n      params:\n        description: |-\n          params defines all the paramaters of x/gov module.\n\n          Since: cosmos-sdk 0.47\n        type: object\n        properties:\n          min_deposit:\n            type: array\n            items:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom\n                method\n\n                signatures required by gogoproto.\n            description: Minimum deposit for a proposal to enter voting period.\n          max_deposit_period:\n            type: string\n            description: >-\n              Maximum period for Atom holders to deposit on a proposal. Initial\n              value: 2\n\n              months.\n          voting_period:\n            type: string\n            description: Duration of the voting period.\n          quorum:\n            type: string\n            description: >-\n              Minimum percentage of total stake needed to vote for a result to\n              be\n               considered valid.\n          threshold:\n            type: string\n            description: >-\n              Minimum proportion of Yes votes for proposal to pass. Default\n              value: 0.5.\n          veto_threshold:\n            type: string\n            description: >-\n              Minimum value of Veto votes to Total votes ratio for proposal to\n              be\n               vetoed. Default value: 1/3.\n          min_initial_deposit_ratio:\n            type: string\n            description: >-\n              The ratio representing the proportion of the deposit value that\n              must be paid at proposal submission.\n          burn_vote_quorum:\n            type: boolean\n            title: burn deposits if a proposal does not meet quorum\n          burn_proposal_deposit_prevote:\n            type: boolean\n            title: burn deposits if the proposal does not enter voting period\n          burn_vote_veto:\n            type: boolean\n            title: burn deposits if quorum with vote type no_veto is met\n    description: QueryParamsResponse is the response type for the Query/Params RPC method.\n  cosmos.gov.v1.QueryProposalResponse:\n    type: object\n    properties:\n      proposal:\n        type: object\n        properties:\n          id:\n            type: string\n            format: uint64\n            description: id defines the unique id of the proposal.\n          messages:\n            type: array\n            items:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n            description: >-\n              messages are the arbitrary messages to be executed if the proposal\n              passes.\n          status:\n            description: status defines the proposal status.\n            type: string\n            enum:\n              - PROPOSAL_STATUS_UNSPECIFIED\n              - PROPOSAL_STATUS_DEPOSIT_PERIOD\n              - PROPOSAL_STATUS_VOTING_PERIOD\n              - PROPOSAL_STATUS_PASSED\n              - PROPOSAL_STATUS_REJECTED\n              - PROPOSAL_STATUS_FAILED\n            default: PROPOSAL_STATUS_UNSPECIFIED\n          final_tally_result:\n            description: >-\n              final_tally_result is the final tally result of the proposal. When\n\n              querying a proposal via gRPC, this field is not populated until\n              the\n\n              proposal's voting period has ended.\n            type: object\n            properties:\n              yes_count:\n                type: string\n                description: yes_count is the number of yes votes on a proposal.\n              abstain_count:\n                type: string\n                description: abstain_count is the number of abstain votes on a proposal.\n              no_count:\n                type: string\n                description: no_count is the number of no votes on a proposal.\n              no_with_veto_count:\n                type: string\n                description: >-\n                  no_with_veto_count is the number of no with veto votes on a\n                  proposal.\n          submit_time:\n            type: string\n            format: date-time\n            description: submit_time is the time of proposal submission.\n          deposit_end_time:\n            type: string\n            format: date-time\n            description: deposit_end_time is the end time for deposition.\n          total_deposit:\n            type: array\n            items:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom\n                method\n\n                signatures required by gogoproto.\n            description: total_deposit is the total deposit on the proposal.\n          voting_start_time:\n            type: string\n            format: date-time\n            description: voting_start_time is the starting time to vote on a proposal.\n          voting_end_time:\n            type: string\n            format: date-time\n            description: voting_end_time is the end time of voting on a proposal.\n          metadata:\n            type: string\n            description: metadata is any arbitrary metadata attached to the proposal.\n          title:\n            type: string\n            description: 'Since: cosmos-sdk 0.47'\n            title: title is the title of the proposal\n          summary:\n            type: string\n            description: 'Since: cosmos-sdk 0.47'\n            title: summary is a short summary of the proposal\n          proposer:\n            type: string\n            description: 'Since: cosmos-sdk 0.47'\n            title: Proposer is the address of the proposal sumbitter\n        description: Proposal defines the core field members of a governance proposal.\n    description: >-\n      QueryProposalResponse is the response type for the Query/Proposal RPC\n      method.\n  cosmos.gov.v1.QueryProposalsResponse:\n    type: object\n    properties:\n      proposals:\n        type: array\n        items:\n          type: object\n          properties:\n            id:\n              type: string\n              format: uint64\n              description: id defines the unique id of the proposal.\n            messages:\n              type: array\n              items:\n                type: object\n                properties:\n                  type_url:\n                    type: string\n                  value:\n                    type: string\n                    format: byte\n              description: >-\n                messages are the arbitrary messages to be executed if the\n                proposal passes.\n            status:\n              description: status defines the proposal status.\n              type: string\n              enum:\n                - PROPOSAL_STATUS_UNSPECIFIED\n                - PROPOSAL_STATUS_DEPOSIT_PERIOD\n                - PROPOSAL_STATUS_VOTING_PERIOD\n                - PROPOSAL_STATUS_PASSED\n                - PROPOSAL_STATUS_REJECTED\n                - PROPOSAL_STATUS_FAILED\n              default: PROPOSAL_STATUS_UNSPECIFIED\n            final_tally_result:\n              description: >-\n                final_tally_result is the final tally result of the proposal.\n                When\n\n                querying a proposal via gRPC, this field is not populated until\n                the\n\n                proposal's voting period has ended.\n              type: object\n              properties:\n                yes_count:\n                  type: string\n                  description: yes_count is the number of yes votes on a proposal.\n                abstain_count:\n                  type: string\n                  description: abstain_count is the number of abstain votes on a proposal.\n                no_count:\n                  type: string\n                  description: no_count is the number of no votes on a proposal.\n                no_with_veto_count:\n                  type: string\n                  description: >-\n                    no_with_veto_count is the number of no with veto votes on a\n                    proposal.\n            submit_time:\n              type: string\n              format: date-time\n              description: submit_time is the time of proposal submission.\n            deposit_end_time:\n              type: string\n              format: date-time\n              description: deposit_end_time is the end time for deposition.\n            total_deposit:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom\n                  method\n\n                  signatures required by gogoproto.\n              description: total_deposit is the total deposit on the proposal.\n            voting_start_time:\n              type: string\n              format: date-time\n              description: voting_start_time is the starting time to vote on a proposal.\n            voting_end_time:\n              type: string\n              format: date-time\n              description: voting_end_time is the end time of voting on a proposal.\n            metadata:\n              type: string\n              description: metadata is any arbitrary metadata attached to the proposal.\n            title:\n              type: string\n              description: 'Since: cosmos-sdk 0.47'\n              title: title is the title of the proposal\n            summary:\n              type: string\n              description: 'Since: cosmos-sdk 0.47'\n              title: summary is a short summary of the proposal\n            proposer:\n              type: string\n              description: 'Since: cosmos-sdk 0.47'\n              title: Proposer is the address of the proposal sumbitter\n          description: Proposal defines the core field members of a governance proposal.\n        description: proposals defines all the requested governance proposals.\n      pagination:\n        description: pagination defines the pagination in the response.\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n    description: |-\n      QueryProposalsResponse is the response type for the Query/Proposals RPC\n      method.\n  cosmos.gov.v1.QueryTallyResultResponse:\n    type: object\n    properties:\n      tally:\n        description: tally defines the requested tally.\n        type: object\n        properties:\n          yes_count:\n            type: string\n            description: yes_count is the number of yes votes on a proposal.\n          abstain_count:\n            type: string\n            description: abstain_count is the number of abstain votes on a proposal.\n          no_count:\n            type: string\n            description: no_count is the number of no votes on a proposal.\n          no_with_veto_count:\n            type: string\n            description: >-\n              no_with_veto_count is the number of no with veto votes on a\n              proposal.\n    description: >-\n      QueryTallyResultResponse is the response type for the Query/Tally RPC\n      method.\n  cosmos.gov.v1.QueryVoteResponse:\n    type: object\n    properties:\n      vote:\n        type: object\n        properties:\n          proposal_id:\n            type: string\n            format: uint64\n            description: proposal_id defines the unique id of the proposal.\n          voter:\n            type: string\n            description: voter is the voter address of the proposal.\n          options:\n            type: array\n            items:\n              type: object\n              properties:\n                option:\n                  description: >-\n                    option defines the valid vote options, it must not contain\n                    duplicate vote options.\n                  type: string\n                  enum:\n                    - VOTE_OPTION_UNSPECIFIED\n                    - VOTE_OPTION_YES\n                    - VOTE_OPTION_ABSTAIN\n                    - VOTE_OPTION_NO\n                    - VOTE_OPTION_NO_WITH_VETO\n                  default: VOTE_OPTION_UNSPECIFIED\n                weight:\n                  type: string\n                  description: weight is the vote weight associated with the vote option.\n              description: WeightedVoteOption defines a unit of vote for vote split.\n            description: options is the weighted vote options.\n          metadata:\n            type: string\n            description: metadata is any  arbitrary metadata to attached to the vote.\n        description: |-\n          Vote defines a vote on a governance proposal.\n          A Vote consists of a proposal ID, the voter, and the vote option.\n    description: QueryVoteResponse is the response type for the Query/Vote RPC method.\n  cosmos.gov.v1.QueryVotesResponse:\n    type: object\n    properties:\n      votes:\n        type: array\n        items:\n          type: object\n          properties:\n            proposal_id:\n              type: string\n              format: uint64\n              description: proposal_id defines the unique id of the proposal.\n            voter:\n              type: string\n              description: voter is the voter address of the proposal.\n            options:\n              type: array\n              items:\n                type: object\n                properties:\n                  option:\n                    description: >-\n                      option defines the valid vote options, it must not contain\n                      duplicate vote options.\n                    type: string\n                    enum:\n                      - VOTE_OPTION_UNSPECIFIED\n                      - VOTE_OPTION_YES\n                      - VOTE_OPTION_ABSTAIN\n                      - VOTE_OPTION_NO\n                      - VOTE_OPTION_NO_WITH_VETO\n                    default: VOTE_OPTION_UNSPECIFIED\n                  weight:\n                    type: string\n                    description: weight is the vote weight associated with the vote option.\n                description: WeightedVoteOption defines a unit of vote for vote split.\n              description: options is the weighted vote options.\n            metadata:\n              type: string\n              description: metadata is any  arbitrary metadata to attached to the vote.\n          description: |-\n            Vote defines a vote on a governance proposal.\n            A Vote consists of a proposal ID, the voter, and the vote option.\n        description: votes defines the queried votes.\n      pagination:\n        description: pagination defines the pagination in the response.\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n    description: QueryVotesResponse is the response type for the Query/Votes RPC method.\n  cosmos.gov.v1.TallyParams:\n    type: object\n    properties:\n      quorum:\n        type: string\n        description: |-\n          Minimum percentage of total stake needed to vote for a result to be\n          considered valid.\n      threshold:\n        type: string\n        description: >-\n          Minimum proportion of Yes votes for proposal to pass. Default value:\n          0.5.\n      veto_threshold:\n        type: string\n        description: |-\n          Minimum value of Veto votes to Total votes ratio for proposal to be\n          vetoed. Default value: 1/3.\n    description: TallyParams defines the params for tallying votes on governance proposals.\n  cosmos.gov.v1.TallyResult:\n    type: object\n    properties:\n      yes_count:\n        type: string\n        description: yes_count is the number of yes votes on a proposal.\n      abstain_count:\n        type: string\n        description: abstain_count is the number of abstain votes on a proposal.\n      no_count:\n        type: string\n        description: no_count is the number of no votes on a proposal.\n      no_with_veto_count:\n        type: string\n        description: no_with_veto_count is the number of no with veto votes on a proposal.\n    description: TallyResult defines a standard tally for a governance proposal.\n  cosmos.gov.v1.Vote:\n    type: object\n    properties:\n      proposal_id:\n        type: string\n        format: uint64\n        description: proposal_id defines the unique id of the proposal.\n      voter:\n        type: string\n        description: voter is the voter address of the proposal.\n      options:\n        type: array\n        items:\n          type: object\n          properties:\n            option:\n              description: >-\n                option defines the valid vote options, it must not contain\n                duplicate vote options.\n              type: string\n              enum:\n                - VOTE_OPTION_UNSPECIFIED\n                - VOTE_OPTION_YES\n                - VOTE_OPTION_ABSTAIN\n                - VOTE_OPTION_NO\n                - VOTE_OPTION_NO_WITH_VETO\n              default: VOTE_OPTION_UNSPECIFIED\n            weight:\n              type: string\n              description: weight is the vote weight associated with the vote option.\n          description: WeightedVoteOption defines a unit of vote for vote split.\n        description: options is the weighted vote options.\n      metadata:\n        type: string\n        description: metadata is any  arbitrary metadata to attached to the vote.\n    description: |-\n      Vote defines a vote on a governance proposal.\n      A Vote consists of a proposal ID, the voter, and the vote option.\n  cosmos.gov.v1.VoteOption:\n    type: string\n    enum:\n      - VOTE_OPTION_UNSPECIFIED\n      - VOTE_OPTION_YES\n      - VOTE_OPTION_ABSTAIN\n      - VOTE_OPTION_NO\n      - VOTE_OPTION_NO_WITH_VETO\n    default: VOTE_OPTION_UNSPECIFIED\n    description: >-\n      VoteOption enumerates the valid vote options for a given governance\n      proposal.\n\n       - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option.\n       - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n       - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n       - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n       - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.\n  cosmos.gov.v1.VotingParams:\n    type: object\n    properties:\n      voting_period:\n        type: string\n        description: Duration of the voting period.\n    description: VotingParams defines the params for voting on governance proposals.\n  cosmos.gov.v1.WeightedVoteOption:\n    type: object\n    properties:\n      option:\n        description: >-\n          option defines the valid vote options, it must not contain duplicate\n          vote options.\n        type: string\n        enum:\n          - VOTE_OPTION_UNSPECIFIED\n          - VOTE_OPTION_YES\n          - VOTE_OPTION_ABSTAIN\n          - VOTE_OPTION_NO\n          - VOTE_OPTION_NO_WITH_VETO\n        default: VOTE_OPTION_UNSPECIFIED\n      weight:\n        type: string\n        description: weight is the vote weight associated with the vote option.\n    description: WeightedVoteOption defines a unit of vote for vote split.\n  cyber.graph.v1beta1.QueryGraphStatsResponse:\n    type: object\n    properties:\n      cyberlinks:\n        type: string\n        format: uint64\n      particles:\n        type: string\n        format: uint64\n  cyber.resources.v1beta1.Params:\n    type: object\n    properties:\n      max_slots:\n        type: integer\n        format: int64\n      halving_period_volt_blocks:\n        type: integer\n        format: int64\n      halving_period_ampere_blocks:\n        type: integer\n        format: int64\n      base_investmint_period_volt:\n        type: integer\n        format: int64\n      base_investmint_period_ampere:\n        type: integer\n        format: int64\n      min_investmint_period:\n        type: integer\n        format: int64\n      base_investmint_amount_volt:\n        type: object\n        properties:\n          denom:\n            type: string\n          amount:\n            type: string\n        description: |-\n          Coin defines a token with a denomination and an amount.\n\n          NOTE: The amount field is an Int which implements the custom method\n          signatures required by gogoproto.\n      base_investmint_amount_ampere:\n        type: object\n        properties:\n          denom:\n            type: string\n          amount:\n            type: string\n        description: |-\n          Coin defines a token with a denomination and an amount.\n\n          NOTE: The amount field is an Int which implements the custom method\n          signatures required by gogoproto.\n  cyber.resources.v1beta1.QueryInvestmintResponse:\n    type: object\n    properties:\n      amount:\n        type: object\n        properties:\n          denom:\n            type: string\n          amount:\n            type: string\n        description: |-\n          Coin defines a token with a denomination and an amount.\n\n          NOTE: The amount field is an Int which implements the custom method\n          signatures required by gogoproto.\n  cyber.resources.v1beta1.QueryParamsResponse:\n    type: object\n    properties:\n      params:\n        type: object\n        properties:\n          max_slots:\n            type: integer\n            format: int64\n          halving_period_volt_blocks:\n            type: integer\n            format: int64\n          halving_period_ampere_blocks:\n            type: integer\n            format: int64\n          base_investmint_period_volt:\n            type: integer\n            format: int64\n          base_investmint_period_ampere:\n            type: integer\n            format: int64\n          min_investmint_period:\n            type: integer\n            format: int64\n          base_investmint_amount_volt:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom\n              method\n\n              signatures required by gogoproto.\n          base_investmint_amount_ampere:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom\n              method\n\n              signatures required by gogoproto.\n  cosmos.base.node.v1beta1.ConfigResponse:\n    type: object\n    properties:\n      minimum_gas_price:\n        type: string\n    description: ConfigResponse defines the response structure for the Config gRPC query.\n  cosmos.upgrade.v1beta1.ModuleVersion:\n    type: object\n    properties:\n      name:\n        type: string\n        title: name of the app module\n      version:\n        type: string\n        format: uint64\n        title: consensus version of the app module\n    description: |-\n      ModuleVersion specifies a module and its consensus version.\n\n      Since: cosmos-sdk 0.43\n  cosmos.upgrade.v1beta1.Plan:\n    type: object\n    properties:\n      name:\n        type: string\n        description: >-\n          Sets the name for the upgrade. This name will be used by the upgraded\n\n          version of the software to apply any special \"on-upgrade\" commands\n          during\n\n          the first BeginBlock method after the upgrade is applied. It is also\n          used\n\n          to detect whether a software version can handle a given upgrade. If no\n\n          upgrade handler with this name has been set in the software, it will\n          be\n\n          assumed that the software is out-of-date when the upgrade Time or\n          Height is\n\n          reached and the software will exit.\n      time:\n        type: string\n        format: date-time\n        description: >-\n          Deprecated: Time based upgrades have been deprecated. Time based\n          upgrade logic\n\n          has been removed from the SDK.\n\n          If this field is not empty, an error will be thrown.\n      height:\n        type: string\n        format: int64\n        description: The height at which the upgrade must be performed.\n      info:\n        type: string\n        title: |-\n          Any application specific upgrade info to be included on-chain\n          such as a git commit that validators could automatically upgrade to\n      upgraded_client_state:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n        description: >-\n          Deprecated: UpgradedClientState field has been deprecated. IBC upgrade\n          logic has been\n\n          moved to the IBC module in the sub module 02-client.\n\n          If this field is not empty, an error will be thrown.\n    description: >-\n      Plan specifies information about a planned upgrade and when it should\n      occur.\n  cosmos.upgrade.v1beta1.QueryAppliedPlanResponse:\n    type: object\n    properties:\n      height:\n        type: string\n        format: int64\n        description: height is the block height at which the plan was applied.\n    description: >-\n      QueryAppliedPlanResponse is the response type for the Query/AppliedPlan\n      RPC\n\n      method.\n  cosmos.upgrade.v1beta1.QueryAuthorityResponse:\n    type: object\n    properties:\n      address:\n        type: string\n    description: 'Since: cosmos-sdk 0.46'\n    title: QueryAuthorityResponse is the response type for Query/Authority\n  cosmos.upgrade.v1beta1.QueryCurrentPlanResponse:\n    type: object\n    properties:\n      plan:\n        description: plan is the current upgrade plan.\n        type: object\n        properties:\n          name:\n            type: string\n            description: >-\n              Sets the name for the upgrade. This name will be used by the\n              upgraded\n\n              version of the software to apply any special \"on-upgrade\" commands\n              during\n\n              the first BeginBlock method after the upgrade is applied. It is\n              also used\n\n              to detect whether a software version can handle a given upgrade.\n              If no\n\n              upgrade handler with this name has been set in the software, it\n              will be\n\n              assumed that the software is out-of-date when the upgrade Time or\n              Height is\n\n              reached and the software will exit.\n          time:\n            type: string\n            format: date-time\n            description: >-\n              Deprecated: Time based upgrades have been deprecated. Time based\n              upgrade logic\n\n              has been removed from the SDK.\n\n              If this field is not empty, an error will be thrown.\n          height:\n            type: string\n            format: int64\n            description: The height at which the upgrade must be performed.\n          info:\n            type: string\n            title: >-\n              Any application specific upgrade info to be included on-chain\n\n              such as a git commit that validators could automatically upgrade\n              to\n          upgraded_client_state:\n            type: object\n            properties:\n              type_url:\n                type: string\n              value:\n                type: string\n                format: byte\n            description: >-\n              Deprecated: UpgradedClientState field has been deprecated. IBC\n              upgrade logic has been\n\n              moved to the IBC module in the sub module 02-client.\n\n              If this field is not empty, an error will be thrown.\n    description: >-\n      QueryCurrentPlanResponse is the response type for the Query/CurrentPlan\n      RPC\n\n      method.\n  cosmos.upgrade.v1beta1.QueryModuleVersionsResponse:\n    type: object\n    properties:\n      module_versions:\n        type: array\n        items:\n          type: object\n          properties:\n            name:\n              type: string\n              title: name of the app module\n            version:\n              type: string\n              format: uint64\n              title: consensus version of the app module\n          description: |-\n            ModuleVersion specifies a module and its consensus version.\n\n            Since: cosmos-sdk 0.43\n        description: >-\n          module_versions is a list of module names with their consensus\n          versions.\n    description: >-\n      QueryModuleVersionsResponse is the response type for the\n      Query/ModuleVersions\n\n      RPC method.\n\n\n      Since: cosmos-sdk 0.43\n  cosmos.upgrade.v1beta1.QueryUpgradedConsensusStateResponse:\n    type: object\n    properties:\n      upgraded_consensus_state:\n        type: string\n        format: byte\n        title: 'Since: cosmos-sdk 0.43'\n    description: >-\n      QueryUpgradedConsensusStateResponse is the response type for the\n      Query/UpgradedConsensusState\n\n      RPC method.\n  ibc.applications.fee.v1.Fee:\n    type: object\n    properties:\n      recv_fee:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        title: the packet receive fee\n      ack_fee:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        title: the packet acknowledgement fee\n      timeout_fee:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        title: the packet timeout fee\n    title: Fee defines the ICS29 receive, acknowledgement and timeout fees\n  ibc.applications.fee.v1.FeeEnabledChannel:\n    type: object\n    properties:\n      port_id:\n        type: string\n        title: unique port identifier\n      channel_id:\n        type: string\n        title: unique channel identifier\n    title: >-\n      FeeEnabledChannel contains the PortID & ChannelID for a fee enabled\n      channel\n  ibc.applications.fee.v1.IdentifiedPacketFees:\n    type: object\n    properties:\n      packet_id:\n        title: >-\n          unique packet identifier comprised of the channel ID, port ID and\n          sequence\n        type: object\n        properties:\n          port_id:\n            type: string\n            title: channel port identifier\n          channel_id:\n            type: string\n            title: channel unique identifier\n          sequence:\n            type: string\n            format: uint64\n            title: packet sequence\n      packet_fees:\n        type: array\n        items:\n          type: object\n          properties:\n            fee:\n              title: >-\n                fee encapsulates the recv, ack and timeout fees associated with\n                an IBC packet\n              type: object\n              properties:\n                recv_fee:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the\n                      custom method\n\n                      signatures required by gogoproto.\n                  title: the packet receive fee\n                ack_fee:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the\n                      custom method\n\n                      signatures required by gogoproto.\n                  title: the packet acknowledgement fee\n                timeout_fee:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the\n                      custom method\n\n                      signatures required by gogoproto.\n                  title: the packet timeout fee\n            refund_address:\n              type: string\n              title: the refund address for unspent fees\n            relayers:\n              type: array\n              items:\n                type: string\n              title: optional list of relayers permitted to receive fees\n          title: >-\n            PacketFee contains ICS29 relayer fees, refund address and optional\n            list of permitted relayers\n        title: list of packet fees\n    title: >-\n      IdentifiedPacketFees contains a list of type PacketFee and associated\n      PacketId\n  ibc.applications.fee.v1.PacketFee:\n    type: object\n    properties:\n      fee:\n        title: >-\n          fee encapsulates the recv, ack and timeout fees associated with an IBC\n          packet\n        type: object\n        properties:\n          recv_fee:\n            type: array\n            items:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom\n                method\n\n                signatures required by gogoproto.\n            title: the packet receive fee\n          ack_fee:\n            type: array\n            items:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom\n                method\n\n                signatures required by gogoproto.\n            title: the packet acknowledgement fee\n          timeout_fee:\n            type: array\n            items:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom\n                method\n\n                signatures required by gogoproto.\n            title: the packet timeout fee\n      refund_address:\n        type: string\n        title: the refund address for unspent fees\n      relayers:\n        type: array\n        items:\n          type: string\n        title: optional list of relayers permitted to receive fees\n    title: >-\n      PacketFee contains ICS29 relayer fees, refund address and optional list of\n      permitted relayers\n  ibc.applications.fee.v1.QueryCounterpartyPayeeResponse:\n    type: object\n    properties:\n      counterparty_payee:\n        type: string\n        title: the counterparty payee address used to compensate forward relaying\n    title: >-\n      QueryCounterpartyPayeeResponse defines the response type for the\n      CounterpartyPayee rpc\n  ibc.applications.fee.v1.QueryFeeEnabledChannelResponse:\n    type: object\n    properties:\n      fee_enabled:\n        type: boolean\n        title: boolean flag representing the fee enabled channel status\n    title: >-\n      QueryFeeEnabledChannelResponse defines the response type for the\n      FeeEnabledChannel rpc\n  ibc.applications.fee.v1.QueryFeeEnabledChannelsResponse:\n    type: object\n    properties:\n      fee_enabled_channels:\n        type: array\n        items:\n          type: object\n          properties:\n            port_id:\n              type: string\n              title: unique port identifier\n            channel_id:\n              type: string\n              title: unique channel identifier\n          title: >-\n            FeeEnabledChannel contains the PortID & ChannelID for a fee enabled\n            channel\n        title: list of fee enabled channels\n    title: >-\n      QueryFeeEnabledChannelsResponse defines the response type for the\n      FeeEnabledChannels rpc\n  ibc.applications.fee.v1.QueryIncentivizedPacketResponse:\n    type: object\n    properties:\n      incentivized_packet:\n        type: object\n        properties:\n          packet_id:\n            title: >-\n              unique packet identifier comprised of the channel ID, port ID and\n              sequence\n            type: object\n            properties:\n              port_id:\n                type: string\n                title: channel port identifier\n              channel_id:\n                type: string\n                title: channel unique identifier\n              sequence:\n                type: string\n                format: uint64\n                title: packet sequence\n          packet_fees:\n            type: array\n            items:\n              type: object\n              properties:\n                fee:\n                  title: >-\n                    fee encapsulates the recv, ack and timeout fees associated\n                    with an IBC packet\n                  type: object\n                  properties:\n                    recv_fee:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the\n                          custom method\n\n                          signatures required by gogoproto.\n                      title: the packet receive fee\n                    ack_fee:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the\n                          custom method\n\n                          signatures required by gogoproto.\n                      title: the packet acknowledgement fee\n                    timeout_fee:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the\n                          custom method\n\n                          signatures required by gogoproto.\n                      title: the packet timeout fee\n                refund_address:\n                  type: string\n                  title: the refund address for unspent fees\n                relayers:\n                  type: array\n                  items:\n                    type: string\n                  title: optional list of relayers permitted to receive fees\n              title: >-\n                PacketFee contains ICS29 relayer fees, refund address and\n                optional list of permitted relayers\n            title: list of packet fees\n        title: >-\n          IdentifiedPacketFees contains a list of type PacketFee and associated\n          PacketId\n    title: >-\n      QueryIncentivizedPacketsResponse defines the response type for the\n      IncentivizedPacket rpc\n  ibc.applications.fee.v1.QueryIncentivizedPacketsForChannelResponse:\n    type: object\n    properties:\n      incentivized_packets:\n        type: array\n        items:\n          type: object\n          properties:\n            packet_id:\n              title: >-\n                unique packet identifier comprised of the channel ID, port ID\n                and sequence\n              type: object\n              properties:\n                port_id:\n                  type: string\n                  title: channel port identifier\n                channel_id:\n                  type: string\n                  title: channel unique identifier\n                sequence:\n                  type: string\n                  format: uint64\n                  title: packet sequence\n            packet_fees:\n              type: array\n              items:\n                type: object\n                properties:\n                  fee:\n                    title: >-\n                      fee encapsulates the recv, ack and timeout fees associated\n                      with an IBC packet\n                    type: object\n                    properties:\n                      recv_fee:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements\n                            the custom method\n\n                            signatures required by gogoproto.\n                        title: the packet receive fee\n                      ack_fee:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements\n                            the custom method\n\n                            signatures required by gogoproto.\n                        title: the packet acknowledgement fee\n                      timeout_fee:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements\n                            the custom method\n\n                            signatures required by gogoproto.\n                        title: the packet timeout fee\n                  refund_address:\n                    type: string\n                    title: the refund address for unspent fees\n                  relayers:\n                    type: array\n                    items:\n                      type: string\n                    title: optional list of relayers permitted to receive fees\n                title: >-\n                  PacketFee contains ICS29 relayer fees, refund address and\n                  optional list of permitted relayers\n              title: list of packet fees\n          title: >-\n            IdentifiedPacketFees contains a list of type PacketFee and\n            associated PacketId\n        title: Map of all incentivized_packets\n    title: >-\n      QueryIncentivizedPacketsResponse defines the response type for the\n      incentivized packets RPC\n  ibc.applications.fee.v1.QueryIncentivizedPacketsResponse:\n    type: object\n    properties:\n      incentivized_packets:\n        type: array\n        items:\n          type: object\n          properties:\n            packet_id:\n              title: >-\n                unique packet identifier comprised of the channel ID, port ID\n                and sequence\n              type: object\n              properties:\n                port_id:\n                  type: string\n                  title: channel port identifier\n                channel_id:\n                  type: string\n                  title: channel unique identifier\n                sequence:\n                  type: string\n                  format: uint64\n                  title: packet sequence\n            packet_fees:\n              type: array\n              items:\n                type: object\n                properties:\n                  fee:\n                    title: >-\n                      fee encapsulates the recv, ack and timeout fees associated\n                      with an IBC packet\n                    type: object\n                    properties:\n                      recv_fee:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements\n                            the custom method\n\n                            signatures required by gogoproto.\n                        title: the packet receive fee\n                      ack_fee:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements\n                            the custom method\n\n                            signatures required by gogoproto.\n                        title: the packet acknowledgement fee\n                      timeout_fee:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            denom:\n                              type: string\n                            amount:\n                              type: string\n                          description: >-\n                            Coin defines a token with a denomination and an\n                            amount.\n\n\n                            NOTE: The amount field is an Int which implements\n                            the custom method\n\n                            signatures required by gogoproto.\n                        title: the packet timeout fee\n                  refund_address:\n                    type: string\n                    title: the refund address for unspent fees\n                  relayers:\n                    type: array\n                    items:\n                      type: string\n                    title: optional list of relayers permitted to receive fees\n                title: >-\n                  PacketFee contains ICS29 relayer fees, refund address and\n                  optional list of permitted relayers\n              title: list of packet fees\n          title: >-\n            IdentifiedPacketFees contains a list of type PacketFee and\n            associated PacketId\n        title: list of identified fees for incentivized packets\n    title: >-\n      QueryIncentivizedPacketsResponse defines the response type for the\n      IncentivizedPackets rpc\n  ibc.applications.fee.v1.QueryPayeeResponse:\n    type: object\n    properties:\n      payee_address:\n        type: string\n        title: the payee address to which packet fees are paid out\n    title: QueryPayeeResponse defines the response type for the Payee rpc\n  ibc.applications.fee.v1.QueryTotalAckFeesResponse:\n    type: object\n    properties:\n      ack_fees:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        title: the total packet acknowledgement fees\n    title: >-\n      QueryTotalAckFeesResponse defines the response type for the TotalAckFees\n      rpc\n  ibc.applications.fee.v1.QueryTotalRecvFeesResponse:\n    type: object\n    properties:\n      recv_fees:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        title: the total packet receive fees\n    title: >-\n      QueryTotalRecvFeesResponse defines the response type for the TotalRecvFees\n      rpc\n  ibc.applications.fee.v1.QueryTotalTimeoutFeesResponse:\n    type: object\n    properties:\n      timeout_fees:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        title: the total packet timeout fees\n    title: >-\n      QueryTotalTimeoutFeesResponse defines the response type for the\n      TotalTimeoutFees rpc\n  ibc.core.channel.v1.PacketId:\n    type: object\n    properties:\n      port_id:\n        type: string\n        title: channel port identifier\n      channel_id:\n        type: string\n        title: channel unique identifier\n      sequence:\n        type: string\n        format: uint64\n        title: packet sequence\n    title: |-\n      PacketId is an identifer for a unique Packet\n      Source chains refer to packets by source port/channel\n      Destination chains refer to packets by destination port/channel\n  cosmos.params.v1beta1.ParamChange:\n    type: object\n    properties:\n      subspace:\n        type: string\n      key:\n        type: string\n      value:\n        type: string\n    description: |-\n      ParamChange defines an individual parameter change, for use in\n      ParameterChangeProposal.\n  cosmos.params.v1beta1.QueryParamsResponse:\n    type: object\n    properties:\n      param:\n        description: param defines the queried parameter.\n        type: object\n        properties:\n          subspace:\n            type: string\n          key:\n            type: string\n          value:\n            type: string\n    description: QueryParamsResponse is response type for the Query/Params RPC method.\n  cosmos.params.v1beta1.QuerySubspacesResponse:\n    type: object\n    properties:\n      subspaces:\n        type: array\n        items:\n          type: object\n          properties:\n            subspace:\n              type: string\n            keys:\n              type: array\n              items:\n                type: string\n          description: >-\n            Subspace defines a parameter subspace name and all the keys that\n            exist for\n\n            the subspace.\n\n\n            Since: cosmos-sdk 0.46\n    description: |-\n      QuerySubspacesResponse defines the response types for querying for all\n      registered subspaces and all keys for a subspace.\n\n      Since: cosmos-sdk 0.46\n  cosmos.params.v1beta1.Subspace:\n    type: object\n    properties:\n      subspace:\n        type: string\n      keys:\n        type: array\n        items:\n          type: string\n    description: |-\n      Subspace defines a parameter subspace name and all the keys that exist for\n      the subspace.\n\n      Since: cosmos-sdk 0.46\n  cyber.rank.v1beta1.PageRequest:\n    type: object\n    properties:\n      page:\n        type: integer\n        format: int64\n      per_page:\n        type: integer\n        format: int64\n  cyber.rank.v1beta1.PageResponse:\n    type: object\n    properties:\n      total:\n        type: integer\n        format: int64\n  cyber.rank.v1beta1.Params:\n    type: object\n    properties:\n      calculation_period:\n        type: string\n        format: int64\n      damping_factor:\n        type: string\n      tolerance:\n        type: string\n  cyber.rank.v1beta1.QueryKarmaResponse:\n    type: object\n    properties:\n      karma:\n        type: string\n        format: uint64\n  cyber.rank.v1beta1.QueryLinkExistResponse:\n    type: object\n    properties:\n      exist:\n        type: boolean\n  cyber.rank.v1beta1.QueryNegentropyParticleResponse:\n    type: object\n    properties:\n      entropy:\n        type: string\n        format: uint64\n  cyber.rank.v1beta1.QueryNegentropyResponse:\n    type: object\n    properties:\n      negentropy:\n        type: string\n        format: uint64\n  cyber.rank.v1beta1.QueryParamsResponse:\n    type: object\n    properties:\n      params:\n        type: object\n        properties:\n          calculation_period:\n            type: string\n            format: int64\n          damping_factor:\n            type: string\n          tolerance:\n            type: string\n  cyber.rank.v1beta1.QueryRankResponse:\n    type: object\n    properties:\n      rank:\n        type: string\n        format: uint64\n  cyber.rank.v1beta1.QuerySearchResponse:\n    type: object\n    properties:\n      result:\n        type: array\n        items:\n          type: object\n          properties:\n            particle:\n              type: string\n            rank:\n              type: string\n              format: uint64\n      pagination:\n        type: object\n        properties:\n          total:\n            type: integer\n            format: int64\n  cyber.rank.v1beta1.RankedParticle:\n    type: object\n    properties:\n      particle:\n        type: string\n      rank:\n        type: string\n        format: uint64\n  cosmos.base.v1beta1.DecCoin:\n    type: object\n    properties:\n      denom:\n        type: string\n      amount:\n        type: string\n    description: |-\n      DecCoin defines a token with a denomination and a decimal amount.\n\n      NOTE: The amount field is an Dec which implements the custom method\n      signatures required by gogoproto.\n  cosmos.distribution.v1beta1.DelegationDelegatorReward:\n    type: object\n    properties:\n      validator_address:\n        type: string\n      reward:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            DecCoin defines a token with a denomination and a decimal amount.\n\n            NOTE: The amount field is an Dec which implements the custom method\n            signatures required by gogoproto.\n    description: |-\n      DelegationDelegatorReward represents the properties\n      of a delegator's delegation reward.\n  cosmos.distribution.v1beta1.Params:\n    type: object\n    properties:\n      community_tax:\n        type: string\n      base_proposer_reward:\n        type: string\n        description: >-\n          Deprecated: The base_proposer_reward field is deprecated and is no\n          longer used\n\n          in the x/distribution module's reward mechanism.\n      bonus_proposer_reward:\n        type: string\n        description: >-\n          Deprecated: The bonus_proposer_reward field is deprecated and is no\n          longer used\n\n          in the x/distribution module's reward mechanism.\n      withdraw_addr_enabled:\n        type: boolean\n    description: Params defines the set of params for the distribution module.\n  cosmos.distribution.v1beta1.QueryCommunityPoolResponse:\n    type: object\n    properties:\n      pool:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            DecCoin defines a token with a denomination and a decimal amount.\n\n            NOTE: The amount field is an Dec which implements the custom method\n            signatures required by gogoproto.\n        description: pool defines community pool's coins.\n    description: >-\n      QueryCommunityPoolResponse is the response type for the\n      Query/CommunityPool\n\n      RPC method.\n  cosmos.distribution.v1beta1.QueryDelegationRewardsResponse:\n    type: object\n    properties:\n      rewards:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            DecCoin defines a token with a denomination and a decimal amount.\n\n            NOTE: The amount field is an Dec which implements the custom method\n            signatures required by gogoproto.\n        description: rewards defines the rewards accrued by a delegation.\n    description: |-\n      QueryDelegationRewardsResponse is the response type for the\n      Query/DelegationRewards RPC method.\n  cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse:\n    type: object\n    properties:\n      rewards:\n        type: array\n        items:\n          type: object\n          properties:\n            validator_address:\n              type: string\n            reward:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  DecCoin defines a token with a denomination and a decimal\n                  amount.\n\n\n                  NOTE: The amount field is an Dec which implements the custom\n                  method\n\n                  signatures required by gogoproto.\n          description: |-\n            DelegationDelegatorReward represents the properties\n            of a delegator's delegation reward.\n        description: rewards defines all the rewards accrued by a delegator.\n      total:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            DecCoin defines a token with a denomination and a decimal amount.\n\n            NOTE: The amount field is an Dec which implements the custom method\n            signatures required by gogoproto.\n        description: total defines the sum of all the rewards.\n    description: |-\n      QueryDelegationTotalRewardsResponse is the response type for the\n      Query/DelegationTotalRewards RPC method.\n  cosmos.distribution.v1beta1.QueryDelegatorValidatorsResponse:\n    type: object\n    properties:\n      validators:\n        type: array\n        items:\n          type: string\n        description: validators defines the validators a delegator is delegating for.\n    description: |-\n      QueryDelegatorValidatorsResponse is the response type for the\n      Query/DelegatorValidators RPC method.\n  cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse:\n    type: object\n    properties:\n      withdraw_address:\n        type: string\n        description: withdraw_address defines the delegator address to query for.\n    description: |-\n      QueryDelegatorWithdrawAddressResponse is the response type for the\n      Query/DelegatorWithdrawAddress RPC method.\n  cosmos.distribution.v1beta1.QueryParamsResponse:\n    type: object\n    properties:\n      params:\n        description: params defines the parameters of the module.\n        type: object\n        properties:\n          community_tax:\n            type: string\n          base_proposer_reward:\n            type: string\n            description: >-\n              Deprecated: The base_proposer_reward field is deprecated and is no\n              longer used\n\n              in the x/distribution module's reward mechanism.\n          bonus_proposer_reward:\n            type: string\n            description: >-\n              Deprecated: The bonus_proposer_reward field is deprecated and is\n              no longer used\n\n              in the x/distribution module's reward mechanism.\n          withdraw_addr_enabled:\n            type: boolean\n    description: QueryParamsResponse is the response type for the Query/Params RPC method.\n  cosmos.distribution.v1beta1.QueryValidatorCommissionResponse:\n    type: object\n    properties:\n      commission:\n        description: commission defines the commission the validator received.\n        type: object\n        properties:\n          commission:\n            type: array\n            items:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                DecCoin defines a token with a denomination and a decimal\n                amount.\n\n\n                NOTE: The amount field is an Dec which implements the custom\n                method\n\n                signatures required by gogoproto.\n    title: |-\n      QueryValidatorCommissionResponse is the response type for the\n      Query/ValidatorCommission RPC method\n  cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse:\n    type: object\n    properties:\n      operator_address:\n        type: string\n        description: operator_address defines the validator operator address.\n      self_bond_rewards:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            DecCoin defines a token with a denomination and a decimal amount.\n\n            NOTE: The amount field is an Dec which implements the custom method\n            signatures required by gogoproto.\n        description: self_bond_rewards defines the self delegations rewards.\n      commission:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            DecCoin defines a token with a denomination and a decimal amount.\n\n            NOTE: The amount field is an Dec which implements the custom method\n            signatures required by gogoproto.\n        description: commission defines the commission the validator received.\n    description: >-\n      QueryValidatorDistributionInfoResponse is the response type for the\n      Query/ValidatorDistributionInfo RPC method.\n  cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse:\n    type: object\n    properties:\n      rewards:\n        type: object\n        properties:\n          rewards:\n            type: array\n            items:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                DecCoin defines a token with a denomination and a decimal\n                amount.\n\n\n                NOTE: The amount field is an Dec which implements the custom\n                method\n\n                signatures required by gogoproto.\n        description: >-\n          ValidatorOutstandingRewards represents outstanding (un-withdrawn)\n          rewards\n\n          for a validator inexpensive to track, allows simple sanity checks.\n    description: |-\n      QueryValidatorOutstandingRewardsResponse is the response type for the\n      Query/ValidatorOutstandingRewards RPC method.\n  cosmos.distribution.v1beta1.QueryValidatorSlashesResponse:\n    type: object\n    properties:\n      slashes:\n        type: array\n        items:\n          type: object\n          properties:\n            validator_period:\n              type: string\n              format: uint64\n            fraction:\n              type: string\n          description: |-\n            ValidatorSlashEvent represents a validator slash event.\n            Height is implicit within the store key.\n            This is needed to calculate appropriate amount of staking tokens\n            for delegations which are withdrawn after a slash has occurred.\n        description: slashes defines the slashes the validator received.\n      pagination:\n        description: pagination defines the pagination in the response.\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n    description: |-\n      QueryValidatorSlashesResponse is the response type for the\n      Query/ValidatorSlashes RPC method.\n  cosmos.distribution.v1beta1.ValidatorAccumulatedCommission:\n    type: object\n    properties:\n      commission:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            DecCoin defines a token with a denomination and a decimal amount.\n\n            NOTE: The amount field is an Dec which implements the custom method\n            signatures required by gogoproto.\n    description: |-\n      ValidatorAccumulatedCommission represents accumulated commission\n      for a validator kept as a running counter, can be withdrawn at any time.\n  cosmos.distribution.v1beta1.ValidatorOutstandingRewards:\n    type: object\n    properties:\n      rewards:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            DecCoin defines a token with a denomination and a decimal amount.\n\n            NOTE: The amount field is an Dec which implements the custom method\n            signatures required by gogoproto.\n    description: |-\n      ValidatorOutstandingRewards represents outstanding (un-withdrawn) rewards\n      for a validator inexpensive to track, allows simple sanity checks.\n  cosmos.distribution.v1beta1.ValidatorSlashEvent:\n    type: object\n    properties:\n      validator_period:\n        type: string\n        format: uint64\n      fraction:\n        type: string\n    description: |-\n      ValidatorSlashEvent represents a validator slash event.\n      Height is implicit within the store key.\n      This is needed to calculate appropriate amount of staking tokens\n      for delegations which are withdrawn after a slash has occurred.\n  cosmos.bank.v1beta1.DenomOwner:\n    type: object\n    properties:\n      address:\n        type: string\n        description: address defines the address that owns a particular denomination.\n      balance:\n        type: object\n        properties:\n          denom:\n            type: string\n          amount:\n            type: string\n        description: |-\n          Coin defines a token with a denomination and an amount.\n\n          NOTE: The amount field is an Int which implements the custom method\n          signatures required by gogoproto.\n    description: |-\n      DenomOwner defines structure representing an account that owns or holds a\n      particular denominated token. It contains the account address and account\n      balance of the denominated token.\n\n      Since: cosmos-sdk 0.46\n  cosmos.bank.v1beta1.DenomUnit:\n    type: object\n    properties:\n      denom:\n        type: string\n        description: denom represents the string name of the given denom unit (e.g uatom).\n      exponent:\n        type: integer\n        format: int64\n        description: >-\n          exponent represents power of 10 exponent that one must\n\n          raise the base_denom to in order to equal the given DenomUnit's denom\n\n          1 denom = 10^exponent base_denom\n\n          (e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom'\n          with\n\n          exponent = 6, thus: 1 atom = 10^6 uatom).\n      aliases:\n        type: array\n        items:\n          type: string\n        title: aliases is a list of string aliases for the given denom\n    description: |-\n      DenomUnit represents a struct that describes a given\n      denomination unit of the basic token.\n  cosmos.bank.v1beta1.Metadata:\n    type: object\n    properties:\n      description:\n        type: string\n      denom_units:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n              description: >-\n                denom represents the string name of the given denom unit (e.g\n                uatom).\n            exponent:\n              type: integer\n              format: int64\n              description: >-\n                exponent represents power of 10 exponent that one must\n\n                raise the base_denom to in order to equal the given DenomUnit's\n                denom\n\n                1 denom = 10^exponent base_denom\n\n                (e.g. with a base_denom of uatom, one can create a DenomUnit of\n                'atom' with\n\n                exponent = 6, thus: 1 atom = 10^6 uatom).\n            aliases:\n              type: array\n              items:\n                type: string\n              title: aliases is a list of string aliases for the given denom\n          description: |-\n            DenomUnit represents a struct that describes a given\n            denomination unit of the basic token.\n        title: denom_units represents the list of DenomUnit's for a given coin\n      base:\n        type: string\n        description: >-\n          base represents the base denom (should be the DenomUnit with exponent\n          = 0).\n      display:\n        type: string\n        description: |-\n          display indicates the suggested denom that should be\n          displayed in clients.\n      name:\n        type: string\n        description: 'Since: cosmos-sdk 0.43'\n        title: 'name defines the name of the token (eg: Cosmos Atom)'\n      symbol:\n        type: string\n        description: >-\n          symbol is the token symbol usually shown on exchanges (eg: ATOM). This\n          can\n\n          be the same as the display.\n\n\n          Since: cosmos-sdk 0.43\n      uri:\n        type: string\n        description: >-\n          URI to a document (on or off-chain) that contains additional\n          information. Optional.\n\n\n          Since: cosmos-sdk 0.46\n      uri_hash:\n        type: string\n        description: >-\n          URIHash is a sha256 hash of a document pointed by URI. It's used to\n          verify that\n\n          the document didn't change. Optional.\n\n\n          Since: cosmos-sdk 0.46\n    description: |-\n      Metadata represents a struct that describes\n      a basic token.\n  cosmos.bank.v1beta1.Params:\n    type: object\n    properties:\n      send_enabled:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            enabled:\n              type: boolean\n          description: >-\n            SendEnabled maps coin denom to a send_enabled status (whether a\n            denom is\n\n            sendable).\n        description: >-\n          Deprecated: Use of SendEnabled in params is deprecated.\n\n          For genesis, use the newly added send_enabled field in the genesis\n          object.\n\n          Storage, lookup, and manipulation of this information is now in the\n          keeper.\n\n\n          As of cosmos-sdk 0.47, this only exists for backwards compatibility of\n          genesis files.\n      default_send_enabled:\n        type: boolean\n    description: Params defines the parameters for the bank module.\n  cosmos.bank.v1beta1.QueryAllBalancesResponse:\n    type: object\n    properties:\n      balances:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        description: balances is the balances of all the coins.\n      pagination:\n        description: pagination defines the pagination in the response.\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n    description: >-\n      QueryAllBalancesResponse is the response type for the Query/AllBalances\n      RPC\n\n      method.\n  cosmos.bank.v1beta1.QueryBalanceResponse:\n    type: object\n    properties:\n      balance:\n        type: object\n        properties:\n          denom:\n            type: string\n          amount:\n            type: string\n        description: |-\n          Coin defines a token with a denomination and an amount.\n\n          NOTE: The amount field is an Int which implements the custom method\n          signatures required by gogoproto.\n    description: >-\n      QueryBalanceResponse is the response type for the Query/Balance RPC\n      method.\n  cosmos.bank.v1beta1.QueryDenomMetadataResponse:\n    type: object\n    properties:\n      metadata:\n        type: object\n        properties:\n          description:\n            type: string\n          denom_units:\n            type: array\n            items:\n              type: object\n              properties:\n                denom:\n                  type: string\n                  description: >-\n                    denom represents the string name of the given denom unit\n                    (e.g uatom).\n                exponent:\n                  type: integer\n                  format: int64\n                  description: >-\n                    exponent represents power of 10 exponent that one must\n\n                    raise the base_denom to in order to equal the given\n                    DenomUnit's denom\n\n                    1 denom = 10^exponent base_denom\n\n                    (e.g. with a base_denom of uatom, one can create a DenomUnit\n                    of 'atom' with\n\n                    exponent = 6, thus: 1 atom = 10^6 uatom).\n                aliases:\n                  type: array\n                  items:\n                    type: string\n                  title: aliases is a list of string aliases for the given denom\n              description: |-\n                DenomUnit represents a struct that describes a given\n                denomination unit of the basic token.\n            title: denom_units represents the list of DenomUnit's for a given coin\n          base:\n            type: string\n            description: >-\n              base represents the base denom (should be the DenomUnit with\n              exponent = 0).\n          display:\n            type: string\n            description: |-\n              display indicates the suggested denom that should be\n              displayed in clients.\n          name:\n            type: string\n            description: 'Since: cosmos-sdk 0.43'\n            title: 'name defines the name of the token (eg: Cosmos Atom)'\n          symbol:\n            type: string\n            description: >-\n              symbol is the token symbol usually shown on exchanges (eg: ATOM).\n              This can\n\n              be the same as the display.\n\n\n              Since: cosmos-sdk 0.43\n          uri:\n            type: string\n            description: >-\n              URI to a document (on or off-chain) that contains additional\n              information. Optional.\n\n\n              Since: cosmos-sdk 0.46\n          uri_hash:\n            type: string\n            description: >-\n              URIHash is a sha256 hash of a document pointed by URI. It's used\n              to verify that\n\n              the document didn't change. Optional.\n\n\n              Since: cosmos-sdk 0.46\n        description: |-\n          Metadata represents a struct that describes\n          a basic token.\n    description: >-\n      QueryDenomMetadataResponse is the response type for the\n      Query/DenomMetadata RPC\n\n      method.\n  cosmos.bank.v1beta1.QueryDenomOwnersResponse:\n    type: object\n    properties:\n      denom_owners:\n        type: array\n        items:\n          type: object\n          properties:\n            address:\n              type: string\n              description: address defines the address that owns a particular denomination.\n            balance:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom\n                method\n\n                signatures required by gogoproto.\n          description: >-\n            DenomOwner defines structure representing an account that owns or\n            holds a\n\n            particular denominated token. It contains the account address and\n            account\n\n            balance of the denominated token.\n\n\n            Since: cosmos-sdk 0.46\n      pagination:\n        description: pagination defines the pagination in the response.\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n    description: >-\n      QueryDenomOwnersResponse defines the RPC response of a DenomOwners RPC\n      query.\n\n\n      Since: cosmos-sdk 0.46\n  cosmos.bank.v1beta1.QueryDenomsMetadataResponse:\n    type: object\n    properties:\n      metadatas:\n        type: array\n        items:\n          type: object\n          properties:\n            description:\n              type: string\n            denom_units:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                    description: >-\n                      denom represents the string name of the given denom unit\n                      (e.g uatom).\n                  exponent:\n                    type: integer\n                    format: int64\n                    description: >-\n                      exponent represents power of 10 exponent that one must\n\n                      raise the base_denom to in order to equal the given\n                      DenomUnit's denom\n\n                      1 denom = 10^exponent base_denom\n\n                      (e.g. with a base_denom of uatom, one can create a\n                      DenomUnit of 'atom' with\n\n                      exponent = 6, thus: 1 atom = 10^6 uatom).\n                  aliases:\n                    type: array\n                    items:\n                      type: string\n                    title: aliases is a list of string aliases for the given denom\n                description: |-\n                  DenomUnit represents a struct that describes a given\n                  denomination unit of the basic token.\n              title: denom_units represents the list of DenomUnit's for a given coin\n            base:\n              type: string\n              description: >-\n                base represents the base denom (should be the DenomUnit with\n                exponent = 0).\n            display:\n              type: string\n              description: |-\n                display indicates the suggested denom that should be\n                displayed in clients.\n            name:\n              type: string\n              description: 'Since: cosmos-sdk 0.43'\n              title: 'name defines the name of the token (eg: Cosmos Atom)'\n            symbol:\n              type: string\n              description: >-\n                symbol is the token symbol usually shown on exchanges (eg:\n                ATOM). This can\n\n                be the same as the display.\n\n\n                Since: cosmos-sdk 0.43\n            uri:\n              type: string\n              description: >-\n                URI to a document (on or off-chain) that contains additional\n                information. Optional.\n\n\n                Since: cosmos-sdk 0.46\n            uri_hash:\n              type: string\n              description: >-\n                URIHash is a sha256 hash of a document pointed by URI. It's used\n                to verify that\n\n                the document didn't change. Optional.\n\n\n                Since: cosmos-sdk 0.46\n          description: |-\n            Metadata represents a struct that describes\n            a basic token.\n        description: >-\n          metadata provides the client information for all the registered\n          tokens.\n      pagination:\n        description: pagination defines the pagination in the response.\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n    description: >-\n      QueryDenomsMetadataResponse is the response type for the\n      Query/DenomsMetadata RPC\n\n      method.\n  cosmos.bank.v1beta1.QueryParamsResponse:\n    type: object\n    properties:\n      params:\n        type: object\n        properties:\n          send_enabled:\n            type: array\n            items:\n              type: object\n              properties:\n                denom:\n                  type: string\n                enabled:\n                  type: boolean\n              description: >-\n                SendEnabled maps coin denom to a send_enabled status (whether a\n                denom is\n\n                sendable).\n            description: >-\n              Deprecated: Use of SendEnabled in params is deprecated.\n\n              For genesis, use the newly added send_enabled field in the genesis\n              object.\n\n              Storage, lookup, and manipulation of this information is now in\n              the keeper.\n\n\n              As of cosmos-sdk 0.47, this only exists for backwards\n              compatibility of genesis files.\n          default_send_enabled:\n            type: boolean\n        description: Params defines the parameters for the bank module.\n    description: >-\n      QueryParamsResponse defines the response type for querying x/bank\n      parameters.\n  cosmos.bank.v1beta1.QuerySendEnabledResponse:\n    type: object\n    properties:\n      send_enabled:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            enabled:\n              type: boolean\n          description: >-\n            SendEnabled maps coin denom to a send_enabled status (whether a\n            denom is\n\n            sendable).\n      pagination:\n        description: |-\n          pagination defines the pagination in the response. This field is only\n          populated if the denoms field in the request is empty.\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n    description: |-\n      QuerySendEnabledResponse defines the RPC response of a SendEnable query.\n\n      Since: cosmos-sdk 0.47\n  cosmos.bank.v1beta1.QuerySpendableBalanceByDenomResponse:\n    type: object\n    properties:\n      balance:\n        type: object\n        properties:\n          denom:\n            type: string\n          amount:\n            type: string\n        description: |-\n          Coin defines a token with a denomination and an amount.\n\n          NOTE: The amount field is an Int which implements the custom method\n          signatures required by gogoproto.\n    description: >-\n      QuerySpendableBalanceByDenomResponse defines the gRPC response structure\n      for\n\n      querying an account's spendable balance for a specific denom.\n\n\n      Since: cosmos-sdk 0.47\n  cosmos.bank.v1beta1.QuerySpendableBalancesResponse:\n    type: object\n    properties:\n      balances:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        description: balances is the spendable balances of all the coins.\n      pagination:\n        description: pagination defines the pagination in the response.\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n    description: >-\n      QuerySpendableBalancesResponse defines the gRPC response structure for\n      querying\n\n      an account's spendable balances.\n\n\n      Since: cosmos-sdk 0.46\n  cosmos.bank.v1beta1.QuerySupplyOfResponse:\n    type: object\n    properties:\n      amount:\n        type: object\n        properties:\n          denom:\n            type: string\n          amount:\n            type: string\n        description: |-\n          Coin defines a token with a denomination and an amount.\n\n          NOTE: The amount field is an Int which implements the custom method\n          signatures required by gogoproto.\n    description: >-\n      QuerySupplyOfResponse is the response type for the Query/SupplyOf RPC\n      method.\n  cosmos.bank.v1beta1.QueryTotalSupplyResponse:\n    type: object\n    properties:\n      supply:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        title: supply is the supply of the coins\n      pagination:\n        description: |-\n          pagination defines the pagination in the response.\n\n          Since: cosmos-sdk 0.43\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n    title: >-\n      QueryTotalSupplyResponse is the response type for the Query/TotalSupply\n      RPC\n\n      method\n  cosmos.bank.v1beta1.SendEnabled:\n    type: object\n    properties:\n      denom:\n        type: string\n      enabled:\n        type: boolean\n    description: |-\n      SendEnabled maps coin denom to a send_enabled status (whether a denom is\n      sendable).\n  ibc.core.client.v1.Height:\n    type: object\n    properties:\n      revision_number:\n        type: string\n        format: uint64\n        title: the revision that the client is currently on\n      revision_height:\n        type: string\n        format: uint64\n        title: the height within the given revision\n    description: |-\n      Normally the RevisionHeight is incremented at each height while keeping\n      RevisionNumber the same. However some consensus algorithms may choose to\n      reset the height in certain conditions e.g. hard forks, state-machine\n      breaking changes In these cases, the RevisionNumber is incremented so that\n      height continues to be monitonically increasing even as the RevisionHeight\n      gets reset\n    title: >-\n      Height is a monotonically increasing data type\n\n      that can be compared against another Height for the purposes of updating\n      and\n\n      freezing clients\n  ibc.core.client.v1.IdentifiedClientState:\n    type: object\n    properties:\n      client_id:\n        type: string\n        title: client identifier\n      client_state:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n        title: client state\n    description: |-\n      IdentifiedClientState defines a client state with an additional client\n      identifier field.\n  ibc.core.commitment.v1.MerklePrefix:\n    type: object\n    properties:\n      key_prefix:\n        type: string\n        format: byte\n    title: |-\n      MerklePrefix is merkle path prefixed to the key.\n      The constructed key from the Path and the key will be append(Path.KeyPath,\n      append(Path.KeyPrefix, key...))\n  ibc.core.connection.v1.ConnectionEnd:\n    type: object\n    properties:\n      client_id:\n        type: string\n        description: client associated with this connection.\n      versions:\n        type: array\n        items:\n          type: object\n          properties:\n            identifier:\n              type: string\n              title: unique version identifier\n            features:\n              type: array\n              items:\n                type: string\n              title: list of features compatible with the specified identifier\n          description: >-\n            Version defines the versioning scheme used to negotiate the IBC\n            verison in\n\n            the connection handshake.\n        description: >-\n          IBC version which can be utilised to determine encodings or protocols\n          for\n\n          channels or packets utilising this connection.\n      state:\n        description: current state of the connection end.\n        type: string\n        enum:\n          - STATE_UNINITIALIZED_UNSPECIFIED\n          - STATE_INIT\n          - STATE_TRYOPEN\n          - STATE_OPEN\n        default: STATE_UNINITIALIZED_UNSPECIFIED\n      counterparty:\n        description: counterparty chain associated with this connection.\n        type: object\n        properties:\n          client_id:\n            type: string\n            description: >-\n              identifies the client on the counterparty chain associated with a\n              given\n\n              connection.\n          connection_id:\n            type: string\n            description: >-\n              identifies the connection end on the counterparty chain associated\n              with a\n\n              given connection.\n          prefix:\n            description: commitment merkle prefix of the counterparty chain.\n            type: object\n            properties:\n              key_prefix:\n                type: string\n                format: byte\n            title: >-\n              MerklePrefix is merkle path prefixed to the key.\n\n              The constructed key from the Path and the key will be\n              append(Path.KeyPath,\n\n              append(Path.KeyPrefix, key...))\n      delay_period:\n        type: string\n        format: uint64\n        description: >-\n          delay period that must pass before a consensus state can be used for\n\n          packet-verification NOTE: delay period logic is only implemented by\n          some\n\n          clients.\n    description: |-\n      ConnectionEnd defines a stateful object on a chain connected to another\n      separate one.\n      NOTE: there must only be 2 defined ConnectionEnds to establish\n      a connection between two chains.\n  ibc.core.connection.v1.Counterparty:\n    type: object\n    properties:\n      client_id:\n        type: string\n        description: >-\n          identifies the client on the counterparty chain associated with a\n          given\n\n          connection.\n      connection_id:\n        type: string\n        description: >-\n          identifies the connection end on the counterparty chain associated\n          with a\n\n          given connection.\n      prefix:\n        description: commitment merkle prefix of the counterparty chain.\n        type: object\n        properties:\n          key_prefix:\n            type: string\n            format: byte\n        title: >-\n          MerklePrefix is merkle path prefixed to the key.\n\n          The constructed key from the Path and the key will be\n          append(Path.KeyPath,\n\n          append(Path.KeyPrefix, key...))\n    description: >-\n      Counterparty defines the counterparty chain associated with a connection\n      end.\n  ibc.core.connection.v1.IdentifiedConnection:\n    type: object\n    properties:\n      id:\n        type: string\n        description: connection identifier.\n      client_id:\n        type: string\n        description: client associated with this connection.\n      versions:\n        type: array\n        items:\n          type: object\n          properties:\n            identifier:\n              type: string\n              title: unique version identifier\n            features:\n              type: array\n              items:\n                type: string\n              title: list of features compatible with the specified identifier\n          description: >-\n            Version defines the versioning scheme used to negotiate the IBC\n            verison in\n\n            the connection handshake.\n        title: >-\n          IBC version which can be utilised to determine encodings or protocols\n          for\n\n          channels or packets utilising this connection\n      state:\n        description: current state of the connection end.\n        type: string\n        enum:\n          - STATE_UNINITIALIZED_UNSPECIFIED\n          - STATE_INIT\n          - STATE_TRYOPEN\n          - STATE_OPEN\n        default: STATE_UNINITIALIZED_UNSPECIFIED\n      counterparty:\n        description: counterparty chain associated with this connection.\n        type: object\n        properties:\n          client_id:\n            type: string\n            description: >-\n              identifies the client on the counterparty chain associated with a\n              given\n\n              connection.\n          connection_id:\n            type: string\n            description: >-\n              identifies the connection end on the counterparty chain associated\n              with a\n\n              given connection.\n          prefix:\n            description: commitment merkle prefix of the counterparty chain.\n            type: object\n            properties:\n              key_prefix:\n                type: string\n                format: byte\n            title: >-\n              MerklePrefix is merkle path prefixed to the key.\n\n              The constructed key from the Path and the key will be\n              append(Path.KeyPath,\n\n              append(Path.KeyPrefix, key...))\n      delay_period:\n        type: string\n        format: uint64\n        description: delay period associated with this connection.\n    description: |-\n      IdentifiedConnection defines a connection with additional connection\n      identifier field.\n  ibc.core.connection.v1.Params:\n    type: object\n    properties:\n      max_expected_time_per_block:\n        type: string\n        format: uint64\n        description: >-\n          maximum expected time per block (in nanoseconds), used to enforce\n          block delay. This parameter should reflect the\n\n          largest amount of time that the chain might reasonably take to produce\n          the next block under normal operating\n\n          conditions. A safe choice is 3-5x the expected time per block.\n    description: Params defines the set of Connection parameters.\n  ibc.core.connection.v1.QueryClientConnectionsResponse:\n    type: object\n    properties:\n      connection_paths:\n        type: array\n        items:\n          type: string\n        description: slice of all the connection paths associated with a client.\n      proof:\n        type: string\n        format: byte\n        title: merkle proof of existence\n      proof_height:\n        title: height at which the proof was generated\n        type: object\n        properties:\n          revision_number:\n            type: string\n            format: uint64\n            title: the revision that the client is currently on\n          revision_height:\n            type: string\n            format: uint64\n            title: the height within the given revision\n        description: >-\n          Normally the RevisionHeight is incremented at each height while\n          keeping\n\n          RevisionNumber the same. However some consensus algorithms may choose\n          to\n\n          reset the height in certain conditions e.g. hard forks, state-machine\n\n          breaking changes In these cases, the RevisionNumber is incremented so\n          that\n\n          height continues to be monitonically increasing even as the\n          RevisionHeight\n\n          gets reset\n    title: |-\n      QueryClientConnectionsResponse is the response type for the\n      Query/ClientConnections RPC method\n  ibc.core.connection.v1.QueryConnectionClientStateResponse:\n    type: object\n    properties:\n      identified_client_state:\n        title: client state associated with the channel\n        type: object\n        properties:\n          client_id:\n            type: string\n            title: client identifier\n          client_state:\n            type: object\n            properties:\n              type_url:\n                type: string\n              value:\n                type: string\n                format: byte\n            title: client state\n        description: |-\n          IdentifiedClientState defines a client state with an additional client\n          identifier field.\n      proof:\n        type: string\n        format: byte\n        title: merkle proof of existence\n      proof_height:\n        title: height at which the proof was retrieved\n        type: object\n        properties:\n          revision_number:\n            type: string\n            format: uint64\n            title: the revision that the client is currently on\n          revision_height:\n            type: string\n            format: uint64\n            title: the height within the given revision\n        description: >-\n          Normally the RevisionHeight is incremented at each height while\n          keeping\n\n          RevisionNumber the same. However some consensus algorithms may choose\n          to\n\n          reset the height in certain conditions e.g. hard forks, state-machine\n\n          breaking changes In these cases, the RevisionNumber is incremented so\n          that\n\n          height continues to be monitonically increasing even as the\n          RevisionHeight\n\n          gets reset\n    title: |-\n      QueryConnectionClientStateResponse is the response type for the\n      Query/ConnectionClientState RPC method\n  ibc.core.connection.v1.QueryConnectionConsensusStateResponse:\n    type: object\n    properties:\n      consensus_state:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n        title: consensus state associated with the channel\n      client_id:\n        type: string\n        title: client ID associated with the consensus state\n      proof:\n        type: string\n        format: byte\n        title: merkle proof of existence\n      proof_height:\n        title: height at which the proof was retrieved\n        type: object\n        properties:\n          revision_number:\n            type: string\n            format: uint64\n            title: the revision that the client is currently on\n          revision_height:\n            type: string\n            format: uint64\n            title: the height within the given revision\n        description: >-\n          Normally the RevisionHeight is incremented at each height while\n          keeping\n\n          RevisionNumber the same. However some consensus algorithms may choose\n          to\n\n          reset the height in certain conditions e.g. hard forks, state-machine\n\n          breaking changes In these cases, the RevisionNumber is incremented so\n          that\n\n          height continues to be monitonically increasing even as the\n          RevisionHeight\n\n          gets reset\n    title: |-\n      QueryConnectionConsensusStateResponse is the response type for the\n      Query/ConnectionConsensusState RPC method\n  ibc.core.connection.v1.QueryConnectionParamsResponse:\n    type: object\n    properties:\n      params:\n        description: params defines the parameters of the module.\n        type: object\n        properties:\n          max_expected_time_per_block:\n            type: string\n            format: uint64\n            description: >-\n              maximum expected time per block (in nanoseconds), used to enforce\n              block delay. This parameter should reflect the\n\n              largest amount of time that the chain might reasonably take to\n              produce the next block under normal operating\n\n              conditions. A safe choice is 3-5x the expected time per block.\n    description: >-\n      QueryConnectionParamsResponse is the response type for the\n      Query/ConnectionParams RPC method.\n  ibc.core.connection.v1.QueryConnectionResponse:\n    type: object\n    properties:\n      connection:\n        title: connection associated with the request identifier\n        type: object\n        properties:\n          client_id:\n            type: string\n            description: client associated with this connection.\n          versions:\n            type: array\n            items:\n              type: object\n              properties:\n                identifier:\n                  type: string\n                  title: unique version identifier\n                features:\n                  type: array\n                  items:\n                    type: string\n                  title: list of features compatible with the specified identifier\n              description: >-\n                Version defines the versioning scheme used to negotiate the IBC\n                verison in\n\n                the connection handshake.\n            description: >-\n              IBC version which can be utilised to determine encodings or\n              protocols for\n\n              channels or packets utilising this connection.\n          state:\n            description: current state of the connection end.\n            type: string\n            enum:\n              - STATE_UNINITIALIZED_UNSPECIFIED\n              - STATE_INIT\n              - STATE_TRYOPEN\n              - STATE_OPEN\n            default: STATE_UNINITIALIZED_UNSPECIFIED\n          counterparty:\n            description: counterparty chain associated with this connection.\n            type: object\n            properties:\n              client_id:\n                type: string\n                description: >-\n                  identifies the client on the counterparty chain associated\n                  with a given\n\n                  connection.\n              connection_id:\n                type: string\n                description: >-\n                  identifies the connection end on the counterparty chain\n                  associated with a\n\n                  given connection.\n              prefix:\n                description: commitment merkle prefix of the counterparty chain.\n                type: object\n                properties:\n                  key_prefix:\n                    type: string\n                    format: byte\n                title: >-\n                  MerklePrefix is merkle path prefixed to the key.\n\n                  The constructed key from the Path and the key will be\n                  append(Path.KeyPath,\n\n                  append(Path.KeyPrefix, key...))\n          delay_period:\n            type: string\n            format: uint64\n            description: >-\n              delay period that must pass before a consensus state can be used\n              for\n\n              packet-verification NOTE: delay period logic is only implemented\n              by some\n\n              clients.\n        description: >-\n          ConnectionEnd defines a stateful object on a chain connected to\n          another\n\n          separate one.\n\n          NOTE: there must only be 2 defined ConnectionEnds to establish\n\n          a connection between two chains.\n      proof:\n        type: string\n        format: byte\n        title: merkle proof of existence\n      proof_height:\n        title: height at which the proof was retrieved\n        type: object\n        properties:\n          revision_number:\n            type: string\n            format: uint64\n            title: the revision that the client is currently on\n          revision_height:\n            type: string\n            format: uint64\n            title: the height within the given revision\n        description: >-\n          Normally the RevisionHeight is incremented at each height while\n          keeping\n\n          RevisionNumber the same. However some consensus algorithms may choose\n          to\n\n          reset the height in certain conditions e.g. hard forks, state-machine\n\n          breaking changes In these cases, the RevisionNumber is incremented so\n          that\n\n          height continues to be monitonically increasing even as the\n          RevisionHeight\n\n          gets reset\n    description: >-\n      QueryConnectionResponse is the response type for the Query/Connection RPC\n\n      method. Besides the connection end, it includes a proof and the height\n      from\n\n      which the proof was retrieved.\n  ibc.core.connection.v1.QueryConnectionsResponse:\n    type: object\n    properties:\n      connections:\n        type: array\n        items:\n          type: object\n          properties:\n            id:\n              type: string\n              description: connection identifier.\n            client_id:\n              type: string\n              description: client associated with this connection.\n            versions:\n              type: array\n              items:\n                type: object\n                properties:\n                  identifier:\n                    type: string\n                    title: unique version identifier\n                  features:\n                    type: array\n                    items:\n                      type: string\n                    title: list of features compatible with the specified identifier\n                description: >-\n                  Version defines the versioning scheme used to negotiate the\n                  IBC verison in\n\n                  the connection handshake.\n              title: >-\n                IBC version which can be utilised to determine encodings or\n                protocols for\n\n                channels or packets utilising this connection\n            state:\n              description: current state of the connection end.\n              type: string\n              enum:\n                - STATE_UNINITIALIZED_UNSPECIFIED\n                - STATE_INIT\n                - STATE_TRYOPEN\n                - STATE_OPEN\n              default: STATE_UNINITIALIZED_UNSPECIFIED\n            counterparty:\n              description: counterparty chain associated with this connection.\n              type: object\n              properties:\n                client_id:\n                  type: string\n                  description: >-\n                    identifies the client on the counterparty chain associated\n                    with a given\n\n                    connection.\n                connection_id:\n                  type: string\n                  description: >-\n                    identifies the connection end on the counterparty chain\n                    associated with a\n\n                    given connection.\n                prefix:\n                  description: commitment merkle prefix of the counterparty chain.\n                  type: object\n                  properties:\n                    key_prefix:\n                      type: string\n                      format: byte\n                  title: >-\n                    MerklePrefix is merkle path prefixed to the key.\n\n                    The constructed key from the Path and the key will be\n                    append(Path.KeyPath,\n\n                    append(Path.KeyPrefix, key...))\n            delay_period:\n              type: string\n              format: uint64\n              description: delay period associated with this connection.\n          description: |-\n            IdentifiedConnection defines a connection with additional connection\n            identifier field.\n        description: list of stored connections of the chain.\n      pagination:\n        title: pagination response\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n      height:\n        title: query block height\n        type: object\n        properties:\n          revision_number:\n            type: string\n            format: uint64\n            title: the revision that the client is currently on\n          revision_height:\n            type: string\n            format: uint64\n            title: the height within the given revision\n        description: >-\n          Normally the RevisionHeight is incremented at each height while\n          keeping\n\n          RevisionNumber the same. However some consensus algorithms may choose\n          to\n\n          reset the height in certain conditions e.g. hard forks, state-machine\n\n          breaking changes In these cases, the RevisionNumber is incremented so\n          that\n\n          height continues to be monitonically increasing even as the\n          RevisionHeight\n\n          gets reset\n    description: >-\n      QueryConnectionsResponse is the response type for the Query/Connections\n      RPC\n\n      method.\n  ibc.core.connection.v1.State:\n    type: string\n    enum:\n      - STATE_UNINITIALIZED_UNSPECIFIED\n      - STATE_INIT\n      - STATE_TRYOPEN\n      - STATE_OPEN\n    default: STATE_UNINITIALIZED_UNSPECIFIED\n    description: |-\n      State defines if a connection is in one of the following states:\n      INIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n       - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n       - STATE_INIT: A connection end has just started the opening handshake.\n       - STATE_TRYOPEN: A connection end has acknowledged the handshake step on the counterparty\n      chain.\n       - STATE_OPEN: A connection end has completed the handshake.\n  ibc.core.connection.v1.Version:\n    type: object\n    properties:\n      identifier:\n        type: string\n        title: unique version identifier\n      features:\n        type: array\n        items:\n          type: string\n        title: list of features compatible with the specified identifier\n    description: |-\n      Version defines the versioning scheme used to negotiate the IBC verison in\n      the connection handshake.\n  cyber.grid.v1beta1.Params:\n    type: object\n    properties:\n      max_routes:\n        type: integer\n        format: int64\n  cyber.grid.v1beta1.QueryParamsResponse:\n    type: object\n    properties:\n      params:\n        type: object\n        properties:\n          max_routes:\n            type: integer\n            format: int64\n  cyber.grid.v1beta1.QueryRouteResponse:\n    type: object\n    properties:\n      route:\n        type: object\n        properties:\n          source:\n            type: string\n          destination:\n            type: string\n          name:\n            type: string\n          value:\n            type: array\n            items:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom\n                method\n\n                signatures required by gogoproto.\n  cyber.grid.v1beta1.QueryRoutedEnergyResponse:\n    type: object\n    properties:\n      value:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n  cyber.grid.v1beta1.QueryRoutesResponse:\n    type: object\n    properties:\n      routes:\n        type: array\n        items:\n          type: object\n          properties:\n            source:\n              type: string\n            destination:\n              type: string\n            name:\n              type: string\n            value:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom\n                  method\n\n                  signatures required by gogoproto.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n  cyber.grid.v1beta1.Route:\n    type: object\n    properties:\n      source:\n        type: string\n      destination:\n        type: string\n      name:\n        type: string\n      value:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n  cyber.dmn.v1beta1.Load:\n    type: object\n    properties:\n      input:\n        type: string\n      gas_price:\n        type: object\n        properties:\n          denom:\n            type: string\n          amount:\n            type: string\n        description: |-\n          Coin defines a token with a denomination and an amount.\n\n          NOTE: The amount field is an Int which implements the custom method\n          signatures required by gogoproto.\n  cyber.dmn.v1beta1.Params:\n    type: object\n    properties:\n      max_slots:\n        type: integer\n        format: int64\n      max_gas:\n        type: integer\n        format: int64\n      fee_ttl:\n        type: integer\n        format: int64\n  cyber.dmn.v1beta1.QueryParamsResponse:\n    type: object\n    properties:\n      params:\n        type: object\n        properties:\n          max_slots:\n            type: integer\n            format: int64\n          max_gas:\n            type: integer\n            format: int64\n          fee_ttl:\n            type: integer\n            format: int64\n  cyber.dmn.v1beta1.QueryThoughtResponse:\n    type: object\n    properties:\n      thought:\n        type: object\n        properties:\n          program:\n            type: string\n          trigger:\n            type: object\n            properties:\n              period:\n                type: string\n                format: uint64\n              block:\n                type: string\n                format: uint64\n          load:\n            type: object\n            properties:\n              input:\n                type: string\n              gas_price:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom\n                  method\n\n                  signatures required by gogoproto.\n          name:\n            type: string\n          particle:\n            type: string\n  cyber.dmn.v1beta1.QueryThoughtStatsResponse:\n    type: object\n    properties:\n      thought_stats:\n        type: object\n        properties:\n          program:\n            type: string\n          name:\n            type: string\n          calls:\n            type: string\n            format: uint64\n          fees:\n            type: string\n            format: uint64\n          gas:\n            type: string\n            format: uint64\n          last_block:\n            type: string\n            format: uint64\n  cyber.dmn.v1beta1.QueryThoughtsFeesResponse:\n    type: object\n    properties:\n      fees:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n  cyber.dmn.v1beta1.QueryThoughtsResponse:\n    type: object\n    properties:\n      thoughts:\n        type: array\n        items:\n          type: object\n          properties:\n            program:\n              type: string\n            trigger:\n              type: object\n              properties:\n                period:\n                  type: string\n                  format: uint64\n                block:\n                  type: string\n                  format: uint64\n            load:\n              type: object\n              properties:\n                input:\n                  type: string\n                gas_price:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom\n                    method\n\n                    signatures required by gogoproto.\n            name:\n              type: string\n            particle:\n              type: string\n  cyber.dmn.v1beta1.QueryThoughtsStatsResponse:\n    type: object\n    properties:\n      thoughts_stats:\n        type: array\n        items:\n          type: object\n          properties:\n            program:\n              type: string\n            name:\n              type: string\n            calls:\n              type: string\n              format: uint64\n            fees:\n              type: string\n              format: uint64\n            gas:\n              type: string\n              format: uint64\n            last_block:\n              type: string\n              format: uint64\n  cyber.dmn.v1beta1.Thought:\n    type: object\n    properties:\n      program:\n        type: string\n      trigger:\n        type: object\n        properties:\n          period:\n            type: string\n            format: uint64\n          block:\n            type: string\n            format: uint64\n      load:\n        type: object\n        properties:\n          input:\n            type: string\n          gas_price:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom\n              method\n\n              signatures required by gogoproto.\n      name:\n        type: string\n      particle:\n        type: string\n  cyber.dmn.v1beta1.ThoughtStats:\n    type: object\n    properties:\n      program:\n        type: string\n      name:\n        type: string\n      calls:\n        type: string\n        format: uint64\n      fees:\n        type: string\n        format: uint64\n      gas:\n        type: string\n        format: uint64\n      last_block:\n        type: string\n        format: uint64\n  cyber.dmn.v1beta1.Trigger:\n    type: object\n    properties:\n      period:\n        type: string\n        format: uint64\n      block:\n        type: string\n        format: uint64\n  cosmos.staking.v1beta1.BondStatus:\n    type: string\n    enum:\n      - BOND_STATUS_UNSPECIFIED\n      - BOND_STATUS_UNBONDED\n      - BOND_STATUS_UNBONDING\n      - BOND_STATUS_BONDED\n    default: BOND_STATUS_UNSPECIFIED\n    description: |-\n      BondStatus is the status of a validator.\n\n       - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status.\n       - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded.\n       - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding.\n       - BOND_STATUS_BONDED: BONDED defines a validator that is bonded.\n  cosmos.staking.v1beta1.Commission:\n    type: object\n    properties:\n      commission_rates:\n        description: >-\n          commission_rates defines the initial commission rates to be used for\n          creating a validator.\n        type: object\n        properties:\n          rate:\n            type: string\n            description: rate is the commission rate charged to delegators, as a fraction.\n          max_rate:\n            type: string\n            description: >-\n              max_rate defines the maximum commission rate which validator can\n              ever charge, as a fraction.\n          max_change_rate:\n            type: string\n            description: >-\n              max_change_rate defines the maximum daily increase of the\n              validator commission, as a fraction.\n      update_time:\n        type: string\n        format: date-time\n        description: update_time is the last time the commission rate was changed.\n    description: Commission defines commission parameters for a given validator.\n  cosmos.staking.v1beta1.CommissionRates:\n    type: object\n    properties:\n      rate:\n        type: string\n        description: rate is the commission rate charged to delegators, as a fraction.\n      max_rate:\n        type: string\n        description: >-\n          max_rate defines the maximum commission rate which validator can ever\n          charge, as a fraction.\n      max_change_rate:\n        type: string\n        description: >-\n          max_change_rate defines the maximum daily increase of the validator\n          commission, as a fraction.\n    description: >-\n      CommissionRates defines the initial commission rates to be used for\n      creating\n\n      a validator.\n  cosmos.staking.v1beta1.Delegation:\n    type: object\n    properties:\n      delegator_address:\n        type: string\n        description: delegator_address is the bech32-encoded address of the delegator.\n      validator_address:\n        type: string\n        description: validator_address is the bech32-encoded address of the validator.\n      shares:\n        type: string\n        description: shares define the delegation shares received.\n    description: |-\n      Delegation represents the bond with tokens held by an account. It is\n      owned by one delegator, and is associated with the voting power of one\n      validator.\n  cosmos.staking.v1beta1.DelegationResponse:\n    type: object\n    properties:\n      delegation:\n        type: object\n        properties:\n          delegator_address:\n            type: string\n            description: delegator_address is the bech32-encoded address of the delegator.\n          validator_address:\n            type: string\n            description: validator_address is the bech32-encoded address of the validator.\n          shares:\n            type: string\n            description: shares define the delegation shares received.\n        description: |-\n          Delegation represents the bond with tokens held by an account. It is\n          owned by one delegator, and is associated with the voting power of one\n          validator.\n      balance:\n        type: object\n        properties:\n          denom:\n            type: string\n          amount:\n            type: string\n        description: |-\n          Coin defines a token with a denomination and an amount.\n\n          NOTE: The amount field is an Int which implements the custom method\n          signatures required by gogoproto.\n    description: |-\n      DelegationResponse is equivalent to Delegation except that it contains a\n      balance in addition to shares which is more suitable for client responses.\n  cosmos.staking.v1beta1.Description:\n    type: object\n    properties:\n      moniker:\n        type: string\n        description: moniker defines a human-readable name for the validator.\n      identity:\n        type: string\n        description: >-\n          identity defines an optional identity signature (ex. UPort or\n          Keybase).\n      website:\n        type: string\n        description: website defines an optional website link.\n      security_contact:\n        type: string\n        description: security_contact defines an optional email for security contact.\n      details:\n        type: string\n        description: details define other optional details.\n    description: Description defines a validator description.\n  cosmos.staking.v1beta1.HistoricalInfo:\n    type: object\n    properties:\n      header:\n        type: object\n        properties:\n          version:\n            title: basic block info\n            type: object\n            properties:\n              block:\n                type: string\n                format: uint64\n              app:\n                type: string\n                format: uint64\n            description: >-\n              Consensus captures the consensus rules for processing a block in\n              the blockchain,\n\n              including all blockchain data structures and the rules of the\n              application's\n\n              state transition machine.\n          chain_id:\n            type: string\n          height:\n            type: string\n            format: int64\n          time:\n            type: string\n            format: date-time\n          last_block_id:\n            title: prev block info\n            type: object\n            properties:\n              hash:\n                type: string\n                format: byte\n              part_set_header:\n                type: object\n                properties:\n                  total:\n                    type: integer\n                    format: int64\n                  hash:\n                    type: string\n                    format: byte\n                title: PartsetHeader\n          last_commit_hash:\n            type: string\n            format: byte\n            title: hashes of block data\n          data_hash:\n            type: string\n            format: byte\n          validators_hash:\n            type: string\n            format: byte\n            title: hashes from the app output from the prev block\n          next_validators_hash:\n            type: string\n            format: byte\n          consensus_hash:\n            type: string\n            format: byte\n          app_hash:\n            type: string\n            format: byte\n          last_results_hash:\n            type: string\n            format: byte\n          evidence_hash:\n            type: string\n            format: byte\n            title: consensus info\n          proposer_address:\n            type: string\n            format: byte\n        description: Header defines the structure of a block header.\n      valset:\n        type: array\n        items:\n          type: object\n          properties:\n            operator_address:\n              type: string\n              description: >-\n                operator_address defines the address of the validator's\n                operator; bech encoded in JSON.\n            consensus_pubkey:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n              description: >-\n                consensus_pubkey is the consensus public key of the validator,\n                as a Protobuf Any.\n            jailed:\n              type: boolean\n              description: >-\n                jailed defined whether the validator has been jailed from bonded\n                status or not.\n            status:\n              description: status is the validator status (bonded/unbonding/unbonded).\n              type: string\n              enum:\n                - BOND_STATUS_UNSPECIFIED\n                - BOND_STATUS_UNBONDED\n                - BOND_STATUS_UNBONDING\n                - BOND_STATUS_BONDED\n              default: BOND_STATUS_UNSPECIFIED\n            tokens:\n              type: string\n              description: tokens define the delegated tokens (incl. self-delegation).\n            delegator_shares:\n              type: string\n              description: >-\n                delegator_shares defines total shares issued to a validator's\n                delegators.\n            description:\n              description: description defines the description terms for the validator.\n              type: object\n              properties:\n                moniker:\n                  type: string\n                  description: moniker defines a human-readable name for the validator.\n                identity:\n                  type: string\n                  description: >-\n                    identity defines an optional identity signature (ex. UPort\n                    or Keybase).\n                website:\n                  type: string\n                  description: website defines an optional website link.\n                security_contact:\n                  type: string\n                  description: >-\n                    security_contact defines an optional email for security\n                    contact.\n                details:\n                  type: string\n                  description: details define other optional details.\n            unbonding_height:\n              type: string\n              format: int64\n              description: >-\n                unbonding_height defines, if unbonding, the height at which this\n                validator has begun unbonding.\n            unbonding_time:\n              type: string\n              format: date-time\n              description: >-\n                unbonding_time defines, if unbonding, the min time for the\n                validator to complete unbonding.\n            commission:\n              description: commission defines the commission parameters.\n              type: object\n              properties:\n                commission_rates:\n                  description: >-\n                    commission_rates defines the initial commission rates to be\n                    used for creating a validator.\n                  type: object\n                  properties:\n                    rate:\n                      type: string\n                      description: >-\n                        rate is the commission rate charged to delegators, as a\n                        fraction.\n                    max_rate:\n                      type: string\n                      description: >-\n                        max_rate defines the maximum commission rate which\n                        validator can ever charge, as a fraction.\n                    max_change_rate:\n                      type: string\n                      description: >-\n                        max_change_rate defines the maximum daily increase of\n                        the validator commission, as a fraction.\n                update_time:\n                  type: string\n                  format: date-time\n                  description: >-\n                    update_time is the last time the commission rate was\n                    changed.\n            min_self_delegation:\n              type: string\n              description: >-\n                min_self_delegation is the validator's self declared minimum\n                self delegation.\n\n\n                Since: cosmos-sdk 0.46\n            unbonding_on_hold_ref_count:\n              type: string\n              format: int64\n              title: >-\n                strictly positive if this validator's unbonding has been stopped\n                by external modules\n            unbonding_ids:\n              type: array\n              items:\n                type: string\n                format: uint64\n              title: >-\n                list of unbonding ids, each uniquely identifing an unbonding of\n                this validator\n          description: >-\n            Validator defines a validator, together with the total amount of the\n\n            Validator's bond shares and their exchange rate to coins. Slashing\n            results in\n\n            a decrease in the exchange rate, allowing correct calculation of\n            future\n\n            undelegations without iterating over delegators. When coins are\n            delegated to\n\n            this validator, the validator is credited with a delegation whose\n            number of\n\n            bond shares is based on the amount of coins delegated divided by the\n            current\n\n            exchange rate. Voting power can be calculated as total bonded shares\n\n            multiplied by exchange rate.\n    description: >-\n      HistoricalInfo contains header and validator information for a given\n      block.\n\n      It is stored as part of staking module's state, which persists the `n`\n      most\n\n      recent HistoricalInfo\n\n      (`n` is set by the staking module's `historical_entries` parameter).\n  cosmos.staking.v1beta1.Params:\n    type: object\n    properties:\n      unbonding_time:\n        type: string\n        description: unbonding_time is the time duration of unbonding.\n      max_validators:\n        type: integer\n        format: int64\n        description: max_validators is the maximum number of validators.\n      max_entries:\n        type: integer\n        format: int64\n        description: >-\n          max_entries is the max entries for either unbonding delegation or\n          redelegation (per pair/trio).\n      historical_entries:\n        type: integer\n        format: int64\n        description: historical_entries is the number of historical entries to persist.\n      bond_denom:\n        type: string\n        description: bond_denom defines the bondable coin denomination.\n      min_commission_rate:\n        type: string\n        title: >-\n          min_commission_rate is the chain-wide minimum commission rate that a\n          validator can charge their delegators\n    description: Params defines the parameters for the x/staking module.\n  cosmos.staking.v1beta1.Pool:\n    type: object\n    properties:\n      not_bonded_tokens:\n        type: string\n      bonded_tokens:\n        type: string\n    description: |-\n      Pool is used for tracking bonded and not-bonded token supply of the bond\n      denomination.\n  cosmos.staking.v1beta1.QueryDelegationResponse:\n    type: object\n    properties:\n      delegation_response:\n        type: object\n        properties:\n          delegation:\n            type: object\n            properties:\n              delegator_address:\n                type: string\n                description: >-\n                  delegator_address is the bech32-encoded address of the\n                  delegator.\n              validator_address:\n                type: string\n                description: >-\n                  validator_address is the bech32-encoded address of the\n                  validator.\n              shares:\n                type: string\n                description: shares define the delegation shares received.\n            description: >-\n              Delegation represents the bond with tokens held by an account. It\n              is\n\n              owned by one delegator, and is associated with the voting power of\n              one\n\n              validator.\n          balance:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom\n              method\n\n              signatures required by gogoproto.\n        description: >-\n          DelegationResponse is equivalent to Delegation except that it contains\n          a\n\n          balance in addition to shares which is more suitable for client\n          responses.\n    description: >-\n      QueryDelegationResponse is response type for the Query/Delegation RPC\n      method.\n  cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse:\n    type: object\n    properties:\n      delegation_responses:\n        type: array\n        items:\n          type: object\n          properties:\n            delegation:\n              type: object\n              properties:\n                delegator_address:\n                  type: string\n                  description: >-\n                    delegator_address is the bech32-encoded address of the\n                    delegator.\n                validator_address:\n                  type: string\n                  description: >-\n                    validator_address is the bech32-encoded address of the\n                    validator.\n                shares:\n                  type: string\n                  description: shares define the delegation shares received.\n              description: >-\n                Delegation represents the bond with tokens held by an account.\n                It is\n\n                owned by one delegator, and is associated with the voting power\n                of one\n\n                validator.\n            balance:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom\n                method\n\n                signatures required by gogoproto.\n          description: >-\n            DelegationResponse is equivalent to Delegation except that it\n            contains a\n\n            balance in addition to shares which is more suitable for client\n            responses.\n        description: delegation_responses defines all the delegations' info of a delegator.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: |-\n      QueryDelegatorDelegationsResponse is response type for the\n      Query/DelegatorDelegations RPC method.\n  cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse:\n    type: object\n    properties:\n      unbonding_responses:\n        type: array\n        items:\n          type: object\n          properties:\n            delegator_address:\n              type: string\n              description: >-\n                delegator_address is the bech32-encoded address of the\n                delegator.\n            validator_address:\n              type: string\n              description: >-\n                validator_address is the bech32-encoded address of the\n                validator.\n            entries:\n              type: array\n              items:\n                type: object\n                properties:\n                  creation_height:\n                    type: string\n                    format: int64\n                    description: >-\n                      creation_height is the height which the unbonding took\n                      place.\n                  completion_time:\n                    type: string\n                    format: date-time\n                    description: completion_time is the unix time for unbonding completion.\n                  initial_balance:\n                    type: string\n                    description: >-\n                      initial_balance defines the tokens initially scheduled to\n                      receive at completion.\n                  balance:\n                    type: string\n                    description: balance defines the tokens to receive at completion.\n                  unbonding_id:\n                    type: string\n                    format: uint64\n                    title: Incrementing id that uniquely identifies this entry\n                  unbonding_on_hold_ref_count:\n                    type: string\n                    format: int64\n                    title: >-\n                      Strictly positive if this entry's unbonding has been\n                      stopped by external modules\n                description: >-\n                  UnbondingDelegationEntry defines an unbonding object with\n                  relevant metadata.\n              description: entries are the unbonding delegation entries.\n          description: >-\n            UnbondingDelegation stores all of a single delegator's unbonding\n            bonds\n\n            for a single validator in an time-ordered list.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: |-\n      QueryUnbondingDelegatorDelegationsResponse is response type for the\n      Query/UnbondingDelegatorDelegations RPC method.\n  cosmos.staking.v1beta1.QueryDelegatorValidatorResponse:\n    type: object\n    properties:\n      validator:\n        type: object\n        properties:\n          operator_address:\n            type: string\n            description: >-\n              operator_address defines the address of the validator's operator;\n              bech encoded in JSON.\n          consensus_pubkey:\n            type: object\n            properties:\n              type_url:\n                type: string\n              value:\n                type: string\n                format: byte\n            description: >-\n              consensus_pubkey is the consensus public key of the validator, as\n              a Protobuf Any.\n          jailed:\n            type: boolean\n            description: >-\n              jailed defined whether the validator has been jailed from bonded\n              status or not.\n          status:\n            description: status is the validator status (bonded/unbonding/unbonded).\n            type: string\n            enum:\n              - BOND_STATUS_UNSPECIFIED\n              - BOND_STATUS_UNBONDED\n              - BOND_STATUS_UNBONDING\n              - BOND_STATUS_BONDED\n            default: BOND_STATUS_UNSPECIFIED\n          tokens:\n            type: string\n            description: tokens define the delegated tokens (incl. self-delegation).\n          delegator_shares:\n            type: string\n            description: >-\n              delegator_shares defines total shares issued to a validator's\n              delegators.\n          description:\n            description: description defines the description terms for the validator.\n            type: object\n            properties:\n              moniker:\n                type: string\n                description: moniker defines a human-readable name for the validator.\n              identity:\n                type: string\n                description: >-\n                  identity defines an optional identity signature (ex. UPort or\n                  Keybase).\n              website:\n                type: string\n                description: website defines an optional website link.\n              security_contact:\n                type: string\n                description: >-\n                  security_contact defines an optional email for security\n                  contact.\n              details:\n                type: string\n                description: details define other optional details.\n          unbonding_height:\n            type: string\n            format: int64\n            description: >-\n              unbonding_height defines, if unbonding, the height at which this\n              validator has begun unbonding.\n          unbonding_time:\n            type: string\n            format: date-time\n            description: >-\n              unbonding_time defines, if unbonding, the min time for the\n              validator to complete unbonding.\n          commission:\n            description: commission defines the commission parameters.\n            type: object\n            properties:\n              commission_rates:\n                description: >-\n                  commission_rates defines the initial commission rates to be\n                  used for creating a validator.\n                type: object\n                properties:\n                  rate:\n                    type: string\n                    description: >-\n                      rate is the commission rate charged to delegators, as a\n                      fraction.\n                  max_rate:\n                    type: string\n                    description: >-\n                      max_rate defines the maximum commission rate which\n                      validator can ever charge, as a fraction.\n                  max_change_rate:\n                    type: string\n                    description: >-\n                      max_change_rate defines the maximum daily increase of the\n                      validator commission, as a fraction.\n              update_time:\n                type: string\n                format: date-time\n                description: update_time is the last time the commission rate was changed.\n          min_self_delegation:\n            type: string\n            description: >-\n              min_self_delegation is the validator's self declared minimum self\n              delegation.\n\n\n              Since: cosmos-sdk 0.46\n          unbonding_on_hold_ref_count:\n            type: string\n            format: int64\n            title: >-\n              strictly positive if this validator's unbonding has been stopped\n              by external modules\n          unbonding_ids:\n            type: array\n            items:\n              type: string\n              format: uint64\n            title: >-\n              list of unbonding ids, each uniquely identifing an unbonding of\n              this validator\n        description: >-\n          Validator defines a validator, together with the total amount of the\n\n          Validator's bond shares and their exchange rate to coins. Slashing\n          results in\n\n          a decrease in the exchange rate, allowing correct calculation of\n          future\n\n          undelegations without iterating over delegators. When coins are\n          delegated to\n\n          this validator, the validator is credited with a delegation whose\n          number of\n\n          bond shares is based on the amount of coins delegated divided by the\n          current\n\n          exchange rate. Voting power can be calculated as total bonded shares\n\n          multiplied by exchange rate.\n    description: |-\n      QueryDelegatorValidatorResponse response type for the\n      Query/DelegatorValidator RPC method.\n  cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse:\n    type: object\n    properties:\n      validators:\n        type: array\n        items:\n          type: object\n          properties:\n            operator_address:\n              type: string\n              description: >-\n                operator_address defines the address of the validator's\n                operator; bech encoded in JSON.\n            consensus_pubkey:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n              description: >-\n                consensus_pubkey is the consensus public key of the validator,\n                as a Protobuf Any.\n            jailed:\n              type: boolean\n              description: >-\n                jailed defined whether the validator has been jailed from bonded\n                status or not.\n            status:\n              description: status is the validator status (bonded/unbonding/unbonded).\n              type: string\n              enum:\n                - BOND_STATUS_UNSPECIFIED\n                - BOND_STATUS_UNBONDED\n                - BOND_STATUS_UNBONDING\n                - BOND_STATUS_BONDED\n              default: BOND_STATUS_UNSPECIFIED\n            tokens:\n              type: string\n              description: tokens define the delegated tokens (incl. self-delegation).\n            delegator_shares:\n              type: string\n              description: >-\n                delegator_shares defines total shares issued to a validator's\n                delegators.\n            description:\n              description: description defines the description terms for the validator.\n              type: object\n              properties:\n                moniker:\n                  type: string\n                  description: moniker defines a human-readable name for the validator.\n                identity:\n                  type: string\n                  description: >-\n                    identity defines an optional identity signature (ex. UPort\n                    or Keybase).\n                website:\n                  type: string\n                  description: website defines an optional website link.\n                security_contact:\n                  type: string\n                  description: >-\n                    security_contact defines an optional email for security\n                    contact.\n                details:\n                  type: string\n                  description: details define other optional details.\n            unbonding_height:\n              type: string\n              format: int64\n              description: >-\n                unbonding_height defines, if unbonding, the height at which this\n                validator has begun unbonding.\n            unbonding_time:\n              type: string\n              format: date-time\n              description: >-\n                unbonding_time defines, if unbonding, the min time for the\n                validator to complete unbonding.\n            commission:\n              description: commission defines the commission parameters.\n              type: object\n              properties:\n                commission_rates:\n                  description: >-\n                    commission_rates defines the initial commission rates to be\n                    used for creating a validator.\n                  type: object\n                  properties:\n                    rate:\n                      type: string\n                      description: >-\n                        rate is the commission rate charged to delegators, as a\n                        fraction.\n                    max_rate:\n                      type: string\n                      description: >-\n                        max_rate defines the maximum commission rate which\n                        validator can ever charge, as a fraction.\n                    max_change_rate:\n                      type: string\n                      description: >-\n                        max_change_rate defines the maximum daily increase of\n                        the validator commission, as a fraction.\n                update_time:\n                  type: string\n                  format: date-time\n                  description: >-\n                    update_time is the last time the commission rate was\n                    changed.\n            min_self_delegation:\n              type: string\n              description: >-\n                min_self_delegation is the validator's self declared minimum\n                self delegation.\n\n\n                Since: cosmos-sdk 0.46\n            unbonding_on_hold_ref_count:\n              type: string\n              format: int64\n              title: >-\n                strictly positive if this validator's unbonding has been stopped\n                by external modules\n            unbonding_ids:\n              type: array\n              items:\n                type: string\n                format: uint64\n              title: >-\n                list of unbonding ids, each uniquely identifing an unbonding of\n                this validator\n          description: >-\n            Validator defines a validator, together with the total amount of the\n\n            Validator's bond shares and their exchange rate to coins. Slashing\n            results in\n\n            a decrease in the exchange rate, allowing correct calculation of\n            future\n\n            undelegations without iterating over delegators. When coins are\n            delegated to\n\n            this validator, the validator is credited with a delegation whose\n            number of\n\n            bond shares is based on the amount of coins delegated divided by the\n            current\n\n            exchange rate. Voting power can be calculated as total bonded shares\n\n            multiplied by exchange rate.\n        description: validators defines the validators' info of a delegator.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: |-\n      QueryDelegatorValidatorsResponse is response type for the\n      Query/DelegatorValidators RPC method.\n  cosmos.staking.v1beta1.QueryHistoricalInfoResponse:\n    type: object\n    properties:\n      hist:\n        description: hist defines the historical info at the given height.\n        type: object\n        properties:\n          header:\n            type: object\n            properties:\n              version:\n                title: basic block info\n                type: object\n                properties:\n                  block:\n                    type: string\n                    format: uint64\n                  app:\n                    type: string\n                    format: uint64\n                description: >-\n                  Consensus captures the consensus rules for processing a block\n                  in the blockchain,\n\n                  including all blockchain data structures and the rules of the\n                  application's\n\n                  state transition machine.\n              chain_id:\n                type: string\n              height:\n                type: string\n                format: int64\n              time:\n                type: string\n                format: date-time\n              last_block_id:\n                title: prev block info\n                type: object\n                properties:\n                  hash:\n                    type: string\n                    format: byte\n                  part_set_header:\n                    type: object\n                    properties:\n                      total:\n                        type: integer\n                        format: int64\n                      hash:\n                        type: string\n                        format: byte\n                    title: PartsetHeader\n              last_commit_hash:\n                type: string\n                format: byte\n                title: hashes of block data\n              data_hash:\n                type: string\n                format: byte\n              validators_hash:\n                type: string\n                format: byte\n                title: hashes from the app output from the prev block\n              next_validators_hash:\n                type: string\n                format: byte\n              consensus_hash:\n                type: string\n                format: byte\n              app_hash:\n                type: string\n                format: byte\n              last_results_hash:\n                type: string\n                format: byte\n              evidence_hash:\n                type: string\n                format: byte\n                title: consensus info\n              proposer_address:\n                type: string\n                format: byte\n            description: Header defines the structure of a block header.\n          valset:\n            type: array\n            items:\n              type: object\n              properties:\n                operator_address:\n                  type: string\n                  description: >-\n                    operator_address defines the address of the validator's\n                    operator; bech encoded in JSON.\n                consensus_pubkey:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n                  description: >-\n                    consensus_pubkey is the consensus public key of the\n                    validator, as a Protobuf Any.\n                jailed:\n                  type: boolean\n                  description: >-\n                    jailed defined whether the validator has been jailed from\n                    bonded status or not.\n                status:\n                  description: status is the validator status (bonded/unbonding/unbonded).\n                  type: string\n                  enum:\n                    - BOND_STATUS_UNSPECIFIED\n                    - BOND_STATUS_UNBONDED\n                    - BOND_STATUS_UNBONDING\n                    - BOND_STATUS_BONDED\n                  default: BOND_STATUS_UNSPECIFIED\n                tokens:\n                  type: string\n                  description: tokens define the delegated tokens (incl. self-delegation).\n                delegator_shares:\n                  type: string\n                  description: >-\n                    delegator_shares defines total shares issued to a\n                    validator's delegators.\n                description:\n                  description: description defines the description terms for the validator.\n                  type: object\n                  properties:\n                    moniker:\n                      type: string\n                      description: moniker defines a human-readable name for the validator.\n                    identity:\n                      type: string\n                      description: >-\n                        identity defines an optional identity signature (ex.\n                        UPort or Keybase).\n                    website:\n                      type: string\n                      description: website defines an optional website link.\n                    security_contact:\n                      type: string\n                      description: >-\n                        security_contact defines an optional email for security\n                        contact.\n                    details:\n                      type: string\n                      description: details define other optional details.\n                unbonding_height:\n                  type: string\n                  format: int64\n                  description: >-\n                    unbonding_height defines, if unbonding, the height at which\n                    this validator has begun unbonding.\n                unbonding_time:\n                  type: string\n                  format: date-time\n                  description: >-\n                    unbonding_time defines, if unbonding, the min time for the\n                    validator to complete unbonding.\n                commission:\n                  description: commission defines the commission parameters.\n                  type: object\n                  properties:\n                    commission_rates:\n                      description: >-\n                        commission_rates defines the initial commission rates to\n                        be used for creating a validator.\n                      type: object\n                      properties:\n                        rate:\n                          type: string\n                          description: >-\n                            rate is the commission rate charged to delegators,\n                            as a fraction.\n                        max_rate:\n                          type: string\n                          description: >-\n                            max_rate defines the maximum commission rate which\n                            validator can ever charge, as a fraction.\n                        max_change_rate:\n                          type: string\n                          description: >-\n                            max_change_rate defines the maximum daily increase\n                            of the validator commission, as a fraction.\n                    update_time:\n                      type: string\n                      format: date-time\n                      description: >-\n                        update_time is the last time the commission rate was\n                        changed.\n                min_self_delegation:\n                  type: string\n                  description: >-\n                    min_self_delegation is the validator's self declared minimum\n                    self delegation.\n\n\n                    Since: cosmos-sdk 0.46\n                unbonding_on_hold_ref_count:\n                  type: string\n                  format: int64\n                  title: >-\n                    strictly positive if this validator's unbonding has been\n                    stopped by external modules\n                unbonding_ids:\n                  type: array\n                  items:\n                    type: string\n                    format: uint64\n                  title: >-\n                    list of unbonding ids, each uniquely identifing an unbonding\n                    of this validator\n              description: >-\n                Validator defines a validator, together with the total amount of\n                the\n\n                Validator's bond shares and their exchange rate to coins.\n                Slashing results in\n\n                a decrease in the exchange rate, allowing correct calculation of\n                future\n\n                undelegations without iterating over delegators. When coins are\n                delegated to\n\n                this validator, the validator is credited with a delegation\n                whose number of\n\n                bond shares is based on the amount of coins delegated divided by\n                the current\n\n                exchange rate. Voting power can be calculated as total bonded\n                shares\n\n                multiplied by exchange rate.\n    description: >-\n      QueryHistoricalInfoResponse is response type for the Query/HistoricalInfo\n      RPC\n\n      method.\n  cosmos.staking.v1beta1.QueryParamsResponse:\n    type: object\n    properties:\n      params:\n        description: params holds all the parameters of this module.\n        type: object\n        properties:\n          unbonding_time:\n            type: string\n            description: unbonding_time is the time duration of unbonding.\n          max_validators:\n            type: integer\n            format: int64\n            description: max_validators is the maximum number of validators.\n          max_entries:\n            type: integer\n            format: int64\n            description: >-\n              max_entries is the max entries for either unbonding delegation or\n              redelegation (per pair/trio).\n          historical_entries:\n            type: integer\n            format: int64\n            description: historical_entries is the number of historical entries to persist.\n          bond_denom:\n            type: string\n            description: bond_denom defines the bondable coin denomination.\n          min_commission_rate:\n            type: string\n            title: >-\n              min_commission_rate is the chain-wide minimum commission rate that\n              a validator can charge their delegators\n    description: QueryParamsResponse is response type for the Query/Params RPC method.\n  cosmos.staking.v1beta1.QueryPoolResponse:\n    type: object\n    properties:\n      pool:\n        description: pool defines the pool info.\n        type: object\n        properties:\n          not_bonded_tokens:\n            type: string\n          bonded_tokens:\n            type: string\n    description: QueryPoolResponse is response type for the Query/Pool RPC method.\n  cosmos.staking.v1beta1.QueryRedelegationsResponse:\n    type: object\n    properties:\n      redelegation_responses:\n        type: array\n        items:\n          type: object\n          properties:\n            redelegation:\n              type: object\n              properties:\n                delegator_address:\n                  type: string\n                  description: >-\n                    delegator_address is the bech32-encoded address of the\n                    delegator.\n                validator_src_address:\n                  type: string\n                  description: >-\n                    validator_src_address is the validator redelegation source\n                    operator address.\n                validator_dst_address:\n                  type: string\n                  description: >-\n                    validator_dst_address is the validator redelegation\n                    destination operator address.\n                entries:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      creation_height:\n                        type: string\n                        format: int64\n                        description: >-\n                          creation_height  defines the height which the\n                          redelegation took place.\n                      completion_time:\n                        type: string\n                        format: date-time\n                        description: >-\n                          completion_time defines the unix time for redelegation\n                          completion.\n                      initial_balance:\n                        type: string\n                        description: >-\n                          initial_balance defines the initial balance when\n                          redelegation started.\n                      shares_dst:\n                        type: string\n                        description: >-\n                          shares_dst is the amount of destination-validator\n                          shares created by redelegation.\n                      unbonding_id:\n                        type: string\n                        format: uint64\n                        title: Incrementing id that uniquely identifies this entry\n                      unbonding_on_hold_ref_count:\n                        type: string\n                        format: int64\n                        title: >-\n                          Strictly positive if this entry's unbonding has been\n                          stopped by external modules\n                    description: >-\n                      RedelegationEntry defines a redelegation object with\n                      relevant metadata.\n                  description: entries are the redelegation entries.\n              description: >-\n                Redelegation contains the list of a particular delegator's\n                redelegating bonds\n\n                from a particular source validator to a particular destination\n                validator.\n            entries:\n              type: array\n              items:\n                type: object\n                properties:\n                  redelegation_entry:\n                    type: object\n                    properties:\n                      creation_height:\n                        type: string\n                        format: int64\n                        description: >-\n                          creation_height  defines the height which the\n                          redelegation took place.\n                      completion_time:\n                        type: string\n                        format: date-time\n                        description: >-\n                          completion_time defines the unix time for redelegation\n                          completion.\n                      initial_balance:\n                        type: string\n                        description: >-\n                          initial_balance defines the initial balance when\n                          redelegation started.\n                      shares_dst:\n                        type: string\n                        description: >-\n                          shares_dst is the amount of destination-validator\n                          shares created by redelegation.\n                      unbonding_id:\n                        type: string\n                        format: uint64\n                        title: Incrementing id that uniquely identifies this entry\n                      unbonding_on_hold_ref_count:\n                        type: string\n                        format: int64\n                        title: >-\n                          Strictly positive if this entry's unbonding has been\n                          stopped by external modules\n                    description: >-\n                      RedelegationEntry defines a redelegation object with\n                      relevant metadata.\n                  balance:\n                    type: string\n                description: >-\n                  RedelegationEntryResponse is equivalent to a RedelegationEntry\n                  except that it\n\n                  contains a balance in addition to shares which is more\n                  suitable for client\n\n                  responses.\n          description: >-\n            RedelegationResponse is equivalent to a Redelegation except that its\n            entries\n\n            contain a balance in addition to shares which is more suitable for\n            client\n\n            responses.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: >-\n      QueryRedelegationsResponse is response type for the Query/Redelegations\n      RPC\n\n      method.\n  cosmos.staking.v1beta1.QueryUnbondingDelegationResponse:\n    type: object\n    properties:\n      unbond:\n        type: object\n        properties:\n          delegator_address:\n            type: string\n            description: delegator_address is the bech32-encoded address of the delegator.\n          validator_address:\n            type: string\n            description: validator_address is the bech32-encoded address of the validator.\n          entries:\n            type: array\n            items:\n              type: object\n              properties:\n                creation_height:\n                  type: string\n                  format: int64\n                  description: >-\n                    creation_height is the height which the unbonding took\n                    place.\n                completion_time:\n                  type: string\n                  format: date-time\n                  description: completion_time is the unix time for unbonding completion.\n                initial_balance:\n                  type: string\n                  description: >-\n                    initial_balance defines the tokens initially scheduled to\n                    receive at completion.\n                balance:\n                  type: string\n                  description: balance defines the tokens to receive at completion.\n                unbonding_id:\n                  type: string\n                  format: uint64\n                  title: Incrementing id that uniquely identifies this entry\n                unbonding_on_hold_ref_count:\n                  type: string\n                  format: int64\n                  title: >-\n                    Strictly positive if this entry's unbonding has been stopped\n                    by external modules\n              description: >-\n                UnbondingDelegationEntry defines an unbonding object with\n                relevant metadata.\n            description: entries are the unbonding delegation entries.\n        description: |-\n          UnbondingDelegation stores all of a single delegator's unbonding bonds\n          for a single validator in an time-ordered list.\n    description: |-\n      QueryDelegationResponse is response type for the Query/UnbondingDelegation\n      RPC method.\n  cosmos.staking.v1beta1.QueryValidatorDelegationsResponse:\n    type: object\n    properties:\n      delegation_responses:\n        type: array\n        items:\n          type: object\n          properties:\n            delegation:\n              type: object\n              properties:\n                delegator_address:\n                  type: string\n                  description: >-\n                    delegator_address is the bech32-encoded address of the\n                    delegator.\n                validator_address:\n                  type: string\n                  description: >-\n                    validator_address is the bech32-encoded address of the\n                    validator.\n                shares:\n                  type: string\n                  description: shares define the delegation shares received.\n              description: >-\n                Delegation represents the bond with tokens held by an account.\n                It is\n\n                owned by one delegator, and is associated with the voting power\n                of one\n\n                validator.\n            balance:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom\n                method\n\n                signatures required by gogoproto.\n          description: >-\n            DelegationResponse is equivalent to Delegation except that it\n            contains a\n\n            balance in addition to shares which is more suitable for client\n            responses.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    title: |-\n      QueryValidatorDelegationsResponse is response type for the\n      Query/ValidatorDelegations RPC method\n  cosmos.staking.v1beta1.QueryValidatorResponse:\n    type: object\n    properties:\n      validator:\n        type: object\n        properties:\n          operator_address:\n            type: string\n            description: >-\n              operator_address defines the address of the validator's operator;\n              bech encoded in JSON.\n          consensus_pubkey:\n            type: object\n            properties:\n              type_url:\n                type: string\n              value:\n                type: string\n                format: byte\n            description: >-\n              consensus_pubkey is the consensus public key of the validator, as\n              a Protobuf Any.\n          jailed:\n            type: boolean\n            description: >-\n              jailed defined whether the validator has been jailed from bonded\n              status or not.\n          status:\n            description: status is the validator status (bonded/unbonding/unbonded).\n            type: string\n            enum:\n              - BOND_STATUS_UNSPECIFIED\n              - BOND_STATUS_UNBONDED\n              - BOND_STATUS_UNBONDING\n              - BOND_STATUS_BONDED\n            default: BOND_STATUS_UNSPECIFIED\n          tokens:\n            type: string\n            description: tokens define the delegated tokens (incl. self-delegation).\n          delegator_shares:\n            type: string\n            description: >-\n              delegator_shares defines total shares issued to a validator's\n              delegators.\n          description:\n            description: description defines the description terms for the validator.\n            type: object\n            properties:\n              moniker:\n                type: string\n                description: moniker defines a human-readable name for the validator.\n              identity:\n                type: string\n                description: >-\n                  identity defines an optional identity signature (ex. UPort or\n                  Keybase).\n              website:\n                type: string\n                description: website defines an optional website link.\n              security_contact:\n                type: string\n                description: >-\n                  security_contact defines an optional email for security\n                  contact.\n              details:\n                type: string\n                description: details define other optional details.\n          unbonding_height:\n            type: string\n            format: int64\n            description: >-\n              unbonding_height defines, if unbonding, the height at which this\n              validator has begun unbonding.\n          unbonding_time:\n            type: string\n            format: date-time\n            description: >-\n              unbonding_time defines, if unbonding, the min time for the\n              validator to complete unbonding.\n          commission:\n            description: commission defines the commission parameters.\n            type: object\n            properties:\n              commission_rates:\n                description: >-\n                  commission_rates defines the initial commission rates to be\n                  used for creating a validator.\n                type: object\n                properties:\n                  rate:\n                    type: string\n                    description: >-\n                      rate is the commission rate charged to delegators, as a\n                      fraction.\n                  max_rate:\n                    type: string\n                    description: >-\n                      max_rate defines the maximum commission rate which\n                      validator can ever charge, as a fraction.\n                  max_change_rate:\n                    type: string\n                    description: >-\n                      max_change_rate defines the maximum daily increase of the\n                      validator commission, as a fraction.\n              update_time:\n                type: string\n                format: date-time\n                description: update_time is the last time the commission rate was changed.\n          min_self_delegation:\n            type: string\n            description: >-\n              min_self_delegation is the validator's self declared minimum self\n              delegation.\n\n\n              Since: cosmos-sdk 0.46\n          unbonding_on_hold_ref_count:\n            type: string\n            format: int64\n            title: >-\n              strictly positive if this validator's unbonding has been stopped\n              by external modules\n          unbonding_ids:\n            type: array\n            items:\n              type: string\n              format: uint64\n            title: >-\n              list of unbonding ids, each uniquely identifing an unbonding of\n              this validator\n        description: >-\n          Validator defines a validator, together with the total amount of the\n\n          Validator's bond shares and their exchange rate to coins. Slashing\n          results in\n\n          a decrease in the exchange rate, allowing correct calculation of\n          future\n\n          undelegations without iterating over delegators. When coins are\n          delegated to\n\n          this validator, the validator is credited with a delegation whose\n          number of\n\n          bond shares is based on the amount of coins delegated divided by the\n          current\n\n          exchange rate. Voting power can be calculated as total bonded shares\n\n          multiplied by exchange rate.\n    title: QueryValidatorResponse is response type for the Query/Validator RPC method\n  cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse:\n    type: object\n    properties:\n      unbonding_responses:\n        type: array\n        items:\n          type: object\n          properties:\n            delegator_address:\n              type: string\n              description: >-\n                delegator_address is the bech32-encoded address of the\n                delegator.\n            validator_address:\n              type: string\n              description: >-\n                validator_address is the bech32-encoded address of the\n                validator.\n            entries:\n              type: array\n              items:\n                type: object\n                properties:\n                  creation_height:\n                    type: string\n                    format: int64\n                    description: >-\n                      creation_height is the height which the unbonding took\n                      place.\n                  completion_time:\n                    type: string\n                    format: date-time\n                    description: completion_time is the unix time for unbonding completion.\n                  initial_balance:\n                    type: string\n                    description: >-\n                      initial_balance defines the tokens initially scheduled to\n                      receive at completion.\n                  balance:\n                    type: string\n                    description: balance defines the tokens to receive at completion.\n                  unbonding_id:\n                    type: string\n                    format: uint64\n                    title: Incrementing id that uniquely identifies this entry\n                  unbonding_on_hold_ref_count:\n                    type: string\n                    format: int64\n                    title: >-\n                      Strictly positive if this entry's unbonding has been\n                      stopped by external modules\n                description: >-\n                  UnbondingDelegationEntry defines an unbonding object with\n                  relevant metadata.\n              description: entries are the unbonding delegation entries.\n          description: >-\n            UnbondingDelegation stores all of a single delegator's unbonding\n            bonds\n\n            for a single validator in an time-ordered list.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: |-\n      QueryValidatorUnbondingDelegationsResponse is response type for the\n      Query/ValidatorUnbondingDelegations RPC method.\n  cosmos.staking.v1beta1.QueryValidatorsResponse:\n    type: object\n    properties:\n      validators:\n        type: array\n        items:\n          type: object\n          properties:\n            operator_address:\n              type: string\n              description: >-\n                operator_address defines the address of the validator's\n                operator; bech encoded in JSON.\n            consensus_pubkey:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n              description: >-\n                consensus_pubkey is the consensus public key of the validator,\n                as a Protobuf Any.\n            jailed:\n              type: boolean\n              description: >-\n                jailed defined whether the validator has been jailed from bonded\n                status or not.\n            status:\n              description: status is the validator status (bonded/unbonding/unbonded).\n              type: string\n              enum:\n                - BOND_STATUS_UNSPECIFIED\n                - BOND_STATUS_UNBONDED\n                - BOND_STATUS_UNBONDING\n                - BOND_STATUS_BONDED\n              default: BOND_STATUS_UNSPECIFIED\n            tokens:\n              type: string\n              description: tokens define the delegated tokens (incl. self-delegation).\n            delegator_shares:\n              type: string\n              description: >-\n                delegator_shares defines total shares issued to a validator's\n                delegators.\n            description:\n              description: description defines the description terms for the validator.\n              type: object\n              properties:\n                moniker:\n                  type: string\n                  description: moniker defines a human-readable name for the validator.\n                identity:\n                  type: string\n                  description: >-\n                    identity defines an optional identity signature (ex. UPort\n                    or Keybase).\n                website:\n                  type: string\n                  description: website defines an optional website link.\n                security_contact:\n                  type: string\n                  description: >-\n                    security_contact defines an optional email for security\n                    contact.\n                details:\n                  type: string\n                  description: details define other optional details.\n            unbonding_height:\n              type: string\n              format: int64\n              description: >-\n                unbonding_height defines, if unbonding, the height at which this\n                validator has begun unbonding.\n            unbonding_time:\n              type: string\n              format: date-time\n              description: >-\n                unbonding_time defines, if unbonding, the min time for the\n                validator to complete unbonding.\n            commission:\n              description: commission defines the commission parameters.\n              type: object\n              properties:\n                commission_rates:\n                  description: >-\n                    commission_rates defines the initial commission rates to be\n                    used for creating a validator.\n                  type: object\n                  properties:\n                    rate:\n                      type: string\n                      description: >-\n                        rate is the commission rate charged to delegators, as a\n                        fraction.\n                    max_rate:\n                      type: string\n                      description: >-\n                        max_rate defines the maximum commission rate which\n                        validator can ever charge, as a fraction.\n                    max_change_rate:\n                      type: string\n                      description: >-\n                        max_change_rate defines the maximum daily increase of\n                        the validator commission, as a fraction.\n                update_time:\n                  type: string\n                  format: date-time\n                  description: >-\n                    update_time is the last time the commission rate was\n                    changed.\n            min_self_delegation:\n              type: string\n              description: >-\n                min_self_delegation is the validator's self declared minimum\n                self delegation.\n\n\n                Since: cosmos-sdk 0.46\n            unbonding_on_hold_ref_count:\n              type: string\n              format: int64\n              title: >-\n                strictly positive if this validator's unbonding has been stopped\n                by external modules\n            unbonding_ids:\n              type: array\n              items:\n                type: string\n                format: uint64\n              title: >-\n                list of unbonding ids, each uniquely identifing an unbonding of\n                this validator\n          description: >-\n            Validator defines a validator, together with the total amount of the\n\n            Validator's bond shares and their exchange rate to coins. Slashing\n            results in\n\n            a decrease in the exchange rate, allowing correct calculation of\n            future\n\n            undelegations without iterating over delegators. When coins are\n            delegated to\n\n            this validator, the validator is credited with a delegation whose\n            number of\n\n            bond shares is based on the amount of coins delegated divided by the\n            current\n\n            exchange rate. Voting power can be calculated as total bonded shares\n\n            multiplied by exchange rate.\n        description: validators contains all the queried validators.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    title: >-\n      QueryValidatorsResponse is response type for the Query/Validators RPC\n      method\n  cosmos.staking.v1beta1.Redelegation:\n    type: object\n    properties:\n      delegator_address:\n        type: string\n        description: delegator_address is the bech32-encoded address of the delegator.\n      validator_src_address:\n        type: string\n        description: >-\n          validator_src_address is the validator redelegation source operator\n          address.\n      validator_dst_address:\n        type: string\n        description: >-\n          validator_dst_address is the validator redelegation destination\n          operator address.\n      entries:\n        type: array\n        items:\n          type: object\n          properties:\n            creation_height:\n              type: string\n              format: int64\n              description: >-\n                creation_height  defines the height which the redelegation took\n                place.\n            completion_time:\n              type: string\n              format: date-time\n              description: >-\n                completion_time defines the unix time for redelegation\n                completion.\n            initial_balance:\n              type: string\n              description: >-\n                initial_balance defines the initial balance when redelegation\n                started.\n            shares_dst:\n              type: string\n              description: >-\n                shares_dst is the amount of destination-validator shares created\n                by redelegation.\n            unbonding_id:\n              type: string\n              format: uint64\n              title: Incrementing id that uniquely identifies this entry\n            unbonding_on_hold_ref_count:\n              type: string\n              format: int64\n              title: >-\n                Strictly positive if this entry's unbonding has been stopped by\n                external modules\n          description: >-\n            RedelegationEntry defines a redelegation object with relevant\n            metadata.\n        description: entries are the redelegation entries.\n    description: >-\n      Redelegation contains the list of a particular delegator's redelegating\n      bonds\n\n      from a particular source validator to a particular destination validator.\n  cosmos.staking.v1beta1.RedelegationEntry:\n    type: object\n    properties:\n      creation_height:\n        type: string\n        format: int64\n        description: creation_height  defines the height which the redelegation took place.\n      completion_time:\n        type: string\n        format: date-time\n        description: completion_time defines the unix time for redelegation completion.\n      initial_balance:\n        type: string\n        description: initial_balance defines the initial balance when redelegation started.\n      shares_dst:\n        type: string\n        description: >-\n          shares_dst is the amount of destination-validator shares created by\n          redelegation.\n      unbonding_id:\n        type: string\n        format: uint64\n        title: Incrementing id that uniquely identifies this entry\n      unbonding_on_hold_ref_count:\n        type: string\n        format: int64\n        title: >-\n          Strictly positive if this entry's unbonding has been stopped by\n          external modules\n    description: RedelegationEntry defines a redelegation object with relevant metadata.\n  cosmos.staking.v1beta1.RedelegationEntryResponse:\n    type: object\n    properties:\n      redelegation_entry:\n        type: object\n        properties:\n          creation_height:\n            type: string\n            format: int64\n            description: >-\n              creation_height  defines the height which the redelegation took\n              place.\n          completion_time:\n            type: string\n            format: date-time\n            description: completion_time defines the unix time for redelegation completion.\n          initial_balance:\n            type: string\n            description: >-\n              initial_balance defines the initial balance when redelegation\n              started.\n          shares_dst:\n            type: string\n            description: >-\n              shares_dst is the amount of destination-validator shares created\n              by redelegation.\n          unbonding_id:\n            type: string\n            format: uint64\n            title: Incrementing id that uniquely identifies this entry\n          unbonding_on_hold_ref_count:\n            type: string\n            format: int64\n            title: >-\n              Strictly positive if this entry's unbonding has been stopped by\n              external modules\n        description: >-\n          RedelegationEntry defines a redelegation object with relevant\n          metadata.\n      balance:\n        type: string\n    description: >-\n      RedelegationEntryResponse is equivalent to a RedelegationEntry except that\n      it\n\n      contains a balance in addition to shares which is more suitable for client\n\n      responses.\n  cosmos.staking.v1beta1.RedelegationResponse:\n    type: object\n    properties:\n      redelegation:\n        type: object\n        properties:\n          delegator_address:\n            type: string\n            description: delegator_address is the bech32-encoded address of the delegator.\n          validator_src_address:\n            type: string\n            description: >-\n              validator_src_address is the validator redelegation source\n              operator address.\n          validator_dst_address:\n            type: string\n            description: >-\n              validator_dst_address is the validator redelegation destination\n              operator address.\n          entries:\n            type: array\n            items:\n              type: object\n              properties:\n                creation_height:\n                  type: string\n                  format: int64\n                  description: >-\n                    creation_height  defines the height which the redelegation\n                    took place.\n                completion_time:\n                  type: string\n                  format: date-time\n                  description: >-\n                    completion_time defines the unix time for redelegation\n                    completion.\n                initial_balance:\n                  type: string\n                  description: >-\n                    initial_balance defines the initial balance when\n                    redelegation started.\n                shares_dst:\n                  type: string\n                  description: >-\n                    shares_dst is the amount of destination-validator shares\n                    created by redelegation.\n                unbonding_id:\n                  type: string\n                  format: uint64\n                  title: Incrementing id that uniquely identifies this entry\n                unbonding_on_hold_ref_count:\n                  type: string\n                  format: int64\n                  title: >-\n                    Strictly positive if this entry's unbonding has been stopped\n                    by external modules\n              description: >-\n                RedelegationEntry defines a redelegation object with relevant\n                metadata.\n            description: entries are the redelegation entries.\n        description: >-\n          Redelegation contains the list of a particular delegator's\n          redelegating bonds\n\n          from a particular source validator to a particular destination\n          validator.\n      entries:\n        type: array\n        items:\n          type: object\n          properties:\n            redelegation_entry:\n              type: object\n              properties:\n                creation_height:\n                  type: string\n                  format: int64\n                  description: >-\n                    creation_height  defines the height which the redelegation\n                    took place.\n                completion_time:\n                  type: string\n                  format: date-time\n                  description: >-\n                    completion_time defines the unix time for redelegation\n                    completion.\n                initial_balance:\n                  type: string\n                  description: >-\n                    initial_balance defines the initial balance when\n                    redelegation started.\n                shares_dst:\n                  type: string\n                  description: >-\n                    shares_dst is the amount of destination-validator shares\n                    created by redelegation.\n                unbonding_id:\n                  type: string\n                  format: uint64\n                  title: Incrementing id that uniquely identifies this entry\n                unbonding_on_hold_ref_count:\n                  type: string\n                  format: int64\n                  title: >-\n                    Strictly positive if this entry's unbonding has been stopped\n                    by external modules\n              description: >-\n                RedelegationEntry defines a redelegation object with relevant\n                metadata.\n            balance:\n              type: string\n          description: >-\n            RedelegationEntryResponse is equivalent to a RedelegationEntry\n            except that it\n\n            contains a balance in addition to shares which is more suitable for\n            client\n\n            responses.\n    description: >-\n      RedelegationResponse is equivalent to a Redelegation except that its\n      entries\n\n      contain a balance in addition to shares which is more suitable for client\n\n      responses.\n  cosmos.staking.v1beta1.UnbondingDelegation:\n    type: object\n    properties:\n      delegator_address:\n        type: string\n        description: delegator_address is the bech32-encoded address of the delegator.\n      validator_address:\n        type: string\n        description: validator_address is the bech32-encoded address of the validator.\n      entries:\n        type: array\n        items:\n          type: object\n          properties:\n            creation_height:\n              type: string\n              format: int64\n              description: creation_height is the height which the unbonding took place.\n            completion_time:\n              type: string\n              format: date-time\n              description: completion_time is the unix time for unbonding completion.\n            initial_balance:\n              type: string\n              description: >-\n                initial_balance defines the tokens initially scheduled to\n                receive at completion.\n            balance:\n              type: string\n              description: balance defines the tokens to receive at completion.\n            unbonding_id:\n              type: string\n              format: uint64\n              title: Incrementing id that uniquely identifies this entry\n            unbonding_on_hold_ref_count:\n              type: string\n              format: int64\n              title: >-\n                Strictly positive if this entry's unbonding has been stopped by\n                external modules\n          description: >-\n            UnbondingDelegationEntry defines an unbonding object with relevant\n            metadata.\n        description: entries are the unbonding delegation entries.\n    description: |-\n      UnbondingDelegation stores all of a single delegator's unbonding bonds\n      for a single validator in an time-ordered list.\n  cosmos.staking.v1beta1.UnbondingDelegationEntry:\n    type: object\n    properties:\n      creation_height:\n        type: string\n        format: int64\n        description: creation_height is the height which the unbonding took place.\n      completion_time:\n        type: string\n        format: date-time\n        description: completion_time is the unix time for unbonding completion.\n      initial_balance:\n        type: string\n        description: >-\n          initial_balance defines the tokens initially scheduled to receive at\n          completion.\n      balance:\n        type: string\n        description: balance defines the tokens to receive at completion.\n      unbonding_id:\n        type: string\n        format: uint64\n        title: Incrementing id that uniquely identifies this entry\n      unbonding_on_hold_ref_count:\n        type: string\n        format: int64\n        title: >-\n          Strictly positive if this entry's unbonding has been stopped by\n          external modules\n    description: >-\n      UnbondingDelegationEntry defines an unbonding object with relevant\n      metadata.\n  cosmos.staking.v1beta1.Validator:\n    type: object\n    properties:\n      operator_address:\n        type: string\n        description: >-\n          operator_address defines the address of the validator's operator; bech\n          encoded in JSON.\n      consensus_pubkey:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n        description: >-\n          consensus_pubkey is the consensus public key of the validator, as a\n          Protobuf Any.\n      jailed:\n        type: boolean\n        description: >-\n          jailed defined whether the validator has been jailed from bonded\n          status or not.\n      status:\n        description: status is the validator status (bonded/unbonding/unbonded).\n        type: string\n        enum:\n          - BOND_STATUS_UNSPECIFIED\n          - BOND_STATUS_UNBONDED\n          - BOND_STATUS_UNBONDING\n          - BOND_STATUS_BONDED\n        default: BOND_STATUS_UNSPECIFIED\n      tokens:\n        type: string\n        description: tokens define the delegated tokens (incl. self-delegation).\n      delegator_shares:\n        type: string\n        description: >-\n          delegator_shares defines total shares issued to a validator's\n          delegators.\n      description:\n        description: description defines the description terms for the validator.\n        type: object\n        properties:\n          moniker:\n            type: string\n            description: moniker defines a human-readable name for the validator.\n          identity:\n            type: string\n            description: >-\n              identity defines an optional identity signature (ex. UPort or\n              Keybase).\n          website:\n            type: string\n            description: website defines an optional website link.\n          security_contact:\n            type: string\n            description: security_contact defines an optional email for security contact.\n          details:\n            type: string\n            description: details define other optional details.\n      unbonding_height:\n        type: string\n        format: int64\n        description: >-\n          unbonding_height defines, if unbonding, the height at which this\n          validator has begun unbonding.\n      unbonding_time:\n        type: string\n        format: date-time\n        description: >-\n          unbonding_time defines, if unbonding, the min time for the validator\n          to complete unbonding.\n      commission:\n        description: commission defines the commission parameters.\n        type: object\n        properties:\n          commission_rates:\n            description: >-\n              commission_rates defines the initial commission rates to be used\n              for creating a validator.\n            type: object\n            properties:\n              rate:\n                type: string\n                description: >-\n                  rate is the commission rate charged to delegators, as a\n                  fraction.\n              max_rate:\n                type: string\n                description: >-\n                  max_rate defines the maximum commission rate which validator\n                  can ever charge, as a fraction.\n              max_change_rate:\n                type: string\n                description: >-\n                  max_change_rate defines the maximum daily increase of the\n                  validator commission, as a fraction.\n          update_time:\n            type: string\n            format: date-time\n            description: update_time is the last time the commission rate was changed.\n      min_self_delegation:\n        type: string\n        description: >-\n          min_self_delegation is the validator's self declared minimum self\n          delegation.\n\n\n          Since: cosmos-sdk 0.46\n      unbonding_on_hold_ref_count:\n        type: string\n        format: int64\n        title: >-\n          strictly positive if this validator's unbonding has been stopped by\n          external modules\n      unbonding_ids:\n        type: array\n        items:\n          type: string\n          format: uint64\n        title: >-\n          list of unbonding ids, each uniquely identifing an unbonding of this\n          validator\n    description: >-\n      Validator defines a validator, together with the total amount of the\n\n      Validator's bond shares and their exchange rate to coins. Slashing results\n      in\n\n      a decrease in the exchange rate, allowing correct calculation of future\n\n      undelegations without iterating over delegators. When coins are delegated\n      to\n\n      this validator, the validator is credited with a delegation whose number\n      of\n\n      bond shares is based on the amount of coins delegated divided by the\n      current\n\n      exchange rate. Voting power can be calculated as total bonded shares\n\n      multiplied by exchange rate.\n  tendermint.types.BlockID:\n    type: object\n    properties:\n      hash:\n        type: string\n        format: byte\n      part_set_header:\n        type: object\n        properties:\n          total:\n            type: integer\n            format: int64\n          hash:\n            type: string\n            format: byte\n        title: PartsetHeader\n    title: BlockID\n  tendermint.types.Header:\n    type: object\n    properties:\n      version:\n        title: basic block info\n        type: object\n        properties:\n          block:\n            type: string\n            format: uint64\n          app:\n            type: string\n            format: uint64\n        description: >-\n          Consensus captures the consensus rules for processing a block in the\n          blockchain,\n\n          including all blockchain data structures and the rules of the\n          application's\n\n          state transition machine.\n      chain_id:\n        type: string\n      height:\n        type: string\n        format: int64\n      time:\n        type: string\n        format: date-time\n      last_block_id:\n        title: prev block info\n        type: object\n        properties:\n          hash:\n            type: string\n            format: byte\n          part_set_header:\n            type: object\n            properties:\n              total:\n                type: integer\n                format: int64\n              hash:\n                type: string\n                format: byte\n            title: PartsetHeader\n      last_commit_hash:\n        type: string\n        format: byte\n        title: hashes of block data\n      data_hash:\n        type: string\n        format: byte\n      validators_hash:\n        type: string\n        format: byte\n        title: hashes from the app output from the prev block\n      next_validators_hash:\n        type: string\n        format: byte\n      consensus_hash:\n        type: string\n        format: byte\n      app_hash:\n        type: string\n        format: byte\n      last_results_hash:\n        type: string\n        format: byte\n      evidence_hash:\n        type: string\n        format: byte\n        title: consensus info\n      proposer_address:\n        type: string\n        format: byte\n    description: Header defines the structure of a block header.\n  tendermint.types.PartSetHeader:\n    type: object\n    properties:\n      total:\n        type: integer\n        format: int64\n      hash:\n        type: string\n        format: byte\n    title: PartsetHeader\n  tendermint.version.Consensus:\n    type: object\n    properties:\n      block:\n        type: string\n        format: uint64\n      app:\n        type: string\n        format: uint64\n    description: >-\n      Consensus captures the consensus rules for processing a block in the\n      blockchain,\n\n      including all blockchain data structures and the rules of the\n      application's\n\n      state transition machine.\n  ibc.applications.transfer.v1.DenomTrace:\n    type: object\n    properties:\n      path:\n        type: string\n        description: >-\n          path defines the chain of port/channel identifiers used for tracing\n          the\n\n          source of the fungible token.\n      base_denom:\n        type: string\n        description: base denomination of the relayed fungible token.\n    description: >-\n      DenomTrace contains the base denomination for ICS20 fungible tokens and\n      the\n\n      source tracing information path.\n  ibc.applications.transfer.v1.Params:\n    type: object\n    properties:\n      send_enabled:\n        type: boolean\n        description: >-\n          send_enabled enables or disables all cross-chain token transfers from\n          this\n\n          chain.\n      receive_enabled:\n        type: boolean\n        description: >-\n          receive_enabled enables or disables all cross-chain token transfers to\n          this\n\n          chain.\n    description: >-\n      Params defines the set of IBC transfer parameters.\n\n      NOTE: To prevent a single token from being transferred, set the\n\n      TransfersEnabled parameter to true and then set the bank module's\n      SendEnabled\n\n      parameter for the denomination to false.\n  ibc.applications.transfer.v1.QueryDenomHashResponse:\n    type: object\n    properties:\n      hash:\n        type: string\n        description: hash (in hex format) of the denomination trace information.\n    description: |-\n      QueryDenomHashResponse is the response type for the Query/DenomHash RPC\n      method.\n  ibc.applications.transfer.v1.QueryDenomTraceResponse:\n    type: object\n    properties:\n      denom_trace:\n        type: object\n        properties:\n          path:\n            type: string\n            description: >-\n              path defines the chain of port/channel identifiers used for\n              tracing the\n\n              source of the fungible token.\n          base_denom:\n            type: string\n            description: base denomination of the relayed fungible token.\n        description: >-\n          DenomTrace contains the base denomination for ICS20 fungible tokens\n          and the\n\n          source tracing information path.\n    description: |-\n      QueryDenomTraceResponse is the response type for the Query/DenomTrace RPC\n      method.\n  ibc.applications.transfer.v1.QueryDenomTracesResponse:\n    type: object\n    properties:\n      denom_traces:\n        type: array\n        items:\n          type: object\n          properties:\n            path:\n              type: string\n              description: >-\n                path defines the chain of port/channel identifiers used for\n                tracing the\n\n                source of the fungible token.\n            base_denom:\n              type: string\n              description: base denomination of the relayed fungible token.\n          description: >-\n            DenomTrace contains the base denomination for ICS20 fungible tokens\n            and the\n\n            source tracing information path.\n        description: denom_traces returns all denominations trace information.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: >-\n      QueryConnectionsResponse is the response type for the Query/DenomTraces\n      RPC\n\n      method.\n  ibc.applications.transfer.v1.QueryEscrowAddressResponse:\n    type: object\n    properties:\n      escrow_address:\n        type: string\n        title: the escrow account address\n    description: >-\n      QueryEscrowAddressResponse is the response type of the EscrowAddress RPC\n      method.\n  ibc.applications.transfer.v1.QueryParamsResponse:\n    type: object\n    properties:\n      params:\n        description: params defines the parameters of the module.\n        type: object\n        properties:\n          send_enabled:\n            type: boolean\n            description: >-\n              send_enabled enables or disables all cross-chain token transfers\n              from this\n\n              chain.\n          receive_enabled:\n            type: boolean\n            description: >-\n              receive_enabled enables or disables all cross-chain token\n              transfers to this\n\n              chain.\n    description: QueryParamsResponse is the response type for the Query/Params RPC method.\n  ibc.applications.transfer.v1.QueryTotalEscrowForDenomResponse:\n    type: object\n    properties:\n      amount:\n        type: object\n        properties:\n          denom:\n            type: string\n          amount:\n            type: string\n        description: |-\n          Coin defines a token with a denomination and an amount.\n\n          NOTE: The amount field is an Int which implements the custom method\n          signatures required by gogoproto.\n    description: >-\n      QueryTotalEscrowForDenomResponse is the response type for\n      TotalEscrowForDenom RPC method.\n  cosmos.base.abci.v1beta1.ABCIMessageLog:\n    type: object\n    properties:\n      msg_index:\n        type: integer\n        format: int64\n      log:\n        type: string\n      events:\n        type: array\n        items:\n          type: object\n          properties:\n            type:\n              type: string\n            attributes:\n              type: array\n              items:\n                type: object\n                properties:\n                  key:\n                    type: string\n                  value:\n                    type: string\n                description: >-\n                  Attribute defines an attribute wrapper where the key and value\n                  are\n\n                  strings instead of raw bytes.\n          description: |-\n            StringEvent defines en Event object wrapper where all the attributes\n            contain key/value pairs that are strings instead of raw bytes.\n        description: |-\n          Events contains a slice of Event objects that were emitted during some\n          execution.\n    description: >-\n      ABCIMessageLog defines a structure containing an indexed tx ABCI message\n      log.\n  cosmos.base.abci.v1beta1.Attribute:\n    type: object\n    properties:\n      key:\n        type: string\n      value:\n        type: string\n    description: |-\n      Attribute defines an attribute wrapper where the key and value are\n      strings instead of raw bytes.\n  cosmos.base.abci.v1beta1.GasInfo:\n    type: object\n    properties:\n      gas_wanted:\n        type: string\n        format: uint64\n        description: GasWanted is the maximum units of work we allow this tx to perform.\n      gas_used:\n        type: string\n        format: uint64\n        description: GasUsed is the amount of gas actually consumed.\n    description: GasInfo defines tx execution gas context.\n  cosmos.base.abci.v1beta1.Result:\n    type: object\n    properties:\n      data:\n        type: string\n        format: byte\n        description: >-\n          Data is any data returned from message or handler execution. It MUST\n          be\n\n          length prefixed in order to separate data from multiple message\n          executions.\n\n          Deprecated. This field is still populated, but prefer msg_response\n          instead\n\n          because it also contains the Msg response typeURL.\n      log:\n        type: string\n        description: Log contains the log information from message or handler execution.\n      events:\n        type: array\n        items:\n          type: object\n          properties:\n            type:\n              type: string\n            attributes:\n              type: array\n              items:\n                type: object\n                properties:\n                  key:\n                    type: string\n                  value:\n                    type: string\n                  index:\n                    type: boolean\n                description: >-\n                  EventAttribute is a single key-value pair, associated with an\n                  event.\n          description: >-\n            Event allows application developers to attach additional information\n            to\n\n            ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and\n            ResponseDeliverTx.\n\n            Later, transactions may be queried using these events.\n        description: >-\n          Events contains a slice of Event objects that were emitted during\n          message\n\n          or handler execution.\n      msg_responses:\n        type: array\n        items:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n        description: |-\n          msg_responses contains the Msg handler responses type packed in Anys.\n\n          Since: cosmos-sdk 0.46\n    description: Result is the union of ResponseFormat and ResponseCheckTx.\n  cosmos.base.abci.v1beta1.StringEvent:\n    type: object\n    properties:\n      type:\n        type: string\n      attributes:\n        type: array\n        items:\n          type: object\n          properties:\n            key:\n              type: string\n            value:\n              type: string\n          description: |-\n            Attribute defines an attribute wrapper where the key and value are\n            strings instead of raw bytes.\n    description: |-\n      StringEvent defines en Event object wrapper where all the attributes\n      contain key/value pairs that are strings instead of raw bytes.\n  cosmos.base.abci.v1beta1.TxResponse:\n    type: object\n    properties:\n      height:\n        type: string\n        format: int64\n        title: The block height\n      txhash:\n        type: string\n        description: The transaction hash.\n      codespace:\n        type: string\n        title: Namespace for the Code\n      code:\n        type: integer\n        format: int64\n        description: Response code.\n      data:\n        type: string\n        description: Result bytes, if any.\n      raw_log:\n        type: string\n        description: |-\n          The output of the application's logger (raw string). May be\n          non-deterministic.\n      logs:\n        type: array\n        items:\n          type: object\n          properties:\n            msg_index:\n              type: integer\n              format: int64\n            log:\n              type: string\n            events:\n              type: array\n              items:\n                type: object\n                properties:\n                  type:\n                    type: string\n                  attributes:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        key:\n                          type: string\n                        value:\n                          type: string\n                      description: >-\n                        Attribute defines an attribute wrapper where the key and\n                        value are\n\n                        strings instead of raw bytes.\n                description: >-\n                  StringEvent defines en Event object wrapper where all the\n                  attributes\n\n                  contain key/value pairs that are strings instead of raw bytes.\n              description: >-\n                Events contains a slice of Event objects that were emitted\n                during some\n\n                execution.\n          description: >-\n            ABCIMessageLog defines a structure containing an indexed tx ABCI\n            message log.\n        description: >-\n          The output of the application's logger (typed). May be\n          non-deterministic.\n      info:\n        type: string\n        description: Additional information. May be non-deterministic.\n      gas_wanted:\n        type: string\n        format: int64\n        description: Amount of gas requested for transaction.\n      gas_used:\n        type: string\n        format: int64\n        description: Amount of gas consumed by transaction.\n      tx:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n        description: The request transaction bytes.\n      timestamp:\n        type: string\n        description: >-\n          Time of the previous block. For heights > 1, it's the weighted median\n          of\n\n          the timestamps of the valid votes in the block.LastCommit. For height\n          == 1,\n\n          it's genesis time.\n      events:\n        type: array\n        items:\n          type: object\n          properties:\n            type:\n              type: string\n            attributes:\n              type: array\n              items:\n                type: object\n                properties:\n                  key:\n                    type: string\n                  value:\n                    type: string\n                  index:\n                    type: boolean\n                description: >-\n                  EventAttribute is a single key-value pair, associated with an\n                  event.\n          description: >-\n            Event allows application developers to attach additional information\n            to\n\n            ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and\n            ResponseDeliverTx.\n\n            Later, transactions may be queried using these events.\n        description: >-\n          Events defines all the events emitted by processing a transaction.\n          Note,\n\n          these events include those emitted by processing all the messages and\n          those\n\n          emitted from the ante. Whereas Logs contains the events, with\n\n          additional metadata, emitted only by processing the messages.\n\n\n          Since: cosmos-sdk 0.42.11, 0.44.5, 0.45\n    description: >-\n      TxResponse defines a structure containing relevant tx data and metadata.\n      The\n\n      tags are stringified and the log is JSON decoded.\n  cosmos.crypto.multisig.v1beta1.CompactBitArray:\n    type: object\n    properties:\n      extra_bits_stored:\n        type: integer\n        format: int64\n      elems:\n        type: string\n        format: byte\n    description: |-\n      CompactBitArray is an implementation of a space efficient bit array.\n      This is used to ensure that the encoded data takes up a minimal amount of\n      space after proto encoding.\n      This is not thread safe, and is not intended for concurrent usage.\n  cosmos.tx.signing.v1beta1.SignMode:\n    type: string\n    enum:\n      - SIGN_MODE_UNSPECIFIED\n      - SIGN_MODE_DIRECT\n      - SIGN_MODE_TEXTUAL\n      - SIGN_MODE_DIRECT_AUX\n      - SIGN_MODE_LEGACY_AMINO_JSON\n      - SIGN_MODE_EIP_191\n    default: SIGN_MODE_UNSPECIFIED\n    description: |-\n      SignMode represents a signing mode with its own security guarantees.\n\n      This enum should be considered a registry of all known sign modes\n      in the Cosmos ecosystem. Apps are not expected to support all known\n      sign modes. Apps that would like to support custom  sign modes are\n      encouraged to open a small PR against this file to add a new case\n      to this SignMode enum describing their sign mode so that different\n      apps have a consistent version of this enum.\n\n       - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n      rejected.\n       - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n      verified with raw bytes from Tx.\n       - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n      human-readable textual representation on top of the binary representation\n      from SIGN_MODE_DIRECT. It is currently not supported.\n       - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n      SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\n      require signers signing over other signers' `signer_info`. It also allows\n      for adding Tips in transactions.\n\n      Since: cosmos-sdk 0.46\n       - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n      Amino JSON and will be removed in the future.\n       - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n      SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n      Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\n      but is not implemented on the SDK by default. To enable EIP-191, you need\n      to pass a custom `TxConfig` that has an implementation of\n      `SignModeHandler` for EIP-191. The SDK may decide to fully support\n      EIP-191 in the future.\n\n      Since: cosmos-sdk 0.45.2\n  cosmos.tx.v1beta1.AuthInfo:\n    type: object\n    properties:\n      signer_infos:\n        type: array\n        items:\n          type: object\n          properties:\n            public_key:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n              description: >-\n                public_key is the public key of the signer. It is optional for\n                accounts\n\n                that already exist in state. If unset, the verifier can use the\n                required \\\n\n                signer address for this position and lookup the public key.\n            mode_info:\n              title: >-\n                mode_info describes the signing mode of the signer and is a\n                nested\n\n                structure to support nested multisig pubkey's\n              type: object\n              properties:\n                single:\n                  title: single represents a single signer\n                  type: object\n                  properties:\n                    mode:\n                      title: mode is the signing mode of the single signer\n                      type: string\n                      enum:\n                        - SIGN_MODE_UNSPECIFIED\n                        - SIGN_MODE_DIRECT\n                        - SIGN_MODE_TEXTUAL\n                        - SIGN_MODE_DIRECT_AUX\n                        - SIGN_MODE_LEGACY_AMINO_JSON\n                        - SIGN_MODE_EIP_191\n                      default: SIGN_MODE_UNSPECIFIED\n                      description: >-\n                        SignMode represents a signing mode with its own security\n                        guarantees.\n\n\n                        This enum should be considered a registry of all known\n                        sign modes\n\n                        in the Cosmos ecosystem. Apps are not expected to\n                        support all known\n\n                        sign modes. Apps that would like to support custom  sign\n                        modes are\n\n                        encouraged to open a small PR against this file to add a\n                        new case\n\n                        to this SignMode enum describing their sign mode so that\n                        different\n\n                        apps have a consistent version of this enum.\n\n                         - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                        rejected.\n                         - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                        verified with raw bytes from Tx.\n                         - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                        human-readable textual representation on top of the\n                        binary representation\n\n                        from SIGN_MODE_DIRECT. It is currently not supported.\n                         - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                        SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this\n                        sign mode does not\n\n                        require signers signing over other signers'\n                        `signer_info`. It also allows\n\n                        for adding Tips in transactions.\n\n\n                        Since: cosmos-sdk 0.46\n                         - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                        Amino JSON and will be removed in the future.\n                         - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                        SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                        Currently, SIGN_MODE_EIP_191 is registered as a SignMode\n                        enum variant,\n\n                        but is not implemented on the SDK by default. To enable\n                        EIP-191, you need\n\n                        to pass a custom `TxConfig` that has an implementation\n                        of\n\n                        `SignModeHandler` for EIP-191. The SDK may decide to\n                        fully support\n\n                        EIP-191 in the future.\n\n\n                        Since: cosmos-sdk 0.45.2\n                multi:\n                  title: multi represents a nested multisig signer\n                  type: object\n                  properties:\n                    bitarray:\n                      title: >-\n                        bitarray specifies which keys within the multisig are\n                        signing\n                      type: object\n                      properties:\n                        extra_bits_stored:\n                          type: integer\n                          format: int64\n                        elems:\n                          type: string\n                          format: byte\n                      description: >-\n                        CompactBitArray is an implementation of a space\n                        efficient bit array.\n\n                        This is used to ensure that the encoded data takes up a\n                        minimal amount of\n\n                        space after proto encoding.\n\n                        This is not thread safe, and is not intended for\n                        concurrent usage.\n                    mode_infos:\n                      type: array\n                      items: {}\n                      title: >-\n                        mode_infos is the corresponding modes of the signers of\n                        the multisig\n\n                        which could include nested multisig public keys\n              description: >-\n                ModeInfo describes the signing mode of a single or nested\n                multisig signer.\n            sequence:\n              type: string\n              format: uint64\n              description: >-\n                sequence is the sequence of the account, which describes the\n\n                number of committed transactions signed by a given address. It\n                is used to\n\n                prevent replay attacks.\n          description: >-\n            SignerInfo describes the public key and signing mode of a single\n            top-level\n\n            signer.\n        description: >-\n          signer_infos defines the signing modes for the required signers. The\n          number\n\n          and order of elements must match the required signers from TxBody's\n\n          messages. The first element is the primary signer and the one which\n          pays\n\n          the fee.\n      fee:\n        description: >-\n          Fee is the fee and gas limit for the transaction. The first signer is\n          the\n\n          primary signer and the one which pays the fee. The fee can be\n          calculated\n\n          based on the cost of evaluating the body and doing signature\n          verification\n\n          of the signers. This can be estimated via simulation.\n        type: object\n        properties:\n          amount:\n            type: array\n            items:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom\n                method\n\n                signatures required by gogoproto.\n            title: amount is the amount of coins to be paid as a fee\n          gas_limit:\n            type: string\n            format: uint64\n            title: >-\n              gas_limit is the maximum gas that can be used in transaction\n              processing\n\n              before an out of gas error occurs\n          payer:\n            type: string\n            description: >-\n              if unset, the first signer is responsible for paying the fees. If\n              set, the specified account must pay the fees.\n\n              the payer must be a tx signer (and thus have signed this field in\n              AuthInfo).\n\n              setting this field does *not* change the ordering of required\n              signers for the transaction.\n          granter:\n            type: string\n            title: >-\n              if set, the fee payer (either the first signer or the value of the\n              payer field) requests that a fee grant be used\n\n              to pay fees instead of the fee payer's own balance. If an\n              appropriate fee grant does not exist or the chain does\n\n              not support fee grants, this will fail\n      tip:\n        description: >-\n          Tip is the optional tip used for transactions fees paid in another\n          denom.\n\n\n          This field is ignored if the chain didn't enable tips, i.e. didn't add\n          the\n\n          `TipDecorator` in its posthandler.\n\n\n          Since: cosmos-sdk 0.46\n        type: object\n        properties:\n          amount:\n            type: array\n            items:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom\n                method\n\n                signatures required by gogoproto.\n            title: amount is the amount of the tip\n          tipper:\n            type: string\n            title: tipper is the address of the account paying for the tip\n    description: |-\n      AuthInfo describes the fee and signer modes that are used to sign a\n      transaction.\n  cosmos.tx.v1beta1.BroadcastMode:\n    type: string\n    enum:\n      - BROADCAST_MODE_UNSPECIFIED\n      - BROADCAST_MODE_BLOCK\n      - BROADCAST_MODE_SYNC\n      - BROADCAST_MODE_ASYNC\n    default: BROADCAST_MODE_UNSPECIFIED\n    description: >-\n      BroadcastMode specifies the broadcast mode for the TxService.Broadcast RPC\n      method.\n\n       - BROADCAST_MODE_UNSPECIFIED: zero-value for mode ordering\n       - BROADCAST_MODE_BLOCK: DEPRECATED: use BROADCAST_MODE_SYNC instead,\n      BROADCAST_MODE_BLOCK is not supported by the SDK from v0.47.x onwards.\n       - BROADCAST_MODE_SYNC: BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits for\n      a CheckTx execution response only.\n       - BROADCAST_MODE_ASYNC: BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client returns\n      immediately.\n  cosmos.tx.v1beta1.BroadcastTxRequest:\n    type: object\n    properties:\n      tx_bytes:\n        type: string\n        format: byte\n        description: tx_bytes is the raw transaction.\n      mode:\n        type: string\n        enum:\n          - BROADCAST_MODE_UNSPECIFIED\n          - BROADCAST_MODE_BLOCK\n          - BROADCAST_MODE_SYNC\n          - BROADCAST_MODE_ASYNC\n        default: BROADCAST_MODE_UNSPECIFIED\n        description: >-\n          BroadcastMode specifies the broadcast mode for the TxService.Broadcast\n          RPC method.\n\n           - BROADCAST_MODE_UNSPECIFIED: zero-value for mode ordering\n           - BROADCAST_MODE_BLOCK: DEPRECATED: use BROADCAST_MODE_SYNC instead,\n          BROADCAST_MODE_BLOCK is not supported by the SDK from v0.47.x onwards.\n           - BROADCAST_MODE_SYNC: BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits for\n          a CheckTx execution response only.\n           - BROADCAST_MODE_ASYNC: BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client returns\n          immediately.\n    description: |-\n      BroadcastTxRequest is the request type for the Service.BroadcastTxRequest\n      RPC method.\n  cosmos.tx.v1beta1.BroadcastTxResponse:\n    type: object\n    properties:\n      tx_response:\n        type: object\n        properties:\n          height:\n            type: string\n            format: int64\n            title: The block height\n          txhash:\n            type: string\n            description: The transaction hash.\n          codespace:\n            type: string\n            title: Namespace for the Code\n          code:\n            type: integer\n            format: int64\n            description: Response code.\n          data:\n            type: string\n            description: Result bytes, if any.\n          raw_log:\n            type: string\n            description: |-\n              The output of the application's logger (raw string). May be\n              non-deterministic.\n          logs:\n            type: array\n            items:\n              type: object\n              properties:\n                msg_index:\n                  type: integer\n                  format: int64\n                log:\n                  type: string\n                events:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      type:\n                        type: string\n                      attributes:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            key:\n                              type: string\n                            value:\n                              type: string\n                          description: >-\n                            Attribute defines an attribute wrapper where the key\n                            and value are\n\n                            strings instead of raw bytes.\n                    description: >-\n                      StringEvent defines en Event object wrapper where all the\n                      attributes\n\n                      contain key/value pairs that are strings instead of raw\n                      bytes.\n                  description: >-\n                    Events contains a slice of Event objects that were emitted\n                    during some\n\n                    execution.\n              description: >-\n                ABCIMessageLog defines a structure containing an indexed tx ABCI\n                message log.\n            description: >-\n              The output of the application's logger (typed). May be\n              non-deterministic.\n          info:\n            type: string\n            description: Additional information. May be non-deterministic.\n          gas_wanted:\n            type: string\n            format: int64\n            description: Amount of gas requested for transaction.\n          gas_used:\n            type: string\n            format: int64\n            description: Amount of gas consumed by transaction.\n          tx:\n            type: object\n            properties:\n              type_url:\n                type: string\n              value:\n                type: string\n                format: byte\n            description: The request transaction bytes.\n          timestamp:\n            type: string\n            description: >-\n              Time of the previous block. For heights > 1, it's the weighted\n              median of\n\n              the timestamps of the valid votes in the block.LastCommit. For\n              height == 1,\n\n              it's genesis time.\n          events:\n            type: array\n            items:\n              type: object\n              properties:\n                type:\n                  type: string\n                attributes:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      key:\n                        type: string\n                      value:\n                        type: string\n                      index:\n                        type: boolean\n                    description: >-\n                      EventAttribute is a single key-value pair, associated with\n                      an event.\n              description: >-\n                Event allows application developers to attach additional\n                information to\n\n                ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and\n                ResponseDeliverTx.\n\n                Later, transactions may be queried using these events.\n            description: >-\n              Events defines all the events emitted by processing a transaction.\n              Note,\n\n              these events include those emitted by processing all the messages\n              and those\n\n              emitted from the ante. Whereas Logs contains the events, with\n\n              additional metadata, emitted only by processing the messages.\n\n\n              Since: cosmos-sdk 0.42.11, 0.44.5, 0.45\n        description: >-\n          TxResponse defines a structure containing relevant tx data and\n          metadata. The\n\n          tags are stringified and the log is JSON decoded.\n    description: |-\n      BroadcastTxResponse is the response type for the\n      Service.BroadcastTx method.\n  cosmos.tx.v1beta1.Fee:\n    type: object\n    properties:\n      amount:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        title: amount is the amount of coins to be paid as a fee\n      gas_limit:\n        type: string\n        format: uint64\n        title: >-\n          gas_limit is the maximum gas that can be used in transaction\n          processing\n\n          before an out of gas error occurs\n      payer:\n        type: string\n        description: >-\n          if unset, the first signer is responsible for paying the fees. If set,\n          the specified account must pay the fees.\n\n          the payer must be a tx signer (and thus have signed this field in\n          AuthInfo).\n\n          setting this field does *not* change the ordering of required signers\n          for the transaction.\n      granter:\n        type: string\n        title: >-\n          if set, the fee payer (either the first signer or the value of the\n          payer field) requests that a fee grant be used\n\n          to pay fees instead of the fee payer's own balance. If an appropriate\n          fee grant does not exist or the chain does\n\n          not support fee grants, this will fail\n    description: >-\n      Fee includes the amount of coins paid in fees and the maximum\n\n      gas to be used by the transaction. The ratio yields an effective\n      \"gasprice\",\n\n      which must be above some miminum to be accepted into the mempool.\n  cosmos.tx.v1beta1.GetBlockWithTxsResponse:\n    type: object\n    properties:\n      txs:\n        type: array\n        items:\n          type: object\n          properties:\n            body:\n              title: body is the processable content of the transaction\n              type: object\n              properties:\n                messages:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                  description: >-\n                    messages is a list of messages to be executed. The required\n                    signers of\n\n                    those messages define the number and order of elements in\n                    AuthInfo's\n\n                    signer_infos and Tx's signatures. Each required signer\n                    address is added to\n\n                    the list only the first time it occurs.\n\n                    By convention, the first required signer (usually from the\n                    first message)\n\n                    is referred to as the primary signer and pays the fee for\n                    the whole\n\n                    transaction.\n                memo:\n                  type: string\n                  description: >-\n                    memo is any arbitrary note/comment to be added to the\n                    transaction.\n\n                    WARNING: in clients, any publicly exposed text should not be\n                    called memo,\n\n                    but should be called `note` instead (see\n                    https://github.com/cosmos/cosmos-sdk/issues/9122).\n                timeout_height:\n                  type: string\n                  format: uint64\n                  title: >-\n                    timeout is the block height after which this transaction\n                    will not\n\n                    be processed by the chain\n                extension_options:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                  title: >-\n                    extension_options are arbitrary options that can be added by\n                    chains\n\n                    when the default options are not sufficient. If any of these\n                    are present\n\n                    and can't be handled, the transaction will be rejected\n                non_critical_extension_options:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                  title: >-\n                    extension_options are arbitrary options that can be added by\n                    chains\n\n                    when the default options are not sufficient. If any of these\n                    are present\n\n                    and can't be handled, they will be ignored\n              description: TxBody is the body of a transaction that all signers sign over.\n            auth_info:\n              title: >-\n                auth_info is the authorization related content of the\n                transaction,\n\n                specifically signers, signer modes and fee\n              type: object\n              properties:\n                signer_infos:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      public_key:\n                        type: object\n                        properties:\n                          type_url:\n                            type: string\n                          value:\n                            type: string\n                            format: byte\n                        description: >-\n                          public_key is the public key of the signer. It is\n                          optional for accounts\n\n                          that already exist in state. If unset, the verifier\n                          can use the required \\\n\n                          signer address for this position and lookup the public\n                          key.\n                      mode_info:\n                        title: >-\n                          mode_info describes the signing mode of the signer and\n                          is a nested\n\n                          structure to support nested multisig pubkey's\n                        type: object\n                        properties:\n                          single:\n                            title: single represents a single signer\n                            type: object\n                            properties:\n                              mode:\n                                title: mode is the signing mode of the single signer\n                                type: string\n                                enum:\n                                  - SIGN_MODE_UNSPECIFIED\n                                  - SIGN_MODE_DIRECT\n                                  - SIGN_MODE_TEXTUAL\n                                  - SIGN_MODE_DIRECT_AUX\n                                  - SIGN_MODE_LEGACY_AMINO_JSON\n                                  - SIGN_MODE_EIP_191\n                                default: SIGN_MODE_UNSPECIFIED\n                                description: >-\n                                  SignMode represents a signing mode with its\n                                  own security guarantees.\n\n\n                                  This enum should be considered a registry of\n                                  all known sign modes\n\n                                  in the Cosmos ecosystem. Apps are not expected\n                                  to support all known\n\n                                  sign modes. Apps that would like to support\n                                  custom  sign modes are\n\n                                  encouraged to open a small PR against this\n                                  file to add a new case\n\n                                  to this SignMode enum describing their sign\n                                  mode so that different\n\n                                  apps have a consistent version of this enum.\n\n                                   - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                  rejected.\n                                   - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                  verified with raw bytes from Tx.\n                                   - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                  human-readable textual representation on top\n                                  of the binary representation\n\n                                  from SIGN_MODE_DIRECT. It is currently not\n                                  supported.\n                                   - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                  SignDocDirectAux. As opposed to\n                                  SIGN_MODE_DIRECT, this sign mode does not\n\n                                  require signers signing over other signers'\n                                  `signer_info`. It also allows\n\n                                  for adding Tips in transactions.\n\n\n                                  Since: cosmos-sdk 0.46\n                                   - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                  Amino JSON and will be removed in the future.\n                                   - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                  SDK. Ref:\n                                  https://eips.ethereum.org/EIPS/eip-191\n\n\n                                  Currently, SIGN_MODE_EIP_191 is registered as\n                                  a SignMode enum variant,\n\n                                  but is not implemented on the SDK by default.\n                                  To enable EIP-191, you need\n\n                                  to pass a custom `TxConfig` that has an\n                                  implementation of\n\n                                  `SignModeHandler` for EIP-191. The SDK may\n                                  decide to fully support\n\n                                  EIP-191 in the future.\n\n\n                                  Since: cosmos-sdk 0.45.2\n                          multi:\n                            title: multi represents a nested multisig signer\n                            type: object\n                            properties:\n                              bitarray:\n                                title: >-\n                                  bitarray specifies which keys within the\n                                  multisig are signing\n                                type: object\n                                properties:\n                                  extra_bits_stored:\n                                    type: integer\n                                    format: int64\n                                  elems:\n                                    type: string\n                                    format: byte\n                                description: >-\n                                  CompactBitArray is an implementation of a\n                                  space efficient bit array.\n\n                                  This is used to ensure that the encoded data\n                                  takes up a minimal amount of\n\n                                  space after proto encoding.\n\n                                  This is not thread safe, and is not intended\n                                  for concurrent usage.\n                              mode_infos:\n                                type: array\n                                items: {}\n                                title: >-\n                                  mode_infos is the corresponding modes of the\n                                  signers of the multisig\n\n                                  which could include nested multisig public\n                                  keys\n                        description: >-\n                          ModeInfo describes the signing mode of a single or\n                          nested multisig signer.\n                      sequence:\n                        type: string\n                        format: uint64\n                        description: >-\n                          sequence is the sequence of the account, which\n                          describes the\n\n                          number of committed transactions signed by a given\n                          address. It is used to\n\n                          prevent replay attacks.\n                    description: >-\n                      SignerInfo describes the public key and signing mode of a\n                      single top-level\n\n                      signer.\n                  description: >-\n                    signer_infos defines the signing modes for the required\n                    signers. The number\n\n                    and order of elements must match the required signers from\n                    TxBody's\n\n                    messages. The first element is the primary signer and the\n                    one which pays\n\n                    the fee.\n                fee:\n                  description: >-\n                    Fee is the fee and gas limit for the transaction. The first\n                    signer is the\n\n                    primary signer and the one which pays the fee. The fee can\n                    be calculated\n\n                    based on the cost of evaluating the body and doing signature\n                    verification\n\n                    of the signers. This can be estimated via simulation.\n                  type: object\n                  properties:\n                    amount:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the\n                          custom method\n\n                          signatures required by gogoproto.\n                      title: amount is the amount of coins to be paid as a fee\n                    gas_limit:\n                      type: string\n                      format: uint64\n                      title: >-\n                        gas_limit is the maximum gas that can be used in\n                        transaction processing\n\n                        before an out of gas error occurs\n                    payer:\n                      type: string\n                      description: >-\n                        if unset, the first signer is responsible for paying the\n                        fees. If set, the specified account must pay the fees.\n\n                        the payer must be a tx signer (and thus have signed this\n                        field in AuthInfo).\n\n                        setting this field does *not* change the ordering of\n                        required signers for the transaction.\n                    granter:\n                      type: string\n                      title: >-\n                        if set, the fee payer (either the first signer or the\n                        value of the payer field) requests that a fee grant be\n                        used\n\n                        to pay fees instead of the fee payer's own balance. If\n                        an appropriate fee grant does not exist or the chain\n                        does\n\n                        not support fee grants, this will fail\n                tip:\n                  description: >-\n                    Tip is the optional tip used for transactions fees paid in\n                    another denom.\n\n\n                    This field is ignored if the chain didn't enable tips, i.e.\n                    didn't add the\n\n                    `TipDecorator` in its posthandler.\n\n\n                    Since: cosmos-sdk 0.46\n                  type: object\n                  properties:\n                    amount:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the\n                          custom method\n\n                          signatures required by gogoproto.\n                      title: amount is the amount of the tip\n                    tipper:\n                      type: string\n                      title: tipper is the address of the account paying for the tip\n              description: >-\n                AuthInfo describes the fee and signer modes that are used to\n                sign a\n\n                transaction.\n            signatures:\n              type: array\n              items:\n                type: string\n                format: byte\n              description: >-\n                signatures is a list of signatures that matches the length and\n                order of\n\n                AuthInfo's signer_infos to allow connecting signature meta\n                information like\n\n                public key and signing mode by position.\n          description: Tx is the standard type used for broadcasting transactions.\n        description: txs are the transactions in the block.\n      block_id:\n        type: object\n        properties:\n          hash:\n            type: string\n            format: byte\n          part_set_header:\n            type: object\n            properties:\n              total:\n                type: integer\n                format: int64\n              hash:\n                type: string\n                format: byte\n            title: PartsetHeader\n        title: BlockID\n      block:\n        type: object\n        properties:\n          header:\n            type: object\n            properties:\n              version:\n                title: basic block info\n                type: object\n                properties:\n                  block:\n                    type: string\n                    format: uint64\n                  app:\n                    type: string\n                    format: uint64\n                description: >-\n                  Consensus captures the consensus rules for processing a block\n                  in the blockchain,\n\n                  including all blockchain data structures and the rules of the\n                  application's\n\n                  state transition machine.\n              chain_id:\n                type: string\n              height:\n                type: string\n                format: int64\n              time:\n                type: string\n                format: date-time\n              last_block_id:\n                title: prev block info\n                type: object\n                properties:\n                  hash:\n                    type: string\n                    format: byte\n                  part_set_header:\n                    type: object\n                    properties:\n                      total:\n                        type: integer\n                        format: int64\n                      hash:\n                        type: string\n                        format: byte\n                    title: PartsetHeader\n              last_commit_hash:\n                type: string\n                format: byte\n                title: hashes of block data\n              data_hash:\n                type: string\n                format: byte\n              validators_hash:\n                type: string\n                format: byte\n                title: hashes from the app output from the prev block\n              next_validators_hash:\n                type: string\n                format: byte\n              consensus_hash:\n                type: string\n                format: byte\n              app_hash:\n                type: string\n                format: byte\n              last_results_hash:\n                type: string\n                format: byte\n              evidence_hash:\n                type: string\n                format: byte\n                title: consensus info\n              proposer_address:\n                type: string\n                format: byte\n            description: Header defines the structure of a block header.\n          data:\n            type: object\n            properties:\n              txs:\n                type: array\n                items:\n                  type: string\n                  format: byte\n                description: >-\n                  Txs that will be applied by state @ block.Height+1.\n\n                  NOTE: not all txs here are valid.  We're just agreeing on the\n                  order first.\n\n                  This means that block.AppHash does not include these txs.\n            title: Data contains the set of transactions included in the block\n          evidence:\n            type: object\n            properties:\n              evidence:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    duplicate_vote_evidence:\n                      type: object\n                      properties:\n                        vote_a:\n                          type: object\n                          properties:\n                            type:\n                              type: string\n                              enum:\n                                - SIGNED_MSG_TYPE_UNKNOWN\n                                - SIGNED_MSG_TYPE_PREVOTE\n                                - SIGNED_MSG_TYPE_PRECOMMIT\n                                - SIGNED_MSG_TYPE_PROPOSAL\n                              default: SIGNED_MSG_TYPE_UNKNOWN\n                              description: >-\n                                SignedMsgType is a type of signed message in the\n                                consensus.\n\n                                 - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                 - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                            height:\n                              type: string\n                              format: int64\n                            round:\n                              type: integer\n                              format: int32\n                            block_id:\n                              type: object\n                              properties:\n                                hash:\n                                  type: string\n                                  format: byte\n                                part_set_header:\n                                  type: object\n                                  properties:\n                                    total:\n                                      type: integer\n                                      format: int64\n                                    hash:\n                                      type: string\n                                      format: byte\n                                  title: PartsetHeader\n                              title: BlockID\n                            timestamp:\n                              type: string\n                              format: date-time\n                            validator_address:\n                              type: string\n                              format: byte\n                            validator_index:\n                              type: integer\n                              format: int32\n                            signature:\n                              type: string\n                              format: byte\n                          description: >-\n                            Vote represents a prevote, precommit, or commit vote\n                            from validators for\n\n                            consensus.\n                        vote_b:\n                          type: object\n                          properties:\n                            type:\n                              type: string\n                              enum:\n                                - SIGNED_MSG_TYPE_UNKNOWN\n                                - SIGNED_MSG_TYPE_PREVOTE\n                                - SIGNED_MSG_TYPE_PRECOMMIT\n                                - SIGNED_MSG_TYPE_PROPOSAL\n                              default: SIGNED_MSG_TYPE_UNKNOWN\n                              description: >-\n                                SignedMsgType is a type of signed message in the\n                                consensus.\n\n                                 - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                 - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                            height:\n                              type: string\n                              format: int64\n                            round:\n                              type: integer\n                              format: int32\n                            block_id:\n                              type: object\n                              properties:\n                                hash:\n                                  type: string\n                                  format: byte\n                                part_set_header:\n                                  type: object\n                                  properties:\n                                    total:\n                                      type: integer\n                                      format: int64\n                                    hash:\n                                      type: string\n                                      format: byte\n                                  title: PartsetHeader\n                              title: BlockID\n                            timestamp:\n                              type: string\n                              format: date-time\n                            validator_address:\n                              type: string\n                              format: byte\n                            validator_index:\n                              type: integer\n                              format: int32\n                            signature:\n                              type: string\n                              format: byte\n                          description: >-\n                            Vote represents a prevote, precommit, or commit vote\n                            from validators for\n\n                            consensus.\n                        total_voting_power:\n                          type: string\n                          format: int64\n                        validator_power:\n                          type: string\n                          format: int64\n                        timestamp:\n                          type: string\n                          format: date-time\n                      description: >-\n                        DuplicateVoteEvidence contains evidence of a validator\n                        signed two conflicting votes.\n                    light_client_attack_evidence:\n                      type: object\n                      properties:\n                        conflicting_block:\n                          type: object\n                          properties:\n                            signed_header:\n                              type: object\n                              properties:\n                                header:\n                                  type: object\n                                  properties:\n                                    version:\n                                      title: basic block info\n                                      type: object\n                                      properties:\n                                        block:\n                                          type: string\n                                          format: uint64\n                                        app:\n                                          type: string\n                                          format: uint64\n                                      description: >-\n                                        Consensus captures the consensus rules\n                                        for processing a block in the\n                                        blockchain,\n\n                                        including all blockchain data structures\n                                        and the rules of the application's\n\n                                        state transition machine.\n                                    chain_id:\n                                      type: string\n                                    height:\n                                      type: string\n                                      format: int64\n                                    time:\n                                      type: string\n                                      format: date-time\n                                    last_block_id:\n                                      title: prev block info\n                                      type: object\n                                      properties:\n                                        hash:\n                                          type: string\n                                          format: byte\n                                        part_set_header:\n                                          type: object\n                                          properties:\n                                            total:\n                                              type: integer\n                                              format: int64\n                                            hash:\n                                              type: string\n                                              format: byte\n                                          title: PartsetHeader\n                                    last_commit_hash:\n                                      type: string\n                                      format: byte\n                                      title: hashes of block data\n                                    data_hash:\n                                      type: string\n                                      format: byte\n                                    validators_hash:\n                                      type: string\n                                      format: byte\n                                      title: >-\n                                        hashes from the app output from the prev\n                                        block\n                                    next_validators_hash:\n                                      type: string\n                                      format: byte\n                                    consensus_hash:\n                                      type: string\n                                      format: byte\n                                    app_hash:\n                                      type: string\n                                      format: byte\n                                    last_results_hash:\n                                      type: string\n                                      format: byte\n                                    evidence_hash:\n                                      type: string\n                                      format: byte\n                                      title: consensus info\n                                    proposer_address:\n                                      type: string\n                                      format: byte\n                                  description: >-\n                                    Header defines the structure of a block\n                                    header.\n                                commit:\n                                  type: object\n                                  properties:\n                                    height:\n                                      type: string\n                                      format: int64\n                                    round:\n                                      type: integer\n                                      format: int32\n                                    block_id:\n                                      type: object\n                                      properties:\n                                        hash:\n                                          type: string\n                                          format: byte\n                                        part_set_header:\n                                          type: object\n                                          properties:\n                                            total:\n                                              type: integer\n                                              format: int64\n                                            hash:\n                                              type: string\n                                              format: byte\n                                          title: PartsetHeader\n                                      title: BlockID\n                                    signatures:\n                                      type: array\n                                      items:\n                                        type: object\n                                        properties:\n                                          block_id_flag:\n                                            type: string\n                                            enum:\n                                              - BLOCK_ID_FLAG_UNKNOWN\n                                              - BLOCK_ID_FLAG_ABSENT\n                                              - BLOCK_ID_FLAG_COMMIT\n                                              - BLOCK_ID_FLAG_NIL\n                                            default: BLOCK_ID_FLAG_UNKNOWN\n                                            title: >-\n                                              BlockIdFlag indicates which BlcokID the\n                                              signature is for\n                                          validator_address:\n                                            type: string\n                                            format: byte\n                                          timestamp:\n                                            type: string\n                                            format: date-time\n                                          signature:\n                                            type: string\n                                            format: byte\n                                        description: >-\n                                          CommitSig is a part of the Vote included\n                                          in a Commit.\n                                  description: >-\n                                    Commit contains the evidence that a block\n                                    was committed by a set of validators.\n                            validator_set:\n                              type: object\n                              properties:\n                                validators:\n                                  type: array\n                                  items:\n                                    type: object\n                                    properties:\n                                      address:\n                                        type: string\n                                        format: byte\n                                      pub_key:\n                                        type: object\n                                        properties:\n                                          ed25519:\n                                            type: string\n                                            format: byte\n                                          secp256k1:\n                                            type: string\n                                            format: byte\n                                        title: >-\n                                          PublicKey defines the keys available for\n                                          use with Validators\n                                      voting_power:\n                                        type: string\n                                        format: int64\n                                      proposer_priority:\n                                        type: string\n                                        format: int64\n                                proposer:\n                                  type: object\n                                  properties:\n                                    address:\n                                      type: string\n                                      format: byte\n                                    pub_key:\n                                      type: object\n                                      properties:\n                                        ed25519:\n                                          type: string\n                                          format: byte\n                                        secp256k1:\n                                          type: string\n                                          format: byte\n                                      title: >-\n                                        PublicKey defines the keys available for\n                                        use with Validators\n                                    voting_power:\n                                      type: string\n                                      format: int64\n                                    proposer_priority:\n                                      type: string\n                                      format: int64\n                                total_voting_power:\n                                  type: string\n                                  format: int64\n                        common_height:\n                          type: string\n                          format: int64\n                        byzantine_validators:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              address:\n                                type: string\n                                format: byte\n                              pub_key:\n                                type: object\n                                properties:\n                                  ed25519:\n                                    type: string\n                                    format: byte\n                                  secp256k1:\n                                    type: string\n                                    format: byte\n                                title: >-\n                                  PublicKey defines the keys available for use\n                                  with Validators\n                              voting_power:\n                                type: string\n                                format: int64\n                              proposer_priority:\n                                type: string\n                                format: int64\n                        total_voting_power:\n                          type: string\n                          format: int64\n                        timestamp:\n                          type: string\n                          format: date-time\n                      description: >-\n                        LightClientAttackEvidence contains evidence of a set of\n                        validators attempting to mislead a light client.\n          last_commit:\n            type: object\n            properties:\n              height:\n                type: string\n                format: int64\n              round:\n                type: integer\n                format: int32\n              block_id:\n                type: object\n                properties:\n                  hash:\n                    type: string\n                    format: byte\n                  part_set_header:\n                    type: object\n                    properties:\n                      total:\n                        type: integer\n                        format: int64\n                      hash:\n                        type: string\n                        format: byte\n                    title: PartsetHeader\n                title: BlockID\n              signatures:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    block_id_flag:\n                      type: string\n                      enum:\n                        - BLOCK_ID_FLAG_UNKNOWN\n                        - BLOCK_ID_FLAG_ABSENT\n                        - BLOCK_ID_FLAG_COMMIT\n                        - BLOCK_ID_FLAG_NIL\n                      default: BLOCK_ID_FLAG_UNKNOWN\n                      title: BlockIdFlag indicates which BlcokID the signature is for\n                    validator_address:\n                      type: string\n                      format: byte\n                    timestamp:\n                      type: string\n                      format: date-time\n                    signature:\n                      type: string\n                      format: byte\n                  description: CommitSig is a part of the Vote included in a Commit.\n            description: >-\n              Commit contains the evidence that a block was committed by a set\n              of validators.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: >-\n      GetBlockWithTxsResponse is the response type for the\n      Service.GetBlockWithTxs method.\n\n\n      Since: cosmos-sdk 0.45.2\n  cosmos.tx.v1beta1.GetTxResponse:\n    type: object\n    properties:\n      tx:\n        type: object\n        properties:\n          body:\n            title: body is the processable content of the transaction\n            type: object\n            properties:\n              messages:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n                description: >-\n                  messages is a list of messages to be executed. The required\n                  signers of\n\n                  those messages define the number and order of elements in\n                  AuthInfo's\n\n                  signer_infos and Tx's signatures. Each required signer address\n                  is added to\n\n                  the list only the first time it occurs.\n\n                  By convention, the first required signer (usually from the\n                  first message)\n\n                  is referred to as the primary signer and pays the fee for the\n                  whole\n\n                  transaction.\n              memo:\n                type: string\n                description: >-\n                  memo is any arbitrary note/comment to be added to the\n                  transaction.\n\n                  WARNING: in clients, any publicly exposed text should not be\n                  called memo,\n\n                  but should be called `note` instead (see\n                  https://github.com/cosmos/cosmos-sdk/issues/9122).\n              timeout_height:\n                type: string\n                format: uint64\n                title: >-\n                  timeout is the block height after which this transaction will\n                  not\n\n                  be processed by the chain\n              extension_options:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n                title: >-\n                  extension_options are arbitrary options that can be added by\n                  chains\n\n                  when the default options are not sufficient. If any of these\n                  are present\n\n                  and can't be handled, the transaction will be rejected\n              non_critical_extension_options:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n                title: >-\n                  extension_options are arbitrary options that can be added by\n                  chains\n\n                  when the default options are not sufficient. If any of these\n                  are present\n\n                  and can't be handled, they will be ignored\n            description: TxBody is the body of a transaction that all signers sign over.\n          auth_info:\n            title: |-\n              auth_info is the authorization related content of the transaction,\n              specifically signers, signer modes and fee\n            type: object\n            properties:\n              signer_infos:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    public_key:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                      description: >-\n                        public_key is the public key of the signer. It is\n                        optional for accounts\n\n                        that already exist in state. If unset, the verifier can\n                        use the required \\\n\n                        signer address for this position and lookup the public\n                        key.\n                    mode_info:\n                      title: >-\n                        mode_info describes the signing mode of the signer and\n                        is a nested\n\n                        structure to support nested multisig pubkey's\n                      type: object\n                      properties:\n                        single:\n                          title: single represents a single signer\n                          type: object\n                          properties:\n                            mode:\n                              title: mode is the signing mode of the single signer\n                              type: string\n                              enum:\n                                - SIGN_MODE_UNSPECIFIED\n                                - SIGN_MODE_DIRECT\n                                - SIGN_MODE_TEXTUAL\n                                - SIGN_MODE_DIRECT_AUX\n                                - SIGN_MODE_LEGACY_AMINO_JSON\n                                - SIGN_MODE_EIP_191\n                              default: SIGN_MODE_UNSPECIFIED\n                              description: >-\n                                SignMode represents a signing mode with its own\n                                security guarantees.\n\n\n                                This enum should be considered a registry of all\n                                known sign modes\n\n                                in the Cosmos ecosystem. Apps are not expected\n                                to support all known\n\n                                sign modes. Apps that would like to support\n                                custom  sign modes are\n\n                                encouraged to open a small PR against this file\n                                to add a new case\n\n                                to this SignMode enum describing their sign mode\n                                so that different\n\n                                apps have a consistent version of this enum.\n\n                                 - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                rejected.\n                                 - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                verified with raw bytes from Tx.\n                                 - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                human-readable textual representation on top of\n                                the binary representation\n\n                                from SIGN_MODE_DIRECT. It is currently not\n                                supported.\n                                 - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                SignDocDirectAux. As opposed to\n                                SIGN_MODE_DIRECT, this sign mode does not\n\n                                require signers signing over other signers'\n                                `signer_info`. It also allows\n\n                                for adding Tips in transactions.\n\n\n                                Since: cosmos-sdk 0.46\n                                 - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                Amino JSON and will be removed in the future.\n                                 - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                                Currently, SIGN_MODE_EIP_191 is registered as a\n                                SignMode enum variant,\n\n                                but is not implemented on the SDK by default. To\n                                enable EIP-191, you need\n\n                                to pass a custom `TxConfig` that has an\n                                implementation of\n\n                                `SignModeHandler` for EIP-191. The SDK may\n                                decide to fully support\n\n                                EIP-191 in the future.\n\n\n                                Since: cosmos-sdk 0.45.2\n                        multi:\n                          title: multi represents a nested multisig signer\n                          type: object\n                          properties:\n                            bitarray:\n                              title: >-\n                                bitarray specifies which keys within the\n                                multisig are signing\n                              type: object\n                              properties:\n                                extra_bits_stored:\n                                  type: integer\n                                  format: int64\n                                elems:\n                                  type: string\n                                  format: byte\n                              description: >-\n                                CompactBitArray is an implementation of a space\n                                efficient bit array.\n\n                                This is used to ensure that the encoded data\n                                takes up a minimal amount of\n\n                                space after proto encoding.\n\n                                This is not thread safe, and is not intended for\n                                concurrent usage.\n                            mode_infos:\n                              type: array\n                              items: {}\n                              title: >-\n                                mode_infos is the corresponding modes of the\n                                signers of the multisig\n\n                                which could include nested multisig public keys\n                      description: >-\n                        ModeInfo describes the signing mode of a single or\n                        nested multisig signer.\n                    sequence:\n                      type: string\n                      format: uint64\n                      description: >-\n                        sequence is the sequence of the account, which describes\n                        the\n\n                        number of committed transactions signed by a given\n                        address. It is used to\n\n                        prevent replay attacks.\n                  description: >-\n                    SignerInfo describes the public key and signing mode of a\n                    single top-level\n\n                    signer.\n                description: >-\n                  signer_infos defines the signing modes for the required\n                  signers. The number\n\n                  and order of elements must match the required signers from\n                  TxBody's\n\n                  messages. The first element is the primary signer and the one\n                  which pays\n\n                  the fee.\n              fee:\n                description: >-\n                  Fee is the fee and gas limit for the transaction. The first\n                  signer is the\n\n                  primary signer and the one which pays the fee. The fee can be\n                  calculated\n\n                  based on the cost of evaluating the body and doing signature\n                  verification\n\n                  of the signers. This can be estimated via simulation.\n                type: object\n                properties:\n                  amount:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                    title: amount is the amount of coins to be paid as a fee\n                  gas_limit:\n                    type: string\n                    format: uint64\n                    title: >-\n                      gas_limit is the maximum gas that can be used in\n                      transaction processing\n\n                      before an out of gas error occurs\n                  payer:\n                    type: string\n                    description: >-\n                      if unset, the first signer is responsible for paying the\n                      fees. If set, the specified account must pay the fees.\n\n                      the payer must be a tx signer (and thus have signed this\n                      field in AuthInfo).\n\n                      setting this field does *not* change the ordering of\n                      required signers for the transaction.\n                  granter:\n                    type: string\n                    title: >-\n                      if set, the fee payer (either the first signer or the\n                      value of the payer field) requests that a fee grant be\n                      used\n\n                      to pay fees instead of the fee payer's own balance. If an\n                      appropriate fee grant does not exist or the chain does\n\n                      not support fee grants, this will fail\n              tip:\n                description: >-\n                  Tip is the optional tip used for transactions fees paid in\n                  another denom.\n\n\n                  This field is ignored if the chain didn't enable tips, i.e.\n                  didn't add the\n\n                  `TipDecorator` in its posthandler.\n\n\n                  Since: cosmos-sdk 0.46\n                type: object\n                properties:\n                  amount:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                    title: amount is the amount of the tip\n                  tipper:\n                    type: string\n                    title: tipper is the address of the account paying for the tip\n            description: >-\n              AuthInfo describes the fee and signer modes that are used to sign\n              a\n\n              transaction.\n          signatures:\n            type: array\n            items:\n              type: string\n              format: byte\n            description: >-\n              signatures is a list of signatures that matches the length and\n              order of\n\n              AuthInfo's signer_infos to allow connecting signature meta\n              information like\n\n              public key and signing mode by position.\n        description: Tx is the standard type used for broadcasting transactions.\n      tx_response:\n        type: object\n        properties:\n          height:\n            type: string\n            format: int64\n            title: The block height\n          txhash:\n            type: string\n            description: The transaction hash.\n          codespace:\n            type: string\n            title: Namespace for the Code\n          code:\n            type: integer\n            format: int64\n            description: Response code.\n          data:\n            type: string\n            description: Result bytes, if any.\n          raw_log:\n            type: string\n            description: |-\n              The output of the application's logger (raw string). May be\n              non-deterministic.\n          logs:\n            type: array\n            items:\n              type: object\n              properties:\n                msg_index:\n                  type: integer\n                  format: int64\n                log:\n                  type: string\n                events:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      type:\n                        type: string\n                      attributes:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            key:\n                              type: string\n                            value:\n                              type: string\n                          description: >-\n                            Attribute defines an attribute wrapper where the key\n                            and value are\n\n                            strings instead of raw bytes.\n                    description: >-\n                      StringEvent defines en Event object wrapper where all the\n                      attributes\n\n                      contain key/value pairs that are strings instead of raw\n                      bytes.\n                  description: >-\n                    Events contains a slice of Event objects that were emitted\n                    during some\n\n                    execution.\n              description: >-\n                ABCIMessageLog defines a structure containing an indexed tx ABCI\n                message log.\n            description: >-\n              The output of the application's logger (typed). May be\n              non-deterministic.\n          info:\n            type: string\n            description: Additional information. May be non-deterministic.\n          gas_wanted:\n            type: string\n            format: int64\n            description: Amount of gas requested for transaction.\n          gas_used:\n            type: string\n            format: int64\n            description: Amount of gas consumed by transaction.\n          tx:\n            type: object\n            properties:\n              type_url:\n                type: string\n              value:\n                type: string\n                format: byte\n            description: The request transaction bytes.\n          timestamp:\n            type: string\n            description: >-\n              Time of the previous block. For heights > 1, it's the weighted\n              median of\n\n              the timestamps of the valid votes in the block.LastCommit. For\n              height == 1,\n\n              it's genesis time.\n          events:\n            type: array\n            items:\n              type: object\n              properties:\n                type:\n                  type: string\n                attributes:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      key:\n                        type: string\n                      value:\n                        type: string\n                      index:\n                        type: boolean\n                    description: >-\n                      EventAttribute is a single key-value pair, associated with\n                      an event.\n              description: >-\n                Event allows application developers to attach additional\n                information to\n\n                ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and\n                ResponseDeliverTx.\n\n                Later, transactions may be queried using these events.\n            description: >-\n              Events defines all the events emitted by processing a transaction.\n              Note,\n\n              these events include those emitted by processing all the messages\n              and those\n\n              emitted from the ante. Whereas Logs contains the events, with\n\n              additional metadata, emitted only by processing the messages.\n\n\n              Since: cosmos-sdk 0.42.11, 0.44.5, 0.45\n        description: >-\n          TxResponse defines a structure containing relevant tx data and\n          metadata. The\n\n          tags are stringified and the log is JSON decoded.\n    description: GetTxResponse is the response type for the Service.GetTx method.\n  cosmos.tx.v1beta1.GetTxsEventResponse:\n    type: object\n    properties:\n      txs:\n        type: array\n        items:\n          type: object\n          properties:\n            body:\n              title: body is the processable content of the transaction\n              type: object\n              properties:\n                messages:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                  description: >-\n                    messages is a list of messages to be executed. The required\n                    signers of\n\n                    those messages define the number and order of elements in\n                    AuthInfo's\n\n                    signer_infos and Tx's signatures. Each required signer\n                    address is added to\n\n                    the list only the first time it occurs.\n\n                    By convention, the first required signer (usually from the\n                    first message)\n\n                    is referred to as the primary signer and pays the fee for\n                    the whole\n\n                    transaction.\n                memo:\n                  type: string\n                  description: >-\n                    memo is any arbitrary note/comment to be added to the\n                    transaction.\n\n                    WARNING: in clients, any publicly exposed text should not be\n                    called memo,\n\n                    but should be called `note` instead (see\n                    https://github.com/cosmos/cosmos-sdk/issues/9122).\n                timeout_height:\n                  type: string\n                  format: uint64\n                  title: >-\n                    timeout is the block height after which this transaction\n                    will not\n\n                    be processed by the chain\n                extension_options:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                  title: >-\n                    extension_options are arbitrary options that can be added by\n                    chains\n\n                    when the default options are not sufficient. If any of these\n                    are present\n\n                    and can't be handled, the transaction will be rejected\n                non_critical_extension_options:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      type_url:\n                        type: string\n                      value:\n                        type: string\n                        format: byte\n                  title: >-\n                    extension_options are arbitrary options that can be added by\n                    chains\n\n                    when the default options are not sufficient. If any of these\n                    are present\n\n                    and can't be handled, they will be ignored\n              description: TxBody is the body of a transaction that all signers sign over.\n            auth_info:\n              title: >-\n                auth_info is the authorization related content of the\n                transaction,\n\n                specifically signers, signer modes and fee\n              type: object\n              properties:\n                signer_infos:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      public_key:\n                        type: object\n                        properties:\n                          type_url:\n                            type: string\n                          value:\n                            type: string\n                            format: byte\n                        description: >-\n                          public_key is the public key of the signer. It is\n                          optional for accounts\n\n                          that already exist in state. If unset, the verifier\n                          can use the required \\\n\n                          signer address for this position and lookup the public\n                          key.\n                      mode_info:\n                        title: >-\n                          mode_info describes the signing mode of the signer and\n                          is a nested\n\n                          structure to support nested multisig pubkey's\n                        type: object\n                        properties:\n                          single:\n                            title: single represents a single signer\n                            type: object\n                            properties:\n                              mode:\n                                title: mode is the signing mode of the single signer\n                                type: string\n                                enum:\n                                  - SIGN_MODE_UNSPECIFIED\n                                  - SIGN_MODE_DIRECT\n                                  - SIGN_MODE_TEXTUAL\n                                  - SIGN_MODE_DIRECT_AUX\n                                  - SIGN_MODE_LEGACY_AMINO_JSON\n                                  - SIGN_MODE_EIP_191\n                                default: SIGN_MODE_UNSPECIFIED\n                                description: >-\n                                  SignMode represents a signing mode with its\n                                  own security guarantees.\n\n\n                                  This enum should be considered a registry of\n                                  all known sign modes\n\n                                  in the Cosmos ecosystem. Apps are not expected\n                                  to support all known\n\n                                  sign modes. Apps that would like to support\n                                  custom  sign modes are\n\n                                  encouraged to open a small PR against this\n                                  file to add a new case\n\n                                  to this SignMode enum describing their sign\n                                  mode so that different\n\n                                  apps have a consistent version of this enum.\n\n                                   - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                  rejected.\n                                   - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                  verified with raw bytes from Tx.\n                                   - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                  human-readable textual representation on top\n                                  of the binary representation\n\n                                  from SIGN_MODE_DIRECT. It is currently not\n                                  supported.\n                                   - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                  SignDocDirectAux. As opposed to\n                                  SIGN_MODE_DIRECT, this sign mode does not\n\n                                  require signers signing over other signers'\n                                  `signer_info`. It also allows\n\n                                  for adding Tips in transactions.\n\n\n                                  Since: cosmos-sdk 0.46\n                                   - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                  Amino JSON and will be removed in the future.\n                                   - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                  SDK. Ref:\n                                  https://eips.ethereum.org/EIPS/eip-191\n\n\n                                  Currently, SIGN_MODE_EIP_191 is registered as\n                                  a SignMode enum variant,\n\n                                  but is not implemented on the SDK by default.\n                                  To enable EIP-191, you need\n\n                                  to pass a custom `TxConfig` that has an\n                                  implementation of\n\n                                  `SignModeHandler` for EIP-191. The SDK may\n                                  decide to fully support\n\n                                  EIP-191 in the future.\n\n\n                                  Since: cosmos-sdk 0.45.2\n                          multi:\n                            title: multi represents a nested multisig signer\n                            type: object\n                            properties:\n                              bitarray:\n                                title: >-\n                                  bitarray specifies which keys within the\n                                  multisig are signing\n                                type: object\n                                properties:\n                                  extra_bits_stored:\n                                    type: integer\n                                    format: int64\n                                  elems:\n                                    type: string\n                                    format: byte\n                                description: >-\n                                  CompactBitArray is an implementation of a\n                                  space efficient bit array.\n\n                                  This is used to ensure that the encoded data\n                                  takes up a minimal amount of\n\n                                  space after proto encoding.\n\n                                  This is not thread safe, and is not intended\n                                  for concurrent usage.\n                              mode_infos:\n                                type: array\n                                items: {}\n                                title: >-\n                                  mode_infos is the corresponding modes of the\n                                  signers of the multisig\n\n                                  which could include nested multisig public\n                                  keys\n                        description: >-\n                          ModeInfo describes the signing mode of a single or\n                          nested multisig signer.\n                      sequence:\n                        type: string\n                        format: uint64\n                        description: >-\n                          sequence is the sequence of the account, which\n                          describes the\n\n                          number of committed transactions signed by a given\n                          address. It is used to\n\n                          prevent replay attacks.\n                    description: >-\n                      SignerInfo describes the public key and signing mode of a\n                      single top-level\n\n                      signer.\n                  description: >-\n                    signer_infos defines the signing modes for the required\n                    signers. The number\n\n                    and order of elements must match the required signers from\n                    TxBody's\n\n                    messages. The first element is the primary signer and the\n                    one which pays\n\n                    the fee.\n                fee:\n                  description: >-\n                    Fee is the fee and gas limit for the transaction. The first\n                    signer is the\n\n                    primary signer and the one which pays the fee. The fee can\n                    be calculated\n\n                    based on the cost of evaluating the body and doing signature\n                    verification\n\n                    of the signers. This can be estimated via simulation.\n                  type: object\n                  properties:\n                    amount:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the\n                          custom method\n\n                          signatures required by gogoproto.\n                      title: amount is the amount of coins to be paid as a fee\n                    gas_limit:\n                      type: string\n                      format: uint64\n                      title: >-\n                        gas_limit is the maximum gas that can be used in\n                        transaction processing\n\n                        before an out of gas error occurs\n                    payer:\n                      type: string\n                      description: >-\n                        if unset, the first signer is responsible for paying the\n                        fees. If set, the specified account must pay the fees.\n\n                        the payer must be a tx signer (and thus have signed this\n                        field in AuthInfo).\n\n                        setting this field does *not* change the ordering of\n                        required signers for the transaction.\n                    granter:\n                      type: string\n                      title: >-\n                        if set, the fee payer (either the first signer or the\n                        value of the payer field) requests that a fee grant be\n                        used\n\n                        to pay fees instead of the fee payer's own balance. If\n                        an appropriate fee grant does not exist or the chain\n                        does\n\n                        not support fee grants, this will fail\n                tip:\n                  description: >-\n                    Tip is the optional tip used for transactions fees paid in\n                    another denom.\n\n\n                    This field is ignored if the chain didn't enable tips, i.e.\n                    didn't add the\n\n                    `TipDecorator` in its posthandler.\n\n\n                    Since: cosmos-sdk 0.46\n                  type: object\n                  properties:\n                    amount:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          denom:\n                            type: string\n                          amount:\n                            type: string\n                        description: >-\n                          Coin defines a token with a denomination and an\n                          amount.\n\n\n                          NOTE: The amount field is an Int which implements the\n                          custom method\n\n                          signatures required by gogoproto.\n                      title: amount is the amount of the tip\n                    tipper:\n                      type: string\n                      title: tipper is the address of the account paying for the tip\n              description: >-\n                AuthInfo describes the fee and signer modes that are used to\n                sign a\n\n                transaction.\n            signatures:\n              type: array\n              items:\n                type: string\n                format: byte\n              description: >-\n                signatures is a list of signatures that matches the length and\n                order of\n\n                AuthInfo's signer_infos to allow connecting signature meta\n                information like\n\n                public key and signing mode by position.\n          description: Tx is the standard type used for broadcasting transactions.\n        description: txs is the list of queried transactions.\n      tx_responses:\n        type: array\n        items:\n          type: object\n          properties:\n            height:\n              type: string\n              format: int64\n              title: The block height\n            txhash:\n              type: string\n              description: The transaction hash.\n            codespace:\n              type: string\n              title: Namespace for the Code\n            code:\n              type: integer\n              format: int64\n              description: Response code.\n            data:\n              type: string\n              description: Result bytes, if any.\n            raw_log:\n              type: string\n              description: |-\n                The output of the application's logger (raw string). May be\n                non-deterministic.\n            logs:\n              type: array\n              items:\n                type: object\n                properties:\n                  msg_index:\n                    type: integer\n                    format: int64\n                  log:\n                    type: string\n                  events:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        type:\n                          type: string\n                        attributes:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              key:\n                                type: string\n                              value:\n                                type: string\n                            description: >-\n                              Attribute defines an attribute wrapper where the\n                              key and value are\n\n                              strings instead of raw bytes.\n                      description: >-\n                        StringEvent defines en Event object wrapper where all\n                        the attributes\n\n                        contain key/value pairs that are strings instead of raw\n                        bytes.\n                    description: >-\n                      Events contains a slice of Event objects that were emitted\n                      during some\n\n                      execution.\n                description: >-\n                  ABCIMessageLog defines a structure containing an indexed tx\n                  ABCI message log.\n              description: >-\n                The output of the application's logger (typed). May be\n                non-deterministic.\n            info:\n              type: string\n              description: Additional information. May be non-deterministic.\n            gas_wanted:\n              type: string\n              format: int64\n              description: Amount of gas requested for transaction.\n            gas_used:\n              type: string\n              format: int64\n              description: Amount of gas consumed by transaction.\n            tx:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n              description: The request transaction bytes.\n            timestamp:\n              type: string\n              description: >-\n                Time of the previous block. For heights > 1, it's the weighted\n                median of\n\n                the timestamps of the valid votes in the block.LastCommit. For\n                height == 1,\n\n                it's genesis time.\n            events:\n              type: array\n              items:\n                type: object\n                properties:\n                  type:\n                    type: string\n                  attributes:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        key:\n                          type: string\n                        value:\n                          type: string\n                        index:\n                          type: boolean\n                      description: >-\n                        EventAttribute is a single key-value pair, associated\n                        with an event.\n                description: >-\n                  Event allows application developers to attach additional\n                  information to\n\n                  ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and\n                  ResponseDeliverTx.\n\n                  Later, transactions may be queried using these events.\n              description: >-\n                Events defines all the events emitted by processing a\n                transaction. Note,\n\n                these events include those emitted by processing all the\n                messages and those\n\n                emitted from the ante. Whereas Logs contains the events, with\n\n                additional metadata, emitted only by processing the messages.\n\n\n                Since: cosmos-sdk 0.42.11, 0.44.5, 0.45\n          description: >-\n            TxResponse defines a structure containing relevant tx data and\n            metadata. The\n\n            tags are stringified and the log is JSON decoded.\n        description: tx_responses is the list of queried TxResponses.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n      total:\n        type: string\n        format: uint64\n        title: total is total number of results available\n    description: |-\n      GetTxsEventResponse is the response type for the Service.TxsByEvents\n      RPC method.\n  cosmos.tx.v1beta1.ModeInfo:\n    type: object\n    properties:\n      single:\n        title: single represents a single signer\n        type: object\n        properties:\n          mode:\n            title: mode is the signing mode of the single signer\n            type: string\n            enum:\n              - SIGN_MODE_UNSPECIFIED\n              - SIGN_MODE_DIRECT\n              - SIGN_MODE_TEXTUAL\n              - SIGN_MODE_DIRECT_AUX\n              - SIGN_MODE_LEGACY_AMINO_JSON\n              - SIGN_MODE_EIP_191\n            default: SIGN_MODE_UNSPECIFIED\n            description: >-\n              SignMode represents a signing mode with its own security\n              guarantees.\n\n\n              This enum should be considered a registry of all known sign modes\n\n              in the Cosmos ecosystem. Apps are not expected to support all\n              known\n\n              sign modes. Apps that would like to support custom  sign modes are\n\n              encouraged to open a small PR against this file to add a new case\n\n              to this SignMode enum describing their sign mode so that different\n\n              apps have a consistent version of this enum.\n\n               - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n              rejected.\n               - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n              verified with raw bytes from Tx.\n               - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n              human-readable textual representation on top of the binary\n              representation\n\n              from SIGN_MODE_DIRECT. It is currently not supported.\n               - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n              SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode\n              does not\n\n              require signers signing over other signers' `signer_info`. It also\n              allows\n\n              for adding Tips in transactions.\n\n\n              Since: cosmos-sdk 0.46\n               - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n              Amino JSON and will be removed in the future.\n               - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n              SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n              Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum\n              variant,\n\n              but is not implemented on the SDK by default. To enable EIP-191,\n              you need\n\n              to pass a custom `TxConfig` that has an implementation of\n\n              `SignModeHandler` for EIP-191. The SDK may decide to fully support\n\n              EIP-191 in the future.\n\n\n              Since: cosmos-sdk 0.45.2\n      multi:\n        title: multi represents a nested multisig signer\n        type: object\n        properties:\n          bitarray:\n            title: bitarray specifies which keys within the multisig are signing\n            type: object\n            properties:\n              extra_bits_stored:\n                type: integer\n                format: int64\n              elems:\n                type: string\n                format: byte\n            description: >-\n              CompactBitArray is an implementation of a space efficient bit\n              array.\n\n              This is used to ensure that the encoded data takes up a minimal\n              amount of\n\n              space after proto encoding.\n\n              This is not thread safe, and is not intended for concurrent usage.\n          mode_infos:\n            type: array\n            items: {}\n            title: >-\n              mode_infos is the corresponding modes of the signers of the\n              multisig\n\n              which could include nested multisig public keys\n    description: ModeInfo describes the signing mode of a single or nested multisig signer.\n  cosmos.tx.v1beta1.ModeInfo.Multi:\n    type: object\n    properties:\n      bitarray:\n        title: bitarray specifies which keys within the multisig are signing\n        type: object\n        properties:\n          extra_bits_stored:\n            type: integer\n            format: int64\n          elems:\n            type: string\n            format: byte\n        description: >-\n          CompactBitArray is an implementation of a space efficient bit array.\n\n          This is used to ensure that the encoded data takes up a minimal amount\n          of\n\n          space after proto encoding.\n\n          This is not thread safe, and is not intended for concurrent usage.\n      mode_infos:\n        type: array\n        items: {}\n        title: |-\n          mode_infos is the corresponding modes of the signers of the multisig\n          which could include nested multisig public keys\n    title: Multi is the mode info for a multisig public key\n  cosmos.tx.v1beta1.ModeInfo.Single:\n    type: object\n    properties:\n      mode:\n        title: mode is the signing mode of the single signer\n        type: string\n        enum:\n          - SIGN_MODE_UNSPECIFIED\n          - SIGN_MODE_DIRECT\n          - SIGN_MODE_TEXTUAL\n          - SIGN_MODE_DIRECT_AUX\n          - SIGN_MODE_LEGACY_AMINO_JSON\n          - SIGN_MODE_EIP_191\n        default: SIGN_MODE_UNSPECIFIED\n        description: >-\n          SignMode represents a signing mode with its own security guarantees.\n\n\n          This enum should be considered a registry of all known sign modes\n\n          in the Cosmos ecosystem. Apps are not expected to support all known\n\n          sign modes. Apps that would like to support custom  sign modes are\n\n          encouraged to open a small PR against this file to add a new case\n\n          to this SignMode enum describing their sign mode so that different\n\n          apps have a consistent version of this enum.\n\n           - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n          rejected.\n           - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n          verified with raw bytes from Tx.\n           - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n          human-readable textual representation on top of the binary\n          representation\n\n          from SIGN_MODE_DIRECT. It is currently not supported.\n           - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n          SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does\n          not\n\n          require signers signing over other signers' `signer_info`. It also\n          allows\n\n          for adding Tips in transactions.\n\n\n          Since: cosmos-sdk 0.46\n           - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n          Amino JSON and will be removed in the future.\n           - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n          SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n          Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\n\n          but is not implemented on the SDK by default. To enable EIP-191, you\n          need\n\n          to pass a custom `TxConfig` that has an implementation of\n\n          `SignModeHandler` for EIP-191. The SDK may decide to fully support\n\n          EIP-191 in the future.\n\n\n          Since: cosmos-sdk 0.45.2\n    title: |-\n      Single is the mode info for a single signer. It is structured as a message\n      to allow for additional fields such as locale for SIGN_MODE_TEXTUAL in the\n      future\n  cosmos.tx.v1beta1.OrderBy:\n    type: string\n    enum:\n      - ORDER_BY_UNSPECIFIED\n      - ORDER_BY_ASC\n      - ORDER_BY_DESC\n    default: ORDER_BY_UNSPECIFIED\n    description: >-\n      - ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting\n      order. OrderBy defaults to ASC in this case.\n       - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order\n       - ORDER_BY_DESC: ORDER_BY_DESC defines descending order\n    title: OrderBy defines the sorting order\n  cosmos.tx.v1beta1.SignerInfo:\n    type: object\n    properties:\n      public_key:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n        description: >-\n          public_key is the public key of the signer. It is optional for\n          accounts\n\n          that already exist in state. If unset, the verifier can use the\n          required \\\n\n          signer address for this position and lookup the public key.\n      mode_info:\n        title: |-\n          mode_info describes the signing mode of the signer and is a nested\n          structure to support nested multisig pubkey's\n        type: object\n        properties:\n          single:\n            title: single represents a single signer\n            type: object\n            properties:\n              mode:\n                title: mode is the signing mode of the single signer\n                type: string\n                enum:\n                  - SIGN_MODE_UNSPECIFIED\n                  - SIGN_MODE_DIRECT\n                  - SIGN_MODE_TEXTUAL\n                  - SIGN_MODE_DIRECT_AUX\n                  - SIGN_MODE_LEGACY_AMINO_JSON\n                  - SIGN_MODE_EIP_191\n                default: SIGN_MODE_UNSPECIFIED\n                description: >-\n                  SignMode represents a signing mode with its own security\n                  guarantees.\n\n\n                  This enum should be considered a registry of all known sign\n                  modes\n\n                  in the Cosmos ecosystem. Apps are not expected to support all\n                  known\n\n                  sign modes. Apps that would like to support custom  sign modes\n                  are\n\n                  encouraged to open a small PR against this file to add a new\n                  case\n\n                  to this SignMode enum describing their sign mode so that\n                  different\n\n                  apps have a consistent version of this enum.\n\n                   - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                  rejected.\n                   - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                  verified with raw bytes from Tx.\n                   - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                  human-readable textual representation on top of the binary\n                  representation\n\n                  from SIGN_MODE_DIRECT. It is currently not supported.\n                   - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                  SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign\n                  mode does not\n\n                  require signers signing over other signers' `signer_info`. It\n                  also allows\n\n                  for adding Tips in transactions.\n\n\n                  Since: cosmos-sdk 0.46\n                   - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                  Amino JSON and will be removed in the future.\n                   - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                  SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                  Currently, SIGN_MODE_EIP_191 is registered as a SignMode enum\n                  variant,\n\n                  but is not implemented on the SDK by default. To enable\n                  EIP-191, you need\n\n                  to pass a custom `TxConfig` that has an implementation of\n\n                  `SignModeHandler` for EIP-191. The SDK may decide to fully\n                  support\n\n                  EIP-191 in the future.\n\n\n                  Since: cosmos-sdk 0.45.2\n          multi:\n            title: multi represents a nested multisig signer\n            type: object\n            properties:\n              bitarray:\n                title: bitarray specifies which keys within the multisig are signing\n                type: object\n                properties:\n                  extra_bits_stored:\n                    type: integer\n                    format: int64\n                  elems:\n                    type: string\n                    format: byte\n                description: >-\n                  CompactBitArray is an implementation of a space efficient bit\n                  array.\n\n                  This is used to ensure that the encoded data takes up a\n                  minimal amount of\n\n                  space after proto encoding.\n\n                  This is not thread safe, and is not intended for concurrent\n                  usage.\n              mode_infos:\n                type: array\n                items: {}\n                title: >-\n                  mode_infos is the corresponding modes of the signers of the\n                  multisig\n\n                  which could include nested multisig public keys\n        description: >-\n          ModeInfo describes the signing mode of a single or nested multisig\n          signer.\n      sequence:\n        type: string\n        format: uint64\n        description: >-\n          sequence is the sequence of the account, which describes the\n\n          number of committed transactions signed by a given address. It is used\n          to\n\n          prevent replay attacks.\n    description: |-\n      SignerInfo describes the public key and signing mode of a single top-level\n      signer.\n  cosmos.tx.v1beta1.SimulateRequest:\n    type: object\n    properties:\n      tx:\n        description: |-\n          tx is the transaction to simulate.\n          Deprecated. Send raw tx bytes instead.\n        type: object\n        properties:\n          body:\n            title: body is the processable content of the transaction\n            type: object\n            properties:\n              messages:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n                description: >-\n                  messages is a list of messages to be executed. The required\n                  signers of\n\n                  those messages define the number and order of elements in\n                  AuthInfo's\n\n                  signer_infos and Tx's signatures. Each required signer address\n                  is added to\n\n                  the list only the first time it occurs.\n\n                  By convention, the first required signer (usually from the\n                  first message)\n\n                  is referred to as the primary signer and pays the fee for the\n                  whole\n\n                  transaction.\n              memo:\n                type: string\n                description: >-\n                  memo is any arbitrary note/comment to be added to the\n                  transaction.\n\n                  WARNING: in clients, any publicly exposed text should not be\n                  called memo,\n\n                  but should be called `note` instead (see\n                  https://github.com/cosmos/cosmos-sdk/issues/9122).\n              timeout_height:\n                type: string\n                format: uint64\n                title: >-\n                  timeout is the block height after which this transaction will\n                  not\n\n                  be processed by the chain\n              extension_options:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n                title: >-\n                  extension_options are arbitrary options that can be added by\n                  chains\n\n                  when the default options are not sufficient. If any of these\n                  are present\n\n                  and can't be handled, the transaction will be rejected\n              non_critical_extension_options:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n                title: >-\n                  extension_options are arbitrary options that can be added by\n                  chains\n\n                  when the default options are not sufficient. If any of these\n                  are present\n\n                  and can't be handled, they will be ignored\n            description: TxBody is the body of a transaction that all signers sign over.\n          auth_info:\n            title: |-\n              auth_info is the authorization related content of the transaction,\n              specifically signers, signer modes and fee\n            type: object\n            properties:\n              signer_infos:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    public_key:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                      description: >-\n                        public_key is the public key of the signer. It is\n                        optional for accounts\n\n                        that already exist in state. If unset, the verifier can\n                        use the required \\\n\n                        signer address for this position and lookup the public\n                        key.\n                    mode_info:\n                      title: >-\n                        mode_info describes the signing mode of the signer and\n                        is a nested\n\n                        structure to support nested multisig pubkey's\n                      type: object\n                      properties:\n                        single:\n                          title: single represents a single signer\n                          type: object\n                          properties:\n                            mode:\n                              title: mode is the signing mode of the single signer\n                              type: string\n                              enum:\n                                - SIGN_MODE_UNSPECIFIED\n                                - SIGN_MODE_DIRECT\n                                - SIGN_MODE_TEXTUAL\n                                - SIGN_MODE_DIRECT_AUX\n                                - SIGN_MODE_LEGACY_AMINO_JSON\n                                - SIGN_MODE_EIP_191\n                              default: SIGN_MODE_UNSPECIFIED\n                              description: >-\n                                SignMode represents a signing mode with its own\n                                security guarantees.\n\n\n                                This enum should be considered a registry of all\n                                known sign modes\n\n                                in the Cosmos ecosystem. Apps are not expected\n                                to support all known\n\n                                sign modes. Apps that would like to support\n                                custom  sign modes are\n\n                                encouraged to open a small PR against this file\n                                to add a new case\n\n                                to this SignMode enum describing their sign mode\n                                so that different\n\n                                apps have a consistent version of this enum.\n\n                                 - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                rejected.\n                                 - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                verified with raw bytes from Tx.\n                                 - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                human-readable textual representation on top of\n                                the binary representation\n\n                                from SIGN_MODE_DIRECT. It is currently not\n                                supported.\n                                 - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                SignDocDirectAux. As opposed to\n                                SIGN_MODE_DIRECT, this sign mode does not\n\n                                require signers signing over other signers'\n                                `signer_info`. It also allows\n\n                                for adding Tips in transactions.\n\n\n                                Since: cosmos-sdk 0.46\n                                 - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                Amino JSON and will be removed in the future.\n                                 - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                                Currently, SIGN_MODE_EIP_191 is registered as a\n                                SignMode enum variant,\n\n                                but is not implemented on the SDK by default. To\n                                enable EIP-191, you need\n\n                                to pass a custom `TxConfig` that has an\n                                implementation of\n\n                                `SignModeHandler` for EIP-191. The SDK may\n                                decide to fully support\n\n                                EIP-191 in the future.\n\n\n                                Since: cosmos-sdk 0.45.2\n                        multi:\n                          title: multi represents a nested multisig signer\n                          type: object\n                          properties:\n                            bitarray:\n                              title: >-\n                                bitarray specifies which keys within the\n                                multisig are signing\n                              type: object\n                              properties:\n                                extra_bits_stored:\n                                  type: integer\n                                  format: int64\n                                elems:\n                                  type: string\n                                  format: byte\n                              description: >-\n                                CompactBitArray is an implementation of a space\n                                efficient bit array.\n\n                                This is used to ensure that the encoded data\n                                takes up a minimal amount of\n\n                                space after proto encoding.\n\n                                This is not thread safe, and is not intended for\n                                concurrent usage.\n                            mode_infos:\n                              type: array\n                              items: {}\n                              title: >-\n                                mode_infos is the corresponding modes of the\n                                signers of the multisig\n\n                                which could include nested multisig public keys\n                      description: >-\n                        ModeInfo describes the signing mode of a single or\n                        nested multisig signer.\n                    sequence:\n                      type: string\n                      format: uint64\n                      description: >-\n                        sequence is the sequence of the account, which describes\n                        the\n\n                        number of committed transactions signed by a given\n                        address. It is used to\n\n                        prevent replay attacks.\n                  description: >-\n                    SignerInfo describes the public key and signing mode of a\n                    single top-level\n\n                    signer.\n                description: >-\n                  signer_infos defines the signing modes for the required\n                  signers. The number\n\n                  and order of elements must match the required signers from\n                  TxBody's\n\n                  messages. The first element is the primary signer and the one\n                  which pays\n\n                  the fee.\n              fee:\n                description: >-\n                  Fee is the fee and gas limit for the transaction. The first\n                  signer is the\n\n                  primary signer and the one which pays the fee. The fee can be\n                  calculated\n\n                  based on the cost of evaluating the body and doing signature\n                  verification\n\n                  of the signers. This can be estimated via simulation.\n                type: object\n                properties:\n                  amount:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                    title: amount is the amount of coins to be paid as a fee\n                  gas_limit:\n                    type: string\n                    format: uint64\n                    title: >-\n                      gas_limit is the maximum gas that can be used in\n                      transaction processing\n\n                      before an out of gas error occurs\n                  payer:\n                    type: string\n                    description: >-\n                      if unset, the first signer is responsible for paying the\n                      fees. If set, the specified account must pay the fees.\n\n                      the payer must be a tx signer (and thus have signed this\n                      field in AuthInfo).\n\n                      setting this field does *not* change the ordering of\n                      required signers for the transaction.\n                  granter:\n                    type: string\n                    title: >-\n                      if set, the fee payer (either the first signer or the\n                      value of the payer field) requests that a fee grant be\n                      used\n\n                      to pay fees instead of the fee payer's own balance. If an\n                      appropriate fee grant does not exist or the chain does\n\n                      not support fee grants, this will fail\n              tip:\n                description: >-\n                  Tip is the optional tip used for transactions fees paid in\n                  another denom.\n\n\n                  This field is ignored if the chain didn't enable tips, i.e.\n                  didn't add the\n\n                  `TipDecorator` in its posthandler.\n\n\n                  Since: cosmos-sdk 0.46\n                type: object\n                properties:\n                  amount:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                    title: amount is the amount of the tip\n                  tipper:\n                    type: string\n                    title: tipper is the address of the account paying for the tip\n            description: >-\n              AuthInfo describes the fee and signer modes that are used to sign\n              a\n\n              transaction.\n          signatures:\n            type: array\n            items:\n              type: string\n              format: byte\n            description: >-\n              signatures is a list of signatures that matches the length and\n              order of\n\n              AuthInfo's signer_infos to allow connecting signature meta\n              information like\n\n              public key and signing mode by position.\n      tx_bytes:\n        type: string\n        format: byte\n        description: |-\n          tx_bytes is the raw transaction.\n\n          Since: cosmos-sdk 0.43\n    description: |-\n      SimulateRequest is the request type for the Service.Simulate\n      RPC method.\n  cosmos.tx.v1beta1.SimulateResponse:\n    type: object\n    properties:\n      gas_info:\n        description: gas_info is the information about gas used in the simulation.\n        type: object\n        properties:\n          gas_wanted:\n            type: string\n            format: uint64\n            description: >-\n              GasWanted is the maximum units of work we allow this tx to\n              perform.\n          gas_used:\n            type: string\n            format: uint64\n            description: GasUsed is the amount of gas actually consumed.\n      result:\n        description: result is the result of the simulation.\n        type: object\n        properties:\n          data:\n            type: string\n            format: byte\n            description: >-\n              Data is any data returned from message or handler execution. It\n              MUST be\n\n              length prefixed in order to separate data from multiple message\n              executions.\n\n              Deprecated. This field is still populated, but prefer msg_response\n              instead\n\n              because it also contains the Msg response typeURL.\n          log:\n            type: string\n            description: >-\n              Log contains the log information from message or handler\n              execution.\n          events:\n            type: array\n            items:\n              type: object\n              properties:\n                type:\n                  type: string\n                attributes:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      key:\n                        type: string\n                      value:\n                        type: string\n                      index:\n                        type: boolean\n                    description: >-\n                      EventAttribute is a single key-value pair, associated with\n                      an event.\n              description: >-\n                Event allows application developers to attach additional\n                information to\n\n                ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and\n                ResponseDeliverTx.\n\n                Later, transactions may be queried using these events.\n            description: >-\n              Events contains a slice of Event objects that were emitted during\n              message\n\n              or handler execution.\n          msg_responses:\n            type: array\n            items:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n            description: >-\n              msg_responses contains the Msg handler responses type packed in\n              Anys.\n\n\n              Since: cosmos-sdk 0.46\n    description: |-\n      SimulateResponse is the response type for the\n      Service.SimulateRPC method.\n  cosmos.tx.v1beta1.Tip:\n    type: object\n    properties:\n      amount:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        title: amount is the amount of the tip\n      tipper:\n        type: string\n        title: tipper is the address of the account paying for the tip\n    description: |-\n      Tip is the tip used for meta-transactions.\n\n      Since: cosmos-sdk 0.46\n  cosmos.tx.v1beta1.Tx:\n    type: object\n    properties:\n      body:\n        title: body is the processable content of the transaction\n        type: object\n        properties:\n          messages:\n            type: array\n            items:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n            description: >-\n              messages is a list of messages to be executed. The required\n              signers of\n\n              those messages define the number and order of elements in\n              AuthInfo's\n\n              signer_infos and Tx's signatures. Each required signer address is\n              added to\n\n              the list only the first time it occurs.\n\n              By convention, the first required signer (usually from the first\n              message)\n\n              is referred to as the primary signer and pays the fee for the\n              whole\n\n              transaction.\n          memo:\n            type: string\n            description: >-\n              memo is any arbitrary note/comment to be added to the transaction.\n\n              WARNING: in clients, any publicly exposed text should not be\n              called memo,\n\n              but should be called `note` instead (see\n              https://github.com/cosmos/cosmos-sdk/issues/9122).\n          timeout_height:\n            type: string\n            format: uint64\n            title: |-\n              timeout is the block height after which this transaction will not\n              be processed by the chain\n          extension_options:\n            type: array\n            items:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n            title: >-\n              extension_options are arbitrary options that can be added by\n              chains\n\n              when the default options are not sufficient. If any of these are\n              present\n\n              and can't be handled, the transaction will be rejected\n          non_critical_extension_options:\n            type: array\n            items:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n            title: >-\n              extension_options are arbitrary options that can be added by\n              chains\n\n              when the default options are not sufficient. If any of these are\n              present\n\n              and can't be handled, they will be ignored\n        description: TxBody is the body of a transaction that all signers sign over.\n      auth_info:\n        title: |-\n          auth_info is the authorization related content of the transaction,\n          specifically signers, signer modes and fee\n        type: object\n        properties:\n          signer_infos:\n            type: array\n            items:\n              type: object\n              properties:\n                public_key:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n                  description: >-\n                    public_key is the public key of the signer. It is optional\n                    for accounts\n\n                    that already exist in state. If unset, the verifier can use\n                    the required \\\n\n                    signer address for this position and lookup the public key.\n                mode_info:\n                  title: >-\n                    mode_info describes the signing mode of the signer and is a\n                    nested\n\n                    structure to support nested multisig pubkey's\n                  type: object\n                  properties:\n                    single:\n                      title: single represents a single signer\n                      type: object\n                      properties:\n                        mode:\n                          title: mode is the signing mode of the single signer\n                          type: string\n                          enum:\n                            - SIGN_MODE_UNSPECIFIED\n                            - SIGN_MODE_DIRECT\n                            - SIGN_MODE_TEXTUAL\n                            - SIGN_MODE_DIRECT_AUX\n                            - SIGN_MODE_LEGACY_AMINO_JSON\n                            - SIGN_MODE_EIP_191\n                          default: SIGN_MODE_UNSPECIFIED\n                          description: >-\n                            SignMode represents a signing mode with its own\n                            security guarantees.\n\n\n                            This enum should be considered a registry of all\n                            known sign modes\n\n                            in the Cosmos ecosystem. Apps are not expected to\n                            support all known\n\n                            sign modes. Apps that would like to support custom \n                            sign modes are\n\n                            encouraged to open a small PR against this file to\n                            add a new case\n\n                            to this SignMode enum describing their sign mode so\n                            that different\n\n                            apps have a consistent version of this enum.\n\n                             - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                            rejected.\n                             - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                            verified with raw bytes from Tx.\n                             - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                            human-readable textual representation on top of the\n                            binary representation\n\n                            from SIGN_MODE_DIRECT. It is currently not\n                            supported.\n                             - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                            SignDocDirectAux. As opposed to SIGN_MODE_DIRECT,\n                            this sign mode does not\n\n                            require signers signing over other signers'\n                            `signer_info`. It also allows\n\n                            for adding Tips in transactions.\n\n\n                            Since: cosmos-sdk 0.46\n                             - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                            Amino JSON and will be removed in the future.\n                             - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                            SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                            Currently, SIGN_MODE_EIP_191 is registered as a\n                            SignMode enum variant,\n\n                            but is not implemented on the SDK by default. To\n                            enable EIP-191, you need\n\n                            to pass a custom `TxConfig` that has an\n                            implementation of\n\n                            `SignModeHandler` for EIP-191. The SDK may decide to\n                            fully support\n\n                            EIP-191 in the future.\n\n\n                            Since: cosmos-sdk 0.45.2\n                    multi:\n                      title: multi represents a nested multisig signer\n                      type: object\n                      properties:\n                        bitarray:\n                          title: >-\n                            bitarray specifies which keys within the multisig\n                            are signing\n                          type: object\n                          properties:\n                            extra_bits_stored:\n                              type: integer\n                              format: int64\n                            elems:\n                              type: string\n                              format: byte\n                          description: >-\n                            CompactBitArray is an implementation of a space\n                            efficient bit array.\n\n                            This is used to ensure that the encoded data takes\n                            up a minimal amount of\n\n                            space after proto encoding.\n\n                            This is not thread safe, and is not intended for\n                            concurrent usage.\n                        mode_infos:\n                          type: array\n                          items: {}\n                          title: >-\n                            mode_infos is the corresponding modes of the signers\n                            of the multisig\n\n                            which could include nested multisig public keys\n                  description: >-\n                    ModeInfo describes the signing mode of a single or nested\n                    multisig signer.\n                sequence:\n                  type: string\n                  format: uint64\n                  description: >-\n                    sequence is the sequence of the account, which describes the\n\n                    number of committed transactions signed by a given address.\n                    It is used to\n\n                    prevent replay attacks.\n              description: >-\n                SignerInfo describes the public key and signing mode of a single\n                top-level\n\n                signer.\n            description: >-\n              signer_infos defines the signing modes for the required signers.\n              The number\n\n              and order of elements must match the required signers from\n              TxBody's\n\n              messages. The first element is the primary signer and the one\n              which pays\n\n              the fee.\n          fee:\n            description: >-\n              Fee is the fee and gas limit for the transaction. The first signer\n              is the\n\n              primary signer and the one which pays the fee. The fee can be\n              calculated\n\n              based on the cost of evaluating the body and doing signature\n              verification\n\n              of the signers. This can be estimated via simulation.\n            type: object\n            properties:\n              amount:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom\n                    method\n\n                    signatures required by gogoproto.\n                title: amount is the amount of coins to be paid as a fee\n              gas_limit:\n                type: string\n                format: uint64\n                title: >-\n                  gas_limit is the maximum gas that can be used in transaction\n                  processing\n\n                  before an out of gas error occurs\n              payer:\n                type: string\n                description: >-\n                  if unset, the first signer is responsible for paying the fees.\n                  If set, the specified account must pay the fees.\n\n                  the payer must be a tx signer (and thus have signed this field\n                  in AuthInfo).\n\n                  setting this field does *not* change the ordering of required\n                  signers for the transaction.\n              granter:\n                type: string\n                title: >-\n                  if set, the fee payer (either the first signer or the value of\n                  the payer field) requests that a fee grant be used\n\n                  to pay fees instead of the fee payer's own balance. If an\n                  appropriate fee grant does not exist or the chain does\n\n                  not support fee grants, this will fail\n          tip:\n            description: >-\n              Tip is the optional tip used for transactions fees paid in another\n              denom.\n\n\n              This field is ignored if the chain didn't enable tips, i.e. didn't\n              add the\n\n              `TipDecorator` in its posthandler.\n\n\n              Since: cosmos-sdk 0.46\n            type: object\n            properties:\n              amount:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom\n                    method\n\n                    signatures required by gogoproto.\n                title: amount is the amount of the tip\n              tipper:\n                type: string\n                title: tipper is the address of the account paying for the tip\n        description: |-\n          AuthInfo describes the fee and signer modes that are used to sign a\n          transaction.\n      signatures:\n        type: array\n        items:\n          type: string\n          format: byte\n        description: >-\n          signatures is a list of signatures that matches the length and order\n          of\n\n          AuthInfo's signer_infos to allow connecting signature meta information\n          like\n\n          public key and signing mode by position.\n    description: Tx is the standard type used for broadcasting transactions.\n  cosmos.tx.v1beta1.TxBody:\n    type: object\n    properties:\n      messages:\n        type: array\n        items:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n        description: >-\n          messages is a list of messages to be executed. The required signers of\n\n          those messages define the number and order of elements in AuthInfo's\n\n          signer_infos and Tx's signatures. Each required signer address is\n          added to\n\n          the list only the first time it occurs.\n\n          By convention, the first required signer (usually from the first\n          message)\n\n          is referred to as the primary signer and pays the fee for the whole\n\n          transaction.\n      memo:\n        type: string\n        description: >-\n          memo is any arbitrary note/comment to be added to the transaction.\n\n          WARNING: in clients, any publicly exposed text should not be called\n          memo,\n\n          but should be called `note` instead (see\n          https://github.com/cosmos/cosmos-sdk/issues/9122).\n      timeout_height:\n        type: string\n        format: uint64\n        title: |-\n          timeout is the block height after which this transaction will not\n          be processed by the chain\n      extension_options:\n        type: array\n        items:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n        title: >-\n          extension_options are arbitrary options that can be added by chains\n\n          when the default options are not sufficient. If any of these are\n          present\n\n          and can't be handled, the transaction will be rejected\n      non_critical_extension_options:\n        type: array\n        items:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n        title: >-\n          extension_options are arbitrary options that can be added by chains\n\n          when the default options are not sufficient. If any of these are\n          present\n\n          and can't be handled, they will be ignored\n    description: TxBody is the body of a transaction that all signers sign over.\n  cosmos.tx.v1beta1.TxDecodeAminoRequest:\n    type: object\n    properties:\n      amino_binary:\n        type: string\n        format: byte\n    description: |-\n      TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\n      RPC method.\n\n      Since: cosmos-sdk 0.47\n  cosmos.tx.v1beta1.TxDecodeAminoResponse:\n    type: object\n    properties:\n      amino_json:\n        type: string\n    description: |-\n      TxDecodeAminoResponse is the response type for the Service.TxDecodeAmino\n      RPC method.\n\n      Since: cosmos-sdk 0.47\n  cosmos.tx.v1beta1.TxDecodeRequest:\n    type: object\n    properties:\n      tx_bytes:\n        type: string\n        format: byte\n        description: tx_bytes is the raw transaction.\n    description: |-\n      TxDecodeRequest is the request type for the Service.TxDecode\n      RPC method.\n\n      Since: cosmos-sdk 0.47\n  cosmos.tx.v1beta1.TxDecodeResponse:\n    type: object\n    properties:\n      tx:\n        description: tx is the decoded transaction.\n        type: object\n        properties:\n          body:\n            title: body is the processable content of the transaction\n            type: object\n            properties:\n              messages:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n                description: >-\n                  messages is a list of messages to be executed. The required\n                  signers of\n\n                  those messages define the number and order of elements in\n                  AuthInfo's\n\n                  signer_infos and Tx's signatures. Each required signer address\n                  is added to\n\n                  the list only the first time it occurs.\n\n                  By convention, the first required signer (usually from the\n                  first message)\n\n                  is referred to as the primary signer and pays the fee for the\n                  whole\n\n                  transaction.\n              memo:\n                type: string\n                description: >-\n                  memo is any arbitrary note/comment to be added to the\n                  transaction.\n\n                  WARNING: in clients, any publicly exposed text should not be\n                  called memo,\n\n                  but should be called `note` instead (see\n                  https://github.com/cosmos/cosmos-sdk/issues/9122).\n              timeout_height:\n                type: string\n                format: uint64\n                title: >-\n                  timeout is the block height after which this transaction will\n                  not\n\n                  be processed by the chain\n              extension_options:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n                title: >-\n                  extension_options are arbitrary options that can be added by\n                  chains\n\n                  when the default options are not sufficient. If any of these\n                  are present\n\n                  and can't be handled, the transaction will be rejected\n              non_critical_extension_options:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n                title: >-\n                  extension_options are arbitrary options that can be added by\n                  chains\n\n                  when the default options are not sufficient. If any of these\n                  are present\n\n                  and can't be handled, they will be ignored\n            description: TxBody is the body of a transaction that all signers sign over.\n          auth_info:\n            title: |-\n              auth_info is the authorization related content of the transaction,\n              specifically signers, signer modes and fee\n            type: object\n            properties:\n              signer_infos:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    public_key:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                      description: >-\n                        public_key is the public key of the signer. It is\n                        optional for accounts\n\n                        that already exist in state. If unset, the verifier can\n                        use the required \\\n\n                        signer address for this position and lookup the public\n                        key.\n                    mode_info:\n                      title: >-\n                        mode_info describes the signing mode of the signer and\n                        is a nested\n\n                        structure to support nested multisig pubkey's\n                      type: object\n                      properties:\n                        single:\n                          title: single represents a single signer\n                          type: object\n                          properties:\n                            mode:\n                              title: mode is the signing mode of the single signer\n                              type: string\n                              enum:\n                                - SIGN_MODE_UNSPECIFIED\n                                - SIGN_MODE_DIRECT\n                                - SIGN_MODE_TEXTUAL\n                                - SIGN_MODE_DIRECT_AUX\n                                - SIGN_MODE_LEGACY_AMINO_JSON\n                                - SIGN_MODE_EIP_191\n                              default: SIGN_MODE_UNSPECIFIED\n                              description: >-\n                                SignMode represents a signing mode with its own\n                                security guarantees.\n\n\n                                This enum should be considered a registry of all\n                                known sign modes\n\n                                in the Cosmos ecosystem. Apps are not expected\n                                to support all known\n\n                                sign modes. Apps that would like to support\n                                custom  sign modes are\n\n                                encouraged to open a small PR against this file\n                                to add a new case\n\n                                to this SignMode enum describing their sign mode\n                                so that different\n\n                                apps have a consistent version of this enum.\n\n                                 - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                rejected.\n                                 - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                verified with raw bytes from Tx.\n                                 - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                human-readable textual representation on top of\n                                the binary representation\n\n                                from SIGN_MODE_DIRECT. It is currently not\n                                supported.\n                                 - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                SignDocDirectAux. As opposed to\n                                SIGN_MODE_DIRECT, this sign mode does not\n\n                                require signers signing over other signers'\n                                `signer_info`. It also allows\n\n                                for adding Tips in transactions.\n\n\n                                Since: cosmos-sdk 0.46\n                                 - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                Amino JSON and will be removed in the future.\n                                 - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                                Currently, SIGN_MODE_EIP_191 is registered as a\n                                SignMode enum variant,\n\n                                but is not implemented on the SDK by default. To\n                                enable EIP-191, you need\n\n                                to pass a custom `TxConfig` that has an\n                                implementation of\n\n                                `SignModeHandler` for EIP-191. The SDK may\n                                decide to fully support\n\n                                EIP-191 in the future.\n\n\n                                Since: cosmos-sdk 0.45.2\n                        multi:\n                          title: multi represents a nested multisig signer\n                          type: object\n                          properties:\n                            bitarray:\n                              title: >-\n                                bitarray specifies which keys within the\n                                multisig are signing\n                              type: object\n                              properties:\n                                extra_bits_stored:\n                                  type: integer\n                                  format: int64\n                                elems:\n                                  type: string\n                                  format: byte\n                              description: >-\n                                CompactBitArray is an implementation of a space\n                                efficient bit array.\n\n                                This is used to ensure that the encoded data\n                                takes up a minimal amount of\n\n                                space after proto encoding.\n\n                                This is not thread safe, and is not intended for\n                                concurrent usage.\n                            mode_infos:\n                              type: array\n                              items: {}\n                              title: >-\n                                mode_infos is the corresponding modes of the\n                                signers of the multisig\n\n                                which could include nested multisig public keys\n                      description: >-\n                        ModeInfo describes the signing mode of a single or\n                        nested multisig signer.\n                    sequence:\n                      type: string\n                      format: uint64\n                      description: >-\n                        sequence is the sequence of the account, which describes\n                        the\n\n                        number of committed transactions signed by a given\n                        address. It is used to\n\n                        prevent replay attacks.\n                  description: >-\n                    SignerInfo describes the public key and signing mode of a\n                    single top-level\n\n                    signer.\n                description: >-\n                  signer_infos defines the signing modes for the required\n                  signers. The number\n\n                  and order of elements must match the required signers from\n                  TxBody's\n\n                  messages. The first element is the primary signer and the one\n                  which pays\n\n                  the fee.\n              fee:\n                description: >-\n                  Fee is the fee and gas limit for the transaction. The first\n                  signer is the\n\n                  primary signer and the one which pays the fee. The fee can be\n                  calculated\n\n                  based on the cost of evaluating the body and doing signature\n                  verification\n\n                  of the signers. This can be estimated via simulation.\n                type: object\n                properties:\n                  amount:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                    title: amount is the amount of coins to be paid as a fee\n                  gas_limit:\n                    type: string\n                    format: uint64\n                    title: >-\n                      gas_limit is the maximum gas that can be used in\n                      transaction processing\n\n                      before an out of gas error occurs\n                  payer:\n                    type: string\n                    description: >-\n                      if unset, the first signer is responsible for paying the\n                      fees. If set, the specified account must pay the fees.\n\n                      the payer must be a tx signer (and thus have signed this\n                      field in AuthInfo).\n\n                      setting this field does *not* change the ordering of\n                      required signers for the transaction.\n                  granter:\n                    type: string\n                    title: >-\n                      if set, the fee payer (either the first signer or the\n                      value of the payer field) requests that a fee grant be\n                      used\n\n                      to pay fees instead of the fee payer's own balance. If an\n                      appropriate fee grant does not exist or the chain does\n\n                      not support fee grants, this will fail\n              tip:\n                description: >-\n                  Tip is the optional tip used for transactions fees paid in\n                  another denom.\n\n\n                  This field is ignored if the chain didn't enable tips, i.e.\n                  didn't add the\n\n                  `TipDecorator` in its posthandler.\n\n\n                  Since: cosmos-sdk 0.46\n                type: object\n                properties:\n                  amount:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                    title: amount is the amount of the tip\n                  tipper:\n                    type: string\n                    title: tipper is the address of the account paying for the tip\n            description: >-\n              AuthInfo describes the fee and signer modes that are used to sign\n              a\n\n              transaction.\n          signatures:\n            type: array\n            items:\n              type: string\n              format: byte\n            description: >-\n              signatures is a list of signatures that matches the length and\n              order of\n\n              AuthInfo's signer_infos to allow connecting signature meta\n              information like\n\n              public key and signing mode by position.\n    description: |-\n      TxDecodeResponse is the response type for the\n      Service.TxDecode method.\n\n      Since: cosmos-sdk 0.47\n  cosmos.tx.v1beta1.TxEncodeAminoRequest:\n    type: object\n    properties:\n      amino_json:\n        type: string\n    description: |-\n      TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino\n      RPC method.\n\n      Since: cosmos-sdk 0.47\n  cosmos.tx.v1beta1.TxEncodeAminoResponse:\n    type: object\n    properties:\n      amino_binary:\n        type: string\n        format: byte\n    description: |-\n      TxEncodeAminoResponse is the response type for the Service.TxEncodeAmino\n      RPC method.\n\n      Since: cosmos-sdk 0.47\n  cosmos.tx.v1beta1.TxEncodeRequest:\n    type: object\n    properties:\n      tx:\n        description: tx is the transaction to encode.\n        type: object\n        properties:\n          body:\n            title: body is the processable content of the transaction\n            type: object\n            properties:\n              messages:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n                description: >-\n                  messages is a list of messages to be executed. The required\n                  signers of\n\n                  those messages define the number and order of elements in\n                  AuthInfo's\n\n                  signer_infos and Tx's signatures. Each required signer address\n                  is added to\n\n                  the list only the first time it occurs.\n\n                  By convention, the first required signer (usually from the\n                  first message)\n\n                  is referred to as the primary signer and pays the fee for the\n                  whole\n\n                  transaction.\n              memo:\n                type: string\n                description: >-\n                  memo is any arbitrary note/comment to be added to the\n                  transaction.\n\n                  WARNING: in clients, any publicly exposed text should not be\n                  called memo,\n\n                  but should be called `note` instead (see\n                  https://github.com/cosmos/cosmos-sdk/issues/9122).\n              timeout_height:\n                type: string\n                format: uint64\n                title: >-\n                  timeout is the block height after which this transaction will\n                  not\n\n                  be processed by the chain\n              extension_options:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n                title: >-\n                  extension_options are arbitrary options that can be added by\n                  chains\n\n                  when the default options are not sufficient. If any of these\n                  are present\n\n                  and can't be handled, the transaction will be rejected\n              non_critical_extension_options:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n                title: >-\n                  extension_options are arbitrary options that can be added by\n                  chains\n\n                  when the default options are not sufficient. If any of these\n                  are present\n\n                  and can't be handled, they will be ignored\n            description: TxBody is the body of a transaction that all signers sign over.\n          auth_info:\n            title: |-\n              auth_info is the authorization related content of the transaction,\n              specifically signers, signer modes and fee\n            type: object\n            properties:\n              signer_infos:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    public_key:\n                      type: object\n                      properties:\n                        type_url:\n                          type: string\n                        value:\n                          type: string\n                          format: byte\n                      description: >-\n                        public_key is the public key of the signer. It is\n                        optional for accounts\n\n                        that already exist in state. If unset, the verifier can\n                        use the required \\\n\n                        signer address for this position and lookup the public\n                        key.\n                    mode_info:\n                      title: >-\n                        mode_info describes the signing mode of the signer and\n                        is a nested\n\n                        structure to support nested multisig pubkey's\n                      type: object\n                      properties:\n                        single:\n                          title: single represents a single signer\n                          type: object\n                          properties:\n                            mode:\n                              title: mode is the signing mode of the single signer\n                              type: string\n                              enum:\n                                - SIGN_MODE_UNSPECIFIED\n                                - SIGN_MODE_DIRECT\n                                - SIGN_MODE_TEXTUAL\n                                - SIGN_MODE_DIRECT_AUX\n                                - SIGN_MODE_LEGACY_AMINO_JSON\n                                - SIGN_MODE_EIP_191\n                              default: SIGN_MODE_UNSPECIFIED\n                              description: >-\n                                SignMode represents a signing mode with its own\n                                security guarantees.\n\n\n                                This enum should be considered a registry of all\n                                known sign modes\n\n                                in the Cosmos ecosystem. Apps are not expected\n                                to support all known\n\n                                sign modes. Apps that would like to support\n                                custom  sign modes are\n\n                                encouraged to open a small PR against this file\n                                to add a new case\n\n                                to this SignMode enum describing their sign mode\n                                so that different\n\n                                apps have a consistent version of this enum.\n\n                                 - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\n                                rejected.\n                                 - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\n                                verified with raw bytes from Tx.\n                                 - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\n                                human-readable textual representation on top of\n                                the binary representation\n\n                                from SIGN_MODE_DIRECT. It is currently not\n                                supported.\n                                 - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\n                                SignDocDirectAux. As opposed to\n                                SIGN_MODE_DIRECT, this sign mode does not\n\n                                require signers signing over other signers'\n                                `signer_info`. It also allows\n\n                                for adding Tips in transactions.\n\n\n                                Since: cosmos-sdk 0.46\n                                 - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\n                                Amino JSON and will be removed in the future.\n                                 - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\n                                SDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\n\n                                Currently, SIGN_MODE_EIP_191 is registered as a\n                                SignMode enum variant,\n\n                                but is not implemented on the SDK by default. To\n                                enable EIP-191, you need\n\n                                to pass a custom `TxConfig` that has an\n                                implementation of\n\n                                `SignModeHandler` for EIP-191. The SDK may\n                                decide to fully support\n\n                                EIP-191 in the future.\n\n\n                                Since: cosmos-sdk 0.45.2\n                        multi:\n                          title: multi represents a nested multisig signer\n                          type: object\n                          properties:\n                            bitarray:\n                              title: >-\n                                bitarray specifies which keys within the\n                                multisig are signing\n                              type: object\n                              properties:\n                                extra_bits_stored:\n                                  type: integer\n                                  format: int64\n                                elems:\n                                  type: string\n                                  format: byte\n                              description: >-\n                                CompactBitArray is an implementation of a space\n                                efficient bit array.\n\n                                This is used to ensure that the encoded data\n                                takes up a minimal amount of\n\n                                space after proto encoding.\n\n                                This is not thread safe, and is not intended for\n                                concurrent usage.\n                            mode_infos:\n                              type: array\n                              items: {}\n                              title: >-\n                                mode_infos is the corresponding modes of the\n                                signers of the multisig\n\n                                which could include nested multisig public keys\n                      description: >-\n                        ModeInfo describes the signing mode of a single or\n                        nested multisig signer.\n                    sequence:\n                      type: string\n                      format: uint64\n                      description: >-\n                        sequence is the sequence of the account, which describes\n                        the\n\n                        number of committed transactions signed by a given\n                        address. It is used to\n\n                        prevent replay attacks.\n                  description: >-\n                    SignerInfo describes the public key and signing mode of a\n                    single top-level\n\n                    signer.\n                description: >-\n                  signer_infos defines the signing modes for the required\n                  signers. The number\n\n                  and order of elements must match the required signers from\n                  TxBody's\n\n                  messages. The first element is the primary signer and the one\n                  which pays\n\n                  the fee.\n              fee:\n                description: >-\n                  Fee is the fee and gas limit for the transaction. The first\n                  signer is the\n\n                  primary signer and the one which pays the fee. The fee can be\n                  calculated\n\n                  based on the cost of evaluating the body and doing signature\n                  verification\n\n                  of the signers. This can be estimated via simulation.\n                type: object\n                properties:\n                  amount:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                    title: amount is the amount of coins to be paid as a fee\n                  gas_limit:\n                    type: string\n                    format: uint64\n                    title: >-\n                      gas_limit is the maximum gas that can be used in\n                      transaction processing\n\n                      before an out of gas error occurs\n                  payer:\n                    type: string\n                    description: >-\n                      if unset, the first signer is responsible for paying the\n                      fees. If set, the specified account must pay the fees.\n\n                      the payer must be a tx signer (and thus have signed this\n                      field in AuthInfo).\n\n                      setting this field does *not* change the ordering of\n                      required signers for the transaction.\n                  granter:\n                    type: string\n                    title: >-\n                      if set, the fee payer (either the first signer or the\n                      value of the payer field) requests that a fee grant be\n                      used\n\n                      to pay fees instead of the fee payer's own balance. If an\n                      appropriate fee grant does not exist or the chain does\n\n                      not support fee grants, this will fail\n              tip:\n                description: >-\n                  Tip is the optional tip used for transactions fees paid in\n                  another denom.\n\n\n                  This field is ignored if the chain didn't enable tips, i.e.\n                  didn't add the\n\n                  `TipDecorator` in its posthandler.\n\n\n                  Since: cosmos-sdk 0.46\n                type: object\n                properties:\n                  amount:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        denom:\n                          type: string\n                        amount:\n                          type: string\n                      description: >-\n                        Coin defines a token with a denomination and an amount.\n\n\n                        NOTE: The amount field is an Int which implements the\n                        custom method\n\n                        signatures required by gogoproto.\n                    title: amount is the amount of the tip\n                  tipper:\n                    type: string\n                    title: tipper is the address of the account paying for the tip\n            description: >-\n              AuthInfo describes the fee and signer modes that are used to sign\n              a\n\n              transaction.\n          signatures:\n            type: array\n            items:\n              type: string\n              format: byte\n            description: >-\n              signatures is a list of signatures that matches the length and\n              order of\n\n              AuthInfo's signer_infos to allow connecting signature meta\n              information like\n\n              public key and signing mode by position.\n    description: |-\n      TxEncodeRequest is the request type for the Service.TxEncode\n      RPC method.\n\n      Since: cosmos-sdk 0.47\n  cosmos.tx.v1beta1.TxEncodeResponse:\n    type: object\n    properties:\n      tx_bytes:\n        type: string\n        format: byte\n        description: tx_bytes is the encoded transaction bytes.\n    description: |-\n      TxEncodeResponse is the response type for the\n      Service.TxEncode method.\n\n      Since: cosmos-sdk 0.47\n  tendermint.abci.Event:\n    type: object\n    properties:\n      type:\n        type: string\n      attributes:\n        type: array\n        items:\n          type: object\n          properties:\n            key:\n              type: string\n            value:\n              type: string\n            index:\n              type: boolean\n          description: EventAttribute is a single key-value pair, associated with an event.\n    description: >-\n      Event allows application developers to attach additional information to\n\n      ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and\n      ResponseDeliverTx.\n\n      Later, transactions may be queried using these events.\n  tendermint.abci.EventAttribute:\n    type: object\n    properties:\n      key:\n        type: string\n      value:\n        type: string\n      index:\n        type: boolean\n    description: EventAttribute is a single key-value pair, associated with an event.\n  tendermint.crypto.PublicKey:\n    type: object\n    properties:\n      ed25519:\n        type: string\n        format: byte\n      secp256k1:\n        type: string\n        format: byte\n    title: PublicKey defines the keys available for use with Validators\n  tendermint.types.Block:\n    type: object\n    properties:\n      header:\n        type: object\n        properties:\n          version:\n            title: basic block info\n            type: object\n            properties:\n              block:\n                type: string\n                format: uint64\n              app:\n                type: string\n                format: uint64\n            description: >-\n              Consensus captures the consensus rules for processing a block in\n              the blockchain,\n\n              including all blockchain data structures and the rules of the\n              application's\n\n              state transition machine.\n          chain_id:\n            type: string\n          height:\n            type: string\n            format: int64\n          time:\n            type: string\n            format: date-time\n          last_block_id:\n            title: prev block info\n            type: object\n            properties:\n              hash:\n                type: string\n                format: byte\n              part_set_header:\n                type: object\n                properties:\n                  total:\n                    type: integer\n                    format: int64\n                  hash:\n                    type: string\n                    format: byte\n                title: PartsetHeader\n          last_commit_hash:\n            type: string\n            format: byte\n            title: hashes of block data\n          data_hash:\n            type: string\n            format: byte\n          validators_hash:\n            type: string\n            format: byte\n            title: hashes from the app output from the prev block\n          next_validators_hash:\n            type: string\n            format: byte\n          consensus_hash:\n            type: string\n            format: byte\n          app_hash:\n            type: string\n            format: byte\n          last_results_hash:\n            type: string\n            format: byte\n          evidence_hash:\n            type: string\n            format: byte\n            title: consensus info\n          proposer_address:\n            type: string\n            format: byte\n        description: Header defines the structure of a block header.\n      data:\n        type: object\n        properties:\n          txs:\n            type: array\n            items:\n              type: string\n              format: byte\n            description: >-\n              Txs that will be applied by state @ block.Height+1.\n\n              NOTE: not all txs here are valid.  We're just agreeing on the\n              order first.\n\n              This means that block.AppHash does not include these txs.\n        title: Data contains the set of transactions included in the block\n      evidence:\n        type: object\n        properties:\n          evidence:\n            type: array\n            items:\n              type: object\n              properties:\n                duplicate_vote_evidence:\n                  type: object\n                  properties:\n                    vote_a:\n                      type: object\n                      properties:\n                        type:\n                          type: string\n                          enum:\n                            - SIGNED_MSG_TYPE_UNKNOWN\n                            - SIGNED_MSG_TYPE_PREVOTE\n                            - SIGNED_MSG_TYPE_PRECOMMIT\n                            - SIGNED_MSG_TYPE_PROPOSAL\n                          default: SIGNED_MSG_TYPE_UNKNOWN\n                          description: >-\n                            SignedMsgType is a type of signed message in the\n                            consensus.\n\n                             - SIGNED_MSG_TYPE_PREVOTE: Votes\n                             - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                        height:\n                          type: string\n                          format: int64\n                        round:\n                          type: integer\n                          format: int32\n                        block_id:\n                          type: object\n                          properties:\n                            hash:\n                              type: string\n                              format: byte\n                            part_set_header:\n                              type: object\n                              properties:\n                                total:\n                                  type: integer\n                                  format: int64\n                                hash:\n                                  type: string\n                                  format: byte\n                              title: PartsetHeader\n                          title: BlockID\n                        timestamp:\n                          type: string\n                          format: date-time\n                        validator_address:\n                          type: string\n                          format: byte\n                        validator_index:\n                          type: integer\n                          format: int32\n                        signature:\n                          type: string\n                          format: byte\n                      description: >-\n                        Vote represents a prevote, precommit, or commit vote\n                        from validators for\n\n                        consensus.\n                    vote_b:\n                      type: object\n                      properties:\n                        type:\n                          type: string\n                          enum:\n                            - SIGNED_MSG_TYPE_UNKNOWN\n                            - SIGNED_MSG_TYPE_PREVOTE\n                            - SIGNED_MSG_TYPE_PRECOMMIT\n                            - SIGNED_MSG_TYPE_PROPOSAL\n                          default: SIGNED_MSG_TYPE_UNKNOWN\n                          description: >-\n                            SignedMsgType is a type of signed message in the\n                            consensus.\n\n                             - SIGNED_MSG_TYPE_PREVOTE: Votes\n                             - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                        height:\n                          type: string\n                          format: int64\n                        round:\n                          type: integer\n                          format: int32\n                        block_id:\n                          type: object\n                          properties:\n                            hash:\n                              type: string\n                              format: byte\n                            part_set_header:\n                              type: object\n                              properties:\n                                total:\n                                  type: integer\n                                  format: int64\n                                hash:\n                                  type: string\n                                  format: byte\n                              title: PartsetHeader\n                          title: BlockID\n                        timestamp:\n                          type: string\n                          format: date-time\n                        validator_address:\n                          type: string\n                          format: byte\n                        validator_index:\n                          type: integer\n                          format: int32\n                        signature:\n                          type: string\n                          format: byte\n                      description: >-\n                        Vote represents a prevote, precommit, or commit vote\n                        from validators for\n\n                        consensus.\n                    total_voting_power:\n                      type: string\n                      format: int64\n                    validator_power:\n                      type: string\n                      format: int64\n                    timestamp:\n                      type: string\n                      format: date-time\n                  description: >-\n                    DuplicateVoteEvidence contains evidence of a validator\n                    signed two conflicting votes.\n                light_client_attack_evidence:\n                  type: object\n                  properties:\n                    conflicting_block:\n                      type: object\n                      properties:\n                        signed_header:\n                          type: object\n                          properties:\n                            header:\n                              type: object\n                              properties:\n                                version:\n                                  title: basic block info\n                                  type: object\n                                  properties:\n                                    block:\n                                      type: string\n                                      format: uint64\n                                    app:\n                                      type: string\n                                      format: uint64\n                                  description: >-\n                                    Consensus captures the consensus rules for\n                                    processing a block in the blockchain,\n\n                                    including all blockchain data structures and\n                                    the rules of the application's\n\n                                    state transition machine.\n                                chain_id:\n                                  type: string\n                                height:\n                                  type: string\n                                  format: int64\n                                time:\n                                  type: string\n                                  format: date-time\n                                last_block_id:\n                                  title: prev block info\n                                  type: object\n                                  properties:\n                                    hash:\n                                      type: string\n                                      format: byte\n                                    part_set_header:\n                                      type: object\n                                      properties:\n                                        total:\n                                          type: integer\n                                          format: int64\n                                        hash:\n                                          type: string\n                                          format: byte\n                                      title: PartsetHeader\n                                last_commit_hash:\n                                  type: string\n                                  format: byte\n                                  title: hashes of block data\n                                data_hash:\n                                  type: string\n                                  format: byte\n                                validators_hash:\n                                  type: string\n                                  format: byte\n                                  title: >-\n                                    hashes from the app output from the prev\n                                    block\n                                next_validators_hash:\n                                  type: string\n                                  format: byte\n                                consensus_hash:\n                                  type: string\n                                  format: byte\n                                app_hash:\n                                  type: string\n                                  format: byte\n                                last_results_hash:\n                                  type: string\n                                  format: byte\n                                evidence_hash:\n                                  type: string\n                                  format: byte\n                                  title: consensus info\n                                proposer_address:\n                                  type: string\n                                  format: byte\n                              description: Header defines the structure of a block header.\n                            commit:\n                              type: object\n                              properties:\n                                height:\n                                  type: string\n                                  format: int64\n                                round:\n                                  type: integer\n                                  format: int32\n                                block_id:\n                                  type: object\n                                  properties:\n                                    hash:\n                                      type: string\n                                      format: byte\n                                    part_set_header:\n                                      type: object\n                                      properties:\n                                        total:\n                                          type: integer\n                                          format: int64\n                                        hash:\n                                          type: string\n                                          format: byte\n                                      title: PartsetHeader\n                                  title: BlockID\n                                signatures:\n                                  type: array\n                                  items:\n                                    type: object\n                                    properties:\n                                      block_id_flag:\n                                        type: string\n                                        enum:\n                                          - BLOCK_ID_FLAG_UNKNOWN\n                                          - BLOCK_ID_FLAG_ABSENT\n                                          - BLOCK_ID_FLAG_COMMIT\n                                          - BLOCK_ID_FLAG_NIL\n                                        default: BLOCK_ID_FLAG_UNKNOWN\n                                        title: >-\n                                          BlockIdFlag indicates which BlcokID the\n                                          signature is for\n                                      validator_address:\n                                        type: string\n                                        format: byte\n                                      timestamp:\n                                        type: string\n                                        format: date-time\n                                      signature:\n                                        type: string\n                                        format: byte\n                                    description: >-\n                                      CommitSig is a part of the Vote included\n                                      in a Commit.\n                              description: >-\n                                Commit contains the evidence that a block was\n                                committed by a set of validators.\n                        validator_set:\n                          type: object\n                          properties:\n                            validators:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  address:\n                                    type: string\n                                    format: byte\n                                  pub_key:\n                                    type: object\n                                    properties:\n                                      ed25519:\n                                        type: string\n                                        format: byte\n                                      secp256k1:\n                                        type: string\n                                        format: byte\n                                    title: >-\n                                      PublicKey defines the keys available for\n                                      use with Validators\n                                  voting_power:\n                                    type: string\n                                    format: int64\n                                  proposer_priority:\n                                    type: string\n                                    format: int64\n                            proposer:\n                              type: object\n                              properties:\n                                address:\n                                  type: string\n                                  format: byte\n                                pub_key:\n                                  type: object\n                                  properties:\n                                    ed25519:\n                                      type: string\n                                      format: byte\n                                    secp256k1:\n                                      type: string\n                                      format: byte\n                                  title: >-\n                                    PublicKey defines the keys available for use\n                                    with Validators\n                                voting_power:\n                                  type: string\n                                  format: int64\n                                proposer_priority:\n                                  type: string\n                                  format: int64\n                            total_voting_power:\n                              type: string\n                              format: int64\n                    common_height:\n                      type: string\n                      format: int64\n                    byzantine_validators:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          address:\n                            type: string\n                            format: byte\n                          pub_key:\n                            type: object\n                            properties:\n                              ed25519:\n                                type: string\n                                format: byte\n                              secp256k1:\n                                type: string\n                                format: byte\n                            title: >-\n                              PublicKey defines the keys available for use with\n                              Validators\n                          voting_power:\n                            type: string\n                            format: int64\n                          proposer_priority:\n                            type: string\n                            format: int64\n                    total_voting_power:\n                      type: string\n                      format: int64\n                    timestamp:\n                      type: string\n                      format: date-time\n                  description: >-\n                    LightClientAttackEvidence contains evidence of a set of\n                    validators attempting to mislead a light client.\n      last_commit:\n        type: object\n        properties:\n          height:\n            type: string\n            format: int64\n          round:\n            type: integer\n            format: int32\n          block_id:\n            type: object\n            properties:\n              hash:\n                type: string\n                format: byte\n              part_set_header:\n                type: object\n                properties:\n                  total:\n                    type: integer\n                    format: int64\n                  hash:\n                    type: string\n                    format: byte\n                title: PartsetHeader\n            title: BlockID\n          signatures:\n            type: array\n            items:\n              type: object\n              properties:\n                block_id_flag:\n                  type: string\n                  enum:\n                    - BLOCK_ID_FLAG_UNKNOWN\n                    - BLOCK_ID_FLAG_ABSENT\n                    - BLOCK_ID_FLAG_COMMIT\n                    - BLOCK_ID_FLAG_NIL\n                  default: BLOCK_ID_FLAG_UNKNOWN\n                  title: BlockIdFlag indicates which BlcokID the signature is for\n                validator_address:\n                  type: string\n                  format: byte\n                timestamp:\n                  type: string\n                  format: date-time\n                signature:\n                  type: string\n                  format: byte\n              description: CommitSig is a part of the Vote included in a Commit.\n        description: >-\n          Commit contains the evidence that a block was committed by a set of\n          validators.\n  tendermint.types.BlockIDFlag:\n    type: string\n    enum:\n      - BLOCK_ID_FLAG_UNKNOWN\n      - BLOCK_ID_FLAG_ABSENT\n      - BLOCK_ID_FLAG_COMMIT\n      - BLOCK_ID_FLAG_NIL\n    default: BLOCK_ID_FLAG_UNKNOWN\n    title: BlockIdFlag indicates which BlcokID the signature is for\n  tendermint.types.Commit:\n    type: object\n    properties:\n      height:\n        type: string\n        format: int64\n      round:\n        type: integer\n        format: int32\n      block_id:\n        type: object\n        properties:\n          hash:\n            type: string\n            format: byte\n          part_set_header:\n            type: object\n            properties:\n              total:\n                type: integer\n                format: int64\n              hash:\n                type: string\n                format: byte\n            title: PartsetHeader\n        title: BlockID\n      signatures:\n        type: array\n        items:\n          type: object\n          properties:\n            block_id_flag:\n              type: string\n              enum:\n                - BLOCK_ID_FLAG_UNKNOWN\n                - BLOCK_ID_FLAG_ABSENT\n                - BLOCK_ID_FLAG_COMMIT\n                - BLOCK_ID_FLAG_NIL\n              default: BLOCK_ID_FLAG_UNKNOWN\n              title: BlockIdFlag indicates which BlcokID the signature is for\n            validator_address:\n              type: string\n              format: byte\n            timestamp:\n              type: string\n              format: date-time\n            signature:\n              type: string\n              format: byte\n          description: CommitSig is a part of the Vote included in a Commit.\n    description: >-\n      Commit contains the evidence that a block was committed by a set of\n      validators.\n  tendermint.types.CommitSig:\n    type: object\n    properties:\n      block_id_flag:\n        type: string\n        enum:\n          - BLOCK_ID_FLAG_UNKNOWN\n          - BLOCK_ID_FLAG_ABSENT\n          - BLOCK_ID_FLAG_COMMIT\n          - BLOCK_ID_FLAG_NIL\n        default: BLOCK_ID_FLAG_UNKNOWN\n        title: BlockIdFlag indicates which BlcokID the signature is for\n      validator_address:\n        type: string\n        format: byte\n      timestamp:\n        type: string\n        format: date-time\n      signature:\n        type: string\n        format: byte\n    description: CommitSig is a part of the Vote included in a Commit.\n  tendermint.types.Data:\n    type: object\n    properties:\n      txs:\n        type: array\n        items:\n          type: string\n          format: byte\n        description: >-\n          Txs that will be applied by state @ block.Height+1.\n\n          NOTE: not all txs here are valid.  We're just agreeing on the order\n          first.\n\n          This means that block.AppHash does not include these txs.\n    title: Data contains the set of transactions included in the block\n  tendermint.types.DuplicateVoteEvidence:\n    type: object\n    properties:\n      vote_a:\n        type: object\n        properties:\n          type:\n            type: string\n            enum:\n              - SIGNED_MSG_TYPE_UNKNOWN\n              - SIGNED_MSG_TYPE_PREVOTE\n              - SIGNED_MSG_TYPE_PRECOMMIT\n              - SIGNED_MSG_TYPE_PROPOSAL\n            default: SIGNED_MSG_TYPE_UNKNOWN\n            description: |-\n              SignedMsgType is a type of signed message in the consensus.\n\n               - SIGNED_MSG_TYPE_PREVOTE: Votes\n               - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n          height:\n            type: string\n            format: int64\n          round:\n            type: integer\n            format: int32\n          block_id:\n            type: object\n            properties:\n              hash:\n                type: string\n                format: byte\n              part_set_header:\n                type: object\n                properties:\n                  total:\n                    type: integer\n                    format: int64\n                  hash:\n                    type: string\n                    format: byte\n                title: PartsetHeader\n            title: BlockID\n          timestamp:\n            type: string\n            format: date-time\n          validator_address:\n            type: string\n            format: byte\n          validator_index:\n            type: integer\n            format: int32\n          signature:\n            type: string\n            format: byte\n        description: >-\n          Vote represents a prevote, precommit, or commit vote from validators\n          for\n\n          consensus.\n      vote_b:\n        type: object\n        properties:\n          type:\n            type: string\n            enum:\n              - SIGNED_MSG_TYPE_UNKNOWN\n              - SIGNED_MSG_TYPE_PREVOTE\n              - SIGNED_MSG_TYPE_PRECOMMIT\n              - SIGNED_MSG_TYPE_PROPOSAL\n            default: SIGNED_MSG_TYPE_UNKNOWN\n            description: |-\n              SignedMsgType is a type of signed message in the consensus.\n\n               - SIGNED_MSG_TYPE_PREVOTE: Votes\n               - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n          height:\n            type: string\n            format: int64\n          round:\n            type: integer\n            format: int32\n          block_id:\n            type: object\n            properties:\n              hash:\n                type: string\n                format: byte\n              part_set_header:\n                type: object\n                properties:\n                  total:\n                    type: integer\n                    format: int64\n                  hash:\n                    type: string\n                    format: byte\n                title: PartsetHeader\n            title: BlockID\n          timestamp:\n            type: string\n            format: date-time\n          validator_address:\n            type: string\n            format: byte\n          validator_index:\n            type: integer\n            format: int32\n          signature:\n            type: string\n            format: byte\n        description: >-\n          Vote represents a prevote, precommit, or commit vote from validators\n          for\n\n          consensus.\n      total_voting_power:\n        type: string\n        format: int64\n      validator_power:\n        type: string\n        format: int64\n      timestamp:\n        type: string\n        format: date-time\n    description: >-\n      DuplicateVoteEvidence contains evidence of a validator signed two\n      conflicting votes.\n  tendermint.types.Evidence:\n    type: object\n    properties:\n      duplicate_vote_evidence:\n        type: object\n        properties:\n          vote_a:\n            type: object\n            properties:\n              type:\n                type: string\n                enum:\n                  - SIGNED_MSG_TYPE_UNKNOWN\n                  - SIGNED_MSG_TYPE_PREVOTE\n                  - SIGNED_MSG_TYPE_PRECOMMIT\n                  - SIGNED_MSG_TYPE_PROPOSAL\n                default: SIGNED_MSG_TYPE_UNKNOWN\n                description: |-\n                  SignedMsgType is a type of signed message in the consensus.\n\n                   - SIGNED_MSG_TYPE_PREVOTE: Votes\n                   - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n              height:\n                type: string\n                format: int64\n              round:\n                type: integer\n                format: int32\n              block_id:\n                type: object\n                properties:\n                  hash:\n                    type: string\n                    format: byte\n                  part_set_header:\n                    type: object\n                    properties:\n                      total:\n                        type: integer\n                        format: int64\n                      hash:\n                        type: string\n                        format: byte\n                    title: PartsetHeader\n                title: BlockID\n              timestamp:\n                type: string\n                format: date-time\n              validator_address:\n                type: string\n                format: byte\n              validator_index:\n                type: integer\n                format: int32\n              signature:\n                type: string\n                format: byte\n            description: >-\n              Vote represents a prevote, precommit, or commit vote from\n              validators for\n\n              consensus.\n          vote_b:\n            type: object\n            properties:\n              type:\n                type: string\n                enum:\n                  - SIGNED_MSG_TYPE_UNKNOWN\n                  - SIGNED_MSG_TYPE_PREVOTE\n                  - SIGNED_MSG_TYPE_PRECOMMIT\n                  - SIGNED_MSG_TYPE_PROPOSAL\n                default: SIGNED_MSG_TYPE_UNKNOWN\n                description: |-\n                  SignedMsgType is a type of signed message in the consensus.\n\n                   - SIGNED_MSG_TYPE_PREVOTE: Votes\n                   - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n              height:\n                type: string\n                format: int64\n              round:\n                type: integer\n                format: int32\n              block_id:\n                type: object\n                properties:\n                  hash:\n                    type: string\n                    format: byte\n                  part_set_header:\n                    type: object\n                    properties:\n                      total:\n                        type: integer\n                        format: int64\n                      hash:\n                        type: string\n                        format: byte\n                    title: PartsetHeader\n                title: BlockID\n              timestamp:\n                type: string\n                format: date-time\n              validator_address:\n                type: string\n                format: byte\n              validator_index:\n                type: integer\n                format: int32\n              signature:\n                type: string\n                format: byte\n            description: >-\n              Vote represents a prevote, precommit, or commit vote from\n              validators for\n\n              consensus.\n          total_voting_power:\n            type: string\n            format: int64\n          validator_power:\n            type: string\n            format: int64\n          timestamp:\n            type: string\n            format: date-time\n        description: >-\n          DuplicateVoteEvidence contains evidence of a validator signed two\n          conflicting votes.\n      light_client_attack_evidence:\n        type: object\n        properties:\n          conflicting_block:\n            type: object\n            properties:\n              signed_header:\n                type: object\n                properties:\n                  header:\n                    type: object\n                    properties:\n                      version:\n                        title: basic block info\n                        type: object\n                        properties:\n                          block:\n                            type: string\n                            format: uint64\n                          app:\n                            type: string\n                            format: uint64\n                        description: >-\n                          Consensus captures the consensus rules for processing\n                          a block in the blockchain,\n\n                          including all blockchain data structures and the rules\n                          of the application's\n\n                          state transition machine.\n                      chain_id:\n                        type: string\n                      height:\n                        type: string\n                        format: int64\n                      time:\n                        type: string\n                        format: date-time\n                      last_block_id:\n                        title: prev block info\n                        type: object\n                        properties:\n                          hash:\n                            type: string\n                            format: byte\n                          part_set_header:\n                            type: object\n                            properties:\n                              total:\n                                type: integer\n                                format: int64\n                              hash:\n                                type: string\n                                format: byte\n                            title: PartsetHeader\n                      last_commit_hash:\n                        type: string\n                        format: byte\n                        title: hashes of block data\n                      data_hash:\n                        type: string\n                        format: byte\n                      validators_hash:\n                        type: string\n                        format: byte\n                        title: hashes from the app output from the prev block\n                      next_validators_hash:\n                        type: string\n                        format: byte\n                      consensus_hash:\n                        type: string\n                        format: byte\n                      app_hash:\n                        type: string\n                        format: byte\n                      last_results_hash:\n                        type: string\n                        format: byte\n                      evidence_hash:\n                        type: string\n                        format: byte\n                        title: consensus info\n                      proposer_address:\n                        type: string\n                        format: byte\n                    description: Header defines the structure of a block header.\n                  commit:\n                    type: object\n                    properties:\n                      height:\n                        type: string\n                        format: int64\n                      round:\n                        type: integer\n                        format: int32\n                      block_id:\n                        type: object\n                        properties:\n                          hash:\n                            type: string\n                            format: byte\n                          part_set_header:\n                            type: object\n                            properties:\n                              total:\n                                type: integer\n                                format: int64\n                              hash:\n                                type: string\n                                format: byte\n                            title: PartsetHeader\n                        title: BlockID\n                      signatures:\n                        type: array\n                        items:\n                          type: object\n                          properties:\n                            block_id_flag:\n                              type: string\n                              enum:\n                                - BLOCK_ID_FLAG_UNKNOWN\n                                - BLOCK_ID_FLAG_ABSENT\n                                - BLOCK_ID_FLAG_COMMIT\n                                - BLOCK_ID_FLAG_NIL\n                              default: BLOCK_ID_FLAG_UNKNOWN\n                              title: >-\n                                BlockIdFlag indicates which BlcokID the\n                                signature is for\n                            validator_address:\n                              type: string\n                              format: byte\n                            timestamp:\n                              type: string\n                              format: date-time\n                            signature:\n                              type: string\n                              format: byte\n                          description: >-\n                            CommitSig is a part of the Vote included in a\n                            Commit.\n                    description: >-\n                      Commit contains the evidence that a block was committed by\n                      a set of validators.\n              validator_set:\n                type: object\n                properties:\n                  validators:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        address:\n                          type: string\n                          format: byte\n                        pub_key:\n                          type: object\n                          properties:\n                            ed25519:\n                              type: string\n                              format: byte\n                            secp256k1:\n                              type: string\n                              format: byte\n                          title: >-\n                            PublicKey defines the keys available for use with\n                            Validators\n                        voting_power:\n                          type: string\n                          format: int64\n                        proposer_priority:\n                          type: string\n                          format: int64\n                  proposer:\n                    type: object\n                    properties:\n                      address:\n                        type: string\n                        format: byte\n                      pub_key:\n                        type: object\n                        properties:\n                          ed25519:\n                            type: string\n                            format: byte\n                          secp256k1:\n                            type: string\n                            format: byte\n                        title: >-\n                          PublicKey defines the keys available for use with\n                          Validators\n                      voting_power:\n                        type: string\n                        format: int64\n                      proposer_priority:\n                        type: string\n                        format: int64\n                  total_voting_power:\n                    type: string\n                    format: int64\n          common_height:\n            type: string\n            format: int64\n          byzantine_validators:\n            type: array\n            items:\n              type: object\n              properties:\n                address:\n                  type: string\n                  format: byte\n                pub_key:\n                  type: object\n                  properties:\n                    ed25519:\n                      type: string\n                      format: byte\n                    secp256k1:\n                      type: string\n                      format: byte\n                  title: PublicKey defines the keys available for use with Validators\n                voting_power:\n                  type: string\n                  format: int64\n                proposer_priority:\n                  type: string\n                  format: int64\n          total_voting_power:\n            type: string\n            format: int64\n          timestamp:\n            type: string\n            format: date-time\n        description: >-\n          LightClientAttackEvidence contains evidence of a set of validators\n          attempting to mislead a light client.\n  tendermint.types.EvidenceList:\n    type: object\n    properties:\n      evidence:\n        type: array\n        items:\n          type: object\n          properties:\n            duplicate_vote_evidence:\n              type: object\n              properties:\n                vote_a:\n                  type: object\n                  properties:\n                    type:\n                      type: string\n                      enum:\n                        - SIGNED_MSG_TYPE_UNKNOWN\n                        - SIGNED_MSG_TYPE_PREVOTE\n                        - SIGNED_MSG_TYPE_PRECOMMIT\n                        - SIGNED_MSG_TYPE_PROPOSAL\n                      default: SIGNED_MSG_TYPE_UNKNOWN\n                      description: >-\n                        SignedMsgType is a type of signed message in the\n                        consensus.\n\n                         - SIGNED_MSG_TYPE_PREVOTE: Votes\n                         - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                    height:\n                      type: string\n                      format: int64\n                    round:\n                      type: integer\n                      format: int32\n                    block_id:\n                      type: object\n                      properties:\n                        hash:\n                          type: string\n                          format: byte\n                        part_set_header:\n                          type: object\n                          properties:\n                            total:\n                              type: integer\n                              format: int64\n                            hash:\n                              type: string\n                              format: byte\n                          title: PartsetHeader\n                      title: BlockID\n                    timestamp:\n                      type: string\n                      format: date-time\n                    validator_address:\n                      type: string\n                      format: byte\n                    validator_index:\n                      type: integer\n                      format: int32\n                    signature:\n                      type: string\n                      format: byte\n                  description: >-\n                    Vote represents a prevote, precommit, or commit vote from\n                    validators for\n\n                    consensus.\n                vote_b:\n                  type: object\n                  properties:\n                    type:\n                      type: string\n                      enum:\n                        - SIGNED_MSG_TYPE_UNKNOWN\n                        - SIGNED_MSG_TYPE_PREVOTE\n                        - SIGNED_MSG_TYPE_PRECOMMIT\n                        - SIGNED_MSG_TYPE_PROPOSAL\n                      default: SIGNED_MSG_TYPE_UNKNOWN\n                      description: >-\n                        SignedMsgType is a type of signed message in the\n                        consensus.\n\n                         - SIGNED_MSG_TYPE_PREVOTE: Votes\n                         - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                    height:\n                      type: string\n                      format: int64\n                    round:\n                      type: integer\n                      format: int32\n                    block_id:\n                      type: object\n                      properties:\n                        hash:\n                          type: string\n                          format: byte\n                        part_set_header:\n                          type: object\n                          properties:\n                            total:\n                              type: integer\n                              format: int64\n                            hash:\n                              type: string\n                              format: byte\n                          title: PartsetHeader\n                      title: BlockID\n                    timestamp:\n                      type: string\n                      format: date-time\n                    validator_address:\n                      type: string\n                      format: byte\n                    validator_index:\n                      type: integer\n                      format: int32\n                    signature:\n                      type: string\n                      format: byte\n                  description: >-\n                    Vote represents a prevote, precommit, or commit vote from\n                    validators for\n\n                    consensus.\n                total_voting_power:\n                  type: string\n                  format: int64\n                validator_power:\n                  type: string\n                  format: int64\n                timestamp:\n                  type: string\n                  format: date-time\n              description: >-\n                DuplicateVoteEvidence contains evidence of a validator signed\n                two conflicting votes.\n            light_client_attack_evidence:\n              type: object\n              properties:\n                conflicting_block:\n                  type: object\n                  properties:\n                    signed_header:\n                      type: object\n                      properties:\n                        header:\n                          type: object\n                          properties:\n                            version:\n                              title: basic block info\n                              type: object\n                              properties:\n                                block:\n                                  type: string\n                                  format: uint64\n                                app:\n                                  type: string\n                                  format: uint64\n                              description: >-\n                                Consensus captures the consensus rules for\n                                processing a block in the blockchain,\n\n                                including all blockchain data structures and the\n                                rules of the application's\n\n                                state transition machine.\n                            chain_id:\n                              type: string\n                            height:\n                              type: string\n                              format: int64\n                            time:\n                              type: string\n                              format: date-time\n                            last_block_id:\n                              title: prev block info\n                              type: object\n                              properties:\n                                hash:\n                                  type: string\n                                  format: byte\n                                part_set_header:\n                                  type: object\n                                  properties:\n                                    total:\n                                      type: integer\n                                      format: int64\n                                    hash:\n                                      type: string\n                                      format: byte\n                                  title: PartsetHeader\n                            last_commit_hash:\n                              type: string\n                              format: byte\n                              title: hashes of block data\n                            data_hash:\n                              type: string\n                              format: byte\n                            validators_hash:\n                              type: string\n                              format: byte\n                              title: hashes from the app output from the prev block\n                            next_validators_hash:\n                              type: string\n                              format: byte\n                            consensus_hash:\n                              type: string\n                              format: byte\n                            app_hash:\n                              type: string\n                              format: byte\n                            last_results_hash:\n                              type: string\n                              format: byte\n                            evidence_hash:\n                              type: string\n                              format: byte\n                              title: consensus info\n                            proposer_address:\n                              type: string\n                              format: byte\n                          description: Header defines the structure of a block header.\n                        commit:\n                          type: object\n                          properties:\n                            height:\n                              type: string\n                              format: int64\n                            round:\n                              type: integer\n                              format: int32\n                            block_id:\n                              type: object\n                              properties:\n                                hash:\n                                  type: string\n                                  format: byte\n                                part_set_header:\n                                  type: object\n                                  properties:\n                                    total:\n                                      type: integer\n                                      format: int64\n                                    hash:\n                                      type: string\n                                      format: byte\n                                  title: PartsetHeader\n                              title: BlockID\n                            signatures:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  block_id_flag:\n                                    type: string\n                                    enum:\n                                      - BLOCK_ID_FLAG_UNKNOWN\n                                      - BLOCK_ID_FLAG_ABSENT\n                                      - BLOCK_ID_FLAG_COMMIT\n                                      - BLOCK_ID_FLAG_NIL\n                                    default: BLOCK_ID_FLAG_UNKNOWN\n                                    title: >-\n                                      BlockIdFlag indicates which BlcokID the\n                                      signature is for\n                                  validator_address:\n                                    type: string\n                                    format: byte\n                                  timestamp:\n                                    type: string\n                                    format: date-time\n                                  signature:\n                                    type: string\n                                    format: byte\n                                description: >-\n                                  CommitSig is a part of the Vote included in a\n                                  Commit.\n                          description: >-\n                            Commit contains the evidence that a block was\n                            committed by a set of validators.\n                    validator_set:\n                      type: object\n                      properties:\n                        validators:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              address:\n                                type: string\n                                format: byte\n                              pub_key:\n                                type: object\n                                properties:\n                                  ed25519:\n                                    type: string\n                                    format: byte\n                                  secp256k1:\n                                    type: string\n                                    format: byte\n                                title: >-\n                                  PublicKey defines the keys available for use\n                                  with Validators\n                              voting_power:\n                                type: string\n                                format: int64\n                              proposer_priority:\n                                type: string\n                                format: int64\n                        proposer:\n                          type: object\n                          properties:\n                            address:\n                              type: string\n                              format: byte\n                            pub_key:\n                              type: object\n                              properties:\n                                ed25519:\n                                  type: string\n                                  format: byte\n                                secp256k1:\n                                  type: string\n                                  format: byte\n                              title: >-\n                                PublicKey defines the keys available for use\n                                with Validators\n                            voting_power:\n                              type: string\n                              format: int64\n                            proposer_priority:\n                              type: string\n                              format: int64\n                        total_voting_power:\n                          type: string\n                          format: int64\n                common_height:\n                  type: string\n                  format: int64\n                byzantine_validators:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      address:\n                        type: string\n                        format: byte\n                      pub_key:\n                        type: object\n                        properties:\n                          ed25519:\n                            type: string\n                            format: byte\n                          secp256k1:\n                            type: string\n                            format: byte\n                        title: >-\n                          PublicKey defines the keys available for use with\n                          Validators\n                      voting_power:\n                        type: string\n                        format: int64\n                      proposer_priority:\n                        type: string\n                        format: int64\n                total_voting_power:\n                  type: string\n                  format: int64\n                timestamp:\n                  type: string\n                  format: date-time\n              description: >-\n                LightClientAttackEvidence contains evidence of a set of\n                validators attempting to mislead a light client.\n  tendermint.types.LightBlock:\n    type: object\n    properties:\n      signed_header:\n        type: object\n        properties:\n          header:\n            type: object\n            properties:\n              version:\n                title: basic block info\n                type: object\n                properties:\n                  block:\n                    type: string\n                    format: uint64\n                  app:\n                    type: string\n                    format: uint64\n                description: >-\n                  Consensus captures the consensus rules for processing a block\n                  in the blockchain,\n\n                  including all blockchain data structures and the rules of the\n                  application's\n\n                  state transition machine.\n              chain_id:\n                type: string\n              height:\n                type: string\n                format: int64\n              time:\n                type: string\n                format: date-time\n              last_block_id:\n                title: prev block info\n                type: object\n                properties:\n                  hash:\n                    type: string\n                    format: byte\n                  part_set_header:\n                    type: object\n                    properties:\n                      total:\n                        type: integer\n                        format: int64\n                      hash:\n                        type: string\n                        format: byte\n                    title: PartsetHeader\n              last_commit_hash:\n                type: string\n                format: byte\n                title: hashes of block data\n              data_hash:\n                type: string\n                format: byte\n              validators_hash:\n                type: string\n                format: byte\n                title: hashes from the app output from the prev block\n              next_validators_hash:\n                type: string\n                format: byte\n              consensus_hash:\n                type: string\n                format: byte\n              app_hash:\n                type: string\n                format: byte\n              last_results_hash:\n                type: string\n                format: byte\n              evidence_hash:\n                type: string\n                format: byte\n                title: consensus info\n              proposer_address:\n                type: string\n                format: byte\n            description: Header defines the structure of a block header.\n          commit:\n            type: object\n            properties:\n              height:\n                type: string\n                format: int64\n              round:\n                type: integer\n                format: int32\n              block_id:\n                type: object\n                properties:\n                  hash:\n                    type: string\n                    format: byte\n                  part_set_header:\n                    type: object\n                    properties:\n                      total:\n                        type: integer\n                        format: int64\n                      hash:\n                        type: string\n                        format: byte\n                    title: PartsetHeader\n                title: BlockID\n              signatures:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    block_id_flag:\n                      type: string\n                      enum:\n                        - BLOCK_ID_FLAG_UNKNOWN\n                        - BLOCK_ID_FLAG_ABSENT\n                        - BLOCK_ID_FLAG_COMMIT\n                        - BLOCK_ID_FLAG_NIL\n                      default: BLOCK_ID_FLAG_UNKNOWN\n                      title: BlockIdFlag indicates which BlcokID the signature is for\n                    validator_address:\n                      type: string\n                      format: byte\n                    timestamp:\n                      type: string\n                      format: date-time\n                    signature:\n                      type: string\n                      format: byte\n                  description: CommitSig is a part of the Vote included in a Commit.\n            description: >-\n              Commit contains the evidence that a block was committed by a set\n              of validators.\n      validator_set:\n        type: object\n        properties:\n          validators:\n            type: array\n            items:\n              type: object\n              properties:\n                address:\n                  type: string\n                  format: byte\n                pub_key:\n                  type: object\n                  properties:\n                    ed25519:\n                      type: string\n                      format: byte\n                    secp256k1:\n                      type: string\n                      format: byte\n                  title: PublicKey defines the keys available for use with Validators\n                voting_power:\n                  type: string\n                  format: int64\n                proposer_priority:\n                  type: string\n                  format: int64\n          proposer:\n            type: object\n            properties:\n              address:\n                type: string\n                format: byte\n              pub_key:\n                type: object\n                properties:\n                  ed25519:\n                    type: string\n                    format: byte\n                  secp256k1:\n                    type: string\n                    format: byte\n                title: PublicKey defines the keys available for use with Validators\n              voting_power:\n                type: string\n                format: int64\n              proposer_priority:\n                type: string\n                format: int64\n          total_voting_power:\n            type: string\n            format: int64\n  tendermint.types.LightClientAttackEvidence:\n    type: object\n    properties:\n      conflicting_block:\n        type: object\n        properties:\n          signed_header:\n            type: object\n            properties:\n              header:\n                type: object\n                properties:\n                  version:\n                    title: basic block info\n                    type: object\n                    properties:\n                      block:\n                        type: string\n                        format: uint64\n                      app:\n                        type: string\n                        format: uint64\n                    description: >-\n                      Consensus captures the consensus rules for processing a\n                      block in the blockchain,\n\n                      including all blockchain data structures and the rules of\n                      the application's\n\n                      state transition machine.\n                  chain_id:\n                    type: string\n                  height:\n                    type: string\n                    format: int64\n                  time:\n                    type: string\n                    format: date-time\n                  last_block_id:\n                    title: prev block info\n                    type: object\n                    properties:\n                      hash:\n                        type: string\n                        format: byte\n                      part_set_header:\n                        type: object\n                        properties:\n                          total:\n                            type: integer\n                            format: int64\n                          hash:\n                            type: string\n                            format: byte\n                        title: PartsetHeader\n                  last_commit_hash:\n                    type: string\n                    format: byte\n                    title: hashes of block data\n                  data_hash:\n                    type: string\n                    format: byte\n                  validators_hash:\n                    type: string\n                    format: byte\n                    title: hashes from the app output from the prev block\n                  next_validators_hash:\n                    type: string\n                    format: byte\n                  consensus_hash:\n                    type: string\n                    format: byte\n                  app_hash:\n                    type: string\n                    format: byte\n                  last_results_hash:\n                    type: string\n                    format: byte\n                  evidence_hash:\n                    type: string\n                    format: byte\n                    title: consensus info\n                  proposer_address:\n                    type: string\n                    format: byte\n                description: Header defines the structure of a block header.\n              commit:\n                type: object\n                properties:\n                  height:\n                    type: string\n                    format: int64\n                  round:\n                    type: integer\n                    format: int32\n                  block_id:\n                    type: object\n                    properties:\n                      hash:\n                        type: string\n                        format: byte\n                      part_set_header:\n                        type: object\n                        properties:\n                          total:\n                            type: integer\n                            format: int64\n                          hash:\n                            type: string\n                            format: byte\n                        title: PartsetHeader\n                    title: BlockID\n                  signatures:\n                    type: array\n                    items:\n                      type: object\n                      properties:\n                        block_id_flag:\n                          type: string\n                          enum:\n                            - BLOCK_ID_FLAG_UNKNOWN\n                            - BLOCK_ID_FLAG_ABSENT\n                            - BLOCK_ID_FLAG_COMMIT\n                            - BLOCK_ID_FLAG_NIL\n                          default: BLOCK_ID_FLAG_UNKNOWN\n                          title: >-\n                            BlockIdFlag indicates which BlcokID the signature is\n                            for\n                        validator_address:\n                          type: string\n                          format: byte\n                        timestamp:\n                          type: string\n                          format: date-time\n                        signature:\n                          type: string\n                          format: byte\n                      description: CommitSig is a part of the Vote included in a Commit.\n                description: >-\n                  Commit contains the evidence that a block was committed by a\n                  set of validators.\n          validator_set:\n            type: object\n            properties:\n              validators:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    address:\n                      type: string\n                      format: byte\n                    pub_key:\n                      type: object\n                      properties:\n                        ed25519:\n                          type: string\n                          format: byte\n                        secp256k1:\n                          type: string\n                          format: byte\n                      title: >-\n                        PublicKey defines the keys available for use with\n                        Validators\n                    voting_power:\n                      type: string\n                      format: int64\n                    proposer_priority:\n                      type: string\n                      format: int64\n              proposer:\n                type: object\n                properties:\n                  address:\n                    type: string\n                    format: byte\n                  pub_key:\n                    type: object\n                    properties:\n                      ed25519:\n                        type: string\n                        format: byte\n                      secp256k1:\n                        type: string\n                        format: byte\n                    title: >-\n                      PublicKey defines the keys available for use with\n                      Validators\n                  voting_power:\n                    type: string\n                    format: int64\n                  proposer_priority:\n                    type: string\n                    format: int64\n              total_voting_power:\n                type: string\n                format: int64\n      common_height:\n        type: string\n        format: int64\n      byzantine_validators:\n        type: array\n        items:\n          type: object\n          properties:\n            address:\n              type: string\n              format: byte\n            pub_key:\n              type: object\n              properties:\n                ed25519:\n                  type: string\n                  format: byte\n                secp256k1:\n                  type: string\n                  format: byte\n              title: PublicKey defines the keys available for use with Validators\n            voting_power:\n              type: string\n              format: int64\n            proposer_priority:\n              type: string\n              format: int64\n      total_voting_power:\n        type: string\n        format: int64\n      timestamp:\n        type: string\n        format: date-time\n    description: >-\n      LightClientAttackEvidence contains evidence of a set of validators\n      attempting to mislead a light client.\n  tendermint.types.SignedHeader:\n    type: object\n    properties:\n      header:\n        type: object\n        properties:\n          version:\n            title: basic block info\n            type: object\n            properties:\n              block:\n                type: string\n                format: uint64\n              app:\n                type: string\n                format: uint64\n            description: >-\n              Consensus captures the consensus rules for processing a block in\n              the blockchain,\n\n              including all blockchain data structures and the rules of the\n              application's\n\n              state transition machine.\n          chain_id:\n            type: string\n          height:\n            type: string\n            format: int64\n          time:\n            type: string\n            format: date-time\n          last_block_id:\n            title: prev block info\n            type: object\n            properties:\n              hash:\n                type: string\n                format: byte\n              part_set_header:\n                type: object\n                properties:\n                  total:\n                    type: integer\n                    format: int64\n                  hash:\n                    type: string\n                    format: byte\n                title: PartsetHeader\n          last_commit_hash:\n            type: string\n            format: byte\n            title: hashes of block data\n          data_hash:\n            type: string\n            format: byte\n          validators_hash:\n            type: string\n            format: byte\n            title: hashes from the app output from the prev block\n          next_validators_hash:\n            type: string\n            format: byte\n          consensus_hash:\n            type: string\n            format: byte\n          app_hash:\n            type: string\n            format: byte\n          last_results_hash:\n            type: string\n            format: byte\n          evidence_hash:\n            type: string\n            format: byte\n            title: consensus info\n          proposer_address:\n            type: string\n            format: byte\n        description: Header defines the structure of a block header.\n      commit:\n        type: object\n        properties:\n          height:\n            type: string\n            format: int64\n          round:\n            type: integer\n            format: int32\n          block_id:\n            type: object\n            properties:\n              hash:\n                type: string\n                format: byte\n              part_set_header:\n                type: object\n                properties:\n                  total:\n                    type: integer\n                    format: int64\n                  hash:\n                    type: string\n                    format: byte\n                title: PartsetHeader\n            title: BlockID\n          signatures:\n            type: array\n            items:\n              type: object\n              properties:\n                block_id_flag:\n                  type: string\n                  enum:\n                    - BLOCK_ID_FLAG_UNKNOWN\n                    - BLOCK_ID_FLAG_ABSENT\n                    - BLOCK_ID_FLAG_COMMIT\n                    - BLOCK_ID_FLAG_NIL\n                  default: BLOCK_ID_FLAG_UNKNOWN\n                  title: BlockIdFlag indicates which BlcokID the signature is for\n                validator_address:\n                  type: string\n                  format: byte\n                timestamp:\n                  type: string\n                  format: date-time\n                signature:\n                  type: string\n                  format: byte\n              description: CommitSig is a part of the Vote included in a Commit.\n        description: >-\n          Commit contains the evidence that a block was committed by a set of\n          validators.\n  tendermint.types.SignedMsgType:\n    type: string\n    enum:\n      - SIGNED_MSG_TYPE_UNKNOWN\n      - SIGNED_MSG_TYPE_PREVOTE\n      - SIGNED_MSG_TYPE_PRECOMMIT\n      - SIGNED_MSG_TYPE_PROPOSAL\n    default: SIGNED_MSG_TYPE_UNKNOWN\n    description: |-\n      SignedMsgType is a type of signed message in the consensus.\n\n       - SIGNED_MSG_TYPE_PREVOTE: Votes\n       - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n  tendermint.types.Validator:\n    type: object\n    properties:\n      address:\n        type: string\n        format: byte\n      pub_key:\n        type: object\n        properties:\n          ed25519:\n            type: string\n            format: byte\n          secp256k1:\n            type: string\n            format: byte\n        title: PublicKey defines the keys available for use with Validators\n      voting_power:\n        type: string\n        format: int64\n      proposer_priority:\n        type: string\n        format: int64\n  tendermint.types.ValidatorSet:\n    type: object\n    properties:\n      validators:\n        type: array\n        items:\n          type: object\n          properties:\n            address:\n              type: string\n              format: byte\n            pub_key:\n              type: object\n              properties:\n                ed25519:\n                  type: string\n                  format: byte\n                secp256k1:\n                  type: string\n                  format: byte\n              title: PublicKey defines the keys available for use with Validators\n            voting_power:\n              type: string\n              format: int64\n            proposer_priority:\n              type: string\n              format: int64\n      proposer:\n        type: object\n        properties:\n          address:\n            type: string\n            format: byte\n          pub_key:\n            type: object\n            properties:\n              ed25519:\n                type: string\n                format: byte\n              secp256k1:\n                type: string\n                format: byte\n            title: PublicKey defines the keys available for use with Validators\n          voting_power:\n            type: string\n            format: int64\n          proposer_priority:\n            type: string\n            format: int64\n      total_voting_power:\n        type: string\n        format: int64\n  tendermint.types.Vote:\n    type: object\n    properties:\n      type:\n        type: string\n        enum:\n          - SIGNED_MSG_TYPE_UNKNOWN\n          - SIGNED_MSG_TYPE_PREVOTE\n          - SIGNED_MSG_TYPE_PRECOMMIT\n          - SIGNED_MSG_TYPE_PROPOSAL\n        default: SIGNED_MSG_TYPE_UNKNOWN\n        description: |-\n          SignedMsgType is a type of signed message in the consensus.\n\n           - SIGNED_MSG_TYPE_PREVOTE: Votes\n           - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n      height:\n        type: string\n        format: int64\n      round:\n        type: integer\n        format: int32\n      block_id:\n        type: object\n        properties:\n          hash:\n            type: string\n            format: byte\n          part_set_header:\n            type: object\n            properties:\n              total:\n                type: integer\n                format: int64\n              hash:\n                type: string\n                format: byte\n            title: PartsetHeader\n        title: BlockID\n      timestamp:\n        type: string\n        format: date-time\n      validator_address:\n        type: string\n        format: byte\n      validator_index:\n        type: integer\n        format: int32\n      signature:\n        type: string\n        format: byte\n    description: |-\n      Vote represents a prevote, precommit, or commit vote from validators for\n      consensus.\n  cyber.clock.v1.ClockContract:\n    type: object\n    properties:\n      contract_address:\n        type: string\n        description: The address of the contract.\n      is_jailed:\n        type: boolean\n        description: The jail status of the contract.\n    description: |-\n      This object is used to store the contract address and the\n      jail status of the contract.\n  cyber.clock.v1.Params:\n    type: object\n    properties:\n      contract_gas_limit:\n        type: string\n        format: uint64\n        description: >-\n          contract_gas_limit defines the maximum amount of gas that can be used\n          by a\n\n          contract.\n    description: Params defines the set of module parameters.\n  cyber.clock.v1.QueryClockContractResponse:\n    type: object\n    properties:\n      clock_contract:\n        type: object\n        properties:\n          contract_address:\n            type: string\n            description: The address of the contract.\n          is_jailed:\n            type: boolean\n            description: The jail status of the contract.\n        description: |-\n          This object is used to store the contract address and the\n          jail status of the contract.\n    description: >-\n      QueryClockContractResponse is the response type for the\n      Query/ClockContract\n\n      RPC method.\n  cyber.clock.v1.QueryClockContractsResponse:\n    type: object\n    properties:\n      clock_contracts:\n        type: array\n        items:\n          type: object\n          properties:\n            contract_address:\n              type: string\n              description: The address of the contract.\n            is_jailed:\n              type: boolean\n              description: The jail status of the contract.\n          description: |-\n            This object is used to store the contract address and the\n            jail status of the contract.\n        description: clock_contracts are the clock contracts.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: >-\n      QueryClockContractsResponse is the response type for the\n      Query/ClockContracts\n\n      RPC method.\n  cyber.clock.v1.QueryParamsResponse:\n    type: object\n    properties:\n      params:\n        type: object\n        properties:\n          contract_gas_limit:\n            type: string\n            format: uint64\n            description: >-\n              contract_gas_limit defines the maximum amount of gas that can be\n              used by a\n\n              contract.\n        description: Params defines the set of module parameters.\n    description: >-\n      QueryClockContractsResponse is the response type for the\n      Query/ClockContracts\n\n      RPC method.\n  ibc.core.channel.v1.Channel:\n    type: object\n    properties:\n      state:\n        title: current state of the channel end\n        type: string\n        enum:\n          - STATE_UNINITIALIZED_UNSPECIFIED\n          - STATE_INIT\n          - STATE_TRYOPEN\n          - STATE_OPEN\n          - STATE_CLOSED\n        default: STATE_UNINITIALIZED_UNSPECIFIED\n        description: |-\n          State defines if a channel is in one of the following states:\n          CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n           - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n           - STATE_INIT: A channel has just started the opening handshake.\n           - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n           - STATE_OPEN: A channel has completed the handshake. Open channels are\n          ready to send and receive packets.\n           - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\n          packets.\n      ordering:\n        title: whether the channel is ordered or unordered\n        type: string\n        enum:\n          - ORDER_NONE_UNSPECIFIED\n          - ORDER_UNORDERED\n          - ORDER_ORDERED\n        default: ORDER_NONE_UNSPECIFIED\n        description: |-\n          - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering\n           - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\n          which they were sent.\n           - ORDER_ORDERED: packets are delivered exactly in the order which they were sent\n      counterparty:\n        title: counterparty channel end\n        type: object\n        properties:\n          port_id:\n            type: string\n            description: >-\n              port on the counterparty chain which owns the other end of the\n              channel.\n          channel_id:\n            type: string\n            title: channel end on the counterparty chain\n      connection_hops:\n        type: array\n        items:\n          type: string\n        title: |-\n          list of connection identifiers, in order, along which packets sent on\n          this channel will travel\n      version:\n        type: string\n        title: opaque channel version, which is agreed upon during the handshake\n    description: |-\n      Channel defines pipeline for exactly-once packet delivery between specific\n      modules on separate blockchains, which has at least one end capable of\n      sending packets and one end capable of receiving packets.\n  ibc.core.channel.v1.Counterparty:\n    type: object\n    properties:\n      port_id:\n        type: string\n        description: >-\n          port on the counterparty chain which owns the other end of the\n          channel.\n      channel_id:\n        type: string\n        title: channel end on the counterparty chain\n    title: Counterparty defines a channel end counterparty\n  ibc.core.channel.v1.IdentifiedChannel:\n    type: object\n    properties:\n      state:\n        title: current state of the channel end\n        type: string\n        enum:\n          - STATE_UNINITIALIZED_UNSPECIFIED\n          - STATE_INIT\n          - STATE_TRYOPEN\n          - STATE_OPEN\n          - STATE_CLOSED\n        default: STATE_UNINITIALIZED_UNSPECIFIED\n        description: |-\n          State defines if a channel is in one of the following states:\n          CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n           - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n           - STATE_INIT: A channel has just started the opening handshake.\n           - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n           - STATE_OPEN: A channel has completed the handshake. Open channels are\n          ready to send and receive packets.\n           - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\n          packets.\n      ordering:\n        title: whether the channel is ordered or unordered\n        type: string\n        enum:\n          - ORDER_NONE_UNSPECIFIED\n          - ORDER_UNORDERED\n          - ORDER_ORDERED\n        default: ORDER_NONE_UNSPECIFIED\n        description: |-\n          - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering\n           - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\n          which they were sent.\n           - ORDER_ORDERED: packets are delivered exactly in the order which they were sent\n      counterparty:\n        title: counterparty channel end\n        type: object\n        properties:\n          port_id:\n            type: string\n            description: >-\n              port on the counterparty chain which owns the other end of the\n              channel.\n          channel_id:\n            type: string\n            title: channel end on the counterparty chain\n      connection_hops:\n        type: array\n        items:\n          type: string\n        title: |-\n          list of connection identifiers, in order, along which packets sent on\n          this channel will travel\n      version:\n        type: string\n        title: opaque channel version, which is agreed upon during the handshake\n      port_id:\n        type: string\n        title: port identifier\n      channel_id:\n        type: string\n        title: channel identifier\n    description: |-\n      IdentifiedChannel defines a channel with additional port and channel\n      identifier fields.\n  ibc.core.channel.v1.Order:\n    type: string\n    enum:\n      - ORDER_NONE_UNSPECIFIED\n      - ORDER_UNORDERED\n      - ORDER_ORDERED\n    default: ORDER_NONE_UNSPECIFIED\n    description: |-\n      - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering\n       - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\n      which they were sent.\n       - ORDER_ORDERED: packets are delivered exactly in the order which they were sent\n    title: Order defines if a channel is ORDERED or UNORDERED\n  ibc.core.channel.v1.PacketState:\n    type: object\n    properties:\n      port_id:\n        type: string\n        description: channel port identifier.\n      channel_id:\n        type: string\n        description: channel unique identifier.\n      sequence:\n        type: string\n        format: uint64\n        description: packet sequence.\n      data:\n        type: string\n        format: byte\n        description: embedded data that represents packet state.\n    description: |-\n      PacketState defines the generic type necessary to retrieve and store\n      packet commitments, acknowledgements, and receipts.\n      Caller is responsible for knowing the context necessary to interpret this\n      state as a commitment, acknowledgement, or a receipt.\n  ibc.core.channel.v1.QueryChannelClientStateResponse:\n    type: object\n    properties:\n      identified_client_state:\n        title: client state associated with the channel\n        type: object\n        properties:\n          client_id:\n            type: string\n            title: client identifier\n          client_state:\n            type: object\n            properties:\n              type_url:\n                type: string\n              value:\n                type: string\n                format: byte\n            title: client state\n        description: |-\n          IdentifiedClientState defines a client state with an additional client\n          identifier field.\n      proof:\n        type: string\n        format: byte\n        title: merkle proof of existence\n      proof_height:\n        title: height at which the proof was retrieved\n        type: object\n        properties:\n          revision_number:\n            type: string\n            format: uint64\n            title: the revision that the client is currently on\n          revision_height:\n            type: string\n            format: uint64\n            title: the height within the given revision\n        description: >-\n          Normally the RevisionHeight is incremented at each height while\n          keeping\n\n          RevisionNumber the same. However some consensus algorithms may choose\n          to\n\n          reset the height in certain conditions e.g. hard forks, state-machine\n\n          breaking changes In these cases, the RevisionNumber is incremented so\n          that\n\n          height continues to be monitonically increasing even as the\n          RevisionHeight\n\n          gets reset\n    title: |-\n      QueryChannelClientStateResponse is the Response type for the\n      Query/QueryChannelClientState RPC method\n  ibc.core.channel.v1.QueryChannelConsensusStateResponse:\n    type: object\n    properties:\n      consensus_state:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n        title: consensus state associated with the channel\n      client_id:\n        type: string\n        title: client ID associated with the consensus state\n      proof:\n        type: string\n        format: byte\n        title: merkle proof of existence\n      proof_height:\n        title: height at which the proof was retrieved\n        type: object\n        properties:\n          revision_number:\n            type: string\n            format: uint64\n            title: the revision that the client is currently on\n          revision_height:\n            type: string\n            format: uint64\n            title: the height within the given revision\n        description: >-\n          Normally the RevisionHeight is incremented at each height while\n          keeping\n\n          RevisionNumber the same. However some consensus algorithms may choose\n          to\n\n          reset the height in certain conditions e.g. hard forks, state-machine\n\n          breaking changes In these cases, the RevisionNumber is incremented so\n          that\n\n          height continues to be monitonically increasing even as the\n          RevisionHeight\n\n          gets reset\n    title: |-\n      QueryChannelClientStateResponse is the Response type for the\n      Query/QueryChannelClientState RPC method\n  ibc.core.channel.v1.QueryChannelResponse:\n    type: object\n    properties:\n      channel:\n        title: channel associated with the request identifiers\n        type: object\n        properties:\n          state:\n            title: current state of the channel end\n            type: string\n            enum:\n              - STATE_UNINITIALIZED_UNSPECIFIED\n              - STATE_INIT\n              - STATE_TRYOPEN\n              - STATE_OPEN\n              - STATE_CLOSED\n            default: STATE_UNINITIALIZED_UNSPECIFIED\n            description: |-\n              State defines if a channel is in one of the following states:\n              CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n               - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n               - STATE_INIT: A channel has just started the opening handshake.\n               - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n               - STATE_OPEN: A channel has completed the handshake. Open channels are\n              ready to send and receive packets.\n               - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\n              packets.\n          ordering:\n            title: whether the channel is ordered or unordered\n            type: string\n            enum:\n              - ORDER_NONE_UNSPECIFIED\n              - ORDER_UNORDERED\n              - ORDER_ORDERED\n            default: ORDER_NONE_UNSPECIFIED\n            description: |-\n              - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering\n               - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\n              which they were sent.\n               - ORDER_ORDERED: packets are delivered exactly in the order which they were sent\n          counterparty:\n            title: counterparty channel end\n            type: object\n            properties:\n              port_id:\n                type: string\n                description: >-\n                  port on the counterparty chain which owns the other end of the\n                  channel.\n              channel_id:\n                type: string\n                title: channel end on the counterparty chain\n          connection_hops:\n            type: array\n            items:\n              type: string\n            title: >-\n              list of connection identifiers, in order, along which packets sent\n              on\n\n              this channel will travel\n          version:\n            type: string\n            title: opaque channel version, which is agreed upon during the handshake\n        description: >-\n          Channel defines pipeline for exactly-once packet delivery between\n          specific\n\n          modules on separate blockchains, which has at least one end capable of\n\n          sending packets and one end capable of receiving packets.\n      proof:\n        type: string\n        format: byte\n        title: merkle proof of existence\n      proof_height:\n        title: height at which the proof was retrieved\n        type: object\n        properties:\n          revision_number:\n            type: string\n            format: uint64\n            title: the revision that the client is currently on\n          revision_height:\n            type: string\n            format: uint64\n            title: the height within the given revision\n        description: >-\n          Normally the RevisionHeight is incremented at each height while\n          keeping\n\n          RevisionNumber the same. However some consensus algorithms may choose\n          to\n\n          reset the height in certain conditions e.g. hard forks, state-machine\n\n          breaking changes In these cases, the RevisionNumber is incremented so\n          that\n\n          height continues to be monitonically increasing even as the\n          RevisionHeight\n\n          gets reset\n    description: >-\n      QueryChannelResponse is the response type for the Query/Channel RPC\n      method.\n\n      Besides the Channel end, it includes a proof and the height from which the\n\n      proof was retrieved.\n  ibc.core.channel.v1.QueryChannelsResponse:\n    type: object\n    properties:\n      channels:\n        type: array\n        items:\n          type: object\n          properties:\n            state:\n              title: current state of the channel end\n              type: string\n              enum:\n                - STATE_UNINITIALIZED_UNSPECIFIED\n                - STATE_INIT\n                - STATE_TRYOPEN\n                - STATE_OPEN\n                - STATE_CLOSED\n              default: STATE_UNINITIALIZED_UNSPECIFIED\n              description: |-\n                State defines if a channel is in one of the following states:\n                CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n                 - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n                 - STATE_INIT: A channel has just started the opening handshake.\n                 - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n                 - STATE_OPEN: A channel has completed the handshake. Open channels are\n                ready to send and receive packets.\n                 - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\n                packets.\n            ordering:\n              title: whether the channel is ordered or unordered\n              type: string\n              enum:\n                - ORDER_NONE_UNSPECIFIED\n                - ORDER_UNORDERED\n                - ORDER_ORDERED\n              default: ORDER_NONE_UNSPECIFIED\n              description: |-\n                - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering\n                 - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\n                which they were sent.\n                 - ORDER_ORDERED: packets are delivered exactly in the order which they were sent\n            counterparty:\n              title: counterparty channel end\n              type: object\n              properties:\n                port_id:\n                  type: string\n                  description: >-\n                    port on the counterparty chain which owns the other end of\n                    the channel.\n                channel_id:\n                  type: string\n                  title: channel end on the counterparty chain\n            connection_hops:\n              type: array\n              items:\n                type: string\n              title: >-\n                list of connection identifiers, in order, along which packets\n                sent on\n\n                this channel will travel\n            version:\n              type: string\n              title: >-\n                opaque channel version, which is agreed upon during the\n                handshake\n            port_id:\n              type: string\n              title: port identifier\n            channel_id:\n              type: string\n              title: channel identifier\n          description: |-\n            IdentifiedChannel defines a channel with additional port and channel\n            identifier fields.\n        description: list of stored channels of the chain.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n        title: pagination response\n      height:\n        title: query block height\n        type: object\n        properties:\n          revision_number:\n            type: string\n            format: uint64\n            title: the revision that the client is currently on\n          revision_height:\n            type: string\n            format: uint64\n            title: the height within the given revision\n        description: >-\n          Normally the RevisionHeight is incremented at each height while\n          keeping\n\n          RevisionNumber the same. However some consensus algorithms may choose\n          to\n\n          reset the height in certain conditions e.g. hard forks, state-machine\n\n          breaking changes In these cases, the RevisionNumber is incremented so\n          that\n\n          height continues to be monitonically increasing even as the\n          RevisionHeight\n\n          gets reset\n    description: >-\n      QueryChannelsResponse is the response type for the Query/Channels RPC\n      method.\n  ibc.core.channel.v1.QueryConnectionChannelsResponse:\n    type: object\n    properties:\n      channels:\n        type: array\n        items:\n          type: object\n          properties:\n            state:\n              title: current state of the channel end\n              type: string\n              enum:\n                - STATE_UNINITIALIZED_UNSPECIFIED\n                - STATE_INIT\n                - STATE_TRYOPEN\n                - STATE_OPEN\n                - STATE_CLOSED\n              default: STATE_UNINITIALIZED_UNSPECIFIED\n              description: |-\n                State defines if a channel is in one of the following states:\n                CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n                 - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n                 - STATE_INIT: A channel has just started the opening handshake.\n                 - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n                 - STATE_OPEN: A channel has completed the handshake. Open channels are\n                ready to send and receive packets.\n                 - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\n                packets.\n            ordering:\n              title: whether the channel is ordered or unordered\n              type: string\n              enum:\n                - ORDER_NONE_UNSPECIFIED\n                - ORDER_UNORDERED\n                - ORDER_ORDERED\n              default: ORDER_NONE_UNSPECIFIED\n              description: |-\n                - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering\n                 - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\n                which they were sent.\n                 - ORDER_ORDERED: packets are delivered exactly in the order which they were sent\n            counterparty:\n              title: counterparty channel end\n              type: object\n              properties:\n                port_id:\n                  type: string\n                  description: >-\n                    port on the counterparty chain which owns the other end of\n                    the channel.\n                channel_id:\n                  type: string\n                  title: channel end on the counterparty chain\n            connection_hops:\n              type: array\n              items:\n                type: string\n              title: >-\n                list of connection identifiers, in order, along which packets\n                sent on\n\n                this channel will travel\n            version:\n              type: string\n              title: >-\n                opaque channel version, which is agreed upon during the\n                handshake\n            port_id:\n              type: string\n              title: port identifier\n            channel_id:\n              type: string\n              title: channel identifier\n          description: |-\n            IdentifiedChannel defines a channel with additional port and channel\n            identifier fields.\n        description: list of channels associated with a connection.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n        title: pagination response\n      height:\n        title: query block height\n        type: object\n        properties:\n          revision_number:\n            type: string\n            format: uint64\n            title: the revision that the client is currently on\n          revision_height:\n            type: string\n            format: uint64\n            title: the height within the given revision\n        description: >-\n          Normally the RevisionHeight is incremented at each height while\n          keeping\n\n          RevisionNumber the same. However some consensus algorithms may choose\n          to\n\n          reset the height in certain conditions e.g. hard forks, state-machine\n\n          breaking changes In these cases, the RevisionNumber is incremented so\n          that\n\n          height continues to be monitonically increasing even as the\n          RevisionHeight\n\n          gets reset\n    title: |-\n      QueryConnectionChannelsResponse is the Response type for the\n      Query/QueryConnectionChannels RPC method\n  ibc.core.channel.v1.QueryNextSequenceReceiveResponse:\n    type: object\n    properties:\n      next_sequence_receive:\n        type: string\n        format: uint64\n        title: next sequence receive number\n      proof:\n        type: string\n        format: byte\n        title: merkle proof of existence\n      proof_height:\n        title: height at which the proof was retrieved\n        type: object\n        properties:\n          revision_number:\n            type: string\n            format: uint64\n            title: the revision that the client is currently on\n          revision_height:\n            type: string\n            format: uint64\n            title: the height within the given revision\n        description: >-\n          Normally the RevisionHeight is incremented at each height while\n          keeping\n\n          RevisionNumber the same. However some consensus algorithms may choose\n          to\n\n          reset the height in certain conditions e.g. hard forks, state-machine\n\n          breaking changes In these cases, the RevisionNumber is incremented so\n          that\n\n          height continues to be monitonically increasing even as the\n          RevisionHeight\n\n          gets reset\n    title: |-\n      QuerySequenceResponse is the request type for the\n      Query/QueryNextSequenceReceiveResponse RPC method\n  ibc.core.channel.v1.QueryPacketAcknowledgementResponse:\n    type: object\n    properties:\n      acknowledgement:\n        type: string\n        format: byte\n        title: packet associated with the request fields\n      proof:\n        type: string\n        format: byte\n        title: merkle proof of existence\n      proof_height:\n        title: height at which the proof was retrieved\n        type: object\n        properties:\n          revision_number:\n            type: string\n            format: uint64\n            title: the revision that the client is currently on\n          revision_height:\n            type: string\n            format: uint64\n            title: the height within the given revision\n        description: >-\n          Normally the RevisionHeight is incremented at each height while\n          keeping\n\n          RevisionNumber the same. However some consensus algorithms may choose\n          to\n\n          reset the height in certain conditions e.g. hard forks, state-machine\n\n          breaking changes In these cases, the RevisionNumber is incremented so\n          that\n\n          height continues to be monitonically increasing even as the\n          RevisionHeight\n\n          gets reset\n    title: |-\n      QueryPacketAcknowledgementResponse defines the client query response for a\n      packet which also includes a proof and the height from which the\n      proof was retrieved\n  ibc.core.channel.v1.QueryPacketAcknowledgementsResponse:\n    type: object\n    properties:\n      acknowledgements:\n        type: array\n        items:\n          type: object\n          properties:\n            port_id:\n              type: string\n              description: channel port identifier.\n            channel_id:\n              type: string\n              description: channel unique identifier.\n            sequence:\n              type: string\n              format: uint64\n              description: packet sequence.\n            data:\n              type: string\n              format: byte\n              description: embedded data that represents packet state.\n          description: >-\n            PacketState defines the generic type necessary to retrieve and store\n\n            packet commitments, acknowledgements, and receipts.\n\n            Caller is responsible for knowing the context necessary to interpret\n            this\n\n            state as a commitment, acknowledgement, or a receipt.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n        title: pagination response\n      height:\n        title: query block height\n        type: object\n        properties:\n          revision_number:\n            type: string\n            format: uint64\n            title: the revision that the client is currently on\n          revision_height:\n            type: string\n            format: uint64\n            title: the height within the given revision\n        description: >-\n          Normally the RevisionHeight is incremented at each height while\n          keeping\n\n          RevisionNumber the same. However some consensus algorithms may choose\n          to\n\n          reset the height in certain conditions e.g. hard forks, state-machine\n\n          breaking changes In these cases, the RevisionNumber is incremented so\n          that\n\n          height continues to be monitonically increasing even as the\n          RevisionHeight\n\n          gets reset\n    title: |-\n      QueryPacketAcknowledgemetsResponse is the request type for the\n      Query/QueryPacketAcknowledgements RPC method\n  ibc.core.channel.v1.QueryPacketCommitmentResponse:\n    type: object\n    properties:\n      commitment:\n        type: string\n        format: byte\n        title: packet associated with the request fields\n      proof:\n        type: string\n        format: byte\n        title: merkle proof of existence\n      proof_height:\n        title: height at which the proof was retrieved\n        type: object\n        properties:\n          revision_number:\n            type: string\n            format: uint64\n            title: the revision that the client is currently on\n          revision_height:\n            type: string\n            format: uint64\n            title: the height within the given revision\n        description: >-\n          Normally the RevisionHeight is incremented at each height while\n          keeping\n\n          RevisionNumber the same. However some consensus algorithms may choose\n          to\n\n          reset the height in certain conditions e.g. hard forks, state-machine\n\n          breaking changes In these cases, the RevisionNumber is incremented so\n          that\n\n          height continues to be monitonically increasing even as the\n          RevisionHeight\n\n          gets reset\n    title: >-\n      QueryPacketCommitmentResponse defines the client query response for a\n      packet\n\n      which also includes a proof and the height from which the proof was\n\n      retrieved\n  ibc.core.channel.v1.QueryPacketCommitmentsResponse:\n    type: object\n    properties:\n      commitments:\n        type: array\n        items:\n          type: object\n          properties:\n            port_id:\n              type: string\n              description: channel port identifier.\n            channel_id:\n              type: string\n              description: channel unique identifier.\n            sequence:\n              type: string\n              format: uint64\n              description: packet sequence.\n            data:\n              type: string\n              format: byte\n              description: embedded data that represents packet state.\n          description: >-\n            PacketState defines the generic type necessary to retrieve and store\n\n            packet commitments, acknowledgements, and receipts.\n\n            Caller is responsible for knowing the context necessary to interpret\n            this\n\n            state as a commitment, acknowledgement, or a receipt.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n        title: pagination response\n      height:\n        title: query block height\n        type: object\n        properties:\n          revision_number:\n            type: string\n            format: uint64\n            title: the revision that the client is currently on\n          revision_height:\n            type: string\n            format: uint64\n            title: the height within the given revision\n        description: >-\n          Normally the RevisionHeight is incremented at each height while\n          keeping\n\n          RevisionNumber the same. However some consensus algorithms may choose\n          to\n\n          reset the height in certain conditions e.g. hard forks, state-machine\n\n          breaking changes In these cases, the RevisionNumber is incremented so\n          that\n\n          height continues to be monitonically increasing even as the\n          RevisionHeight\n\n          gets reset\n    title: |-\n      QueryPacketCommitmentsResponse is the request type for the\n      Query/QueryPacketCommitments RPC method\n  ibc.core.channel.v1.QueryPacketReceiptResponse:\n    type: object\n    properties:\n      received:\n        type: boolean\n        title: success flag for if receipt exists\n      proof:\n        type: string\n        format: byte\n        title: merkle proof of existence\n      proof_height:\n        title: height at which the proof was retrieved\n        type: object\n        properties:\n          revision_number:\n            type: string\n            format: uint64\n            title: the revision that the client is currently on\n          revision_height:\n            type: string\n            format: uint64\n            title: the height within the given revision\n        description: >-\n          Normally the RevisionHeight is incremented at each height while\n          keeping\n\n          RevisionNumber the same. However some consensus algorithms may choose\n          to\n\n          reset the height in certain conditions e.g. hard forks, state-machine\n\n          breaking changes In these cases, the RevisionNumber is incremented so\n          that\n\n          height continues to be monitonically increasing even as the\n          RevisionHeight\n\n          gets reset\n    title: >-\n      QueryPacketReceiptResponse defines the client query response for a packet\n\n      receipt which also includes a proof, and the height from which the proof\n      was\n\n      retrieved\n  ibc.core.channel.v1.QueryUnreceivedAcksResponse:\n    type: object\n    properties:\n      sequences:\n        type: array\n        items:\n          type: string\n          format: uint64\n        title: list of unreceived acknowledgement sequences\n      height:\n        title: query block height\n        type: object\n        properties:\n          revision_number:\n            type: string\n            format: uint64\n            title: the revision that the client is currently on\n          revision_height:\n            type: string\n            format: uint64\n            title: the height within the given revision\n        description: >-\n          Normally the RevisionHeight is incremented at each height while\n          keeping\n\n          RevisionNumber the same. However some consensus algorithms may choose\n          to\n\n          reset the height in certain conditions e.g. hard forks, state-machine\n\n          breaking changes In these cases, the RevisionNumber is incremented so\n          that\n\n          height continues to be monitonically increasing even as the\n          RevisionHeight\n\n          gets reset\n    title: |-\n      QueryUnreceivedAcksResponse is the response type for the\n      Query/UnreceivedAcks RPC method\n  ibc.core.channel.v1.QueryUnreceivedPacketsResponse:\n    type: object\n    properties:\n      sequences:\n        type: array\n        items:\n          type: string\n          format: uint64\n        title: list of unreceived packet sequences\n      height:\n        title: query block height\n        type: object\n        properties:\n          revision_number:\n            type: string\n            format: uint64\n            title: the revision that the client is currently on\n          revision_height:\n            type: string\n            format: uint64\n            title: the height within the given revision\n        description: >-\n          Normally the RevisionHeight is incremented at each height while\n          keeping\n\n          RevisionNumber the same. However some consensus algorithms may choose\n          to\n\n          reset the height in certain conditions e.g. hard forks, state-machine\n\n          breaking changes In these cases, the RevisionNumber is incremented so\n          that\n\n          height continues to be monitonically increasing even as the\n          RevisionHeight\n\n          gets reset\n    title: |-\n      QueryUnreceivedPacketsResponse is the response type for the\n      Query/UnreceivedPacketCommitments RPC method\n  ibc.core.channel.v1.State:\n    type: string\n    enum:\n      - STATE_UNINITIALIZED_UNSPECIFIED\n      - STATE_INIT\n      - STATE_TRYOPEN\n      - STATE_OPEN\n      - STATE_CLOSED\n    default: STATE_UNINITIALIZED_UNSPECIFIED\n    description: |-\n      State defines if a channel is in one of the following states:\n      CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n       - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n       - STATE_INIT: A channel has just started the opening handshake.\n       - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n       - STATE_OPEN: A channel has completed the handshake. Open channels are\n      ready to send and receive packets.\n       - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\n      packets.\n  cosmos.auth.v1beta1.AddressBytesToStringResponse:\n    type: object\n    properties:\n      address_string:\n        type: string\n    description: >-\n      AddressBytesToStringResponse is the response type for AddressString rpc\n      method.\n\n\n      Since: cosmos-sdk 0.46\n  cosmos.auth.v1beta1.AddressStringToBytesResponse:\n    type: object\n    properties:\n      address_bytes:\n        type: string\n        format: byte\n    description: >-\n      AddressStringToBytesResponse is the response type for AddressBytes rpc\n      method.\n\n\n      Since: cosmos-sdk 0.46\n  cosmos.auth.v1beta1.BaseAccount:\n    type: object\n    properties:\n      address:\n        type: string\n      pub_key:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n      account_number:\n        type: string\n        format: uint64\n      sequence:\n        type: string\n        format: uint64\n    description: >-\n      BaseAccount defines a base account type. It contains all the necessary\n      fields\n\n      for basic account functionality. Any custom account type should extend\n      this\n\n      type for additional functionality (e.g. vesting).\n  cosmos.auth.v1beta1.Bech32PrefixResponse:\n    type: object\n    properties:\n      bech32_prefix:\n        type: string\n    description: |-\n      Bech32PrefixResponse is the response type for Bech32Prefix rpc method.\n\n      Since: cosmos-sdk 0.46\n  cosmos.auth.v1beta1.Params:\n    type: object\n    properties:\n      max_memo_characters:\n        type: string\n        format: uint64\n      tx_sig_limit:\n        type: string\n        format: uint64\n      tx_size_cost_per_byte:\n        type: string\n        format: uint64\n      sig_verify_cost_ed25519:\n        type: string\n        format: uint64\n      sig_verify_cost_secp256k1:\n        type: string\n        format: uint64\n    description: Params defines the parameters for the auth module.\n  cosmos.auth.v1beta1.QueryAccountAddressByIDResponse:\n    type: object\n    properties:\n      account_address:\n        type: string\n    description: 'Since: cosmos-sdk 0.46.2'\n    title: >-\n      QueryAccountAddressByIDResponse is the response type for\n      AccountAddressByID rpc method\n  cosmos.auth.v1beta1.QueryAccountInfoResponse:\n    type: object\n    properties:\n      info:\n        description: info is the account info which is represented by BaseAccount.\n        type: object\n        properties:\n          address:\n            type: string\n          pub_key:\n            type: object\n            properties:\n              type_url:\n                type: string\n              value:\n                type: string\n                format: byte\n          account_number:\n            type: string\n            format: uint64\n          sequence:\n            type: string\n            format: uint64\n    description: |-\n      QueryAccountInfoResponse is the Query/AccountInfo response type.\n\n      Since: cosmos-sdk 0.47\n  cosmos.auth.v1beta1.QueryAccountResponse:\n    type: object\n    properties:\n      account:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n        description: account defines the account of the corresponding address.\n    description: >-\n      QueryAccountResponse is the response type for the Query/Account RPC\n      method.\n  cosmos.auth.v1beta1.QueryAccountsResponse:\n    type: object\n    properties:\n      accounts:\n        type: array\n        items:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n        title: accounts are the existing accounts\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: >-\n      QueryAccountsResponse is the response type for the Query/Accounts RPC\n      method.\n\n\n      Since: cosmos-sdk 0.43\n  cosmos.auth.v1beta1.QueryModuleAccountByNameResponse:\n    type: object\n    properties:\n      account:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n    description: >-\n      QueryModuleAccountByNameResponse is the response type for the\n      Query/ModuleAccountByName RPC method.\n  cosmos.auth.v1beta1.QueryModuleAccountsResponse:\n    type: object\n    properties:\n      accounts:\n        type: array\n        items:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n    description: >-\n      QueryModuleAccountsResponse is the response type for the\n      Query/ModuleAccounts RPC method.\n\n\n      Since: cosmos-sdk 0.46\n  cosmos.auth.v1beta1.QueryParamsResponse:\n    type: object\n    properties:\n      params:\n        description: params defines the parameters of the module.\n        type: object\n        properties:\n          max_memo_characters:\n            type: string\n            format: uint64\n          tx_sig_limit:\n            type: string\n            format: uint64\n          tx_size_cost_per_byte:\n            type: string\n            format: uint64\n          sig_verify_cost_ed25519:\n            type: string\n            format: uint64\n          sig_verify_cost_secp256k1:\n            type: string\n            format: uint64\n    description: QueryParamsResponse is the response type for the Query/Params RPC method.\n  cosmos.evidence.v1beta1.QueryAllEvidenceResponse:\n    type: object\n    properties:\n      evidence:\n        type: array\n        items:\n          type: object\n          properties:\n            type_url:\n              type: string\n            value:\n              type: string\n              format: byte\n        description: evidence returns all evidences.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: >-\n      QueryAllEvidenceResponse is the response type for the Query/AllEvidence\n      RPC\n\n      method.\n  cosmos.evidence.v1beta1.QueryEvidenceResponse:\n    type: object\n    properties:\n      evidence:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n        description: evidence returns the requested evidence.\n    description: >-\n      QueryEvidenceResponse is the response type for the Query/Evidence RPC\n      method.\n  ibc.core.client.v1.ConsensusStateWithHeight:\n    type: object\n    properties:\n      height:\n        title: consensus state height\n        type: object\n        properties:\n          revision_number:\n            type: string\n            format: uint64\n            title: the revision that the client is currently on\n          revision_height:\n            type: string\n            format: uint64\n            title: the height within the given revision\n        description: >-\n          Normally the RevisionHeight is incremented at each height while\n          keeping\n\n          RevisionNumber the same. However some consensus algorithms may choose\n          to\n\n          reset the height in certain conditions e.g. hard forks, state-machine\n\n          breaking changes In these cases, the RevisionNumber is incremented so\n          that\n\n          height continues to be monitonically increasing even as the\n          RevisionHeight\n\n          gets reset\n      consensus_state:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n        title: consensus state\n    description: >-\n      ConsensusStateWithHeight defines a consensus state with an additional\n      height\n\n      field.\n  ibc.core.client.v1.Params:\n    type: object\n    properties:\n      allowed_clients:\n        type: array\n        items:\n          type: string\n        description: >-\n          allowed_clients defines the list of allowed client state types which\n          can be created\n\n          and interacted with. If a client type is removed from the allowed\n          clients list, usage\n\n          of this client will be disabled until it is added again to the list.\n    description: Params defines the set of IBC light client parameters.\n  ibc.core.client.v1.QueryClientParamsResponse:\n    type: object\n    properties:\n      params:\n        description: params defines the parameters of the module.\n        type: object\n        properties:\n          allowed_clients:\n            type: array\n            items:\n              type: string\n            description: >-\n              allowed_clients defines the list of allowed client state types\n              which can be created\n\n              and interacted with. If a client type is removed from the allowed\n              clients list, usage\n\n              of this client will be disabled until it is added again to the\n              list.\n    description: >-\n      QueryClientParamsResponse is the response type for the Query/ClientParams\n      RPC\n\n      method.\n  ibc.core.client.v1.QueryClientStateResponse:\n    type: object\n    properties:\n      client_state:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n        title: client state associated with the request identifier\n      proof:\n        type: string\n        format: byte\n        title: merkle proof of existence\n      proof_height:\n        title: height at which the proof was retrieved\n        type: object\n        properties:\n          revision_number:\n            type: string\n            format: uint64\n            title: the revision that the client is currently on\n          revision_height:\n            type: string\n            format: uint64\n            title: the height within the given revision\n        description: >-\n          Normally the RevisionHeight is incremented at each height while\n          keeping\n\n          RevisionNumber the same. However some consensus algorithms may choose\n          to\n\n          reset the height in certain conditions e.g. hard forks, state-machine\n\n          breaking changes In these cases, the RevisionNumber is incremented so\n          that\n\n          height continues to be monitonically increasing even as the\n          RevisionHeight\n\n          gets reset\n    description: >-\n      QueryClientStateResponse is the response type for the Query/ClientState\n      RPC\n\n      method. Besides the client state, it includes a proof and the height from\n\n      which the proof was retrieved.\n  ibc.core.client.v1.QueryClientStatesResponse:\n    type: object\n    properties:\n      client_states:\n        type: array\n        items:\n          type: object\n          properties:\n            client_id:\n              type: string\n              title: client identifier\n            client_state:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n              title: client state\n          description: >-\n            IdentifiedClientState defines a client state with an additional\n            client\n\n            identifier field.\n        description: list of stored ClientStates of the chain.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n        title: pagination response\n    description: >-\n      QueryClientStatesResponse is the response type for the Query/ClientStates\n      RPC\n\n      method.\n  ibc.core.client.v1.QueryClientStatusResponse:\n    type: object\n    properties:\n      status:\n        type: string\n    description: >-\n      QueryClientStatusResponse is the response type for the Query/ClientStatus\n      RPC\n\n      method. It returns the current status of the IBC client.\n  ibc.core.client.v1.QueryConsensusStateHeightsResponse:\n    type: object\n    properties:\n      consensus_state_heights:\n        type: array\n        items:\n          type: object\n          properties:\n            revision_number:\n              type: string\n              format: uint64\n              title: the revision that the client is currently on\n            revision_height:\n              type: string\n              format: uint64\n              title: the height within the given revision\n          description: >-\n            Normally the RevisionHeight is incremented at each height while\n            keeping\n\n            RevisionNumber the same. However some consensus algorithms may\n            choose to\n\n            reset the height in certain conditions e.g. hard forks,\n            state-machine\n\n            breaking changes In these cases, the RevisionNumber is incremented\n            so that\n\n            height continues to be monitonically increasing even as the\n            RevisionHeight\n\n            gets reset\n          title: >-\n            Height is a monotonically increasing data type\n\n            that can be compared against another Height for the purposes of\n            updating and\n\n            freezing clients\n        title: consensus state heights\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n        title: pagination response\n    title: |-\n      QueryConsensusStateHeightsResponse is the response type for the\n      Query/ConsensusStateHeights RPC method\n  ibc.core.client.v1.QueryConsensusStateResponse:\n    type: object\n    properties:\n      consensus_state:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n        title: >-\n          consensus state associated with the client identifier at the given\n          height\n      proof:\n        type: string\n        format: byte\n        title: merkle proof of existence\n      proof_height:\n        type: object\n        properties:\n          revision_number:\n            type: string\n            format: uint64\n            title: the revision that the client is currently on\n          revision_height:\n            type: string\n            format: uint64\n            title: the height within the given revision\n        description: >-\n          Normally the RevisionHeight is incremented at each height while\n          keeping\n\n          RevisionNumber the same. However some consensus algorithms may choose\n          to\n\n          reset the height in certain conditions e.g. hard forks, state-machine\n\n          breaking changes In these cases, the RevisionNumber is incremented so\n          that\n\n          height continues to be monitonically increasing even as the\n          RevisionHeight\n\n          gets reset\n        title: >-\n          Height is a monotonically increasing data type\n\n          that can be compared against another Height for the purposes of\n          updating and\n\n          freezing clients\n    title: >-\n      QueryConsensusStateResponse is the response type for the\n      Query/ConsensusState\n\n      RPC method\n  ibc.core.client.v1.QueryConsensusStatesResponse:\n    type: object\n    properties:\n      consensus_states:\n        type: array\n        items:\n          type: object\n          properties:\n            height:\n              title: consensus state height\n              type: object\n              properties:\n                revision_number:\n                  type: string\n                  format: uint64\n                  title: the revision that the client is currently on\n                revision_height:\n                  type: string\n                  format: uint64\n                  title: the height within the given revision\n              description: >-\n                Normally the RevisionHeight is incremented at each height while\n                keeping\n\n                RevisionNumber the same. However some consensus algorithms may\n                choose to\n\n                reset the height in certain conditions e.g. hard forks,\n                state-machine\n\n                breaking changes In these cases, the RevisionNumber is\n                incremented so that\n\n                height continues to be monitonically increasing even as the\n                RevisionHeight\n\n                gets reset\n            consensus_state:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n              title: consensus state\n          description: >-\n            ConsensusStateWithHeight defines a consensus state with an\n            additional height\n\n            field.\n        title: consensus states associated with the identifier\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n        title: pagination response\n    title: |-\n      QueryConsensusStatesResponse is the response type for the\n      Query/ConsensusStates RPC method\n  ibc.core.client.v1.QueryUpgradedClientStateResponse:\n    type: object\n    properties:\n      upgraded_client_state:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n        title: client state associated with the request identifier\n    description: |-\n      QueryUpgradedClientStateResponse is the response type for the\n      Query/UpgradedClientState RPC method.\n  ibc.core.client.v1.QueryUpgradedConsensusStateResponse:\n    type: object\n    properties:\n      upgraded_consensus_state:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n        title: Consensus state associated with the request identifier\n    description: |-\n      QueryUpgradedConsensusStateResponse is the response type for the\n      Query/UpgradedConsensusState RPC method.\n  cosmos.authz.v1beta1.Grant:\n    type: object\n    properties:\n      authorization:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n      expiration:\n        type: string\n        format: date-time\n        title: >-\n          time when the grant will expire and will be pruned. If null, then the\n          grant\n\n          doesn't have a time expiration (other conditions  in `authorization`\n\n          may apply to invalidate the grant)\n    description: |-\n      Grant gives permissions to execute\n      the provide method with expiration time.\n  cosmos.authz.v1beta1.GrantAuthorization:\n    type: object\n    properties:\n      granter:\n        type: string\n      grantee:\n        type: string\n      authorization:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n      expiration:\n        type: string\n        format: date-time\n    title: >-\n      GrantAuthorization extends a grant with both the addresses of the grantee\n      and granter.\n\n      It is used in genesis.proto and query.proto\n  cosmos.authz.v1beta1.QueryGranteeGrantsResponse:\n    type: object\n    properties:\n      grants:\n        type: array\n        items:\n          type: object\n          properties:\n            granter:\n              type: string\n            grantee:\n              type: string\n            authorization:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n            expiration:\n              type: string\n              format: date-time\n          title: >-\n            GrantAuthorization extends a grant with both the addresses of the\n            grantee and granter.\n\n            It is used in genesis.proto and query.proto\n        description: grants is a list of grants granted to the grantee.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: >-\n      QueryGranteeGrantsResponse is the response type for the\n      Query/GranteeGrants RPC method.\n  cosmos.authz.v1beta1.QueryGranterGrantsResponse:\n    type: object\n    properties:\n      grants:\n        type: array\n        items:\n          type: object\n          properties:\n            granter:\n              type: string\n            grantee:\n              type: string\n            authorization:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n            expiration:\n              type: string\n              format: date-time\n          title: >-\n            GrantAuthorization extends a grant with both the addresses of the\n            grantee and granter.\n\n            It is used in genesis.proto and query.proto\n        description: grants is a list of grants granted by the granter.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: >-\n      QueryGranterGrantsResponse is the response type for the\n      Query/GranterGrants RPC method.\n  cosmos.authz.v1beta1.QueryGrantsResponse:\n    type: object\n    properties:\n      grants:\n        type: array\n        items:\n          type: object\n          properties:\n            authorization:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n            expiration:\n              type: string\n              format: date-time\n              title: >-\n                time when the grant will expire and will be pruned. If null,\n                then the grant\n\n                doesn't have a time expiration (other conditions  in\n                `authorization`\n\n                may apply to invalidate the grant)\n          description: |-\n            Grant gives permissions to execute\n            the provide method with expiration time.\n        description: authorizations is a list of grants granted for grantee by granter.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: >-\n      QueryGrantsResponse is the response type for the Query/Authorizations RPC\n      method.\n  cyber.liquidity.v1beta1.DepositMsgState:\n    type: object\n    properties:\n      msg_height:\n        type: string\n        format: int64\n        title: height where this message is appended to the batch\n      msg_index:\n        type: string\n        format: uint64\n        title: index of this deposit message in this liquidity pool\n      executed:\n        type: boolean\n        title: true if executed on this batch, false if not executed\n      succeeded:\n        type: boolean\n        title: true if executed successfully on this batch, false if failed\n      to_be_deleted:\n        type: boolean\n        title: >-\n          true if ready to be deleted on kvstore, false if not ready to be\n          deleted\n      msg:\n        title: MsgDepositWithinBatch\n        type: object\n        properties:\n          depositor_address:\n            type: string\n          pool_id:\n            type: string\n            format: uint64\n            title: id of the target pool\n          deposit_coins:\n            type: array\n            items:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom\n                method\n\n                signatures required by gogoproto.\n            title: reserve coin pair of the pool to deposit\n        description: >-\n          `MsgDepositWithinBatch defines` an `sdk.Msg` type that supports\n          submitting\n\n          a deposit request to the batch of the liquidity pool.\n\n          Deposit is submitted to the batch of the Liquidity pool with the\n          specified\n\n          `pool_id`, `deposit_coins` for reserve.\n\n          This request is stacked in the batch of the liquidity pool, is not\n          processed\n\n          immediately, and is processed in the `endblock` at the same time as\n          other\n\n          requests.\n\n\n          See:\n\n          https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n    description: |-\n      DepositMsgState defines the state of deposit message that contains state\n      information as it is processed in the next batch or batches.\n  cyber.liquidity.v1beta1.MsgDepositWithinBatch:\n    type: object\n    properties:\n      depositor_address:\n        type: string\n      pool_id:\n        type: string\n        format: uint64\n        title: id of the target pool\n      deposit_coins:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        title: reserve coin pair of the pool to deposit\n    description: >-\n      `MsgDepositWithinBatch defines` an `sdk.Msg` type that supports submitting\n\n      a deposit request to the batch of the liquidity pool.\n\n      Deposit is submitted to the batch of the Liquidity pool with the specified\n\n      `pool_id`, `deposit_coins` for reserve.\n\n      This request is stacked in the batch of the liquidity pool, is not\n      processed\n\n      immediately, and is processed in the `endblock` at the same time as other\n\n      requests.\n\n\n      See:\n\n      https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n  cyber.liquidity.v1beta1.MsgSwapWithinBatch:\n    type: object\n    properties:\n      swap_requester_address:\n        type: string\n        title: address of swap requester\n      pool_id:\n        type: string\n        format: uint64\n        description: >-\n          id of swap type, must match the value in the pool. Only `swap_type_id`\n          1 is\n\n          supported.\n      swap_type_id:\n        type: integer\n        format: int64\n        description: id of swap type. Must match the value in the pool.\n      offer_coin:\n        type: object\n        properties:\n          denom:\n            type: string\n          amount:\n            type: string\n        description: |-\n          Coin defines a token with a denomination and an amount.\n\n          NOTE: The amount field is an Int which implements the custom method\n          signatures required by gogoproto.\n      demand_coin_denom:\n        type: string\n        description: >-\n          denom of demand coin to be exchanged on the swap request, must match\n          the\n\n          denom in the pool.\n      offer_coin_fee:\n        type: object\n        properties:\n          denom:\n            type: string\n          amount:\n            type: string\n        description: |-\n          Coin defines a token with a denomination and an amount.\n\n          NOTE: The amount field is an Int which implements the custom method\n          signatures required by gogoproto.\n      order_price:\n        type: string\n        description: >-\n          limit order price for the order, the price is the exchange ratio of\n          X/Y\n\n          where X is the amount of the first coin and Y is the amount\n\n          of the second coin when their denoms are sorted alphabetically.\n    description: >-\n      `MsgSwapWithinBatch` defines an sdk.Msg type that supports submitting a\n      swap\n\n      offer request to the batch of the liquidity pool. Submit swap offer to the\n\n      liquidity pool batch with the specified the `pool_id`, `swap_type_id`,\n\n      `demand_coin_denom` with the coin and the price you're offering\n\n      and `offer_coin_fee` must be half of offer coin amount * current\n\n      `params.swap_fee_rate` and ceil for reservation to pay fees. This request\n      is\n\n      stacked in the batch of the liquidity pool, is not processed immediately,\n      and\n\n      is processed in the `endblock` at the same time as other requests. You\n      must\n\n      request the same fields as the pool. Only the default `swap_type_id` 1 is\n\n      supported.\n\n\n      See: https://github.com/gravity-devs/liquidity/tree/develop/doc\n\n      https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n  cyber.liquidity.v1beta1.MsgWithdrawWithinBatch:\n    type: object\n    properties:\n      withdrawer_address:\n        type: string\n      pool_id:\n        type: string\n        format: uint64\n        title: id of the target pool\n      pool_coin:\n        type: object\n        properties:\n          denom:\n            type: string\n          amount:\n            type: string\n        description: |-\n          Coin defines a token with a denomination and an amount.\n\n          NOTE: The amount field is an Int which implements the custom method\n          signatures required by gogoproto.\n    description: >-\n      `MsgWithdrawWithinBatch` defines an `sdk.Msg` type that supports\n      submitting\n\n      a withdraw request to the batch of the liquidity pool.\n\n      Withdraw is submitted to the batch from the Liquidity pool with the\n\n      specified `pool_id`, `pool_coin` of the pool.\n\n      This request is stacked in the batch of the liquidity pool, is not\n      processed\n\n      immediately, and is processed in the `endblock` at the same time as other\n\n      requests.\n\n\n      See:\n\n      https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n  cyber.liquidity.v1beta1.Params:\n    type: object\n    properties:\n      pool_types:\n        type: array\n        items:\n          type: object\n          properties:\n            id:\n              type: integer\n              format: int64\n              title: >-\n                This is the id of the pool_type that is used as pool_type_id for\n                pool\n\n                creation. In this version, only pool-type-id 1 is supported.\n\n                {\"id\":1,\"name\":\"ConstantProductLiquidityPool\",\"min_reserve_coin_num\":2,\"max_reserve_coin_num\":2,\"description\":\"\"}\n            name:\n              type: string\n              description: name of the pool type.\n            min_reserve_coin_num:\n              type: integer\n              format: int64\n              description: >-\n                minimum number of reserveCoins for LiquidityPoolType, only 2\n                reserve coins\n\n                are supported.\n            max_reserve_coin_num:\n              type: integer\n              format: int64\n              description: >-\n                maximum number of reserveCoins for LiquidityPoolType, only 2\n                reserve coins\n\n                are supported.\n            description:\n              type: string\n              description: description of the pool type.\n          description: >-\n            Structure for the pool type to distinguish the characteristics of\n            the reserve\n\n            pools.\n        title: list of available pool types\n      min_init_deposit_amount:\n        type: string\n        description: |-\n          Minimum number of coins to be deposited to the liquidity pool on pool\n          creation.\n      init_pool_coin_mint_amount:\n        type: string\n        description: Initial mint amount of pool coins upon pool creation.\n      max_reserve_coin_amount:\n        type: string\n        description: >-\n          Limit the size of each liquidity pool to minimize risk. In\n          development, set\n\n          to 0 for no limit. In production, set a limit.\n      pool_creation_fee:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        description: Fee paid to create a Liquidity Pool. Set a fee to prevent spamming.\n      swap_fee_rate:\n        type: string\n        description: Swap fee rate for every executed swap.\n      withdraw_fee_rate:\n        type: string\n        description: Reserve coin withdrawal with less proportion by withdrawFeeRate.\n      max_order_amount_ratio:\n        type: string\n        description: Maximum ratio of reserve coins that can be ordered at a swap order.\n      unit_batch_height:\n        type: integer\n        format: int64\n        description: The smallest unit batch height for every liquidity pool.\n      circuit_breaker_enabled:\n        type: boolean\n        description: |-\n          Circuit breaker enables or disables transaction messages in liquidity\n          module.\n    description: Params defines the parameters for the liquidity module.\n  cyber.liquidity.v1beta1.Pool:\n    type: object\n    properties:\n      id:\n        type: string\n        format: uint64\n        title: id of the pool\n      type_id:\n        type: integer\n        format: int64\n        title: id of the pool_type\n      reserve_coin_denoms:\n        type: array\n        items:\n          type: string\n        title: denoms of reserve coin pair of the pool\n      reserve_account_address:\n        type: string\n        title: reserve account address of the pool\n      pool_coin_denom:\n        type: string\n        title: denom of pool coin of the pool\n    description: Pool defines the liquidity pool that contains pool information.\n  cyber.liquidity.v1beta1.PoolBatch:\n    type: object\n    properties:\n      pool_id:\n        type: string\n        format: uint64\n        title: id of the pool\n      index:\n        type: string\n        format: uint64\n        title: index of this batch\n      begin_height:\n        type: string\n        format: int64\n        title: height where this batch is started\n      deposit_msg_index:\n        type: string\n        format: uint64\n        title: last index of DepositMsgStates\n      withdraw_msg_index:\n        type: string\n        format: uint64\n        title: last index of WithdrawMsgStates\n      swap_msg_index:\n        type: string\n        format: uint64\n        title: last index of SwapMsgStates\n      executed:\n        type: boolean\n        title: true if executed, false if not executed\n    description: |-\n      PoolBatch defines the batch or batches of a given liquidity pool that\n      contains indexes of deposit, withdraw, and swap messages. Index param\n      increments by 1 if the pool id is same.\n  cyber.liquidity.v1beta1.PoolType:\n    type: object\n    properties:\n      id:\n        type: integer\n        format: int64\n        title: >-\n          This is the id of the pool_type that is used as pool_type_id for pool\n\n          creation. In this version, only pool-type-id 1 is supported.\n\n          {\"id\":1,\"name\":\"ConstantProductLiquidityPool\",\"min_reserve_coin_num\":2,\"max_reserve_coin_num\":2,\"description\":\"\"}\n      name:\n        type: string\n        description: name of the pool type.\n      min_reserve_coin_num:\n        type: integer\n        format: int64\n        description: >-\n          minimum number of reserveCoins for LiquidityPoolType, only 2 reserve\n          coins\n\n          are supported.\n      max_reserve_coin_num:\n        type: integer\n        format: int64\n        description: >-\n          maximum number of reserveCoins for LiquidityPoolType, only 2 reserve\n          coins\n\n          are supported.\n      description:\n        type: string\n        description: description of the pool type.\n    description: >-\n      Structure for the pool type to distinguish the characteristics of the\n      reserve\n\n      pools.\n  cyber.liquidity.v1beta1.QueryLiquidityPoolBatchResponse:\n    type: object\n    properties:\n      batch:\n        type: object\n        properties:\n          pool_id:\n            type: string\n            format: uint64\n            title: id of the pool\n          index:\n            type: string\n            format: uint64\n            title: index of this batch\n          begin_height:\n            type: string\n            format: int64\n            title: height where this batch is started\n          deposit_msg_index:\n            type: string\n            format: uint64\n            title: last index of DepositMsgStates\n          withdraw_msg_index:\n            type: string\n            format: uint64\n            title: last index of WithdrawMsgStates\n          swap_msg_index:\n            type: string\n            format: uint64\n            title: last index of SwapMsgStates\n          executed:\n            type: boolean\n            title: true if executed, false if not executed\n        description: |-\n          PoolBatch defines the batch or batches of a given liquidity pool that\n          contains indexes of deposit, withdraw, and swap messages. Index param\n          increments by 1 if the pool id is same.\n    description: >-\n      the response type for the QueryLiquidityPoolBatchResponse RPC method.\n      Returns\n\n      the liquidity pool batch that corresponds to the requested pool_id.\n  cyber.liquidity.v1beta1.QueryLiquidityPoolResponse:\n    type: object\n    properties:\n      pool:\n        type: object\n        properties:\n          id:\n            type: string\n            format: uint64\n            title: id of the pool\n          type_id:\n            type: integer\n            format: int64\n            title: id of the pool_type\n          reserve_coin_denoms:\n            type: array\n            items:\n              type: string\n            title: denoms of reserve coin pair of the pool\n          reserve_account_address:\n            type: string\n            title: reserve account address of the pool\n          pool_coin_denom:\n            type: string\n            title: denom of pool coin of the pool\n        description: Pool defines the liquidity pool that contains pool information.\n    description: >-\n      the response type for the QueryLiquidityPoolResponse RPC method. Returns\n      the\n\n      liquidity pool that corresponds to the requested pool_id.\n  cyber.liquidity.v1beta1.QueryLiquidityPoolsResponse:\n    type: object\n    properties:\n      pools:\n        type: array\n        items:\n          type: object\n          properties:\n            id:\n              type: string\n              format: uint64\n              title: id of the pool\n            type_id:\n              type: integer\n              format: int64\n              title: id of the pool_type\n            reserve_coin_denoms:\n              type: array\n              items:\n                type: string\n              title: denoms of reserve coin pair of the pool\n            reserve_account_address:\n              type: string\n              title: reserve account address of the pool\n            pool_coin_denom:\n              type: string\n              title: denom of pool coin of the pool\n          description: Pool defines the liquidity pool that contains pool information.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: |-\n      the response type for the QueryLiquidityPoolsResponse RPC method. This\n      includes a list of all existing liquidity pools and paging results that\n      contain next_key and total count.\n  cyber.liquidity.v1beta1.QueryParamsResponse:\n    type: object\n    properties:\n      params:\n        description: params holds all the parameters of this module.\n        type: object\n        properties:\n          pool_types:\n            type: array\n            items:\n              type: object\n              properties:\n                id:\n                  type: integer\n                  format: int64\n                  title: >-\n                    This is the id of the pool_type that is used as pool_type_id\n                    for pool\n\n                    creation. In this version, only pool-type-id 1 is supported.\n\n                    {\"id\":1,\"name\":\"ConstantProductLiquidityPool\",\"min_reserve_coin_num\":2,\"max_reserve_coin_num\":2,\"description\":\"\"}\n                name:\n                  type: string\n                  description: name of the pool type.\n                min_reserve_coin_num:\n                  type: integer\n                  format: int64\n                  description: >-\n                    minimum number of reserveCoins for LiquidityPoolType, only 2\n                    reserve coins\n\n                    are supported.\n                max_reserve_coin_num:\n                  type: integer\n                  format: int64\n                  description: >-\n                    maximum number of reserveCoins for LiquidityPoolType, only 2\n                    reserve coins\n\n                    are supported.\n                description:\n                  type: string\n                  description: description of the pool type.\n              description: >-\n                Structure for the pool type to distinguish the characteristics\n                of the reserve\n\n                pools.\n            title: list of available pool types\n          min_init_deposit_amount:\n            type: string\n            description: >-\n              Minimum number of coins to be deposited to the liquidity pool on\n              pool\n\n              creation.\n          init_pool_coin_mint_amount:\n            type: string\n            description: Initial mint amount of pool coins upon pool creation.\n          max_reserve_coin_amount:\n            type: string\n            description: >-\n              Limit the size of each liquidity pool to minimize risk. In\n              development, set\n\n              to 0 for no limit. In production, set a limit.\n          pool_creation_fee:\n            type: array\n            items:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom\n                method\n\n                signatures required by gogoproto.\n            description: >-\n              Fee paid to create a Liquidity Pool. Set a fee to prevent\n              spamming.\n          swap_fee_rate:\n            type: string\n            description: Swap fee rate for every executed swap.\n          withdraw_fee_rate:\n            type: string\n            description: Reserve coin withdrawal with less proportion by withdrawFeeRate.\n          max_order_amount_ratio:\n            type: string\n            description: >-\n              Maximum ratio of reserve coins that can be ordered at a swap\n              order.\n          unit_batch_height:\n            type: integer\n            format: int64\n            description: The smallest unit batch height for every liquidity pool.\n          circuit_breaker_enabled:\n            type: boolean\n            description: >-\n              Circuit breaker enables or disables transaction messages in\n              liquidity\n\n              module.\n    description: |-\n      the response type for the QueryParamsResponse RPC method. This includes\n      current parameter of the liquidity module.\n  cyber.liquidity.v1beta1.QueryPoolBatchDepositMsgResponse:\n    type: object\n    properties:\n      deposit:\n        type: object\n        properties:\n          msg_height:\n            type: string\n            format: int64\n            title: height where this message is appended to the batch\n          msg_index:\n            type: string\n            format: uint64\n            title: index of this deposit message in this liquidity pool\n          executed:\n            type: boolean\n            title: true if executed on this batch, false if not executed\n          succeeded:\n            type: boolean\n            title: true if executed successfully on this batch, false if failed\n          to_be_deleted:\n            type: boolean\n            title: >-\n              true if ready to be deleted on kvstore, false if not ready to be\n              deleted\n          msg:\n            title: MsgDepositWithinBatch\n            type: object\n            properties:\n              depositor_address:\n                type: string\n              pool_id:\n                type: string\n                format: uint64\n                title: id of the target pool\n              deposit_coins:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom\n                    method\n\n                    signatures required by gogoproto.\n                title: reserve coin pair of the pool to deposit\n            description: >-\n              `MsgDepositWithinBatch defines` an `sdk.Msg` type that supports\n              submitting\n\n              a deposit request to the batch of the liquidity pool.\n\n              Deposit is submitted to the batch of the Liquidity pool with the\n              specified\n\n              `pool_id`, `deposit_coins` for reserve.\n\n              This request is stacked in the batch of the liquidity pool, is not\n              processed\n\n              immediately, and is processed in the `endblock` at the same time\n              as other\n\n              requests.\n\n\n              See:\n\n              https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n        description: >-\n          DepositMsgState defines the state of deposit message that contains\n          state\n\n          information as it is processed in the next batch or batches.\n    description: >-\n      the response type for the QueryPoolBatchDepositMsg RPC method. This\n      includes\n\n      a batch swap message of the batch.\n  cyber.liquidity.v1beta1.QueryPoolBatchDepositMsgsResponse:\n    type: object\n    properties:\n      deposits:\n        type: array\n        items:\n          type: object\n          properties:\n            msg_height:\n              type: string\n              format: int64\n              title: height where this message is appended to the batch\n            msg_index:\n              type: string\n              format: uint64\n              title: index of this deposit message in this liquidity pool\n            executed:\n              type: boolean\n              title: true if executed on this batch, false if not executed\n            succeeded:\n              type: boolean\n              title: true if executed successfully on this batch, false if failed\n            to_be_deleted:\n              type: boolean\n              title: >-\n                true if ready to be deleted on kvstore, false if not ready to be\n                deleted\n            msg:\n              title: MsgDepositWithinBatch\n              type: object\n              properties:\n                depositor_address:\n                  type: string\n                pool_id:\n                  type: string\n                  format: uint64\n                  title: id of the target pool\n                deposit_coins:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      denom:\n                        type: string\n                      amount:\n                        type: string\n                    description: >-\n                      Coin defines a token with a denomination and an amount.\n\n\n                      NOTE: The amount field is an Int which implements the\n                      custom method\n\n                      signatures required by gogoproto.\n                  title: reserve coin pair of the pool to deposit\n              description: >-\n                `MsgDepositWithinBatch defines` an `sdk.Msg` type that supports\n                submitting\n\n                a deposit request to the batch of the liquidity pool.\n\n                Deposit is submitted to the batch of the Liquidity pool with the\n                specified\n\n                `pool_id`, `deposit_coins` for reserve.\n\n                This request is stacked in the batch of the liquidity pool, is\n                not processed\n\n                immediately, and is processed in the `endblock` at the same time\n                as other\n\n                requests.\n\n\n                See:\n\n                https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n          description: >-\n            DepositMsgState defines the state of deposit message that contains\n            state\n\n            information as it is processed in the next batch or batches.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: >-\n      the response type for the QueryPoolBatchDeposit RPC method. This includes\n      a\n\n      list of all currently existing deposit messages of the batch and paging\n\n      results that contain next_key and total count.\n  cyber.liquidity.v1beta1.QueryPoolBatchSwapMsgResponse:\n    type: object\n    properties:\n      swap:\n        type: object\n        properties:\n          msg_height:\n            type: string\n            format: int64\n            title: height where this message is appended to the batch\n          msg_index:\n            type: string\n            format: uint64\n            title: index of this swap message in this liquidity pool\n          executed:\n            type: boolean\n            title: true if executed on this batch, false if not executed\n          succeeded:\n            type: boolean\n            title: true if executed successfully on this batch, false if failed\n          to_be_deleted:\n            type: boolean\n            title: >-\n              true if ready to be deleted on kvstore, false if not ready to be\n              deleted\n          order_expiry_height:\n            type: string\n            format: int64\n            title: >-\n              swap orders are cancelled when current height is equal to or\n              higher than\n\n              ExpiryHeight\n          exchanged_offer_coin:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom\n              method\n\n              signatures required by gogoproto.\n            title: offer coin exchanged until now\n          remaining_offer_coin:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom\n              method\n\n              signatures required by gogoproto.\n            title: offer coin currently remaining to be exchanged\n          reserved_offer_coin_fee:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom\n              method\n\n              signatures required by gogoproto.\n            title: reserve fee for pays fee in half offer coin\n          msg:\n            title: MsgSwapWithinBatch\n            type: object\n            properties:\n              swap_requester_address:\n                type: string\n                title: address of swap requester\n              pool_id:\n                type: string\n                format: uint64\n                description: >-\n                  id of swap type, must match the value in the pool. Only\n                  `swap_type_id` 1 is\n\n                  supported.\n              swap_type_id:\n                type: integer\n                format: int64\n                description: id of swap type. Must match the value in the pool.\n              offer_coin:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom\n                  method\n\n                  signatures required by gogoproto.\n              demand_coin_denom:\n                type: string\n                description: >-\n                  denom of demand coin to be exchanged on the swap request, must\n                  match the\n\n                  denom in the pool.\n              offer_coin_fee:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom\n                  method\n\n                  signatures required by gogoproto.\n              order_price:\n                type: string\n                description: >-\n                  limit order price for the order, the price is the exchange\n                  ratio of X/Y\n\n                  where X is the amount of the first coin and Y is the amount\n\n                  of the second coin when their denoms are sorted\n                  alphabetically.\n            description: >-\n              `MsgSwapWithinBatch` defines an sdk.Msg type that supports\n              submitting a swap\n\n              offer request to the batch of the liquidity pool. Submit swap\n              offer to the\n\n              liquidity pool batch with the specified the `pool_id`,\n              `swap_type_id`,\n\n              `demand_coin_denom` with the coin and the price you're offering\n\n              and `offer_coin_fee` must be half of offer coin amount * current\n\n              `params.swap_fee_rate` and ceil for reservation to pay fees. This\n              request is\n\n              stacked in the batch of the liquidity pool, is not processed\n              immediately, and\n\n              is processed in the `endblock` at the same time as other requests.\n              You must\n\n              request the same fields as the pool. Only the default\n              `swap_type_id` 1 is\n\n              supported.\n\n\n              See: https://github.com/gravity-devs/liquidity/tree/develop/doc\n\n              https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n        description: |-\n          SwapMsgState defines the state of the swap message that contains state\n          information as the message is processed in the next batch or batches.\n    description: >-\n      the response type for the QueryPoolBatchSwapMsg RPC method. This includes\n      a\n\n      batch swap message of the batch.\n  cyber.liquidity.v1beta1.QueryPoolBatchSwapMsgsResponse:\n    type: object\n    properties:\n      swaps:\n        type: array\n        items:\n          type: object\n          properties:\n            msg_height:\n              type: string\n              format: int64\n              title: height where this message is appended to the batch\n            msg_index:\n              type: string\n              format: uint64\n              title: index of this swap message in this liquidity pool\n            executed:\n              type: boolean\n              title: true if executed on this batch, false if not executed\n            succeeded:\n              type: boolean\n              title: true if executed successfully on this batch, false if failed\n            to_be_deleted:\n              type: boolean\n              title: >-\n                true if ready to be deleted on kvstore, false if not ready to be\n                deleted\n            order_expiry_height:\n              type: string\n              format: int64\n              title: >-\n                swap orders are cancelled when current height is equal to or\n                higher than\n\n                ExpiryHeight\n            exchanged_offer_coin:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom\n                method\n\n                signatures required by gogoproto.\n              title: offer coin exchanged until now\n            remaining_offer_coin:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom\n                method\n\n                signatures required by gogoproto.\n              title: offer coin currently remaining to be exchanged\n            reserved_offer_coin_fee:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom\n                method\n\n                signatures required by gogoproto.\n              title: reserve fee for pays fee in half offer coin\n            msg:\n              title: MsgSwapWithinBatch\n              type: object\n              properties:\n                swap_requester_address:\n                  type: string\n                  title: address of swap requester\n                pool_id:\n                  type: string\n                  format: uint64\n                  description: >-\n                    id of swap type, must match the value in the pool. Only\n                    `swap_type_id` 1 is\n\n                    supported.\n                swap_type_id:\n                  type: integer\n                  format: int64\n                  description: id of swap type. Must match the value in the pool.\n                offer_coin:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom\n                    method\n\n                    signatures required by gogoproto.\n                demand_coin_denom:\n                  type: string\n                  description: >-\n                    denom of demand coin to be exchanged on the swap request,\n                    must match the\n\n                    denom in the pool.\n                offer_coin_fee:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom\n                    method\n\n                    signatures required by gogoproto.\n                order_price:\n                  type: string\n                  description: >-\n                    limit order price for the order, the price is the exchange\n                    ratio of X/Y\n\n                    where X is the amount of the first coin and Y is the amount\n\n                    of the second coin when their denoms are sorted\n                    alphabetically.\n              description: >-\n                `MsgSwapWithinBatch` defines an sdk.Msg type that supports\n                submitting a swap\n\n                offer request to the batch of the liquidity pool. Submit swap\n                offer to the\n\n                liquidity pool batch with the specified the `pool_id`,\n                `swap_type_id`,\n\n                `demand_coin_denom` with the coin and the price you're offering\n\n                and `offer_coin_fee` must be half of offer coin amount * current\n\n                `params.swap_fee_rate` and ceil for reservation to pay fees.\n                This request is\n\n                stacked in the batch of the liquidity pool, is not processed\n                immediately, and\n\n                is processed in the `endblock` at the same time as other\n                requests. You must\n\n                request the same fields as the pool. Only the default\n                `swap_type_id` 1 is\n\n                supported.\n\n\n                See: https://github.com/gravity-devs/liquidity/tree/develop/doc\n\n                https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n          description: >-\n            SwapMsgState defines the state of the swap message that contains\n            state\n\n            information as the message is processed in the next batch or\n            batches.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: >-\n      the response type for the QueryPoolBatchSwapMsgs RPC method. This includes\n\n      list of all currently existing swap messages of the batch and paging\n      results\n\n      that contain next_key and total count.\n  cyber.liquidity.v1beta1.QueryPoolBatchWithdrawMsgResponse:\n    type: object\n    properties:\n      withdraw:\n        type: object\n        properties:\n          msg_height:\n            type: string\n            format: int64\n            title: height where this message is appended to the batch\n          msg_index:\n            type: string\n            format: uint64\n            title: index of this withdraw message in this liquidity pool\n          executed:\n            type: boolean\n            title: true if executed on this batch, false if not executed\n          succeeded:\n            type: boolean\n            title: true if executed successfully on this batch, false if failed\n          to_be_deleted:\n            type: boolean\n            title: >-\n              true if ready to be deleted on kvstore, false if not ready to be\n              deleted\n          msg:\n            title: MsgWithdrawWithinBatch\n            type: object\n            properties:\n              withdrawer_address:\n                type: string\n              pool_id:\n                type: string\n                format: uint64\n                title: id of the target pool\n              pool_coin:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom\n                  method\n\n                  signatures required by gogoproto.\n            description: >-\n              `MsgWithdrawWithinBatch` defines an `sdk.Msg` type that supports\n              submitting\n\n              a withdraw request to the batch of the liquidity pool.\n\n              Withdraw is submitted to the batch from the Liquidity pool with\n              the\n\n              specified `pool_id`, `pool_coin` of the pool.\n\n              This request is stacked in the batch of the liquidity pool, is not\n              processed\n\n              immediately, and is processed in the `endblock` at the same time\n              as other\n\n              requests.\n\n\n              See:\n\n              https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n        description: >-\n          WithdrawMsgState defines the state of the withdraw message that\n          contains\n\n          state information as the message is processed in the next batch or\n          batches.\n    description: >-\n      the response type for the QueryPoolBatchWithdrawMsg RPC method. This\n      includes\n\n      a batch swap message of the batch.\n  cyber.liquidity.v1beta1.QueryPoolBatchWithdrawMsgsResponse:\n    type: object\n    properties:\n      withdraws:\n        type: array\n        items:\n          type: object\n          properties:\n            msg_height:\n              type: string\n              format: int64\n              title: height where this message is appended to the batch\n            msg_index:\n              type: string\n              format: uint64\n              title: index of this withdraw message in this liquidity pool\n            executed:\n              type: boolean\n              title: true if executed on this batch, false if not executed\n            succeeded:\n              type: boolean\n              title: true if executed successfully on this batch, false if failed\n            to_be_deleted:\n              type: boolean\n              title: >-\n                true if ready to be deleted on kvstore, false if not ready to be\n                deleted\n            msg:\n              title: MsgWithdrawWithinBatch\n              type: object\n              properties:\n                withdrawer_address:\n                  type: string\n                pool_id:\n                  type: string\n                  format: uint64\n                  title: id of the target pool\n                pool_coin:\n                  type: object\n                  properties:\n                    denom:\n                      type: string\n                    amount:\n                      type: string\n                  description: >-\n                    Coin defines a token with a denomination and an amount.\n\n\n                    NOTE: The amount field is an Int which implements the custom\n                    method\n\n                    signatures required by gogoproto.\n              description: >-\n                `MsgWithdrawWithinBatch` defines an `sdk.Msg` type that supports\n                submitting\n\n                a withdraw request to the batch of the liquidity pool.\n\n                Withdraw is submitted to the batch from the Liquidity pool with\n                the\n\n                specified `pool_id`, `pool_coin` of the pool.\n\n                This request is stacked in the batch of the liquidity pool, is\n                not processed\n\n                immediately, and is processed in the `endblock` at the same time\n                as other\n\n                requests.\n\n\n                See:\n\n                https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n          description: >-\n            WithdrawMsgState defines the state of the withdraw message that\n            contains\n\n            state information as the message is processed in the next batch or\n            batches.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: >-\n      the response type for the QueryPoolBatchWithdraw RPC method. This includes\n      a\n\n      list of all currently existing withdraw messages of the batch and paging\n\n      results that contain next_key and total count.\n  cyber.liquidity.v1beta1.SwapMsgState:\n    type: object\n    properties:\n      msg_height:\n        type: string\n        format: int64\n        title: height where this message is appended to the batch\n      msg_index:\n        type: string\n        format: uint64\n        title: index of this swap message in this liquidity pool\n      executed:\n        type: boolean\n        title: true if executed on this batch, false if not executed\n      succeeded:\n        type: boolean\n        title: true if executed successfully on this batch, false if failed\n      to_be_deleted:\n        type: boolean\n        title: >-\n          true if ready to be deleted on kvstore, false if not ready to be\n          deleted\n      order_expiry_height:\n        type: string\n        format: int64\n        title: >-\n          swap orders are cancelled when current height is equal to or higher\n          than\n\n          ExpiryHeight\n      exchanged_offer_coin:\n        type: object\n        properties:\n          denom:\n            type: string\n          amount:\n            type: string\n        description: |-\n          Coin defines a token with a denomination and an amount.\n\n          NOTE: The amount field is an Int which implements the custom method\n          signatures required by gogoproto.\n        title: offer coin exchanged until now\n      remaining_offer_coin:\n        type: object\n        properties:\n          denom:\n            type: string\n          amount:\n            type: string\n        description: |-\n          Coin defines a token with a denomination and an amount.\n\n          NOTE: The amount field is an Int which implements the custom method\n          signatures required by gogoproto.\n        title: offer coin currently remaining to be exchanged\n      reserved_offer_coin_fee:\n        type: object\n        properties:\n          denom:\n            type: string\n          amount:\n            type: string\n        description: |-\n          Coin defines a token with a denomination and an amount.\n\n          NOTE: The amount field is an Int which implements the custom method\n          signatures required by gogoproto.\n        title: reserve fee for pays fee in half offer coin\n      msg:\n        title: MsgSwapWithinBatch\n        type: object\n        properties:\n          swap_requester_address:\n            type: string\n            title: address of swap requester\n          pool_id:\n            type: string\n            format: uint64\n            description: >-\n              id of swap type, must match the value in the pool. Only\n              `swap_type_id` 1 is\n\n              supported.\n          swap_type_id:\n            type: integer\n            format: int64\n            description: id of swap type. Must match the value in the pool.\n          offer_coin:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom\n              method\n\n              signatures required by gogoproto.\n          demand_coin_denom:\n            type: string\n            description: >-\n              denom of demand coin to be exchanged on the swap request, must\n              match the\n\n              denom in the pool.\n          offer_coin_fee:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom\n              method\n\n              signatures required by gogoproto.\n          order_price:\n            type: string\n            description: >-\n              limit order price for the order, the price is the exchange ratio\n              of X/Y\n\n              where X is the amount of the first coin and Y is the amount\n\n              of the second coin when their denoms are sorted alphabetically.\n        description: >-\n          `MsgSwapWithinBatch` defines an sdk.Msg type that supports submitting\n          a swap\n\n          offer request to the batch of the liquidity pool. Submit swap offer to\n          the\n\n          liquidity pool batch with the specified the `pool_id`, `swap_type_id`,\n\n          `demand_coin_denom` with the coin and the price you're offering\n\n          and `offer_coin_fee` must be half of offer coin amount * current\n\n          `params.swap_fee_rate` and ceil for reservation to pay fees. This\n          request is\n\n          stacked in the batch of the liquidity pool, is not processed\n          immediately, and\n\n          is processed in the `endblock` at the same time as other requests. You\n          must\n\n          request the same fields as the pool. Only the default `swap_type_id` 1\n          is\n\n          supported.\n\n\n          See: https://github.com/gravity-devs/liquidity/tree/develop/doc\n\n          https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n    description: |-\n      SwapMsgState defines the state of the swap message that contains state\n      information as the message is processed in the next batch or batches.\n  cyber.liquidity.v1beta1.WithdrawMsgState:\n    type: object\n    properties:\n      msg_height:\n        type: string\n        format: int64\n        title: height where this message is appended to the batch\n      msg_index:\n        type: string\n        format: uint64\n        title: index of this withdraw message in this liquidity pool\n      executed:\n        type: boolean\n        title: true if executed on this batch, false if not executed\n      succeeded:\n        type: boolean\n        title: true if executed successfully on this batch, false if failed\n      to_be_deleted:\n        type: boolean\n        title: >-\n          true if ready to be deleted on kvstore, false if not ready to be\n          deleted\n      msg:\n        title: MsgWithdrawWithinBatch\n        type: object\n        properties:\n          withdrawer_address:\n            type: string\n          pool_id:\n            type: string\n            format: uint64\n            title: id of the target pool\n          pool_coin:\n            type: object\n            properties:\n              denom:\n                type: string\n              amount:\n                type: string\n            description: >-\n              Coin defines a token with a denomination and an amount.\n\n\n              NOTE: The amount field is an Int which implements the custom\n              method\n\n              signatures required by gogoproto.\n        description: >-\n          `MsgWithdrawWithinBatch` defines an `sdk.Msg` type that supports\n          submitting\n\n          a withdraw request to the batch of the liquidity pool.\n\n          Withdraw is submitted to the batch from the Liquidity pool with the\n\n          specified `pool_id`, `pool_coin` of the pool.\n\n          This request is stacked in the batch of the liquidity pool, is not\n          processed\n\n          immediately, and is processed in the `endblock` at the same time as\n          other\n\n          requests.\n\n\n          See:\n\n          https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n    description: >-\n      WithdrawMsgState defines the state of the withdraw message that contains\n\n      state information as the message is processed in the next batch or\n      batches.\n  cosmos.app.v1alpha1.Config:\n    type: object\n    properties:\n      modules:\n        type: array\n        items:\n          type: object\n          properties:\n            name:\n              type: string\n              description: >-\n                name is the unique name of the module within the app. It should\n                be a name\n\n                that persists between different versions of a module so that\n                modules\n\n                can be smoothly upgraded to new versions.\n\n\n                For example, for the module cosmos.bank.module.v1.Module, we may\n                chose\n\n                to simply name the module \"bank\" in the app. When we upgrade to\n\n                cosmos.bank.module.v2.Module, the app-specific name \"bank\" stays\n                the same\n\n                and the framework knows that the v2 module should receive all\n                the same state\n\n                that the v1 module had. Note: modules should provide info on\n                which versions\n\n                they can migrate from in the ModuleDescriptor.can_migration_from\n                field.\n            config:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n              description: >-\n                config is the config object for the module. Module config\n                messages should\n\n                define a ModuleDescriptor using the\n                cosmos.app.v1alpha1.is_module extension.\n            golang_bindings:\n              type: array\n              items:\n                type: object\n                properties:\n                  interface_type:\n                    type: string\n                    title: >-\n                      interface_type is the interface type which will be bound\n                      to a specific implementation type\n                  implementation:\n                    type: string\n                    title: >-\n                      implementation is the implementing type which will be\n                      supplied when an input of type interface is requested\n                description: >-\n                  GolangBinding is an explicit interface type to implementing\n                  type binding for dependency injection.\n              description: >-\n                golang_bindings specifies explicit interface to implementation\n                type bindings which\n\n                depinject uses to resolve interface inputs to provider\n                functions.  The scope of this\n\n                field's configuration is module specific.\n          description: ModuleConfig is a module configuration for an app.\n        description: modules are the module configurations for the app.\n      golang_bindings:\n        type: array\n        items:\n          type: object\n          properties:\n            interface_type:\n              type: string\n              title: >-\n                interface_type is the interface type which will be bound to a\n                specific implementation type\n            implementation:\n              type: string\n              title: >-\n                implementation is the implementing type which will be supplied\n                when an input of type interface is requested\n          description: >-\n            GolangBinding is an explicit interface type to implementing type\n            binding for dependency injection.\n        description: >-\n          golang_bindings specifies explicit interface to implementation type\n          bindings which\n\n          depinject uses to resolve interface inputs to provider functions.  The\n          scope of this\n\n          field's configuration is global (not module specific).\n    description: >-\n      Config represents the configuration for a Cosmos SDK ABCI app.\n\n      It is intended that all state machine logic including the version of\n\n      baseapp and tx handlers (and possibly even Tendermint) that an app needs\n\n      can be described in a config object. For compatibility, the framework\n      should\n\n      allow a mixture of declarative and imperative app wiring, however, apps\n\n      that strive for the maximum ease of maintainability should be able to\n      describe\n\n      their state machine with a config object alone.\n  cosmos.app.v1alpha1.GolangBinding:\n    type: object\n    properties:\n      interface_type:\n        type: string\n        title: >-\n          interface_type is the interface type which will be bound to a specific\n          implementation type\n      implementation:\n        type: string\n        title: >-\n          implementation is the implementing type which will be supplied when an\n          input of type interface is requested\n    description: >-\n      GolangBinding is an explicit interface type to implementing type binding\n      for dependency injection.\n  cosmos.app.v1alpha1.ModuleConfig:\n    type: object\n    properties:\n      name:\n        type: string\n        description: >-\n          name is the unique name of the module within the app. It should be a\n          name\n\n          that persists between different versions of a module so that modules\n\n          can be smoothly upgraded to new versions.\n\n\n          For example, for the module cosmos.bank.module.v1.Module, we may chose\n\n          to simply name the module \"bank\" in the app. When we upgrade to\n\n          cosmos.bank.module.v2.Module, the app-specific name \"bank\" stays the\n          same\n\n          and the framework knows that the v2 module should receive all the same\n          state\n\n          that the v1 module had. Note: modules should provide info on which\n          versions\n\n          they can migrate from in the ModuleDescriptor.can_migration_from\n          field.\n      config:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n        description: >-\n          config is the config object for the module. Module config messages\n          should\n\n          define a ModuleDescriptor using the cosmos.app.v1alpha1.is_module\n          extension.\n      golang_bindings:\n        type: array\n        items:\n          type: object\n          properties:\n            interface_type:\n              type: string\n              title: >-\n                interface_type is the interface type which will be bound to a\n                specific implementation type\n            implementation:\n              type: string\n              title: >-\n                implementation is the implementing type which will be supplied\n                when an input of type interface is requested\n          description: >-\n            GolangBinding is an explicit interface type to implementing type\n            binding for dependency injection.\n        description: >-\n          golang_bindings specifies explicit interface to implementation type\n          bindings which\n\n          depinject uses to resolve interface inputs to provider functions.  The\n          scope of this\n\n          field's configuration is module specific.\n    description: ModuleConfig is a module configuration for an app.\n  cosmos.app.v1alpha1.QueryConfigResponse:\n    type: object\n    properties:\n      config:\n        description: config is the current app config.\n        type: object\n        properties:\n          modules:\n            type: array\n            items:\n              type: object\n              properties:\n                name:\n                  type: string\n                  description: >-\n                    name is the unique name of the module within the app. It\n                    should be a name\n\n                    that persists between different versions of a module so that\n                    modules\n\n                    can be smoothly upgraded to new versions.\n\n\n                    For example, for the module cosmos.bank.module.v1.Module, we\n                    may chose\n\n                    to simply name the module \"bank\" in the app. When we upgrade\n                    to\n\n                    cosmos.bank.module.v2.Module, the app-specific name \"bank\"\n                    stays the same\n\n                    and the framework knows that the v2 module should receive\n                    all the same state\n\n                    that the v1 module had. Note: modules should provide info on\n                    which versions\n\n                    they can migrate from in the\n                    ModuleDescriptor.can_migration_from field.\n                config:\n                  type: object\n                  properties:\n                    type_url:\n                      type: string\n                    value:\n                      type: string\n                      format: byte\n                  description: >-\n                    config is the config object for the module. Module config\n                    messages should\n\n                    define a ModuleDescriptor using the\n                    cosmos.app.v1alpha1.is_module extension.\n                golang_bindings:\n                  type: array\n                  items:\n                    type: object\n                    properties:\n                      interface_type:\n                        type: string\n                        title: >-\n                          interface_type is the interface type which will be\n                          bound to a specific implementation type\n                      implementation:\n                        type: string\n                        title: >-\n                          implementation is the implementing type which will be\n                          supplied when an input of type interface is requested\n                    description: >-\n                      GolangBinding is an explicit interface type to\n                      implementing type binding for dependency injection.\n                  description: >-\n                    golang_bindings specifies explicit interface to\n                    implementation type bindings which\n\n                    depinject uses to resolve interface inputs to provider\n                    functions.  The scope of this\n\n                    field's configuration is module specific.\n              description: ModuleConfig is a module configuration for an app.\n            description: modules are the module configurations for the app.\n          golang_bindings:\n            type: array\n            items:\n              type: object\n              properties:\n                interface_type:\n                  type: string\n                  title: >-\n                    interface_type is the interface type which will be bound to\n                    a specific implementation type\n                implementation:\n                  type: string\n                  title: >-\n                    implementation is the implementing type which will be\n                    supplied when an input of type interface is requested\n              description: >-\n                GolangBinding is an explicit interface type to implementing type\n                binding for dependency injection.\n            description: >-\n              golang_bindings specifies explicit interface to implementation\n              type bindings which\n\n              depinject uses to resolve interface inputs to provider functions. \n              The scope of this\n\n              field's configuration is global (not module specific).\n    description: QueryConfigRequest is the Query/Config response type.\n  cosmwasm.wasm.v1.AbsoluteTxPosition:\n    type: object\n    properties:\n      block_height:\n        type: string\n        format: uint64\n        title: BlockHeight is the block the contract was created at\n      tx_index:\n        type: string\n        format: uint64\n        title: >-\n          TxIndex is a monotonic counter within the block (actual transaction\n          index,\n\n          or gas consumed)\n    description: |-\n      AbsoluteTxPosition is a unique transaction position that allows for global\n      ordering of transactions.\n  cosmwasm.wasm.v1.AccessConfig:\n    type: object\n    properties:\n      permission:\n        type: string\n        enum:\n          - ACCESS_TYPE_UNSPECIFIED\n          - ACCESS_TYPE_NOBODY\n          - ACCESS_TYPE_EVERYBODY\n          - ACCESS_TYPE_ANY_OF_ADDRESSES\n        default: ACCESS_TYPE_UNSPECIFIED\n        description: >-\n          - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder for empty\n          value\n           - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n           - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n           - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n        title: AccessType permission types\n      addresses:\n        type: array\n        items:\n          type: string\n    description: AccessConfig access control type.\n  cosmwasm.wasm.v1.AccessType:\n    type: string\n    enum:\n      - ACCESS_TYPE_UNSPECIFIED\n      - ACCESS_TYPE_NOBODY\n      - ACCESS_TYPE_EVERYBODY\n      - ACCESS_TYPE_ANY_OF_ADDRESSES\n    default: ACCESS_TYPE_UNSPECIFIED\n    description: >-\n      - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder for empty\n      value\n       - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n       - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n       - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n    title: AccessType permission types\n  cosmwasm.wasm.v1.CodeInfoResponse:\n    type: object\n    properties:\n      code_id:\n        type: string\n        format: uint64\n      creator:\n        type: string\n      data_hash:\n        type: string\n        format: byte\n      instantiate_permission:\n        type: object\n        properties:\n          permission:\n            type: string\n            enum:\n              - ACCESS_TYPE_UNSPECIFIED\n              - ACCESS_TYPE_NOBODY\n              - ACCESS_TYPE_EVERYBODY\n              - ACCESS_TYPE_ANY_OF_ADDRESSES\n            default: ACCESS_TYPE_UNSPECIFIED\n            description: >-\n              - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder for\n              empty value\n               - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n               - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n               - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n            title: AccessType permission types\n          addresses:\n            type: array\n            items:\n              type: string\n        description: AccessConfig access control type.\n    title: CodeInfoResponse contains code meta data from CodeInfo\n  cosmwasm.wasm.v1.ContractCodeHistoryEntry:\n    type: object\n    properties:\n      operation:\n        type: string\n        enum:\n          - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED\n          - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT\n          - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE\n          - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS\n        default: CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED\n        description: >-\n          - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED:\n          ContractCodeHistoryOperationTypeUnspecified placeholder for empty\n          value\n           - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT: ContractCodeHistoryOperationTypeInit on chain contract instantiation\n           - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE: ContractCodeHistoryOperationTypeMigrate code migration\n           - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS: ContractCodeHistoryOperationTypeGenesis based on genesis data\n        title: ContractCodeHistoryOperationType actions that caused a code change\n      code_id:\n        type: string\n        format: uint64\n        title: CodeID is the reference to the stored WASM code\n      updated:\n        description: Updated Tx position when the operation was executed.\n        type: object\n        properties:\n          block_height:\n            type: string\n            format: uint64\n            title: BlockHeight is the block the contract was created at\n          tx_index:\n            type: string\n            format: uint64\n            title: >-\n              TxIndex is a monotonic counter within the block (actual\n              transaction index,\n\n              or gas consumed)\n      msg:\n        type: string\n        format: byte\n    description: ContractCodeHistoryEntry metadata to a contract.\n  cosmwasm.wasm.v1.ContractCodeHistoryOperationType:\n    type: string\n    enum:\n      - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED\n      - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT\n      - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE\n      - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS\n    default: CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED\n    description: >-\n      - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED:\n      ContractCodeHistoryOperationTypeUnspecified placeholder for empty value\n       - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT: ContractCodeHistoryOperationTypeInit on chain contract instantiation\n       - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE: ContractCodeHistoryOperationTypeMigrate code migration\n       - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS: ContractCodeHistoryOperationTypeGenesis based on genesis data\n    title: ContractCodeHistoryOperationType actions that caused a code change\n  cosmwasm.wasm.v1.ContractInfo:\n    type: object\n    properties:\n      code_id:\n        type: string\n        format: uint64\n        title: CodeID is the reference to the stored Wasm code\n      creator:\n        type: string\n        title: Creator address who initially instantiated the contract\n      admin:\n        type: string\n        title: Admin is an optional address that can execute migrations\n      label:\n        type: string\n        description: Label is optional metadata to be stored with a contract instance.\n      created:\n        description: Created Tx position when the contract was instantiated.\n        type: object\n        properties:\n          block_height:\n            type: string\n            format: uint64\n            title: BlockHeight is the block the contract was created at\n          tx_index:\n            type: string\n            format: uint64\n            title: >-\n              TxIndex is a monotonic counter within the block (actual\n              transaction index,\n\n              or gas consumed)\n      ibc_port_id:\n        type: string\n      extension:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n        description: |-\n          Extension is an extension point to store custom metadata within the\n          persistence model.\n    title: ContractInfo stores a WASM contract instance\n  cosmwasm.wasm.v1.Model:\n    type: object\n    properties:\n      key:\n        type: string\n        format: byte\n        title: hex-encode key to read it better (this is often ascii)\n      value:\n        type: string\n        format: byte\n        title: base64-encode raw value\n    title: Model is a struct that holds a KV pair\n  cosmwasm.wasm.v1.Params:\n    type: object\n    properties:\n      code_upload_access:\n        type: object\n        properties:\n          permission:\n            type: string\n            enum:\n              - ACCESS_TYPE_UNSPECIFIED\n              - ACCESS_TYPE_NOBODY\n              - ACCESS_TYPE_EVERYBODY\n              - ACCESS_TYPE_ANY_OF_ADDRESSES\n            default: ACCESS_TYPE_UNSPECIFIED\n            description: >-\n              - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder for\n              empty value\n               - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n               - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n               - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n            title: AccessType permission types\n          addresses:\n            type: array\n            items:\n              type: string\n        description: AccessConfig access control type.\n      instantiate_default_permission:\n        type: string\n        enum:\n          - ACCESS_TYPE_UNSPECIFIED\n          - ACCESS_TYPE_NOBODY\n          - ACCESS_TYPE_EVERYBODY\n          - ACCESS_TYPE_ANY_OF_ADDRESSES\n        default: ACCESS_TYPE_UNSPECIFIED\n        description: >-\n          - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder for empty\n          value\n           - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n           - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n           - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n        title: AccessType permission types\n    description: Params defines the set of wasm parameters.\n  cosmwasm.wasm.v1.QueryAllContractStateResponse:\n    type: object\n    properties:\n      models:\n        type: array\n        items:\n          type: object\n          properties:\n            key:\n              type: string\n              format: byte\n              title: hex-encode key to read it better (this is often ascii)\n            value:\n              type: string\n              format: byte\n              title: base64-encode raw value\n          title: Model is a struct that holds a KV pair\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    title: |-\n      QueryAllContractStateResponse is the response type for the\n      Query/AllContractState RPC method\n  cosmwasm.wasm.v1.QueryCodeResponse:\n    type: object\n    properties:\n      code_info:\n        type: object\n        properties:\n          code_id:\n            type: string\n            format: uint64\n          creator:\n            type: string\n          data_hash:\n            type: string\n            format: byte\n          instantiate_permission:\n            type: object\n            properties:\n              permission:\n                type: string\n                enum:\n                  - ACCESS_TYPE_UNSPECIFIED\n                  - ACCESS_TYPE_NOBODY\n                  - ACCESS_TYPE_EVERYBODY\n                  - ACCESS_TYPE_ANY_OF_ADDRESSES\n                default: ACCESS_TYPE_UNSPECIFIED\n                description: >-\n                  - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder\n                  for empty value\n                   - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n                   - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n                   - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n                title: AccessType permission types\n              addresses:\n                type: array\n                items:\n                  type: string\n            description: AccessConfig access control type.\n        title: CodeInfoResponse contains code meta data from CodeInfo\n      data:\n        type: string\n        format: byte\n    title: QueryCodeResponse is the response type for the Query/Code RPC method\n  cosmwasm.wasm.v1.QueryCodesResponse:\n    type: object\n    properties:\n      code_infos:\n        type: array\n        items:\n          type: object\n          properties:\n            code_id:\n              type: string\n              format: uint64\n            creator:\n              type: string\n            data_hash:\n              type: string\n              format: byte\n            instantiate_permission:\n              type: object\n              properties:\n                permission:\n                  type: string\n                  enum:\n                    - ACCESS_TYPE_UNSPECIFIED\n                    - ACCESS_TYPE_NOBODY\n                    - ACCESS_TYPE_EVERYBODY\n                    - ACCESS_TYPE_ANY_OF_ADDRESSES\n                  default: ACCESS_TYPE_UNSPECIFIED\n                  description: >-\n                    - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder\n                    for empty value\n                     - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n                     - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n                     - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n                  title: AccessType permission types\n                addresses:\n                  type: array\n                  items:\n                    type: string\n              description: AccessConfig access control type.\n          title: CodeInfoResponse contains code meta data from CodeInfo\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    title: QueryCodesResponse is the response type for the Query/Codes RPC method\n  cosmwasm.wasm.v1.QueryContractHistoryResponse:\n    type: object\n    properties:\n      entries:\n        type: array\n        items:\n          type: object\n          properties:\n            operation:\n              type: string\n              enum:\n                - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED\n                - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT\n                - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE\n                - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS\n              default: CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED\n              description: >-\n                - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED:\n                ContractCodeHistoryOperationTypeUnspecified placeholder for\n                empty value\n                 - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT: ContractCodeHistoryOperationTypeInit on chain contract instantiation\n                 - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE: ContractCodeHistoryOperationTypeMigrate code migration\n                 - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS: ContractCodeHistoryOperationTypeGenesis based on genesis data\n              title: >-\n                ContractCodeHistoryOperationType actions that caused a code\n                change\n            code_id:\n              type: string\n              format: uint64\n              title: CodeID is the reference to the stored WASM code\n            updated:\n              description: Updated Tx position when the operation was executed.\n              type: object\n              properties:\n                block_height:\n                  type: string\n                  format: uint64\n                  title: BlockHeight is the block the contract was created at\n                tx_index:\n                  type: string\n                  format: uint64\n                  title: >-\n                    TxIndex is a monotonic counter within the block (actual\n                    transaction index,\n\n                    or gas consumed)\n            msg:\n              type: string\n              format: byte\n          description: ContractCodeHistoryEntry metadata to a contract.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    title: |-\n      QueryContractHistoryResponse is the response type for the\n      Query/ContractHistory RPC method\n  cosmwasm.wasm.v1.QueryContractInfoResponse:\n    type: object\n    properties:\n      address:\n        type: string\n        title: address is the address of the contract\n      contract_info:\n        type: object\n        properties:\n          code_id:\n            type: string\n            format: uint64\n            title: CodeID is the reference to the stored Wasm code\n          creator:\n            type: string\n            title: Creator address who initially instantiated the contract\n          admin:\n            type: string\n            title: Admin is an optional address that can execute migrations\n          label:\n            type: string\n            description: Label is optional metadata to be stored with a contract instance.\n          created:\n            description: Created Tx position when the contract was instantiated.\n            type: object\n            properties:\n              block_height:\n                type: string\n                format: uint64\n                title: BlockHeight is the block the contract was created at\n              tx_index:\n                type: string\n                format: uint64\n                title: >-\n                  TxIndex is a monotonic counter within the block (actual\n                  transaction index,\n\n                  or gas consumed)\n          ibc_port_id:\n            type: string\n          extension:\n            type: object\n            properties:\n              type_url:\n                type: string\n              value:\n                type: string\n                format: byte\n            description: >-\n              Extension is an extension point to store custom metadata within\n              the\n\n              persistence model.\n        title: ContractInfo stores a WASM contract instance\n    title: >-\n      QueryContractInfoResponse is the response type for the Query/ContractInfo\n      RPC\n\n      method\n  cosmwasm.wasm.v1.QueryContractsByCodeResponse:\n    type: object\n    properties:\n      contracts:\n        type: array\n        items:\n          type: string\n        title: contracts are a set of contract addresses\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    title: |-\n      QueryContractsByCodeResponse is the response type for the\n      Query/ContractsByCode RPC method\n  cosmwasm.wasm.v1.QueryContractsByCreatorResponse:\n    type: object\n    properties:\n      contract_addresses:\n        type: array\n        items:\n          type: string\n        title: ContractAddresses result set\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: |-\n      QueryContractsByCreatorResponse is the response type for the\n      Query/ContractsByCreator RPC method.\n  cosmwasm.wasm.v1.QueryParamsResponse:\n    type: object\n    properties:\n      params:\n        description: params defines the parameters of the module.\n        type: object\n        properties:\n          code_upload_access:\n            type: object\n            properties:\n              permission:\n                type: string\n                enum:\n                  - ACCESS_TYPE_UNSPECIFIED\n                  - ACCESS_TYPE_NOBODY\n                  - ACCESS_TYPE_EVERYBODY\n                  - ACCESS_TYPE_ANY_OF_ADDRESSES\n                default: ACCESS_TYPE_UNSPECIFIED\n                description: >-\n                  - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder\n                  for empty value\n                   - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n                   - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n                   - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n                title: AccessType permission types\n              addresses:\n                type: array\n                items:\n                  type: string\n            description: AccessConfig access control type.\n          instantiate_default_permission:\n            type: string\n            enum:\n              - ACCESS_TYPE_UNSPECIFIED\n              - ACCESS_TYPE_NOBODY\n              - ACCESS_TYPE_EVERYBODY\n              - ACCESS_TYPE_ANY_OF_ADDRESSES\n            default: ACCESS_TYPE_UNSPECIFIED\n            description: >-\n              - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified placeholder for\n              empty value\n               - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden\n               - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted\n               - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses\n            title: AccessType permission types\n    description: QueryParamsResponse is the response type for the Query/Params RPC method.\n  cosmwasm.wasm.v1.QueryPinnedCodesResponse:\n    type: object\n    properties:\n      code_ids:\n        type: array\n        items:\n          type: string\n          format: uint64\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    title: |-\n      QueryPinnedCodesResponse is the response type for the\n      Query/PinnedCodes RPC method\n  cosmwasm.wasm.v1.QueryRawContractStateResponse:\n    type: object\n    properties:\n      data:\n        type: string\n        format: byte\n        title: Data contains the raw store data\n    title: |-\n      QueryRawContractStateResponse is the response type for the\n      Query/RawContractState RPC method\n  cosmwasm.wasm.v1.QuerySmartContractStateResponse:\n    type: object\n    properties:\n      data:\n        type: string\n        format: byte\n        title: Data contains the json data returned from the smart contract\n    title: |-\n      QuerySmartContractStateResponse is the response type for the\n      Query/SmartContractState RPC method\n  cyber.bandwidth.v1beta1.NeuronBandwidth:\n    type: object\n    properties:\n      neuron:\n        type: string\n      remained_value:\n        type: string\n        format: uint64\n      last_updated_block:\n        type: string\n        format: uint64\n      max_value:\n        type: string\n        format: uint64\n  cyber.bandwidth.v1beta1.Params:\n    type: object\n    properties:\n      recovery_period:\n        type: string\n        format: uint64\n      adjust_price_period:\n        type: string\n        format: uint64\n      base_price:\n        type: string\n      base_load:\n        type: string\n      max_block_bandwidth:\n        type: string\n        format: uint64\n  cyber.bandwidth.v1beta1.QueryLoadResponse:\n    type: object\n    properties:\n      load:\n        type: string\n  cyber.bandwidth.v1beta1.QueryNeuronBandwidthResponse:\n    type: object\n    properties:\n      neuron_bandwidth:\n        type: object\n        properties:\n          neuron:\n            type: string\n          remained_value:\n            type: string\n            format: uint64\n          last_updated_block:\n            type: string\n            format: uint64\n          max_value:\n            type: string\n            format: uint64\n  cyber.bandwidth.v1beta1.QueryParamsResponse:\n    type: object\n    properties:\n      params:\n        type: object\n        properties:\n          recovery_period:\n            type: string\n            format: uint64\n          adjust_price_period:\n            type: string\n            format: uint64\n          base_price:\n            type: string\n          base_load:\n            type: string\n          max_block_bandwidth:\n            type: string\n            format: uint64\n  cyber.bandwidth.v1beta1.QueryPriceResponse:\n    type: object\n    properties:\n      price:\n        type: string\n  cyber.bandwidth.v1beta1.QueryTotalBandwidthResponse:\n    type: object\n    properties:\n      total_bandwidth:\n        type: string\n        format: uint64\n  cosmos.base.tendermint.v1beta1.ABCIQueryResponse:\n    type: object\n    properties:\n      code:\n        type: integer\n        format: int64\n      log:\n        type: string\n      info:\n        type: string\n      index:\n        type: string\n        format: int64\n      key:\n        type: string\n        format: byte\n      value:\n        type: string\n        format: byte\n      proof_ops:\n        type: object\n        properties:\n          ops:\n            type: array\n            items:\n              type: object\n              properties:\n                type:\n                  type: string\n                key:\n                  type: string\n                  format: byte\n                data:\n                  type: string\n                  format: byte\n              description: >-\n                ProofOp defines an operation used for calculating Merkle root.\n                The data could\n\n                be arbitrary format, providing necessary data for example\n                neighbouring node\n\n                hash.\n\n\n                Note: This type is a duplicate of the ProofOp proto type defined\n                in Tendermint.\n        description: >-\n          ProofOps is Merkle proof defined by the list of ProofOps.\n\n\n          Note: This type is a duplicate of the ProofOps proto type defined in\n          Tendermint.\n      height:\n        type: string\n        format: int64\n      codespace:\n        type: string\n    description: >-\n      ABCIQueryResponse defines the response structure for the ABCIQuery gRPC\n      query.\n\n\n      Note: This type is a duplicate of the ResponseQuery proto type defined in\n\n      Tendermint.\n  cosmos.base.tendermint.v1beta1.Block:\n    type: object\n    properties:\n      header:\n        type: object\n        properties:\n          version:\n            title: basic block info\n            type: object\n            properties:\n              block:\n                type: string\n                format: uint64\n              app:\n                type: string\n                format: uint64\n            description: >-\n              Consensus captures the consensus rules for processing a block in\n              the blockchain,\n\n              including all blockchain data structures and the rules of the\n              application's\n\n              state transition machine.\n          chain_id:\n            type: string\n          height:\n            type: string\n            format: int64\n          time:\n            type: string\n            format: date-time\n          last_block_id:\n            type: object\n            properties:\n              hash:\n                type: string\n                format: byte\n              part_set_header:\n                type: object\n                properties:\n                  total:\n                    type: integer\n                    format: int64\n                  hash:\n                    type: string\n                    format: byte\n                title: PartsetHeader\n            title: BlockID\n          last_commit_hash:\n            type: string\n            format: byte\n            title: hashes of block data\n          data_hash:\n            type: string\n            format: byte\n          validators_hash:\n            type: string\n            format: byte\n            title: hashes from the app output from the prev block\n          next_validators_hash:\n            type: string\n            format: byte\n          consensus_hash:\n            type: string\n            format: byte\n          app_hash:\n            type: string\n            format: byte\n          last_results_hash:\n            type: string\n            format: byte\n          evidence_hash:\n            type: string\n            format: byte\n            title: consensus info\n          proposer_address:\n            type: string\n            description: >-\n              proposer_address is the original block proposer address, formatted\n              as a Bech32 string.\n\n              In Tendermint, this type is `bytes`, but in the SDK, we convert it\n              to a Bech32 string\n\n              for better UX.\n        description: Header defines the structure of a Tendermint block header.\n      data:\n        type: object\n        properties:\n          txs:\n            type: array\n            items:\n              type: string\n              format: byte\n            description: >-\n              Txs that will be applied by state @ block.Height+1.\n\n              NOTE: not all txs here are valid.  We're just agreeing on the\n              order first.\n\n              This means that block.AppHash does not include these txs.\n        title: Data contains the set of transactions included in the block\n      evidence:\n        type: object\n        properties:\n          evidence:\n            type: array\n            items:\n              type: object\n              properties:\n                duplicate_vote_evidence:\n                  type: object\n                  properties:\n                    vote_a:\n                      type: object\n                      properties:\n                        type:\n                          type: string\n                          enum:\n                            - SIGNED_MSG_TYPE_UNKNOWN\n                            - SIGNED_MSG_TYPE_PREVOTE\n                            - SIGNED_MSG_TYPE_PRECOMMIT\n                            - SIGNED_MSG_TYPE_PROPOSAL\n                          default: SIGNED_MSG_TYPE_UNKNOWN\n                          description: >-\n                            SignedMsgType is a type of signed message in the\n                            consensus.\n\n                             - SIGNED_MSG_TYPE_PREVOTE: Votes\n                             - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                        height:\n                          type: string\n                          format: int64\n                        round:\n                          type: integer\n                          format: int32\n                        block_id:\n                          type: object\n                          properties:\n                            hash:\n                              type: string\n                              format: byte\n                            part_set_header:\n                              type: object\n                              properties:\n                                total:\n                                  type: integer\n                                  format: int64\n                                hash:\n                                  type: string\n                                  format: byte\n                              title: PartsetHeader\n                          title: BlockID\n                        timestamp:\n                          type: string\n                          format: date-time\n                        validator_address:\n                          type: string\n                          format: byte\n                        validator_index:\n                          type: integer\n                          format: int32\n                        signature:\n                          type: string\n                          format: byte\n                      description: >-\n                        Vote represents a prevote, precommit, or commit vote\n                        from validators for\n\n                        consensus.\n                    vote_b:\n                      type: object\n                      properties:\n                        type:\n                          type: string\n                          enum:\n                            - SIGNED_MSG_TYPE_UNKNOWN\n                            - SIGNED_MSG_TYPE_PREVOTE\n                            - SIGNED_MSG_TYPE_PRECOMMIT\n                            - SIGNED_MSG_TYPE_PROPOSAL\n                          default: SIGNED_MSG_TYPE_UNKNOWN\n                          description: >-\n                            SignedMsgType is a type of signed message in the\n                            consensus.\n\n                             - SIGNED_MSG_TYPE_PREVOTE: Votes\n                             - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                        height:\n                          type: string\n                          format: int64\n                        round:\n                          type: integer\n                          format: int32\n                        block_id:\n                          type: object\n                          properties:\n                            hash:\n                              type: string\n                              format: byte\n                            part_set_header:\n                              type: object\n                              properties:\n                                total:\n                                  type: integer\n                                  format: int64\n                                hash:\n                                  type: string\n                                  format: byte\n                              title: PartsetHeader\n                          title: BlockID\n                        timestamp:\n                          type: string\n                          format: date-time\n                        validator_address:\n                          type: string\n                          format: byte\n                        validator_index:\n                          type: integer\n                          format: int32\n                        signature:\n                          type: string\n                          format: byte\n                      description: >-\n                        Vote represents a prevote, precommit, or commit vote\n                        from validators for\n\n                        consensus.\n                    total_voting_power:\n                      type: string\n                      format: int64\n                    validator_power:\n                      type: string\n                      format: int64\n                    timestamp:\n                      type: string\n                      format: date-time\n                  description: >-\n                    DuplicateVoteEvidence contains evidence of a validator\n                    signed two conflicting votes.\n                light_client_attack_evidence:\n                  type: object\n                  properties:\n                    conflicting_block:\n                      type: object\n                      properties:\n                        signed_header:\n                          type: object\n                          properties:\n                            header:\n                              type: object\n                              properties:\n                                version:\n                                  title: basic block info\n                                  type: object\n                                  properties:\n                                    block:\n                                      type: string\n                                      format: uint64\n                                    app:\n                                      type: string\n                                      format: uint64\n                                  description: >-\n                                    Consensus captures the consensus rules for\n                                    processing a block in the blockchain,\n\n                                    including all blockchain data structures and\n                                    the rules of the application's\n\n                                    state transition machine.\n                                chain_id:\n                                  type: string\n                                height:\n                                  type: string\n                                  format: int64\n                                time:\n                                  type: string\n                                  format: date-time\n                                last_block_id:\n                                  title: prev block info\n                                  type: object\n                                  properties:\n                                    hash:\n                                      type: string\n                                      format: byte\n                                    part_set_header:\n                                      type: object\n                                      properties:\n                                        total:\n                                          type: integer\n                                          format: int64\n                                        hash:\n                                          type: string\n                                          format: byte\n                                      title: PartsetHeader\n                                last_commit_hash:\n                                  type: string\n                                  format: byte\n                                  title: hashes of block data\n                                data_hash:\n                                  type: string\n                                  format: byte\n                                validators_hash:\n                                  type: string\n                                  format: byte\n                                  title: >-\n                                    hashes from the app output from the prev\n                                    block\n                                next_validators_hash:\n                                  type: string\n                                  format: byte\n                                consensus_hash:\n                                  type: string\n                                  format: byte\n                                app_hash:\n                                  type: string\n                                  format: byte\n                                last_results_hash:\n                                  type: string\n                                  format: byte\n                                evidence_hash:\n                                  type: string\n                                  format: byte\n                                  title: consensus info\n                                proposer_address:\n                                  type: string\n                                  format: byte\n                              description: Header defines the structure of a block header.\n                            commit:\n                              type: object\n                              properties:\n                                height:\n                                  type: string\n                                  format: int64\n                                round:\n                                  type: integer\n                                  format: int32\n                                block_id:\n                                  type: object\n                                  properties:\n                                    hash:\n                                      type: string\n                                      format: byte\n                                    part_set_header:\n                                      type: object\n                                      properties:\n                                        total:\n                                          type: integer\n                                          format: int64\n                                        hash:\n                                          type: string\n                                          format: byte\n                                      title: PartsetHeader\n                                  title: BlockID\n                                signatures:\n                                  type: array\n                                  items:\n                                    type: object\n                                    properties:\n                                      block_id_flag:\n                                        type: string\n                                        enum:\n                                          - BLOCK_ID_FLAG_UNKNOWN\n                                          - BLOCK_ID_FLAG_ABSENT\n                                          - BLOCK_ID_FLAG_COMMIT\n                                          - BLOCK_ID_FLAG_NIL\n                                        default: BLOCK_ID_FLAG_UNKNOWN\n                                        title: >-\n                                          BlockIdFlag indicates which BlcokID the\n                                          signature is for\n                                      validator_address:\n                                        type: string\n                                        format: byte\n                                      timestamp:\n                                        type: string\n                                        format: date-time\n                                      signature:\n                                        type: string\n                                        format: byte\n                                    description: >-\n                                      CommitSig is a part of the Vote included\n                                      in a Commit.\n                              description: >-\n                                Commit contains the evidence that a block was\n                                committed by a set of validators.\n                        validator_set:\n                          type: object\n                          properties:\n                            validators:\n                              type: array\n                              items:\n                                type: object\n                                properties:\n                                  address:\n                                    type: string\n                                    format: byte\n                                  pub_key:\n                                    type: object\n                                    properties:\n                                      ed25519:\n                                        type: string\n                                        format: byte\n                                      secp256k1:\n                                        type: string\n                                        format: byte\n                                    title: >-\n                                      PublicKey defines the keys available for\n                                      use with Validators\n                                  voting_power:\n                                    type: string\n                                    format: int64\n                                  proposer_priority:\n                                    type: string\n                                    format: int64\n                            proposer:\n                              type: object\n                              properties:\n                                address:\n                                  type: string\n                                  format: byte\n                                pub_key:\n                                  type: object\n                                  properties:\n                                    ed25519:\n                                      type: string\n                                      format: byte\n                                    secp256k1:\n                                      type: string\n                                      format: byte\n                                  title: >-\n                                    PublicKey defines the keys available for use\n                                    with Validators\n                                voting_power:\n                                  type: string\n                                  format: int64\n                                proposer_priority:\n                                  type: string\n                                  format: int64\n                            total_voting_power:\n                              type: string\n                              format: int64\n                    common_height:\n                      type: string\n                      format: int64\n                    byzantine_validators:\n                      type: array\n                      items:\n                        type: object\n                        properties:\n                          address:\n                            type: string\n                            format: byte\n                          pub_key:\n                            type: object\n                            properties:\n                              ed25519:\n                                type: string\n                                format: byte\n                              secp256k1:\n                                type: string\n                                format: byte\n                            title: >-\n                              PublicKey defines the keys available for use with\n                              Validators\n                          voting_power:\n                            type: string\n                            format: int64\n                          proposer_priority:\n                            type: string\n                            format: int64\n                    total_voting_power:\n                      type: string\n                      format: int64\n                    timestamp:\n                      type: string\n                      format: date-time\n                  description: >-\n                    LightClientAttackEvidence contains evidence of a set of\n                    validators attempting to mislead a light client.\n      last_commit:\n        type: object\n        properties:\n          height:\n            type: string\n            format: int64\n          round:\n            type: integer\n            format: int32\n          block_id:\n            type: object\n            properties:\n              hash:\n                type: string\n                format: byte\n              part_set_header:\n                type: object\n                properties:\n                  total:\n                    type: integer\n                    format: int64\n                  hash:\n                    type: string\n                    format: byte\n                title: PartsetHeader\n            title: BlockID\n          signatures:\n            type: array\n            items:\n              type: object\n              properties:\n                block_id_flag:\n                  type: string\n                  enum:\n                    - BLOCK_ID_FLAG_UNKNOWN\n                    - BLOCK_ID_FLAG_ABSENT\n                    - BLOCK_ID_FLAG_COMMIT\n                    - BLOCK_ID_FLAG_NIL\n                  default: BLOCK_ID_FLAG_UNKNOWN\n                  title: BlockIdFlag indicates which BlcokID the signature is for\n                validator_address:\n                  type: string\n                  format: byte\n                timestamp:\n                  type: string\n                  format: date-time\n                signature:\n                  type: string\n                  format: byte\n              description: CommitSig is a part of the Vote included in a Commit.\n        description: >-\n          Commit contains the evidence that a block was committed by a set of\n          validators.\n    description: |-\n      Block is tendermint type Block, with the Header proposer address\n      field converted to bech32 string.\n  cosmos.base.tendermint.v1beta1.GetBlockByHeightResponse:\n    type: object\n    properties:\n      block_id:\n        type: object\n        properties:\n          hash:\n            type: string\n            format: byte\n          part_set_header:\n            type: object\n            properties:\n              total:\n                type: integer\n                format: int64\n              hash:\n                type: string\n                format: byte\n            title: PartsetHeader\n        title: BlockID\n      block:\n        type: object\n        properties:\n          header:\n            type: object\n            properties:\n              version:\n                title: basic block info\n                type: object\n                properties:\n                  block:\n                    type: string\n                    format: uint64\n                  app:\n                    type: string\n                    format: uint64\n                description: >-\n                  Consensus captures the consensus rules for processing a block\n                  in the blockchain,\n\n                  including all blockchain data structures and the rules of the\n                  application's\n\n                  state transition machine.\n              chain_id:\n                type: string\n              height:\n                type: string\n                format: int64\n              time:\n                type: string\n                format: date-time\n              last_block_id:\n                title: prev block info\n                type: object\n                properties:\n                  hash:\n                    type: string\n                    format: byte\n                  part_set_header:\n                    type: object\n                    properties:\n                      total:\n                        type: integer\n                        format: int64\n                      hash:\n                        type: string\n                        format: byte\n                    title: PartsetHeader\n              last_commit_hash:\n                type: string\n                format: byte\n                title: hashes of block data\n              data_hash:\n                type: string\n                format: byte\n              validators_hash:\n                type: string\n                format: byte\n                title: hashes from the app output from the prev block\n              next_validators_hash:\n                type: string\n                format: byte\n              consensus_hash:\n                type: string\n                format: byte\n              app_hash:\n                type: string\n                format: byte\n              last_results_hash:\n                type: string\n                format: byte\n              evidence_hash:\n                type: string\n                format: byte\n                title: consensus info\n              proposer_address:\n                type: string\n                format: byte\n            description: Header defines the structure of a block header.\n          data:\n            type: object\n            properties:\n              txs:\n                type: array\n                items:\n                  type: string\n                  format: byte\n                description: >-\n                  Txs that will be applied by state @ block.Height+1.\n\n                  NOTE: not all txs here are valid.  We're just agreeing on the\n                  order first.\n\n                  This means that block.AppHash does not include these txs.\n            title: Data contains the set of transactions included in the block\n          evidence:\n            type: object\n            properties:\n              evidence:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    duplicate_vote_evidence:\n                      type: object\n                      properties:\n                        vote_a:\n                          type: object\n                          properties:\n                            type:\n                              type: string\n                              enum:\n                                - SIGNED_MSG_TYPE_UNKNOWN\n                                - SIGNED_MSG_TYPE_PREVOTE\n                                - SIGNED_MSG_TYPE_PRECOMMIT\n                                - SIGNED_MSG_TYPE_PROPOSAL\n                              default: SIGNED_MSG_TYPE_UNKNOWN\n                              description: >-\n                                SignedMsgType is a type of signed message in the\n                                consensus.\n\n                                 - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                 - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                            height:\n                              type: string\n                              format: int64\n                            round:\n                              type: integer\n                              format: int32\n                            block_id:\n                              type: object\n                              properties:\n                                hash:\n                                  type: string\n                                  format: byte\n                                part_set_header:\n                                  type: object\n                                  properties:\n                                    total:\n                                      type: integer\n                                      format: int64\n                                    hash:\n                                      type: string\n                                      format: byte\n                                  title: PartsetHeader\n                              title: BlockID\n                            timestamp:\n                              type: string\n                              format: date-time\n                            validator_address:\n                              type: string\n                              format: byte\n                            validator_index:\n                              type: integer\n                              format: int32\n                            signature:\n                              type: string\n                              format: byte\n                          description: >-\n                            Vote represents a prevote, precommit, or commit vote\n                            from validators for\n\n                            consensus.\n                        vote_b:\n                          type: object\n                          properties:\n                            type:\n                              type: string\n                              enum:\n                                - SIGNED_MSG_TYPE_UNKNOWN\n                                - SIGNED_MSG_TYPE_PREVOTE\n                                - SIGNED_MSG_TYPE_PRECOMMIT\n                                - SIGNED_MSG_TYPE_PROPOSAL\n                              default: SIGNED_MSG_TYPE_UNKNOWN\n                              description: >-\n                                SignedMsgType is a type of signed message in the\n                                consensus.\n\n                                 - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                 - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                            height:\n                              type: string\n                              format: int64\n                            round:\n                              type: integer\n                              format: int32\n                            block_id:\n                              type: object\n                              properties:\n                                hash:\n                                  type: string\n                                  format: byte\n                                part_set_header:\n                                  type: object\n                                  properties:\n                                    total:\n                                      type: integer\n                                      format: int64\n                                    hash:\n                                      type: string\n                                      format: byte\n                                  title: PartsetHeader\n                              title: BlockID\n                            timestamp:\n                              type: string\n                              format: date-time\n                            validator_address:\n                              type: string\n                              format: byte\n                            validator_index:\n                              type: integer\n                              format: int32\n                            signature:\n                              type: string\n                              format: byte\n                          description: >-\n                            Vote represents a prevote, precommit, or commit vote\n                            from validators for\n\n                            consensus.\n                        total_voting_power:\n                          type: string\n                          format: int64\n                        validator_power:\n                          type: string\n                          format: int64\n                        timestamp:\n                          type: string\n                          format: date-time\n                      description: >-\n                        DuplicateVoteEvidence contains evidence of a validator\n                        signed two conflicting votes.\n                    light_client_attack_evidence:\n                      type: object\n                      properties:\n                        conflicting_block:\n                          type: object\n                          properties:\n                            signed_header:\n                              type: object\n                              properties:\n                                header:\n                                  type: object\n                                  properties:\n                                    version:\n                                      title: basic block info\n                                      type: object\n                                      properties:\n                                        block:\n                                          type: string\n                                          format: uint64\n                                        app:\n                                          type: string\n                                          format: uint64\n                                      description: >-\n                                        Consensus captures the consensus rules\n                                        for processing a block in the\n                                        blockchain,\n\n                                        including all blockchain data structures\n                                        and the rules of the application's\n\n                                        state transition machine.\n                                    chain_id:\n                                      type: string\n                                    height:\n                                      type: string\n                                      format: int64\n                                    time:\n                                      type: string\n                                      format: date-time\n                                    last_block_id:\n                                      title: prev block info\n                                      type: object\n                                      properties:\n                                        hash:\n                                          type: string\n                                          format: byte\n                                        part_set_header:\n                                          type: object\n                                          properties:\n                                            total:\n                                              type: integer\n                                              format: int64\n                                            hash:\n                                              type: string\n                                              format: byte\n                                          title: PartsetHeader\n                                    last_commit_hash:\n                                      type: string\n                                      format: byte\n                                      title: hashes of block data\n                                    data_hash:\n                                      type: string\n                                      format: byte\n                                    validators_hash:\n                                      type: string\n                                      format: byte\n                                      title: >-\n                                        hashes from the app output from the prev\n                                        block\n                                    next_validators_hash:\n                                      type: string\n                                      format: byte\n                                    consensus_hash:\n                                      type: string\n                                      format: byte\n                                    app_hash:\n                                      type: string\n                                      format: byte\n                                    last_results_hash:\n                                      type: string\n                                      format: byte\n                                    evidence_hash:\n                                      type: string\n                                      format: byte\n                                      title: consensus info\n                                    proposer_address:\n                                      type: string\n                                      format: byte\n                                  description: >-\n                                    Header defines the structure of a block\n                                    header.\n                                commit:\n                                  type: object\n                                  properties:\n                                    height:\n                                      type: string\n                                      format: int64\n                                    round:\n                                      type: integer\n                                      format: int32\n                                    block_id:\n                                      type: object\n                                      properties:\n                                        hash:\n                                          type: string\n                                          format: byte\n                                        part_set_header:\n                                          type: object\n                                          properties:\n                                            total:\n                                              type: integer\n                                              format: int64\n                                            hash:\n                                              type: string\n                                              format: byte\n                                          title: PartsetHeader\n                                      title: BlockID\n                                    signatures:\n                                      type: array\n                                      items:\n                                        type: object\n                                        properties:\n                                          block_id_flag:\n                                            type: string\n                                            enum:\n                                              - BLOCK_ID_FLAG_UNKNOWN\n                                              - BLOCK_ID_FLAG_ABSENT\n                                              - BLOCK_ID_FLAG_COMMIT\n                                              - BLOCK_ID_FLAG_NIL\n                                            default: BLOCK_ID_FLAG_UNKNOWN\n                                            title: >-\n                                              BlockIdFlag indicates which BlcokID the\n                                              signature is for\n                                          validator_address:\n                                            type: string\n                                            format: byte\n                                          timestamp:\n                                            type: string\n                                            format: date-time\n                                          signature:\n                                            type: string\n                                            format: byte\n                                        description: >-\n                                          CommitSig is a part of the Vote included\n                                          in a Commit.\n                                  description: >-\n                                    Commit contains the evidence that a block\n                                    was committed by a set of validators.\n                            validator_set:\n                              type: object\n                              properties:\n                                validators:\n                                  type: array\n                                  items:\n                                    type: object\n                                    properties:\n                                      address:\n                                        type: string\n                                        format: byte\n                                      pub_key:\n                                        type: object\n                                        properties:\n                                          ed25519:\n                                            type: string\n                                            format: byte\n                                          secp256k1:\n                                            type: string\n                                            format: byte\n                                        title: >-\n                                          PublicKey defines the keys available for\n                                          use with Validators\n                                      voting_power:\n                                        type: string\n                                        format: int64\n                                      proposer_priority:\n                                        type: string\n                                        format: int64\n                                proposer:\n                                  type: object\n                                  properties:\n                                    address:\n                                      type: string\n                                      format: byte\n                                    pub_key:\n                                      type: object\n                                      properties:\n                                        ed25519:\n                                          type: string\n                                          format: byte\n                                        secp256k1:\n                                          type: string\n                                          format: byte\n                                      title: >-\n                                        PublicKey defines the keys available for\n                                        use with Validators\n                                    voting_power:\n                                      type: string\n                                      format: int64\n                                    proposer_priority:\n                                      type: string\n                                      format: int64\n                                total_voting_power:\n                                  type: string\n                                  format: int64\n                        common_height:\n                          type: string\n                          format: int64\n                        byzantine_validators:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              address:\n                                type: string\n                                format: byte\n                              pub_key:\n                                type: object\n                                properties:\n                                  ed25519:\n                                    type: string\n                                    format: byte\n                                  secp256k1:\n                                    type: string\n                                    format: byte\n                                title: >-\n                                  PublicKey defines the keys available for use\n                                  with Validators\n                              voting_power:\n                                type: string\n                                format: int64\n                              proposer_priority:\n                                type: string\n                                format: int64\n                        total_voting_power:\n                          type: string\n                          format: int64\n                        timestamp:\n                          type: string\n                          format: date-time\n                      description: >-\n                        LightClientAttackEvidence contains evidence of a set of\n                        validators attempting to mislead a light client.\n          last_commit:\n            type: object\n            properties:\n              height:\n                type: string\n                format: int64\n              round:\n                type: integer\n                format: int32\n              block_id:\n                type: object\n                properties:\n                  hash:\n                    type: string\n                    format: byte\n                  part_set_header:\n                    type: object\n                    properties:\n                      total:\n                        type: integer\n                        format: int64\n                      hash:\n                        type: string\n                        format: byte\n                    title: PartsetHeader\n                title: BlockID\n              signatures:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    block_id_flag:\n                      type: string\n                      enum:\n                        - BLOCK_ID_FLAG_UNKNOWN\n                        - BLOCK_ID_FLAG_ABSENT\n                        - BLOCK_ID_FLAG_COMMIT\n                        - BLOCK_ID_FLAG_NIL\n                      default: BLOCK_ID_FLAG_UNKNOWN\n                      title: BlockIdFlag indicates which BlcokID the signature is for\n                    validator_address:\n                      type: string\n                      format: byte\n                    timestamp:\n                      type: string\n                      format: date-time\n                    signature:\n                      type: string\n                      format: byte\n                  description: CommitSig is a part of the Vote included in a Commit.\n            description: >-\n              Commit contains the evidence that a block was committed by a set\n              of validators.\n        title: 'Deprecated: please use `sdk_block` instead'\n      sdk_block:\n        title: 'Since: cosmos-sdk 0.47'\n        type: object\n        properties:\n          header:\n            type: object\n            properties:\n              version:\n                title: basic block info\n                type: object\n                properties:\n                  block:\n                    type: string\n                    format: uint64\n                  app:\n                    type: string\n                    format: uint64\n                description: >-\n                  Consensus captures the consensus rules for processing a block\n                  in the blockchain,\n\n                  including all blockchain data structures and the rules of the\n                  application's\n\n                  state transition machine.\n              chain_id:\n                type: string\n              height:\n                type: string\n                format: int64\n              time:\n                type: string\n                format: date-time\n              last_block_id:\n                type: object\n                properties:\n                  hash:\n                    type: string\n                    format: byte\n                  part_set_header:\n                    type: object\n                    properties:\n                      total:\n                        type: integer\n                        format: int64\n                      hash:\n                        type: string\n                        format: byte\n                    title: PartsetHeader\n                title: BlockID\n              last_commit_hash:\n                type: string\n                format: byte\n                title: hashes of block data\n              data_hash:\n                type: string\n                format: byte\n              validators_hash:\n                type: string\n                format: byte\n                title: hashes from the app output from the prev block\n              next_validators_hash:\n                type: string\n                format: byte\n              consensus_hash:\n                type: string\n                format: byte\n              app_hash:\n                type: string\n                format: byte\n              last_results_hash:\n                type: string\n                format: byte\n              evidence_hash:\n                type: string\n                format: byte\n                title: consensus info\n              proposer_address:\n                type: string\n                description: >-\n                  proposer_address is the original block proposer address,\n                  formatted as a Bech32 string.\n\n                  In Tendermint, this type is `bytes`, but in the SDK, we\n                  convert it to a Bech32 string\n\n                  for better UX.\n            description: Header defines the structure of a Tendermint block header.\n          data:\n            type: object\n            properties:\n              txs:\n                type: array\n                items:\n                  type: string\n                  format: byte\n                description: >-\n                  Txs that will be applied by state @ block.Height+1.\n\n                  NOTE: not all txs here are valid.  We're just agreeing on the\n                  order first.\n\n                  This means that block.AppHash does not include these txs.\n            title: Data contains the set of transactions included in the block\n          evidence:\n            type: object\n            properties:\n              evidence:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    duplicate_vote_evidence:\n                      type: object\n                      properties:\n                        vote_a:\n                          type: object\n                          properties:\n                            type:\n                              type: string\n                              enum:\n                                - SIGNED_MSG_TYPE_UNKNOWN\n                                - SIGNED_MSG_TYPE_PREVOTE\n                                - SIGNED_MSG_TYPE_PRECOMMIT\n                                - SIGNED_MSG_TYPE_PROPOSAL\n                              default: SIGNED_MSG_TYPE_UNKNOWN\n                              description: >-\n                                SignedMsgType is a type of signed message in the\n                                consensus.\n\n                                 - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                 - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                            height:\n                              type: string\n                              format: int64\n                            round:\n                              type: integer\n                              format: int32\n                            block_id:\n                              type: object\n                              properties:\n                                hash:\n                                  type: string\n                                  format: byte\n                                part_set_header:\n                                  type: object\n                                  properties:\n                                    total:\n                                      type: integer\n                                      format: int64\n                                    hash:\n                                      type: string\n                                      format: byte\n                                  title: PartsetHeader\n                              title: BlockID\n                            timestamp:\n                              type: string\n                              format: date-time\n                            validator_address:\n                              type: string\n                              format: byte\n                            validator_index:\n                              type: integer\n                              format: int32\n                            signature:\n                              type: string\n                              format: byte\n                          description: >-\n                            Vote represents a prevote, precommit, or commit vote\n                            from validators for\n\n                            consensus.\n                        vote_b:\n                          type: object\n                          properties:\n                            type:\n                              type: string\n                              enum:\n                                - SIGNED_MSG_TYPE_UNKNOWN\n                                - SIGNED_MSG_TYPE_PREVOTE\n                                - SIGNED_MSG_TYPE_PRECOMMIT\n                                - SIGNED_MSG_TYPE_PROPOSAL\n                              default: SIGNED_MSG_TYPE_UNKNOWN\n                              description: >-\n                                SignedMsgType is a type of signed message in the\n                                consensus.\n\n                                 - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                 - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                            height:\n                              type: string\n                              format: int64\n                            round:\n                              type: integer\n                              format: int32\n                            block_id:\n                              type: object\n                              properties:\n                                hash:\n                                  type: string\n                                  format: byte\n                                part_set_header:\n                                  type: object\n                                  properties:\n                                    total:\n                                      type: integer\n                                      format: int64\n                                    hash:\n                                      type: string\n                                      format: byte\n                                  title: PartsetHeader\n                              title: BlockID\n                            timestamp:\n                              type: string\n                              format: date-time\n                            validator_address:\n                              type: string\n                              format: byte\n                            validator_index:\n                              type: integer\n                              format: int32\n                            signature:\n                              type: string\n                              format: byte\n                          description: >-\n                            Vote represents a prevote, precommit, or commit vote\n                            from validators for\n\n                            consensus.\n                        total_voting_power:\n                          type: string\n                          format: int64\n                        validator_power:\n                          type: string\n                          format: int64\n                        timestamp:\n                          type: string\n                          format: date-time\n                      description: >-\n                        DuplicateVoteEvidence contains evidence of a validator\n                        signed two conflicting votes.\n                    light_client_attack_evidence:\n                      type: object\n                      properties:\n                        conflicting_block:\n                          type: object\n                          properties:\n                            signed_header:\n                              type: object\n                              properties:\n                                header:\n                                  type: object\n                                  properties:\n                                    version:\n                                      title: basic block info\n                                      type: object\n                                      properties:\n                                        block:\n                                          type: string\n                                          format: uint64\n                                        app:\n                                          type: string\n                                          format: uint64\n                                      description: >-\n                                        Consensus captures the consensus rules\n                                        for processing a block in the\n                                        blockchain,\n\n                                        including all blockchain data structures\n                                        and the rules of the application's\n\n                                        state transition machine.\n                                    chain_id:\n                                      type: string\n                                    height:\n                                      type: string\n                                      format: int64\n                                    time:\n                                      type: string\n                                      format: date-time\n                                    last_block_id:\n                                      title: prev block info\n                                      type: object\n                                      properties:\n                                        hash:\n                                          type: string\n                                          format: byte\n                                        part_set_header:\n                                          type: object\n                                          properties:\n                                            total:\n                                              type: integer\n                                              format: int64\n                                            hash:\n                                              type: string\n                                              format: byte\n                                          title: PartsetHeader\n                                    last_commit_hash:\n                                      type: string\n                                      format: byte\n                                      title: hashes of block data\n                                    data_hash:\n                                      type: string\n                                      format: byte\n                                    validators_hash:\n                                      type: string\n                                      format: byte\n                                      title: >-\n                                        hashes from the app output from the prev\n                                        block\n                                    next_validators_hash:\n                                      type: string\n                                      format: byte\n                                    consensus_hash:\n                                      type: string\n                                      format: byte\n                                    app_hash:\n                                      type: string\n                                      format: byte\n                                    last_results_hash:\n                                      type: string\n                                      format: byte\n                                    evidence_hash:\n                                      type: string\n                                      format: byte\n                                      title: consensus info\n                                    proposer_address:\n                                      type: string\n                                      format: byte\n                                  description: >-\n                                    Header defines the structure of a block\n                                    header.\n                                commit:\n                                  type: object\n                                  properties:\n                                    height:\n                                      type: string\n                                      format: int64\n                                    round:\n                                      type: integer\n                                      format: int32\n                                    block_id:\n                                      type: object\n                                      properties:\n                                        hash:\n                                          type: string\n                                          format: byte\n                                        part_set_header:\n                                          type: object\n                                          properties:\n                                            total:\n                                              type: integer\n                                              format: int64\n                                            hash:\n                                              type: string\n                                              format: byte\n                                          title: PartsetHeader\n                                      title: BlockID\n                                    signatures:\n                                      type: array\n                                      items:\n                                        type: object\n                                        properties:\n                                          block_id_flag:\n                                            type: string\n                                            enum:\n                                              - BLOCK_ID_FLAG_UNKNOWN\n                                              - BLOCK_ID_FLAG_ABSENT\n                                              - BLOCK_ID_FLAG_COMMIT\n                                              - BLOCK_ID_FLAG_NIL\n                                            default: BLOCK_ID_FLAG_UNKNOWN\n                                            title: >-\n                                              BlockIdFlag indicates which BlcokID the\n                                              signature is for\n                                          validator_address:\n                                            type: string\n                                            format: byte\n                                          timestamp:\n                                            type: string\n                                            format: date-time\n                                          signature:\n                                            type: string\n                                            format: byte\n                                        description: >-\n                                          CommitSig is a part of the Vote included\n                                          in a Commit.\n                                  description: >-\n                                    Commit contains the evidence that a block\n                                    was committed by a set of validators.\n                            validator_set:\n                              type: object\n                              properties:\n                                validators:\n                                  type: array\n                                  items:\n                                    type: object\n                                    properties:\n                                      address:\n                                        type: string\n                                        format: byte\n                                      pub_key:\n                                        type: object\n                                        properties:\n                                          ed25519:\n                                            type: string\n                                            format: byte\n                                          secp256k1:\n                                            type: string\n                                            format: byte\n                                        title: >-\n                                          PublicKey defines the keys available for\n                                          use with Validators\n                                      voting_power:\n                                        type: string\n                                        format: int64\n                                      proposer_priority:\n                                        type: string\n                                        format: int64\n                                proposer:\n                                  type: object\n                                  properties:\n                                    address:\n                                      type: string\n                                      format: byte\n                                    pub_key:\n                                      type: object\n                                      properties:\n                                        ed25519:\n                                          type: string\n                                          format: byte\n                                        secp256k1:\n                                          type: string\n                                          format: byte\n                                      title: >-\n                                        PublicKey defines the keys available for\n                                        use with Validators\n                                    voting_power:\n                                      type: string\n                                      format: int64\n                                    proposer_priority:\n                                      type: string\n                                      format: int64\n                                total_voting_power:\n                                  type: string\n                                  format: int64\n                        common_height:\n                          type: string\n                          format: int64\n                        byzantine_validators:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              address:\n                                type: string\n                                format: byte\n                              pub_key:\n                                type: object\n                                properties:\n                                  ed25519:\n                                    type: string\n                                    format: byte\n                                  secp256k1:\n                                    type: string\n                                    format: byte\n                                title: >-\n                                  PublicKey defines the keys available for use\n                                  with Validators\n                              voting_power:\n                                type: string\n                                format: int64\n                              proposer_priority:\n                                type: string\n                                format: int64\n                        total_voting_power:\n                          type: string\n                          format: int64\n                        timestamp:\n                          type: string\n                          format: date-time\n                      description: >-\n                        LightClientAttackEvidence contains evidence of a set of\n                        validators attempting to mislead a light client.\n          last_commit:\n            type: object\n            properties:\n              height:\n                type: string\n                format: int64\n              round:\n                type: integer\n                format: int32\n              block_id:\n                type: object\n                properties:\n                  hash:\n                    type: string\n                    format: byte\n                  part_set_header:\n                    type: object\n                    properties:\n                      total:\n                        type: integer\n                        format: int64\n                      hash:\n                        type: string\n                        format: byte\n                    title: PartsetHeader\n                title: BlockID\n              signatures:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    block_id_flag:\n                      type: string\n                      enum:\n                        - BLOCK_ID_FLAG_UNKNOWN\n                        - BLOCK_ID_FLAG_ABSENT\n                        - BLOCK_ID_FLAG_COMMIT\n                        - BLOCK_ID_FLAG_NIL\n                      default: BLOCK_ID_FLAG_UNKNOWN\n                      title: BlockIdFlag indicates which BlcokID the signature is for\n                    validator_address:\n                      type: string\n                      format: byte\n                    timestamp:\n                      type: string\n                      format: date-time\n                    signature:\n                      type: string\n                      format: byte\n                  description: CommitSig is a part of the Vote included in a Commit.\n            description: >-\n              Commit contains the evidence that a block was committed by a set\n              of validators.\n        description: |-\n          Block is tendermint type Block, with the Header proposer address\n          field converted to bech32 string.\n    description: >-\n      GetBlockByHeightResponse is the response type for the\n      Query/GetBlockByHeight RPC method.\n  cosmos.base.tendermint.v1beta1.GetLatestBlockResponse:\n    type: object\n    properties:\n      block_id:\n        type: object\n        properties:\n          hash:\n            type: string\n            format: byte\n          part_set_header:\n            type: object\n            properties:\n              total:\n                type: integer\n                format: int64\n              hash:\n                type: string\n                format: byte\n            title: PartsetHeader\n        title: BlockID\n      block:\n        type: object\n        properties:\n          header:\n            type: object\n            properties:\n              version:\n                title: basic block info\n                type: object\n                properties:\n                  block:\n                    type: string\n                    format: uint64\n                  app:\n                    type: string\n                    format: uint64\n                description: >-\n                  Consensus captures the consensus rules for processing a block\n                  in the blockchain,\n\n                  including all blockchain data structures and the rules of the\n                  application's\n\n                  state transition machine.\n              chain_id:\n                type: string\n              height:\n                type: string\n                format: int64\n              time:\n                type: string\n                format: date-time\n              last_block_id:\n                title: prev block info\n                type: object\n                properties:\n                  hash:\n                    type: string\n                    format: byte\n                  part_set_header:\n                    type: object\n                    properties:\n                      total:\n                        type: integer\n                        format: int64\n                      hash:\n                        type: string\n                        format: byte\n                    title: PartsetHeader\n              last_commit_hash:\n                type: string\n                format: byte\n                title: hashes of block data\n              data_hash:\n                type: string\n                format: byte\n              validators_hash:\n                type: string\n                format: byte\n                title: hashes from the app output from the prev block\n              next_validators_hash:\n                type: string\n                format: byte\n              consensus_hash:\n                type: string\n                format: byte\n              app_hash:\n                type: string\n                format: byte\n              last_results_hash:\n                type: string\n                format: byte\n              evidence_hash:\n                type: string\n                format: byte\n                title: consensus info\n              proposer_address:\n                type: string\n                format: byte\n            description: Header defines the structure of a block header.\n          data:\n            type: object\n            properties:\n              txs:\n                type: array\n                items:\n                  type: string\n                  format: byte\n                description: >-\n                  Txs that will be applied by state @ block.Height+1.\n\n                  NOTE: not all txs here are valid.  We're just agreeing on the\n                  order first.\n\n                  This means that block.AppHash does not include these txs.\n            title: Data contains the set of transactions included in the block\n          evidence:\n            type: object\n            properties:\n              evidence:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    duplicate_vote_evidence:\n                      type: object\n                      properties:\n                        vote_a:\n                          type: object\n                          properties:\n                            type:\n                              type: string\n                              enum:\n                                - SIGNED_MSG_TYPE_UNKNOWN\n                                - SIGNED_MSG_TYPE_PREVOTE\n                                - SIGNED_MSG_TYPE_PRECOMMIT\n                                - SIGNED_MSG_TYPE_PROPOSAL\n                              default: SIGNED_MSG_TYPE_UNKNOWN\n                              description: >-\n                                SignedMsgType is a type of signed message in the\n                                consensus.\n\n                                 - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                 - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                            height:\n                              type: string\n                              format: int64\n                            round:\n                              type: integer\n                              format: int32\n                            block_id:\n                              type: object\n                              properties:\n                                hash:\n                                  type: string\n                                  format: byte\n                                part_set_header:\n                                  type: object\n                                  properties:\n                                    total:\n                                      type: integer\n                                      format: int64\n                                    hash:\n                                      type: string\n                                      format: byte\n                                  title: PartsetHeader\n                              title: BlockID\n                            timestamp:\n                              type: string\n                              format: date-time\n                            validator_address:\n                              type: string\n                              format: byte\n                            validator_index:\n                              type: integer\n                              format: int32\n                            signature:\n                              type: string\n                              format: byte\n                          description: >-\n                            Vote represents a prevote, precommit, or commit vote\n                            from validators for\n\n                            consensus.\n                        vote_b:\n                          type: object\n                          properties:\n                            type:\n                              type: string\n                              enum:\n                                - SIGNED_MSG_TYPE_UNKNOWN\n                                - SIGNED_MSG_TYPE_PREVOTE\n                                - SIGNED_MSG_TYPE_PRECOMMIT\n                                - SIGNED_MSG_TYPE_PROPOSAL\n                              default: SIGNED_MSG_TYPE_UNKNOWN\n                              description: >-\n                                SignedMsgType is a type of signed message in the\n                                consensus.\n\n                                 - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                 - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                            height:\n                              type: string\n                              format: int64\n                            round:\n                              type: integer\n                              format: int32\n                            block_id:\n                              type: object\n                              properties:\n                                hash:\n                                  type: string\n                                  format: byte\n                                part_set_header:\n                                  type: object\n                                  properties:\n                                    total:\n                                      type: integer\n                                      format: int64\n                                    hash:\n                                      type: string\n                                      format: byte\n                                  title: PartsetHeader\n                              title: BlockID\n                            timestamp:\n                              type: string\n                              format: date-time\n                            validator_address:\n                              type: string\n                              format: byte\n                            validator_index:\n                              type: integer\n                              format: int32\n                            signature:\n                              type: string\n                              format: byte\n                          description: >-\n                            Vote represents a prevote, precommit, or commit vote\n                            from validators for\n\n                            consensus.\n                        total_voting_power:\n                          type: string\n                          format: int64\n                        validator_power:\n                          type: string\n                          format: int64\n                        timestamp:\n                          type: string\n                          format: date-time\n                      description: >-\n                        DuplicateVoteEvidence contains evidence of a validator\n                        signed two conflicting votes.\n                    light_client_attack_evidence:\n                      type: object\n                      properties:\n                        conflicting_block:\n                          type: object\n                          properties:\n                            signed_header:\n                              type: object\n                              properties:\n                                header:\n                                  type: object\n                                  properties:\n                                    version:\n                                      title: basic block info\n                                      type: object\n                                      properties:\n                                        block:\n                                          type: string\n                                          format: uint64\n                                        app:\n                                          type: string\n                                          format: uint64\n                                      description: >-\n                                        Consensus captures the consensus rules\n                                        for processing a block in the\n                                        blockchain,\n\n                                        including all blockchain data structures\n                                        and the rules of the application's\n\n                                        state transition machine.\n                                    chain_id:\n                                      type: string\n                                    height:\n                                      type: string\n                                      format: int64\n                                    time:\n                                      type: string\n                                      format: date-time\n                                    last_block_id:\n                                      title: prev block info\n                                      type: object\n                                      properties:\n                                        hash:\n                                          type: string\n                                          format: byte\n                                        part_set_header:\n                                          type: object\n                                          properties:\n                                            total:\n                                              type: integer\n                                              format: int64\n                                            hash:\n                                              type: string\n                                              format: byte\n                                          title: PartsetHeader\n                                    last_commit_hash:\n                                      type: string\n                                      format: byte\n                                      title: hashes of block data\n                                    data_hash:\n                                      type: string\n                                      format: byte\n                                    validators_hash:\n                                      type: string\n                                      format: byte\n                                      title: >-\n                                        hashes from the app output from the prev\n                                        block\n                                    next_validators_hash:\n                                      type: string\n                                      format: byte\n                                    consensus_hash:\n                                      type: string\n                                      format: byte\n                                    app_hash:\n                                      type: string\n                                      format: byte\n                                    last_results_hash:\n                                      type: string\n                                      format: byte\n                                    evidence_hash:\n                                      type: string\n                                      format: byte\n                                      title: consensus info\n                                    proposer_address:\n                                      type: string\n                                      format: byte\n                                  description: >-\n                                    Header defines the structure of a block\n                                    header.\n                                commit:\n                                  type: object\n                                  properties:\n                                    height:\n                                      type: string\n                                      format: int64\n                                    round:\n                                      type: integer\n                                      format: int32\n                                    block_id:\n                                      type: object\n                                      properties:\n                                        hash:\n                                          type: string\n                                          format: byte\n                                        part_set_header:\n                                          type: object\n                                          properties:\n                                            total:\n                                              type: integer\n                                              format: int64\n                                            hash:\n                                              type: string\n                                              format: byte\n                                          title: PartsetHeader\n                                      title: BlockID\n                                    signatures:\n                                      type: array\n                                      items:\n                                        type: object\n                                        properties:\n                                          block_id_flag:\n                                            type: string\n                                            enum:\n                                              - BLOCK_ID_FLAG_UNKNOWN\n                                              - BLOCK_ID_FLAG_ABSENT\n                                              - BLOCK_ID_FLAG_COMMIT\n                                              - BLOCK_ID_FLAG_NIL\n                                            default: BLOCK_ID_FLAG_UNKNOWN\n                                            title: >-\n                                              BlockIdFlag indicates which BlcokID the\n                                              signature is for\n                                          validator_address:\n                                            type: string\n                                            format: byte\n                                          timestamp:\n                                            type: string\n                                            format: date-time\n                                          signature:\n                                            type: string\n                                            format: byte\n                                        description: >-\n                                          CommitSig is a part of the Vote included\n                                          in a Commit.\n                                  description: >-\n                                    Commit contains the evidence that a block\n                                    was committed by a set of validators.\n                            validator_set:\n                              type: object\n                              properties:\n                                validators:\n                                  type: array\n                                  items:\n                                    type: object\n                                    properties:\n                                      address:\n                                        type: string\n                                        format: byte\n                                      pub_key:\n                                        type: object\n                                        properties:\n                                          ed25519:\n                                            type: string\n                                            format: byte\n                                          secp256k1:\n                                            type: string\n                                            format: byte\n                                        title: >-\n                                          PublicKey defines the keys available for\n                                          use with Validators\n                                      voting_power:\n                                        type: string\n                                        format: int64\n                                      proposer_priority:\n                                        type: string\n                                        format: int64\n                                proposer:\n                                  type: object\n                                  properties:\n                                    address:\n                                      type: string\n                                      format: byte\n                                    pub_key:\n                                      type: object\n                                      properties:\n                                        ed25519:\n                                          type: string\n                                          format: byte\n                                        secp256k1:\n                                          type: string\n                                          format: byte\n                                      title: >-\n                                        PublicKey defines the keys available for\n                                        use with Validators\n                                    voting_power:\n                                      type: string\n                                      format: int64\n                                    proposer_priority:\n                                      type: string\n                                      format: int64\n                                total_voting_power:\n                                  type: string\n                                  format: int64\n                        common_height:\n                          type: string\n                          format: int64\n                        byzantine_validators:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              address:\n                                type: string\n                                format: byte\n                              pub_key:\n                                type: object\n                                properties:\n                                  ed25519:\n                                    type: string\n                                    format: byte\n                                  secp256k1:\n                                    type: string\n                                    format: byte\n                                title: >-\n                                  PublicKey defines the keys available for use\n                                  with Validators\n                              voting_power:\n                                type: string\n                                format: int64\n                              proposer_priority:\n                                type: string\n                                format: int64\n                        total_voting_power:\n                          type: string\n                          format: int64\n                        timestamp:\n                          type: string\n                          format: date-time\n                      description: >-\n                        LightClientAttackEvidence contains evidence of a set of\n                        validators attempting to mislead a light client.\n          last_commit:\n            type: object\n            properties:\n              height:\n                type: string\n                format: int64\n              round:\n                type: integer\n                format: int32\n              block_id:\n                type: object\n                properties:\n                  hash:\n                    type: string\n                    format: byte\n                  part_set_header:\n                    type: object\n                    properties:\n                      total:\n                        type: integer\n                        format: int64\n                      hash:\n                        type: string\n                        format: byte\n                    title: PartsetHeader\n                title: BlockID\n              signatures:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    block_id_flag:\n                      type: string\n                      enum:\n                        - BLOCK_ID_FLAG_UNKNOWN\n                        - BLOCK_ID_FLAG_ABSENT\n                        - BLOCK_ID_FLAG_COMMIT\n                        - BLOCK_ID_FLAG_NIL\n                      default: BLOCK_ID_FLAG_UNKNOWN\n                      title: BlockIdFlag indicates which BlcokID the signature is for\n                    validator_address:\n                      type: string\n                      format: byte\n                    timestamp:\n                      type: string\n                      format: date-time\n                    signature:\n                      type: string\n                      format: byte\n                  description: CommitSig is a part of the Vote included in a Commit.\n            description: >-\n              Commit contains the evidence that a block was committed by a set\n              of validators.\n        title: 'Deprecated: please use `sdk_block` instead'\n      sdk_block:\n        title: 'Since: cosmos-sdk 0.47'\n        type: object\n        properties:\n          header:\n            type: object\n            properties:\n              version:\n                title: basic block info\n                type: object\n                properties:\n                  block:\n                    type: string\n                    format: uint64\n                  app:\n                    type: string\n                    format: uint64\n                description: >-\n                  Consensus captures the consensus rules for processing a block\n                  in the blockchain,\n\n                  including all blockchain data structures and the rules of the\n                  application's\n\n                  state transition machine.\n              chain_id:\n                type: string\n              height:\n                type: string\n                format: int64\n              time:\n                type: string\n                format: date-time\n              last_block_id:\n                type: object\n                properties:\n                  hash:\n                    type: string\n                    format: byte\n                  part_set_header:\n                    type: object\n                    properties:\n                      total:\n                        type: integer\n                        format: int64\n                      hash:\n                        type: string\n                        format: byte\n                    title: PartsetHeader\n                title: BlockID\n              last_commit_hash:\n                type: string\n                format: byte\n                title: hashes of block data\n              data_hash:\n                type: string\n                format: byte\n              validators_hash:\n                type: string\n                format: byte\n                title: hashes from the app output from the prev block\n              next_validators_hash:\n                type: string\n                format: byte\n              consensus_hash:\n                type: string\n                format: byte\n              app_hash:\n                type: string\n                format: byte\n              last_results_hash:\n                type: string\n                format: byte\n              evidence_hash:\n                type: string\n                format: byte\n                title: consensus info\n              proposer_address:\n                type: string\n                description: >-\n                  proposer_address is the original block proposer address,\n                  formatted as a Bech32 string.\n\n                  In Tendermint, this type is `bytes`, but in the SDK, we\n                  convert it to a Bech32 string\n\n                  for better UX.\n            description: Header defines the structure of a Tendermint block header.\n          data:\n            type: object\n            properties:\n              txs:\n                type: array\n                items:\n                  type: string\n                  format: byte\n                description: >-\n                  Txs that will be applied by state @ block.Height+1.\n\n                  NOTE: not all txs here are valid.  We're just agreeing on the\n                  order first.\n\n                  This means that block.AppHash does not include these txs.\n            title: Data contains the set of transactions included in the block\n          evidence:\n            type: object\n            properties:\n              evidence:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    duplicate_vote_evidence:\n                      type: object\n                      properties:\n                        vote_a:\n                          type: object\n                          properties:\n                            type:\n                              type: string\n                              enum:\n                                - SIGNED_MSG_TYPE_UNKNOWN\n                                - SIGNED_MSG_TYPE_PREVOTE\n                                - SIGNED_MSG_TYPE_PRECOMMIT\n                                - SIGNED_MSG_TYPE_PROPOSAL\n                              default: SIGNED_MSG_TYPE_UNKNOWN\n                              description: >-\n                                SignedMsgType is a type of signed message in the\n                                consensus.\n\n                                 - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                 - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                            height:\n                              type: string\n                              format: int64\n                            round:\n                              type: integer\n                              format: int32\n                            block_id:\n                              type: object\n                              properties:\n                                hash:\n                                  type: string\n                                  format: byte\n                                part_set_header:\n                                  type: object\n                                  properties:\n                                    total:\n                                      type: integer\n                                      format: int64\n                                    hash:\n                                      type: string\n                                      format: byte\n                                  title: PartsetHeader\n                              title: BlockID\n                            timestamp:\n                              type: string\n                              format: date-time\n                            validator_address:\n                              type: string\n                              format: byte\n                            validator_index:\n                              type: integer\n                              format: int32\n                            signature:\n                              type: string\n                              format: byte\n                          description: >-\n                            Vote represents a prevote, precommit, or commit vote\n                            from validators for\n\n                            consensus.\n                        vote_b:\n                          type: object\n                          properties:\n                            type:\n                              type: string\n                              enum:\n                                - SIGNED_MSG_TYPE_UNKNOWN\n                                - SIGNED_MSG_TYPE_PREVOTE\n                                - SIGNED_MSG_TYPE_PRECOMMIT\n                                - SIGNED_MSG_TYPE_PROPOSAL\n                              default: SIGNED_MSG_TYPE_UNKNOWN\n                              description: >-\n                                SignedMsgType is a type of signed message in the\n                                consensus.\n\n                                 - SIGNED_MSG_TYPE_PREVOTE: Votes\n                                 - SIGNED_MSG_TYPE_PROPOSAL: Proposals\n                            height:\n                              type: string\n                              format: int64\n                            round:\n                              type: integer\n                              format: int32\n                            block_id:\n                              type: object\n                              properties:\n                                hash:\n                                  type: string\n                                  format: byte\n                                part_set_header:\n                                  type: object\n                                  properties:\n                                    total:\n                                      type: integer\n                                      format: int64\n                                    hash:\n                                      type: string\n                                      format: byte\n                                  title: PartsetHeader\n                              title: BlockID\n                            timestamp:\n                              type: string\n                              format: date-time\n                            validator_address:\n                              type: string\n                              format: byte\n                            validator_index:\n                              type: integer\n                              format: int32\n                            signature:\n                              type: string\n                              format: byte\n                          description: >-\n                            Vote represents a prevote, precommit, or commit vote\n                            from validators for\n\n                            consensus.\n                        total_voting_power:\n                          type: string\n                          format: int64\n                        validator_power:\n                          type: string\n                          format: int64\n                        timestamp:\n                          type: string\n                          format: date-time\n                      description: >-\n                        DuplicateVoteEvidence contains evidence of a validator\n                        signed two conflicting votes.\n                    light_client_attack_evidence:\n                      type: object\n                      properties:\n                        conflicting_block:\n                          type: object\n                          properties:\n                            signed_header:\n                              type: object\n                              properties:\n                                header:\n                                  type: object\n                                  properties:\n                                    version:\n                                      title: basic block info\n                                      type: object\n                                      properties:\n                                        block:\n                                          type: string\n                                          format: uint64\n                                        app:\n                                          type: string\n                                          format: uint64\n                                      description: >-\n                                        Consensus captures the consensus rules\n                                        for processing a block in the\n                                        blockchain,\n\n                                        including all blockchain data structures\n                                        and the rules of the application's\n\n                                        state transition machine.\n                                    chain_id:\n                                      type: string\n                                    height:\n                                      type: string\n                                      format: int64\n                                    time:\n                                      type: string\n                                      format: date-time\n                                    last_block_id:\n                                      title: prev block info\n                                      type: object\n                                      properties:\n                                        hash:\n                                          type: string\n                                          format: byte\n                                        part_set_header:\n                                          type: object\n                                          properties:\n                                            total:\n                                              type: integer\n                                              format: int64\n                                            hash:\n                                              type: string\n                                              format: byte\n                                          title: PartsetHeader\n                                    last_commit_hash:\n                                      type: string\n                                      format: byte\n                                      title: hashes of block data\n                                    data_hash:\n                                      type: string\n                                      format: byte\n                                    validators_hash:\n                                      type: string\n                                      format: byte\n                                      title: >-\n                                        hashes from the app output from the prev\n                                        block\n                                    next_validators_hash:\n                                      type: string\n                                      format: byte\n                                    consensus_hash:\n                                      type: string\n                                      format: byte\n                                    app_hash:\n                                      type: string\n                                      format: byte\n                                    last_results_hash:\n                                      type: string\n                                      format: byte\n                                    evidence_hash:\n                                      type: string\n                                      format: byte\n                                      title: consensus info\n                                    proposer_address:\n                                      type: string\n                                      format: byte\n                                  description: >-\n                                    Header defines the structure of a block\n                                    header.\n                                commit:\n                                  type: object\n                                  properties:\n                                    height:\n                                      type: string\n                                      format: int64\n                                    round:\n                                      type: integer\n                                      format: int32\n                                    block_id:\n                                      type: object\n                                      properties:\n                                        hash:\n                                          type: string\n                                          format: byte\n                                        part_set_header:\n                                          type: object\n                                          properties:\n                                            total:\n                                              type: integer\n                                              format: int64\n                                            hash:\n                                              type: string\n                                              format: byte\n                                          title: PartsetHeader\n                                      title: BlockID\n                                    signatures:\n                                      type: array\n                                      items:\n                                        type: object\n                                        properties:\n                                          block_id_flag:\n                                            type: string\n                                            enum:\n                                              - BLOCK_ID_FLAG_UNKNOWN\n                                              - BLOCK_ID_FLAG_ABSENT\n                                              - BLOCK_ID_FLAG_COMMIT\n                                              - BLOCK_ID_FLAG_NIL\n                                            default: BLOCK_ID_FLAG_UNKNOWN\n                                            title: >-\n                                              BlockIdFlag indicates which BlcokID the\n                                              signature is for\n                                          validator_address:\n                                            type: string\n                                            format: byte\n                                          timestamp:\n                                            type: string\n                                            format: date-time\n                                          signature:\n                                            type: string\n                                            format: byte\n                                        description: >-\n                                          CommitSig is a part of the Vote included\n                                          in a Commit.\n                                  description: >-\n                                    Commit contains the evidence that a block\n                                    was committed by a set of validators.\n                            validator_set:\n                              type: object\n                              properties:\n                                validators:\n                                  type: array\n                                  items:\n                                    type: object\n                                    properties:\n                                      address:\n                                        type: string\n                                        format: byte\n                                      pub_key:\n                                        type: object\n                                        properties:\n                                          ed25519:\n                                            type: string\n                                            format: byte\n                                          secp256k1:\n                                            type: string\n                                            format: byte\n                                        title: >-\n                                          PublicKey defines the keys available for\n                                          use with Validators\n                                      voting_power:\n                                        type: string\n                                        format: int64\n                                      proposer_priority:\n                                        type: string\n                                        format: int64\n                                proposer:\n                                  type: object\n                                  properties:\n                                    address:\n                                      type: string\n                                      format: byte\n                                    pub_key:\n                                      type: object\n                                      properties:\n                                        ed25519:\n                                          type: string\n                                          format: byte\n                                        secp256k1:\n                                          type: string\n                                          format: byte\n                                      title: >-\n                                        PublicKey defines the keys available for\n                                        use with Validators\n                                    voting_power:\n                                      type: string\n                                      format: int64\n                                    proposer_priority:\n                                      type: string\n                                      format: int64\n                                total_voting_power:\n                                  type: string\n                                  format: int64\n                        common_height:\n                          type: string\n                          format: int64\n                        byzantine_validators:\n                          type: array\n                          items:\n                            type: object\n                            properties:\n                              address:\n                                type: string\n                                format: byte\n                              pub_key:\n                                type: object\n                                properties:\n                                  ed25519:\n                                    type: string\n                                    format: byte\n                                  secp256k1:\n                                    type: string\n                                    format: byte\n                                title: >-\n                                  PublicKey defines the keys available for use\n                                  with Validators\n                              voting_power:\n                                type: string\n                                format: int64\n                              proposer_priority:\n                                type: string\n                                format: int64\n                        total_voting_power:\n                          type: string\n                          format: int64\n                        timestamp:\n                          type: string\n                          format: date-time\n                      description: >-\n                        LightClientAttackEvidence contains evidence of a set of\n                        validators attempting to mislead a light client.\n          last_commit:\n            type: object\n            properties:\n              height:\n                type: string\n                format: int64\n              round:\n                type: integer\n                format: int32\n              block_id:\n                type: object\n                properties:\n                  hash:\n                    type: string\n                    format: byte\n                  part_set_header:\n                    type: object\n                    properties:\n                      total:\n                        type: integer\n                        format: int64\n                      hash:\n                        type: string\n                        format: byte\n                    title: PartsetHeader\n                title: BlockID\n              signatures:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    block_id_flag:\n                      type: string\n                      enum:\n                        - BLOCK_ID_FLAG_UNKNOWN\n                        - BLOCK_ID_FLAG_ABSENT\n                        - BLOCK_ID_FLAG_COMMIT\n                        - BLOCK_ID_FLAG_NIL\n                      default: BLOCK_ID_FLAG_UNKNOWN\n                      title: BlockIdFlag indicates which BlcokID the signature is for\n                    validator_address:\n                      type: string\n                      format: byte\n                    timestamp:\n                      type: string\n                      format: date-time\n                    signature:\n                      type: string\n                      format: byte\n                  description: CommitSig is a part of the Vote included in a Commit.\n            description: >-\n              Commit contains the evidence that a block was committed by a set\n              of validators.\n        description: |-\n          Block is tendermint type Block, with the Header proposer address\n          field converted to bech32 string.\n    description: >-\n      GetLatestBlockResponse is the response type for the Query/GetLatestBlock\n      RPC method.\n  cosmos.base.tendermint.v1beta1.GetLatestValidatorSetResponse:\n    type: object\n    properties:\n      block_height:\n        type: string\n        format: int64\n      validators:\n        type: array\n        items:\n          type: object\n          properties:\n            address:\n              type: string\n            pub_key:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n            voting_power:\n              type: string\n              format: int64\n            proposer_priority:\n              type: string\n              format: int64\n          description: Validator is the type for the validator-set.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: >-\n      GetLatestValidatorSetResponse is the response type for the\n      Query/GetValidatorSetByHeight RPC method.\n  cosmos.base.tendermint.v1beta1.GetNodeInfoResponse:\n    type: object\n    properties:\n      default_node_info:\n        type: object\n        properties:\n          protocol_version:\n            type: object\n            properties:\n              p2p:\n                type: string\n                format: uint64\n              block:\n                type: string\n                format: uint64\n              app:\n                type: string\n                format: uint64\n          default_node_id:\n            type: string\n          listen_addr:\n            type: string\n          network:\n            type: string\n          version:\n            type: string\n          channels:\n            type: string\n            format: byte\n          moniker:\n            type: string\n          other:\n            type: object\n            properties:\n              tx_index:\n                type: string\n              rpc_address:\n                type: string\n      application_version:\n        type: object\n        properties:\n          name:\n            type: string\n          app_name:\n            type: string\n          version:\n            type: string\n          git_commit:\n            type: string\n          build_tags:\n            type: string\n          go_version:\n            type: string\n          build_deps:\n            type: array\n            items:\n              type: object\n              properties:\n                path:\n                  type: string\n                  title: module path\n                version:\n                  type: string\n                  title: module version\n                sum:\n                  type: string\n                  title: checksum\n              title: Module is the type for VersionInfo\n          cosmos_sdk_version:\n            type: string\n            title: 'Since: cosmos-sdk 0.43'\n        description: VersionInfo is the type for the GetNodeInfoResponse message.\n    description: >-\n      GetNodeInfoResponse is the response type for the Query/GetNodeInfo RPC\n      method.\n  cosmos.base.tendermint.v1beta1.GetSyncingResponse:\n    type: object\n    properties:\n      syncing:\n        type: boolean\n    description: >-\n      GetSyncingResponse is the response type for the Query/GetSyncing RPC\n      method.\n  cosmos.base.tendermint.v1beta1.GetValidatorSetByHeightResponse:\n    type: object\n    properties:\n      block_height:\n        type: string\n        format: int64\n      validators:\n        type: array\n        items:\n          type: object\n          properties:\n            address:\n              type: string\n            pub_key:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n            voting_power:\n              type: string\n              format: int64\n            proposer_priority:\n              type: string\n              format: int64\n          description: Validator is the type for the validator-set.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: >-\n      GetValidatorSetByHeightResponse is the response type for the\n      Query/GetValidatorSetByHeight RPC method.\n  cosmos.base.tendermint.v1beta1.Header:\n    type: object\n    properties:\n      version:\n        title: basic block info\n        type: object\n        properties:\n          block:\n            type: string\n            format: uint64\n          app:\n            type: string\n            format: uint64\n        description: >-\n          Consensus captures the consensus rules for processing a block in the\n          blockchain,\n\n          including all blockchain data structures and the rules of the\n          application's\n\n          state transition machine.\n      chain_id:\n        type: string\n      height:\n        type: string\n        format: int64\n      time:\n        type: string\n        format: date-time\n      last_block_id:\n        type: object\n        properties:\n          hash:\n            type: string\n            format: byte\n          part_set_header:\n            type: object\n            properties:\n              total:\n                type: integer\n                format: int64\n              hash:\n                type: string\n                format: byte\n            title: PartsetHeader\n        title: BlockID\n      last_commit_hash:\n        type: string\n        format: byte\n        title: hashes of block data\n      data_hash:\n        type: string\n        format: byte\n      validators_hash:\n        type: string\n        format: byte\n        title: hashes from the app output from the prev block\n      next_validators_hash:\n        type: string\n        format: byte\n      consensus_hash:\n        type: string\n        format: byte\n      app_hash:\n        type: string\n        format: byte\n      last_results_hash:\n        type: string\n        format: byte\n      evidence_hash:\n        type: string\n        format: byte\n        title: consensus info\n      proposer_address:\n        type: string\n        description: >-\n          proposer_address is the original block proposer address, formatted as\n          a Bech32 string.\n\n          In Tendermint, this type is `bytes`, but in the SDK, we convert it to\n          a Bech32 string\n\n          for better UX.\n    description: Header defines the structure of a Tendermint block header.\n  cosmos.base.tendermint.v1beta1.Module:\n    type: object\n    properties:\n      path:\n        type: string\n        title: module path\n      version:\n        type: string\n        title: module version\n      sum:\n        type: string\n        title: checksum\n    title: Module is the type for VersionInfo\n  cosmos.base.tendermint.v1beta1.ProofOp:\n    type: object\n    properties:\n      type:\n        type: string\n      key:\n        type: string\n        format: byte\n      data:\n        type: string\n        format: byte\n    description: >-\n      ProofOp defines an operation used for calculating Merkle root. The data\n      could\n\n      be arbitrary format, providing necessary data for example neighbouring\n      node\n\n      hash.\n\n\n      Note: This type is a duplicate of the ProofOp proto type defined in\n      Tendermint.\n  cosmos.base.tendermint.v1beta1.ProofOps:\n    type: object\n    properties:\n      ops:\n        type: array\n        items:\n          type: object\n          properties:\n            type:\n              type: string\n            key:\n              type: string\n              format: byte\n            data:\n              type: string\n              format: byte\n          description: >-\n            ProofOp defines an operation used for calculating Merkle root. The\n            data could\n\n            be arbitrary format, providing necessary data for example\n            neighbouring node\n\n            hash.\n\n\n            Note: This type is a duplicate of the ProofOp proto type defined in\n            Tendermint.\n    description: >-\n      ProofOps is Merkle proof defined by the list of ProofOps.\n\n\n      Note: This type is a duplicate of the ProofOps proto type defined in\n      Tendermint.\n  cosmos.base.tendermint.v1beta1.Validator:\n    type: object\n    properties:\n      address:\n        type: string\n      pub_key:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n      voting_power:\n        type: string\n        format: int64\n      proposer_priority:\n        type: string\n        format: int64\n    description: Validator is the type for the validator-set.\n  cosmos.base.tendermint.v1beta1.VersionInfo:\n    type: object\n    properties:\n      name:\n        type: string\n      app_name:\n        type: string\n      version:\n        type: string\n      git_commit:\n        type: string\n      build_tags:\n        type: string\n      go_version:\n        type: string\n      build_deps:\n        type: array\n        items:\n          type: object\n          properties:\n            path:\n              type: string\n              title: module path\n            version:\n              type: string\n              title: module version\n            sum:\n              type: string\n              title: checksum\n          title: Module is the type for VersionInfo\n      cosmos_sdk_version:\n        type: string\n        title: 'Since: cosmos-sdk 0.43'\n    description: VersionInfo is the type for the GetNodeInfoResponse message.\n  tendermint.p2p.DefaultNodeInfo:\n    type: object\n    properties:\n      protocol_version:\n        type: object\n        properties:\n          p2p:\n            type: string\n            format: uint64\n          block:\n            type: string\n            format: uint64\n          app:\n            type: string\n            format: uint64\n      default_node_id:\n        type: string\n      listen_addr:\n        type: string\n      network:\n        type: string\n      version:\n        type: string\n      channels:\n        type: string\n        format: byte\n      moniker:\n        type: string\n      other:\n        type: object\n        properties:\n          tx_index:\n            type: string\n          rpc_address:\n            type: string\n  tendermint.p2p.DefaultNodeInfoOther:\n    type: object\n    properties:\n      tx_index:\n        type: string\n      rpc_address:\n        type: string\n  tendermint.p2p.ProtocolVersion:\n    type: object\n    properties:\n      p2p:\n        type: string\n        format: uint64\n      block:\n        type: string\n        format: uint64\n      app:\n        type: string\n        format: uint64\n  cosmos.slashing.v1beta1.Params:\n    type: object\n    properties:\n      signed_blocks_window:\n        type: string\n        format: int64\n      min_signed_per_window:\n        type: string\n        format: byte\n      downtime_jail_duration:\n        type: string\n      slash_fraction_double_sign:\n        type: string\n        format: byte\n      slash_fraction_downtime:\n        type: string\n        format: byte\n    description: Params represents the parameters used for by the slashing module.\n  cosmos.slashing.v1beta1.QueryParamsResponse:\n    type: object\n    properties:\n      params:\n        type: object\n        properties:\n          signed_blocks_window:\n            type: string\n            format: int64\n          min_signed_per_window:\n            type: string\n            format: byte\n          downtime_jail_duration:\n            type: string\n          slash_fraction_double_sign:\n            type: string\n            format: byte\n          slash_fraction_downtime:\n            type: string\n            format: byte\n        description: Params represents the parameters used for by the slashing module.\n    title: QueryParamsResponse is the response type for the Query/Params RPC method\n  cosmos.slashing.v1beta1.QuerySigningInfoResponse:\n    type: object\n    properties:\n      val_signing_info:\n        type: object\n        properties:\n          address:\n            type: string\n          start_height:\n            type: string\n            format: int64\n            title: Height at which validator was first a candidate OR was unjailed\n          index_offset:\n            type: string\n            format: int64\n            description: >-\n              Index which is incremented each time the validator was a bonded\n\n              in a block and may have signed a precommit or not. This in\n              conjunction with the\n\n              `SignedBlocksWindow` param determines the index in the\n              `MissedBlocksBitArray`.\n          jailed_until:\n            type: string\n            format: date-time\n            description: >-\n              Timestamp until which the validator is jailed due to liveness\n              downtime.\n          tombstoned:\n            type: boolean\n            description: >-\n              Whether or not a validator has been tombstoned (killed out of\n              validator set). It is set\n\n              once the validator commits an equivocation or for any other\n              configured misbehiavor.\n          missed_blocks_counter:\n            type: string\n            format: int64\n            description: >-\n              A counter kept to avoid unnecessary array reads.\n\n              Note that `Sum(MissedBlocksBitArray)` always equals\n              `MissedBlocksCounter`.\n        description: >-\n          ValidatorSigningInfo defines a validator's signing info for monitoring\n          their\n\n          liveness activity.\n        title: val_signing_info is the signing info of requested val cons address\n    title: >-\n      QuerySigningInfoResponse is the response type for the Query/SigningInfo\n      RPC\n\n      method\n  cosmos.slashing.v1beta1.QuerySigningInfosResponse:\n    type: object\n    properties:\n      info:\n        type: array\n        items:\n          type: object\n          properties:\n            address:\n              type: string\n            start_height:\n              type: string\n              format: int64\n              title: Height at which validator was first a candidate OR was unjailed\n            index_offset:\n              type: string\n              format: int64\n              description: >-\n                Index which is incremented each time the validator was a bonded\n\n                in a block and may have signed a precommit or not. This in\n                conjunction with the\n\n                `SignedBlocksWindow` param determines the index in the\n                `MissedBlocksBitArray`.\n            jailed_until:\n              type: string\n              format: date-time\n              description: >-\n                Timestamp until which the validator is jailed due to liveness\n                downtime.\n            tombstoned:\n              type: boolean\n              description: >-\n                Whether or not a validator has been tombstoned (killed out of\n                validator set). It is set\n\n                once the validator commits an equivocation or for any other\n                configured misbehiavor.\n            missed_blocks_counter:\n              type: string\n              format: int64\n              description: >-\n                A counter kept to avoid unnecessary array reads.\n\n                Note that `Sum(MissedBlocksBitArray)` always equals\n                `MissedBlocksCounter`.\n          description: >-\n            ValidatorSigningInfo defines a validator's signing info for\n            monitoring their\n\n            liveness activity.\n        title: info is the signing info of all validators\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    title: >-\n      QuerySigningInfosResponse is the response type for the Query/SigningInfos\n      RPC\n\n      method\n  cosmos.slashing.v1beta1.ValidatorSigningInfo:\n    type: object\n    properties:\n      address:\n        type: string\n      start_height:\n        type: string\n        format: int64\n        title: Height at which validator was first a candidate OR was unjailed\n      index_offset:\n        type: string\n        format: int64\n        description: >-\n          Index which is incremented each time the validator was a bonded\n\n          in a block and may have signed a precommit or not. This in conjunction\n          with the\n\n          `SignedBlocksWindow` param determines the index in the\n          `MissedBlocksBitArray`.\n      jailed_until:\n        type: string\n        format: date-time\n        description: >-\n          Timestamp until which the validator is jailed due to liveness\n          downtime.\n      tombstoned:\n        type: boolean\n        description: >-\n          Whether or not a validator has been tombstoned (killed out of\n          validator set). It is set\n\n          once the validator commits an equivocation or for any other configured\n          misbehiavor.\n      missed_blocks_counter:\n        type: string\n        format: int64\n        description: >-\n          A counter kept to avoid unnecessary array reads.\n\n          Note that `Sum(MissedBlocksBitArray)` always equals\n          `MissedBlocksCounter`.\n    description: >-\n      ValidatorSigningInfo defines a validator's signing info for monitoring\n      their\n\n      liveness activity.\n  cosmos.gov.v1beta1.Deposit:\n    type: object\n    properties:\n      proposal_id:\n        type: string\n        format: uint64\n        description: proposal_id defines the unique id of the proposal.\n      depositor:\n        type: string\n        description: depositor defines the deposit addresses from the proposals.\n      amount:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        description: amount to be deposited by depositor.\n    description: |-\n      Deposit defines an amount deposited by an account address to an active\n      proposal.\n  cosmos.gov.v1beta1.DepositParams:\n    type: object\n    properties:\n      min_deposit:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        description: Minimum deposit for a proposal to enter voting period.\n      max_deposit_period:\n        type: string\n        description: >-\n          Maximum period for Atom holders to deposit on a proposal. Initial\n          value: 2\n\n          months.\n    description: DepositParams defines the params for deposits on governance proposals.\n  cosmos.gov.v1beta1.Proposal:\n    type: object\n    properties:\n      proposal_id:\n        type: string\n        format: uint64\n        description: proposal_id defines the unique id of the proposal.\n      content:\n        type: object\n        properties:\n          type_url:\n            type: string\n          value:\n            type: string\n            format: byte\n        description: content is the proposal's content.\n      status:\n        description: status defines the proposal status.\n        type: string\n        enum:\n          - PROPOSAL_STATUS_UNSPECIFIED\n          - PROPOSAL_STATUS_DEPOSIT_PERIOD\n          - PROPOSAL_STATUS_VOTING_PERIOD\n          - PROPOSAL_STATUS_PASSED\n          - PROPOSAL_STATUS_REJECTED\n          - PROPOSAL_STATUS_FAILED\n        default: PROPOSAL_STATUS_UNSPECIFIED\n      final_tally_result:\n        description: |-\n          final_tally_result is the final tally result of the proposal. When\n          querying a proposal via gRPC, this field is not populated until the\n          proposal's voting period has ended.\n        type: object\n        properties:\n          'yes':\n            type: string\n            description: yes is the number of yes votes on a proposal.\n          abstain:\n            type: string\n            description: abstain is the number of abstain votes on a proposal.\n          'no':\n            type: string\n            description: no is the number of no votes on a proposal.\n          no_with_veto:\n            type: string\n            description: no_with_veto is the number of no with veto votes on a proposal.\n      submit_time:\n        type: string\n        format: date-time\n        description: submit_time is the time of proposal submission.\n      deposit_end_time:\n        type: string\n        format: date-time\n        description: deposit_end_time is the end time for deposition.\n      total_deposit:\n        type: array\n        items:\n          type: object\n          properties:\n            denom:\n              type: string\n            amount:\n              type: string\n          description: |-\n            Coin defines a token with a denomination and an amount.\n\n            NOTE: The amount field is an Int which implements the custom method\n            signatures required by gogoproto.\n        description: total_deposit is the total deposit on the proposal.\n      voting_start_time:\n        type: string\n        format: date-time\n        description: voting_start_time is the starting time to vote on a proposal.\n      voting_end_time:\n        type: string\n        format: date-time\n        description: voting_end_time is the end time of voting on a proposal.\n    description: Proposal defines the core field members of a governance proposal.\n  cosmos.gov.v1beta1.ProposalStatus:\n    type: string\n    enum:\n      - PROPOSAL_STATUS_UNSPECIFIED\n      - PROPOSAL_STATUS_DEPOSIT_PERIOD\n      - PROPOSAL_STATUS_VOTING_PERIOD\n      - PROPOSAL_STATUS_PASSED\n      - PROPOSAL_STATUS_REJECTED\n      - PROPOSAL_STATUS_FAILED\n    default: PROPOSAL_STATUS_UNSPECIFIED\n    description: |-\n      ProposalStatus enumerates the valid statuses of a proposal.\n\n       - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n       - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\n      period.\n       - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\n      period.\n       - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\n      passed.\n       - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\n      been rejected.\n       - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\n      failed.\n  cosmos.gov.v1beta1.QueryDepositResponse:\n    type: object\n    properties:\n      deposit:\n        type: object\n        properties:\n          proposal_id:\n            type: string\n            format: uint64\n            description: proposal_id defines the unique id of the proposal.\n          depositor:\n            type: string\n            description: depositor defines the deposit addresses from the proposals.\n          amount:\n            type: array\n            items:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom\n                method\n\n                signatures required by gogoproto.\n            description: amount to be deposited by depositor.\n        description: |-\n          Deposit defines an amount deposited by an account address to an active\n          proposal.\n    description: >-\n      QueryDepositResponse is the response type for the Query/Deposit RPC\n      method.\n  cosmos.gov.v1beta1.QueryDepositsResponse:\n    type: object\n    properties:\n      deposits:\n        type: array\n        items:\n          type: object\n          properties:\n            proposal_id:\n              type: string\n              format: uint64\n              description: proposal_id defines the unique id of the proposal.\n            depositor:\n              type: string\n              description: depositor defines the deposit addresses from the proposals.\n            amount:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom\n                  method\n\n                  signatures required by gogoproto.\n              description: amount to be deposited by depositor.\n          description: >-\n            Deposit defines an amount deposited by an account address to an\n            active\n\n            proposal.\n        description: deposits defines the requested deposits.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: >-\n      QueryDepositsResponse is the response type for the Query/Deposits RPC\n      method.\n  cosmos.gov.v1beta1.QueryParamsResponse:\n    type: object\n    properties:\n      voting_params:\n        description: voting_params defines the parameters related to voting.\n        type: object\n        properties:\n          voting_period:\n            type: string\n            description: Duration of the voting period.\n      deposit_params:\n        description: deposit_params defines the parameters related to deposit.\n        type: object\n        properties:\n          min_deposit:\n            type: array\n            items:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom\n                method\n\n                signatures required by gogoproto.\n            description: Minimum deposit for a proposal to enter voting period.\n          max_deposit_period:\n            type: string\n            description: >-\n              Maximum period for Atom holders to deposit on a proposal. Initial\n              value: 2\n\n              months.\n      tally_params:\n        description: tally_params defines the parameters related to tally.\n        type: object\n        properties:\n          quorum:\n            type: string\n            format: byte\n            description: >-\n              Minimum percentage of total stake needed to vote for a result to\n              be\n\n              considered valid.\n          threshold:\n            type: string\n            format: byte\n            description: >-\n              Minimum proportion of Yes votes for proposal to pass. Default\n              value: 0.5.\n          veto_threshold:\n            type: string\n            format: byte\n            description: >-\n              Minimum value of Veto votes to Total votes ratio for proposal to\n              be\n\n              vetoed. Default value: 1/3.\n    description: QueryParamsResponse is the response type for the Query/Params RPC method.\n  cosmos.gov.v1beta1.QueryProposalResponse:\n    type: object\n    properties:\n      proposal:\n        type: object\n        properties:\n          proposal_id:\n            type: string\n            format: uint64\n            description: proposal_id defines the unique id of the proposal.\n          content:\n            type: object\n            properties:\n              type_url:\n                type: string\n              value:\n                type: string\n                format: byte\n            description: content is the proposal's content.\n          status:\n            description: status defines the proposal status.\n            type: string\n            enum:\n              - PROPOSAL_STATUS_UNSPECIFIED\n              - PROPOSAL_STATUS_DEPOSIT_PERIOD\n              - PROPOSAL_STATUS_VOTING_PERIOD\n              - PROPOSAL_STATUS_PASSED\n              - PROPOSAL_STATUS_REJECTED\n              - PROPOSAL_STATUS_FAILED\n            default: PROPOSAL_STATUS_UNSPECIFIED\n          final_tally_result:\n            description: >-\n              final_tally_result is the final tally result of the proposal. When\n\n              querying a proposal via gRPC, this field is not populated until\n              the\n\n              proposal's voting period has ended.\n            type: object\n            properties:\n              'yes':\n                type: string\n                description: yes is the number of yes votes on a proposal.\n              abstain:\n                type: string\n                description: abstain is the number of abstain votes on a proposal.\n              'no':\n                type: string\n                description: no is the number of no votes on a proposal.\n              no_with_veto:\n                type: string\n                description: >-\n                  no_with_veto is the number of no with veto votes on a\n                  proposal.\n          submit_time:\n            type: string\n            format: date-time\n            description: submit_time is the time of proposal submission.\n          deposit_end_time:\n            type: string\n            format: date-time\n            description: deposit_end_time is the end time for deposition.\n          total_deposit:\n            type: array\n            items:\n              type: object\n              properties:\n                denom:\n                  type: string\n                amount:\n                  type: string\n              description: >-\n                Coin defines a token with a denomination and an amount.\n\n\n                NOTE: The amount field is an Int which implements the custom\n                method\n\n                signatures required by gogoproto.\n            description: total_deposit is the total deposit on the proposal.\n          voting_start_time:\n            type: string\n            format: date-time\n            description: voting_start_time is the starting time to vote on a proposal.\n          voting_end_time:\n            type: string\n            format: date-time\n            description: voting_end_time is the end time of voting on a proposal.\n        description: Proposal defines the core field members of a governance proposal.\n    description: >-\n      QueryProposalResponse is the response type for the Query/Proposal RPC\n      method.\n  cosmos.gov.v1beta1.QueryProposalsResponse:\n    type: object\n    properties:\n      proposals:\n        type: array\n        items:\n          type: object\n          properties:\n            proposal_id:\n              type: string\n              format: uint64\n              description: proposal_id defines the unique id of the proposal.\n            content:\n              type: object\n              properties:\n                type_url:\n                  type: string\n                value:\n                  type: string\n                  format: byte\n              description: content is the proposal's content.\n            status:\n              description: status defines the proposal status.\n              type: string\n              enum:\n                - PROPOSAL_STATUS_UNSPECIFIED\n                - PROPOSAL_STATUS_DEPOSIT_PERIOD\n                - PROPOSAL_STATUS_VOTING_PERIOD\n                - PROPOSAL_STATUS_PASSED\n                - PROPOSAL_STATUS_REJECTED\n                - PROPOSAL_STATUS_FAILED\n              default: PROPOSAL_STATUS_UNSPECIFIED\n            final_tally_result:\n              description: >-\n                final_tally_result is the final tally result of the proposal.\n                When\n\n                querying a proposal via gRPC, this field is not populated until\n                the\n\n                proposal's voting period has ended.\n              type: object\n              properties:\n                'yes':\n                  type: string\n                  description: yes is the number of yes votes on a proposal.\n                abstain:\n                  type: string\n                  description: abstain is the number of abstain votes on a proposal.\n                'no':\n                  type: string\n                  description: no is the number of no votes on a proposal.\n                no_with_veto:\n                  type: string\n                  description: >-\n                    no_with_veto is the number of no with veto votes on a\n                    proposal.\n            submit_time:\n              type: string\n              format: date-time\n              description: submit_time is the time of proposal submission.\n            deposit_end_time:\n              type: string\n              format: date-time\n              description: deposit_end_time is the end time for deposition.\n            total_deposit:\n              type: array\n              items:\n                type: object\n                properties:\n                  denom:\n                    type: string\n                  amount:\n                    type: string\n                description: >-\n                  Coin defines a token with a denomination and an amount.\n\n\n                  NOTE: The amount field is an Int which implements the custom\n                  method\n\n                  signatures required by gogoproto.\n              description: total_deposit is the total deposit on the proposal.\n            voting_start_time:\n              type: string\n              format: date-time\n              description: voting_start_time is the starting time to vote on a proposal.\n            voting_end_time:\n              type: string\n              format: date-time\n              description: voting_end_time is the end time of voting on a proposal.\n          description: Proposal defines the core field members of a governance proposal.\n        description: proposals defines all the requested governance proposals.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: |-\n      QueryProposalsResponse is the response type for the Query/Proposals RPC\n      method.\n  cosmos.gov.v1beta1.QueryTallyResultResponse:\n    type: object\n    properties:\n      tally:\n        description: tally defines the requested tally.\n        type: object\n        properties:\n          'yes':\n            type: string\n            description: yes is the number of yes votes on a proposal.\n          abstain:\n            type: string\n            description: abstain is the number of abstain votes on a proposal.\n          'no':\n            type: string\n            description: no is the number of no votes on a proposal.\n          no_with_veto:\n            type: string\n            description: no_with_veto is the number of no with veto votes on a proposal.\n    description: >-\n      QueryTallyResultResponse is the response type for the Query/Tally RPC\n      method.\n  cosmos.gov.v1beta1.QueryVoteResponse:\n    type: object\n    properties:\n      vote:\n        type: object\n        properties:\n          proposal_id:\n            type: string\n            format: uint64\n            description: proposal_id defines the unique id of the proposal.\n          voter:\n            type: string\n            description: voter is the voter address of the proposal.\n          option:\n            description: >-\n              Deprecated: Prefer to use `options` instead. This field is set in\n              queries\n\n              if and only if `len(options) == 1` and that option has weight 1.\n              In all\n\n              other cases, this field will default to VOTE_OPTION_UNSPECIFIED.\n            type: string\n            enum:\n              - VOTE_OPTION_UNSPECIFIED\n              - VOTE_OPTION_YES\n              - VOTE_OPTION_ABSTAIN\n              - VOTE_OPTION_NO\n              - VOTE_OPTION_NO_WITH_VETO\n            default: VOTE_OPTION_UNSPECIFIED\n          options:\n            type: array\n            items:\n              type: object\n              properties:\n                option:\n                  description: >-\n                    option defines the valid vote options, it must not contain\n                    duplicate vote options.\n                  type: string\n                  enum:\n                    - VOTE_OPTION_UNSPECIFIED\n                    - VOTE_OPTION_YES\n                    - VOTE_OPTION_ABSTAIN\n                    - VOTE_OPTION_NO\n                    - VOTE_OPTION_NO_WITH_VETO\n                  default: VOTE_OPTION_UNSPECIFIED\n                weight:\n                  type: string\n                  description: weight is the vote weight associated with the vote option.\n              description: |-\n                WeightedVoteOption defines a unit of vote for vote split.\n\n                Since: cosmos-sdk 0.43\n            description: |-\n              options is the weighted vote options.\n\n              Since: cosmos-sdk 0.43\n        description: |-\n          Vote defines a vote on a governance proposal.\n          A Vote consists of a proposal ID, the voter, and the vote option.\n    description: QueryVoteResponse is the response type for the Query/Vote RPC method.\n  cosmos.gov.v1beta1.QueryVotesResponse:\n    type: object\n    properties:\n      votes:\n        type: array\n        items:\n          type: object\n          properties:\n            proposal_id:\n              type: string\n              format: uint64\n              description: proposal_id defines the unique id of the proposal.\n            voter:\n              type: string\n              description: voter is the voter address of the proposal.\n            option:\n              description: >-\n                Deprecated: Prefer to use `options` instead. This field is set\n                in queries\n\n                if and only if `len(options) == 1` and that option has weight 1.\n                In all\n\n                other cases, this field will default to VOTE_OPTION_UNSPECIFIED.\n              type: string\n              enum:\n                - VOTE_OPTION_UNSPECIFIED\n                - VOTE_OPTION_YES\n                - VOTE_OPTION_ABSTAIN\n                - VOTE_OPTION_NO\n                - VOTE_OPTION_NO_WITH_VETO\n              default: VOTE_OPTION_UNSPECIFIED\n            options:\n              type: array\n              items:\n                type: object\n                properties:\n                  option:\n                    description: >-\n                      option defines the valid vote options, it must not contain\n                      duplicate vote options.\n                    type: string\n                    enum:\n                      - VOTE_OPTION_UNSPECIFIED\n                      - VOTE_OPTION_YES\n                      - VOTE_OPTION_ABSTAIN\n                      - VOTE_OPTION_NO\n                      - VOTE_OPTION_NO_WITH_VETO\n                    default: VOTE_OPTION_UNSPECIFIED\n                  weight:\n                    type: string\n                    description: weight is the vote weight associated with the vote option.\n                description: |-\n                  WeightedVoteOption defines a unit of vote for vote split.\n\n                  Since: cosmos-sdk 0.43\n              description: |-\n                options is the weighted vote options.\n\n                Since: cosmos-sdk 0.43\n          description: |-\n            Vote defines a vote on a governance proposal.\n            A Vote consists of a proposal ID, the voter, and the vote option.\n        description: votes defines the queried votes.\n      pagination:\n        type: object\n        properties:\n          next_key:\n            type: string\n            format: byte\n            description: |-\n              next_key is the key to be passed to PageRequest.key to\n              query the next page most efficiently. It will be empty if\n              there are no more results.\n          total:\n            type: string\n            format: uint64\n            title: >-\n              total is total number of results available if\n              PageRequest.count_total\n\n              was set, its value is undefined otherwise\n        description: |-\n          PageResponse is to be embedded in gRPC response messages where the\n          corresponding request message has used PageRequest.\n\n           message SomeResponse {\n                   repeated Bar results = 1;\n                   PageResponse page = 2;\n           }\n    description: QueryVotesResponse is the response type for the Query/Votes RPC method.\n  cosmos.gov.v1beta1.TallyParams:\n    type: object\n    properties:\n      quorum:\n        type: string\n        format: byte\n        description: |-\n          Minimum percentage of total stake needed to vote for a result to be\n          considered valid.\n      threshold:\n        type: string\n        format: byte\n        description: >-\n          Minimum proportion of Yes votes for proposal to pass. Default value:\n          0.5.\n      veto_threshold:\n        type: string\n        format: byte\n        description: |-\n          Minimum value of Veto votes to Total votes ratio for proposal to be\n          vetoed. Default value: 1/3.\n    description: TallyParams defines the params for tallying votes on governance proposals.\n  cosmos.gov.v1beta1.TallyResult:\n    type: object\n    properties:\n      'yes':\n        type: string\n        description: yes is the number of yes votes on a proposal.\n      abstain:\n        type: string\n        description: abstain is the number of abstain votes on a proposal.\n      'no':\n        type: string\n        description: no is the number of no votes on a proposal.\n      no_with_veto:\n        type: string\n        description: no_with_veto is the number of no with veto votes on a proposal.\n    description: TallyResult defines a standard tally for a governance proposal.\n  cosmos.gov.v1beta1.Vote:\n    type: object\n    properties:\n      proposal_id:\n        type: string\n        format: uint64\n        description: proposal_id defines the unique id of the proposal.\n      voter:\n        type: string\n        description: voter is the voter address of the proposal.\n      option:\n        description: >-\n          Deprecated: Prefer to use `options` instead. This field is set in\n          queries\n\n          if and only if `len(options) == 1` and that option has weight 1. In\n          all\n\n          other cases, this field will default to VOTE_OPTION_UNSPECIFIED.\n        type: string\n        enum:\n          - VOTE_OPTION_UNSPECIFIED\n          - VOTE_OPTION_YES\n          - VOTE_OPTION_ABSTAIN\n          - VOTE_OPTION_NO\n          - VOTE_OPTION_NO_WITH_VETO\n        default: VOTE_OPTION_UNSPECIFIED\n      options:\n        type: array\n        items:\n          type: object\n          properties:\n            option:\n              description: >-\n                option defines the valid vote options, it must not contain\n                duplicate vote options.\n              type: string\n              enum:\n                - VOTE_OPTION_UNSPECIFIED\n                - VOTE_OPTION_YES\n                - VOTE_OPTION_ABSTAIN\n                - VOTE_OPTION_NO\n                - VOTE_OPTION_NO_WITH_VETO\n              default: VOTE_OPTION_UNSPECIFIED\n            weight:\n              type: string\n              description: weight is the vote weight associated with the vote option.\n          description: |-\n            WeightedVoteOption defines a unit of vote for vote split.\n\n            Since: cosmos-sdk 0.43\n        description: |-\n          options is the weighted vote options.\n\n          Since: cosmos-sdk 0.43\n    description: |-\n      Vote defines a vote on a governance proposal.\n      A Vote consists of a proposal ID, the voter, and the vote option.\n  cosmos.gov.v1beta1.VoteOption:\n    type: string\n    enum:\n      - VOTE_OPTION_UNSPECIFIED\n      - VOTE_OPTION_YES\n      - VOTE_OPTION_ABSTAIN\n      - VOTE_OPTION_NO\n      - VOTE_OPTION_NO_WITH_VETO\n    default: VOTE_OPTION_UNSPECIFIED\n    description: >-\n      VoteOption enumerates the valid vote options for a given governance\n      proposal.\n\n       - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option.\n       - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n       - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n       - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n       - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.\n  cosmos.gov.v1beta1.VotingParams:\n    type: object\n    properties:\n      voting_period:\n        type: string\n        description: Duration of the voting period.\n    description: VotingParams defines the params for voting on governance proposals.\n  cosmos.gov.v1beta1.WeightedVoteOption:\n    type: object\n    properties:\n      option:\n        description: >-\n          option defines the valid vote options, it must not contain duplicate\n          vote options.\n        type: string\n        enum:\n          - VOTE_OPTION_UNSPECIFIED\n          - VOTE_OPTION_YES\n          - VOTE_OPTION_ABSTAIN\n          - VOTE_OPTION_NO\n          - VOTE_OPTION_NO_WITH_VETO\n        default: VOTE_OPTION_UNSPECIFIED\n      weight:\n        type: string\n        description: weight is the vote weight associated with the vote option.\n    description: |-\n      WeightedVoteOption defines a unit of vote for vote split.\n\n      Since: cosmos-sdk 0.43\n  cosmos.mint.v1beta1.Params:\n    type: object\n    properties:\n      mint_denom:\n        type: string\n        title: type of coin to mint\n      inflation_rate_change:\n        type: string\n        title: maximum annual change in inflation rate\n      inflation_max:\n        type: string\n        title: maximum inflation rate\n      inflation_min:\n        type: string\n        title: minimum inflation rate\n      goal_bonded:\n        type: string\n        title: goal of percent bonded atoms\n      blocks_per_year:\n        type: string\n        format: uint64\n        title: expected blocks per year\n    description: Params defines the parameters for the x/mint module.\n  cosmos.mint.v1beta1.QueryAnnualProvisionsResponse:\n    type: object\n    properties:\n      annual_provisions:\n        type: string\n        format: byte\n        description: annual_provisions is the current minting annual provisions value.\n    description: |-\n      QueryAnnualProvisionsResponse is the response type for the\n      Query/AnnualProvisions RPC method.\n  cosmos.mint.v1beta1.QueryInflationResponse:\n    type: object\n    properties:\n      inflation:\n        type: string\n        format: byte\n        description: inflation is the current minting inflation value.\n    description: |-\n      QueryInflationResponse is the response type for the Query/Inflation RPC\n      method.\n  cosmos.mint.v1beta1.QueryParamsResponse:\n    type: object\n    properties:\n      params:\n        description: params defines the parameters of the module.\n        type: object\n        properties:\n          mint_denom:\n            type: string\n            title: type of coin to mint\n          inflation_rate_change:\n            type: string\n            title: maximum annual change in inflation rate\n          inflation_max:\n            type: string\n            title: maximum inflation rate\n          inflation_min:\n            type: string\n            title: minimum inflation rate\n          goal_bonded:\n            type: string\n            title: goal of percent bonded atoms\n          blocks_per_year:\n            type: string\n            format: uint64\n            title: expected blocks per year\n    description: QueryParamsResponse is the response type for the Query/Params RPC method.\n"
  },
  {
    "path": "client/docs/template/index.tpl",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n    <head>\n        <meta charset=\"utf-8\" />\n        <title>{{ .Title }}</title>\n        <link rel=\"stylesheet\" type=\"text/css\" href=\"//unpkg.com/swagger-ui-dist@3.40.0/swagger-ui.css\" />\n        <link rel=\"icon\" type=\"image/png\" href=\"//unpkg.com/swagger-ui-dist@3.40.0/favicon-16x16.png\" />\n    </head>\n    <body>\n        <div id=\"swagger-ui\"></div>\n\n        <script src=\"//unpkg.com/swagger-ui-dist@3.40.0/swagger-ui-bundle.js\"></script>\n        <script>\n            // init Swagger for faucet's openapi.yml.\n            window.onload = function() {\n              window.ui = SwaggerUIBundle({\n                url: {{ .URL }},\n                dom_id: \"#swagger-ui\",\n                deepLinking: true,\n                layout: \"BaseLayout\",\n              });\n            }\n        </script>\n    </body>\n</html>\nFooter\n© 2022 GitHub, Inc.\nFooter navigation\n"
  },
  {
    "path": "cmd/cyber/cmd/root.go",
    "content": "package cmd\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/cometbft/cometbft/crypto\"\n\t\"github.com/cometbft/cometbft/libs/bytes\"\n\t\"github.com/cosmos/cosmos-sdk/baseapp\"\n\t\"github.com/cosmos/cosmos-sdk/snapshots\"\n\tsnapshottypes \"github.com/cosmos/cosmos-sdk/snapshots/types\"\n\t\"github.com/cosmos/cosmos-sdk/store\"\n\tstoretypes \"github.com/cosmos/cosmos-sdk/store/types\"\n\tgenutiltypes \"github.com/cosmos/cosmos-sdk/x/genutil/types\"\n\tupgradetypes \"github.com/cosmos/cosmos-sdk/x/upgrade/types\"\n\tv6 \"github.com/cybercongress/go-cyber/v7/app/upgrades/v6\"\n\n\t\"cosmossdk.io/simapp/params\"\n\n\twasmkeeper \"github.com/CosmWasm/wasmd/x/wasm/keeper\"\n\twasmtypes \"github.com/CosmWasm/wasmd/x/wasm/types\"\n\ttmcfg \"github.com/cometbft/cometbft/config\"\n\t\"github.com/cosmos/cosmos-sdk/client/config\"\n\t\"github.com/cosmos/cosmos-sdk/client/pruning\"\n\t\"github.com/prometheus/client_golang/prometheus\"\n\n\t\"github.com/cybercongress/go-cyber/v7/app\"\n\n\t\"github.com/CosmWasm/wasmd/x/wasm\"\n\t\"github.com/cosmos/cosmos-sdk/x/crisis\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/rank\"\n\n\tdbm \"github.com/cometbft/cometbft-db\"\n\ttmcli \"github.com/cometbft/cometbft/libs/cli\"\n\t\"github.com/cometbft/cometbft/libs/log\"\n\t\"github.com/spf13/cast\"\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/cosmos/cosmos-sdk/client/debug\"\n\t\"github.com/cosmos/cosmos-sdk/client/flags\"\n\t\"github.com/cosmos/cosmos-sdk/client/keys\"\n\t\"github.com/cosmos/cosmos-sdk/client/rpc\"\n\t\"github.com/cosmos/cosmos-sdk/server\"\n\tservertypes \"github.com/cosmos/cosmos-sdk/server/types\"\n\tauthcmd \"github.com/cosmos/cosmos-sdk/x/auth/client/cli\"\n\t\"github.com/cosmos/cosmos-sdk/x/auth/types\"\n\tgenutilcli \"github.com/cosmos/cosmos-sdk/x/genutil/client/cli\"\n\n\tserverconfig \"github.com/cosmos/cosmos-sdk/server/config\"\n\n\t\"github.com/cosmos/cosmos-sdk/version\"\n\n\trosettaCmd \"cosmossdk.io/tools/rosetta/cmd\"\n\twasmcli \"github.com/CosmWasm/wasmd/x/wasm/client/cli\"\n\tbostrom \"github.com/cybercongress/go-cyber/v7/app\"\n)\n\n// NewRootCmd creates a new root command for simd. It is called once in the\n// main function.\nfunc NewRootCmd() (*cobra.Command, params.EncodingConfig) {\n\tencodingConfig := app.MakeEncodingConfig()\n\n\tapp.SetConfig()\n\n\tinitClientCtx := client.Context{}.\n\t\tWithCodec(encodingConfig.Codec).\n\t\tWithInterfaceRegistry(encodingConfig.InterfaceRegistry).\n\t\tWithTxConfig(encodingConfig.TxConfig).\n\t\tWithLegacyAmino(encodingConfig.Amino).\n\t\tWithInput(os.Stdin).\n\t\tWithAccountRetriever(types.AccountRetriever{}).\n\t\tWithBroadcastMode(flags.FlagBroadcastMode).\n\t\tWithHomeDir(app.DefaultNodeHome).\n\t\tWithViper(\"\")\n\n\trootCmd := &cobra.Command{\n\t\tUse:   version.AppName,\n\t\tShort: \"Bostrom Bootloader Hub\",\n\t\tPersistentPreRunE: func(cmd *cobra.Command, _ []string) error {\n\t\t\tcmd.SetOut(cmd.OutOrStdout())\n\t\t\tcmd.SetErr(cmd.ErrOrStderr())\n\n\t\t\tinitClientCtx, err := client.ReadPersistentCommandFlags(initClientCtx, cmd.Flags())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tinitClientCtx, err = config.ReadFromClientConfig(initClientCtx)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tif err = client.SetCmdClientContextHandler(initClientCtx, cmd); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tcustomTemplate, customAppConfig := initAppConfig()\n\t\t\tcustomTMConfig := initTendermintConfig()\n\t\t\treturn server.InterceptConfigsPreRunHandler(cmd, customTemplate, customAppConfig, customTMConfig)\n\t\t},\n\t}\n\tinitRootCmd(rootCmd, encodingConfig)\n\n\treturn rootCmd, encodingConfig\n}\n\n// initTendermintConfig helps to override default Tendermint Config values.\n// return tmcfg.DefaultConfig if no custom configuration is required for the application.\nfunc initTendermintConfig() *tmcfg.Config {\n\tcfg := tmcfg.DefaultConfig()\n\n\t// these values put a higher strain on node memory\n\t// cfg.P2P.MaxNumInboundPeers = 100\n\t// cfg.P2P.MaxNumOutboundPeers = 40\n\n\t// 2 seconds + 1 second tendermint = 3 second blocks (v15 upgrade)\n\t// cfg.Consensus.TimeoutCommit = 2 * time.Second\n\n\treturn cfg\n}\n\n// ProofExemptConfig holds config for gas-exempt PoW proof submissions.\ntype ProofExemptConfig struct {\n\t// Contracts is a list of CosmWasm contract addresses whose\n\t// \"submit_proof\" messages are exempt from gas fees.\n\tContracts []string `mapstructure:\"contracts\"`\n}\n\nconst proofExemptConfigTemplate = `\n###############################################################################\n###                     Proof-of-Work Gas Exemption                         ###\n###############################################################################\n\n[proof-exempt]\n\n# List of CosmWasm contract addresses whose \"submit_proof\" execute messages\n# are exempt from gas fees. This allows miners to submit proofs without\n# holding any tokens for gas — the mining contract deducts gas cost from rewards.\ncontracts = [\"bostrom123wr6faa62xxrft6t5wmpqmh9g0chvu7ddedggx0lkecmgef7thsls9my2\"]\n`\n\nfunc initAppConfig() (string, interface{}) {\n\ttype CustomAppConfig struct {\n\t\tserverconfig.Config\n\n\t\tWasm         wasmtypes.WasmConfig `mapstructure:\"wasm\"`\n\t\tProofExempt  ProofExemptConfig    `mapstructure:\"proof-exempt\"`\n\t}\n\n\t// Allow overrides to the SDK default server config\n\tsrvCfg := serverconfig.DefaultConfig()\n\tsrvCfg.MinGasPrices = \"0boot\"\n\n\tcustomAppConfig := CustomAppConfig{\n\t\tConfig:      *srvCfg,\n\t\tWasm:        wasmtypes.DefaultWasmConfig(),\n\t\tProofExempt: ProofExemptConfig{Contracts: []string{\"bostrom123wr6faa62xxrft6t5wmpqmh9g0chvu7ddedggx0lkecmgef7thsls9my2\"}},\n\t}\n\n\tcustomAppTemplate := serverconfig.DefaultConfigTemplate +\n\t\twasmtypes.DefaultConfigTemplate() +\n\t\tproofExemptConfigTemplate\n\n\treturn customAppTemplate, customAppConfig\n}\n\nfunc initRootCmd(rootCmd *cobra.Command, encodingConfig params.EncodingConfig) {\n\tac := appCreator{\n\t\tencCfg: encodingConfig,\n\t}\n\n\trootCmd.AddCommand(\n\t\tgenutilcli.InitCmd(app.ModuleBasics, app.DefaultNodeHome),\n\t\ttmcli.NewCompletionCmd(rootCmd, true),\n\t\tdebug.Cmd(),\n\t\tconfig.Cmd(),\n\t\tpruning.PruningCmd(newApp),\n\t\t// analyzeExportCmd(),\n\t)\n\n\tserver.AddCommands(rootCmd, app.DefaultNodeHome, newApp, ac.appExport, addModuleInitFlags)\n\tserver.AddTestnetCreatorCommand(rootCmd, app.DefaultNodeHome, newTestnetApp, addModuleInitFlags)\n\twasmcli.ExtendUnsafeResetAllCmd(rootCmd)\n\n\t// add keybase, auxiliary RPC, query, and tx child commands\n\trootCmd.AddCommand(\n\t\trpc.StatusCommand(),\n\t\tgenesisCommand(encodingConfig),\n\t\tqueryCommand(),\n\t\ttxCommand(),\n\t\tkeys.Commands(app.DefaultNodeHome),\n\t)\n\n\t// add rosetta\n\trootCmd.AddCommand(rosettaCmd.RosettaCommand(encodingConfig.InterfaceRegistry, encodingConfig.Codec))\n}\n\nfunc addModuleInitFlags(startCmd *cobra.Command) {\n\tcrisis.AddModuleInitFlags(startCmd)\n\trank.AddModuleInitFlags(startCmd)\n\twasm.AddModuleInitFlags(startCmd)\n}\n\n// genesisCommand builds genesis-related `simd genesis` command. Users may provide application specific commands as a parameter\nfunc genesisCommand(encodingConfig params.EncodingConfig, cmds ...*cobra.Command) *cobra.Command {\n\tcmd := genutilcli.GenesisCoreCommand(encodingConfig.TxConfig, app.ModuleBasics, app.DefaultNodeHome)\n\n\tfor _, subCmd := range cmds {\n\t\tcmd.AddCommand(subCmd)\n\t}\n\treturn cmd\n}\n\nfunc queryCommand() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:                        \"query\",\n\t\tAliases:                    []string{\"q\"},\n\t\tShort:                      \"Querying subcommands\",\n\t\tDisableFlagParsing:         true,\n\t\tSuggestionsMinimumDistance: 2,\n\t\tRunE:                       client.ValidateCmd,\n\t}\n\n\tcmd.AddCommand(\n\t\tauthcmd.GetAccountCmd(),\n\t\trpc.ValidatorCommand(),\n\t\trpc.BlockCommand(),\n\t\tauthcmd.QueryTxsByEventsCmd(),\n\t\tauthcmd.QueryTxCmd(),\n\t)\n\n\tapp.ModuleBasics.AddQueryCommands(cmd)\n\tcmd.PersistentFlags().String(flags.FlagChainID, \"\", \"The network chain ID\")\n\n\treturn cmd\n}\n\nfunc txCommand() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:                        \"tx\",\n\t\tShort:                      \"Transactions subcommands\",\n\t\tDisableFlagParsing:         true,\n\t\tSuggestionsMinimumDistance: 2,\n\t\tRunE:                       client.ValidateCmd,\n\t}\n\n\tcmd.AddCommand(\n\t\tauthcmd.GetSignCommand(),\n\t\tauthcmd.GetSignBatchCommand(),\n\t\tauthcmd.GetMultiSignCommand(),\n\t\tauthcmd.GetMultiSignBatchCmd(),\n\t\tauthcmd.GetValidateSignaturesCommand(),\n\t\tflags.LineBreak,\n\t\tauthcmd.GetBroadcastCommand(),\n\t\tauthcmd.GetEncodeCommand(),\n\t\tauthcmd.GetDecodeCommand(),\n\t\tauthcmd.GetAuxToFeeCommand(),\n\t)\n\n\tapp.ModuleBasics.AddTxCommands(cmd)\n\tcmd.PersistentFlags().String(flags.FlagChainID, \"\", \"The network chain ID\")\n\n\treturn cmd\n}\n\ntype appCreator struct {\n\tencCfg params.EncodingConfig\n}\n\nfunc newApp(\n\tlogger log.Logger,\n\tdb dbm.DB,\n\ttraceStore io.Writer,\n\tappOpts servertypes.AppOptions,\n) servertypes.Application {\n\tvar cache storetypes.MultiStorePersistentCache\n\n\tif cast.ToBool(appOpts.Get(server.FlagInterBlockCache)) {\n\t\tcache = store.NewCommitKVStoreCacheManager()\n\t}\n\n\tskipUpgradeHeights := make(map[int64]bool)\n\tfor _, h := range cast.ToIntSlice(appOpts.Get(server.FlagUnsafeSkipUpgrades)) {\n\t\tskipUpgradeHeights[int64(h)] = true\n\t}\n\n\tpruningOpts, err := server.GetPruningOptionsFromFlags(appOpts)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tsnapshotDir := filepath.Join(cast.ToString(appOpts.Get(flags.FlagHome)), \"data\", \"snapshots\")\n\tsnapshotDB, err := dbm.NewGoLevelDB(\"metadata\", snapshotDir)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tsnapshotStore, err := snapshots.NewStore(snapshotDB, snapshotDir)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tsnapshotOptions := snapshottypes.NewSnapshotOptions(\n\t\tcast.ToUint64(appOpts.Get(server.FlagStateSyncSnapshotInterval)),\n\t\tcast.ToUint32(appOpts.Get(server.FlagStateSyncSnapshotKeepRecent)),\n\t)\n\n\thomeDir := cast.ToString(appOpts.Get(flags.FlagHome))\n\tchainID := cast.ToString(appOpts.Get(flags.FlagChainID))\n\tif chainID == \"\" {\n\t\t// fallback to genesis chain-id\n\t\t_, genesisDoc, err := genutiltypes.GenesisStateFromGenFile(filepath.Join(homeDir, \"config\", \"genesis.json\"))\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\n\t\tchainID = genesisDoc.ChainID\n\t}\n\n\tvar wasmOpts []wasmkeeper.Option\n\tif cast.ToBool(appOpts.Get(\"telemetry.enabled\")) {\n\t\twasmOpts = append(wasmOpts, wasmkeeper.WithVMCacheMetrics(prometheus.DefaultRegisterer))\n\t}\n\n\tbaseAppOptions := []func(*baseapp.BaseApp){\n\t\tbaseapp.SetPruning(pruningOpts),\n\t\tbaseapp.SetMinGasPrices(cast.ToString(appOpts.Get(server.FlagMinGasPrices))),\n\t\tbaseapp.SetMinRetainBlocks(cast.ToUint64(appOpts.Get(server.FlagMinRetainBlocks))),\n\t\tbaseapp.SetHaltHeight(cast.ToUint64(appOpts.Get(server.FlagHaltHeight))),\n\t\tbaseapp.SetHaltTime(cast.ToUint64(appOpts.Get(server.FlagHaltTime))),\n\t\tbaseapp.SetMinRetainBlocks(cast.ToUint64(appOpts.Get(server.FlagMinRetainBlocks))),\n\t\tbaseapp.SetInterBlockCache(cache),\n\t\tbaseapp.SetTrace(cast.ToBool(appOpts.Get(server.FlagTrace))),\n\t\tbaseapp.SetIndexEvents(cast.ToStringSlice(appOpts.Get(server.FlagIndexEvents))),\n\t\tbaseapp.SetSnapshot(snapshotStore, snapshotOptions),\n\t\tbaseapp.SetIAVLCacheSize(cast.ToInt(appOpts.Get(server.FlagIAVLCacheSize))),\n\t\tbaseapp.SetIAVLDisableFastNode(cast.ToBool(appOpts.Get(server.FlagDisableIAVLFastNode))),\n\t\tbaseapp.SetChainID(chainID),\n\t}\n\n\t// If this is an in place testnet, set any new stores that may exist\n\tif cast.ToBool(appOpts.Get(server.KeyIsTestnet)) {\n\t\tversionStore := store.NewCommitMultiStore(db).LatestVersion() + 1\n\t\tbaseAppOptions = append(baseAppOptions, baseapp.SetStoreLoader(upgradetypes.UpgradeStoreLoader(versionStore, &v6.Upgrade.StoreUpgrades)))\n\t}\n\n\treturn app.NewBostromApp(\n\t\tlogger, db, traceStore, true,\n\t\tappOpts,\n\t\twasmOpts,\n\t\tbaseAppOptions...,\n\t)\n}\n\nfunc (ac appCreator) appExport(\n\tlogger log.Logger,\n\tdb dbm.DB,\n\ttraceStore io.Writer,\n\theight int64,\n\tforZeroHeight bool,\n\tjailAllowedAddrs []string,\n\tappOpts servertypes.AppOptions,\n\tmodulesToExport []string,\n) (servertypes.ExportedApp, error) {\n\tvar cyberApp *app.App\n\thomePath, ok := appOpts.Get(flags.FlagHome).(string)\n\tif !ok || homePath == \"\" {\n\t\treturn servertypes.ExportedApp{}, errors.New(\"application home is not set\")\n\t}\n\n\tloadLatest := height == -1\n\n\tvar emptyWasmOpts []wasm.Option\n\tcyberApp = app.NewBostromApp(\n\t\tlogger,\n\t\tdb,\n\t\ttraceStore,\n\t\tloadLatest,\n\t\tappOpts,\n\t\temptyWasmOpts,\n\t)\n\n\tif height != -1 {\n\t\tif err := cyberApp.LoadHeight(height); err != nil {\n\t\t\treturn servertypes.ExportedApp{}, err\n\t\t}\n\t}\n\n\treturn cyberApp.ExportAppStateAndValidators(forZeroHeight, jailAllowedAddrs, modulesToExport)\n}\n\n// newTestnetApp starts by running the normal newApp method. From there, the app interface returned is modified in order\n// for a testnet to be created from the provided app.\nfunc newTestnetApp(logger log.Logger, db dbm.DB, traceStore io.Writer, appOpts servertypes.AppOptions) servertypes.Application {\n\tapp := newApp(logger, db, traceStore, appOpts)\n\tbostromApp, ok := app.(*bostrom.App)\n\tif !ok {\n\t\tpanic(\"app created from newApp is not of type osmosisApp\")\n\t}\n\n\tnewValAddr, ok := appOpts.Get(server.KeyNewValAddr).(bytes.HexBytes)\n\tif !ok {\n\t\tpanic(\"newValAddr is not of type bytes.HexBytes\")\n\t}\n\tnewValPubKey, ok := appOpts.Get(server.KeyUserPubKey).(crypto.PubKey)\n\tif !ok {\n\t\tpanic(\"newValPubKey is not of type crypto.PubKey\")\n\t}\n\tnewOperatorAddress, ok := appOpts.Get(server.KeyNewOpAddr).(string)\n\tif !ok {\n\t\tpanic(\"newOperatorAddress is not of type string\")\n\t}\n\tupgradeToTrigger, ok := appOpts.Get(server.KeyTriggerTestnetUpgrade).(string)\n\tif !ok {\n\t\tpanic(\"upgradeToTrigger is not of type string\")\n\t}\n\n\t// Make modifications to the normal App required to run the network locally\n\treturn bostrom.InitAppForTestnet(bostromApp, newValAddr, newValPubKey, newOperatorAddress, upgradeToTrigger)\n}\n"
  },
  {
    "path": "cmd/cyber/main.go",
    "content": "package main\n\nimport (\n\t\"os\"\n\n\t\"github.com/cosmos/cosmos-sdk/server\"\n\tsvrcmd \"github.com/cosmos/cosmos-sdk/server/cmd\"\n\n\t\"github.com/cybercongress/go-cyber/v7/app\"\n\t\"github.com/cybercongress/go-cyber/v7/cmd/cyber/cmd\"\n)\n\nfunc main() {\n\trootCmd, _ := cmd.NewRootCmd()\n\n\tif err := svrcmd.Execute(rootCmd, \"\", app.DefaultNodeHome); err != nil {\n\t\tswitch e := err.(type) {\n\t\tcase server.ErrorCode:\n\t\t\tos.Exit(e.Code)\n\n\t\tdefault:\n\t\t\tos.Exit(1)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "cmd/iavltool/README.md",
    "content": "## IAVL TOOL\n\n```\ngo run main.go data ~/.cyber/data\n```"
  },
  {
    "path": "cmd/iavltool/cmd/root.go",
    "content": "package cmd\n\nimport (\n\t\"bytes\"\n\t\"crypto/sha256\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\n\tdbm \"github.com/cometbft/cometbft-db\"\n\t\"github.com/cosmos/iavl\"\n\t\"github.com/spf13/cobra\"\n\tgoleveldb \"github.com/syndtr/goleveldb/leveldb\"\n\t\"github.com/syndtr/goleveldb/leveldb/util\"\n)\n\nconst (\n\tDefaultCacheSize int = 16000\n)\n\nvar (\n\tDefaultHome = os.ExpandEnv(\"$HOME/\") + \".cyber/data\"\n\trootCmd     = &cobra.Command{Use: \"iavltool\"}\n\thome        string\n)\n\n// TODO autoconf stores\nvar appStores = []string{\n\t\"acc\",\n\t\"bank\",\n\t\"staking\",\n\t\"mint\",\n\t\"distribution\",\n\t\"slashing\",\n\t\"gov\",\n\t\"params\",\n\t\"ibc\",\n\t\"upgrade\",\n\t\"evidence\",\n\t\"transfer\",\n\t\"capability\",\n\t\"wasm\",\n\t\"graph\",\n\t\"bandwidth\",\n\t\"grid\",\n\t\"rank\",\n\t\"dmn\",\n\t\"resources\",\n\t\"liquidity\",\n}\n\nfunc Execute() error {\n\treturn rootCmd.Execute()\n}\n\nfunc init() {\n\trootCmd.PersistentFlags().StringVar(&home, \"home\", DefaultHome, \"path to cyber data\")\n\trootCmd.AddCommand(dataCmd)\n\trootCmd.AddCommand(shapeCmd)\n\trootCmd.AddCommand(versionsCmd)\n\trootCmd.AddCommand(deleteCmd)\n\trootCmd.AddCommand(statsCmd)\n\trootCmd.AddCommand(pruneCmd)\n}\n\nvar dataCmd = &cobra.Command{\n\tUse:   \"data [store] [version] [kv] [hash]\",\n\tShort: \"Print data of given stores at given block\",\n\tArgs:  cobra.MinimumNArgs(0),\n\tRun: func(cmd *cobra.Command, args []string) {\n\t\tdb, err := OpenDB(home)\n\t\tif err != nil {\n\t\t\tfmt.Println(\"ERROR DB OPEN:\", err)\n\t\t}\n\n\t\tstores := appStores\n\t\tversion := int64(0)\n\t\tkeysOpt, hashingOpt := false, false\n\t\tswitch len(args) {\n\t\tcase 4:\n\t\t\thashingOpt, _ = strconv.ParseBool(args[3])\n\t\t\tfallthrough\n\t\tcase 3:\n\t\t\tkeysOpt, _ = strconv.ParseBool(args[2])\n\t\t\tfallthrough\n\t\tcase 2:\n\t\t\tversion, _ = strconv.ParseInt(args[1], 10, 64)\n\t\t\tfallthrough\n\t\tcase 1:\n\t\t\tvar a []string\n\t\t\tif args[0] != \"all\" {\n\t\t\t\tstores = append(a, args[0])\n\t\t\t}\n\t\t}\n\n\t\tfor _, name := range stores {\n\t\t\ttree, err := ReadTree(db, version, name)\n\t\t\tif err != nil {\n\t\t\t\t_, _ = fmt.Fprintf(os.Stderr, \"Error reading data: %s\\n\", err)\n\t\t\t\tos.Exit(1)\n\t\t\t}\n\t\t\tif keysOpt {\n\t\t\t\tPrintKeys(tree, hashingOpt)\n\t\t\t}\n\t\t\thash, err := tree.Hash()\n\t\t\tif err != nil {\n\t\t\t\t_, _ = fmt.Fprintf(os.Stderr, \"Error reading data: %s\\n\", err)\n\t\t\t\tos.Exit(1)\n\t\t\t}\n\t\t\tfmt.Printf(\"Hash: %X\\n\", hash)\n\t\t\tfmt.Printf(\"Size: %X\\n\", tree.Size())\n\t\t}\n\t},\n}\n\nvar shapeCmd = &cobra.Command{\n\tUse:   \"shape [store] [version]\",\n\tShort: \"Print shape of given stores at given block\",\n\tArgs:  cobra.MinimumNArgs(0),\n\tRun: func(cmd *cobra.Command, args []string) {\n\t\tdb, err := OpenDB(home)\n\t\tif err != nil {\n\t\t\tfmt.Println(\"ERROR DB OPEN:\", err)\n\t\t}\n\n\t\tstore := \"all\"\n\t\tversion := int64(0)\n\t\tswitch len(args) {\n\t\tcase 2:\n\t\t\tversion, _ = strconv.ParseInt(args[1], 10, 64)\n\t\t\tfallthrough\n\t\tcase 1:\n\t\t\tstore = args[0]\n\t\t}\n\n\t\tif store == \"all\" {\n\t\t\tfor _, name := range appStores {\n\t\t\t\ttree, err := ReadTree(db, version, name)\n\t\t\t\tif err != nil {\n\t\t\t\t\t_, _ = fmt.Fprintf(os.Stderr, \"Error reading data: %s\\n\", err)\n\t\t\t\t\tos.Exit(1)\n\t\t\t\t}\n\t\t\t\tPrintShape(tree)\n\t\t\t}\n\t\t} else {\n\t\t\ttree, err := ReadTree(db, version, store)\n\t\t\tif err != nil {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"Error reading data: %s\\n\", err)\n\t\t\t\tos.Exit(1)\n\t\t\t}\n\t\t\tPrintShape(tree)\n\t\t}\n\t},\n}\n\nvar versionsCmd = &cobra.Command{\n\tUse:   \"versions [store]\",\n\tShort: \"Print shape of given stores at given block\",\n\tArgs:  cobra.MinimumNArgs(1),\n\tRun: func(cmd *cobra.Command, args []string) {\n\t\tdb, err := OpenDB(home)\n\t\tif err != nil {\n\t\t\tfmt.Println(\"ERROR DB OPEN:\", err)\n\t\t}\n\n\t\ttree, err := ReadTree(db, 0, args[0])\n\t\tif err != nil {\n\t\t\tfmt.Fprintf(os.Stderr, \"Error reading data: %s\\n\", err)\n\t\t\tos.Exit(1)\n\t\t}\n\t\tPrintVersions(tree)\n\t},\n}\n\nvar deleteCmd = &cobra.Command{\n\tUse:   \"delete [store] [from] [to]\",\n\tShort: \"Delete versions range for given stores\",\n\tArgs:  cobra.MinimumNArgs(0),\n\tRun: func(cmd *cobra.Command, args []string) {\n\t\tdb, err := OpenDB(home)\n\t\tif err != nil {\n\t\t\tfmt.Println(\"ERROR DB OPEN:\", err)\n\t\t}\n\n\t\tstores := appStores\n\t\tfrom, to := int64(0), int64(0)\n\t\tswitch len(args) {\n\t\tcase 3:\n\t\t\tto, _ = strconv.ParseInt(args[2], 10, 64)\n\t\t\tfallthrough\n\t\tcase 2:\n\t\t\tfrom, _ = strconv.ParseInt(args[1], 10, 64)\n\t\t\tfallthrough\n\t\tcase 1:\n\t\t\tvar a []string\n\t\t\tif args[0] != \"all\" {\n\t\t\t\tstores = append(a, args[0])\n\t\t\t}\n\t\t}\n\n\t\tfor _, name := range stores {\n\t\t\ttree, err := GetTree(db, name)\n\t\t\tfmt.Println(\"processing\", name)\n\t\t\tif err != nil {\n\t\t\t\t_, _ = fmt.Fprintf(os.Stderr, \"Error reading data: %s\\n\", err)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\terr = tree.DeleteVersionsRange(from, to)\n\t\t\tif err != nil {\n\t\t\t\t_, _ = fmt.Fprintf(os.Stderr, \"Error deleting data: %s\\n\", err)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t},\n}\n\nvar statsCmd = &cobra.Command{\n\tUse:   \"stats [store] [version]\",\n\tShort: \"Print shape of given stores at given block\",\n\tArgs:  cobra.MinimumNArgs(0),\n\tRun: func(cmd *cobra.Command, args []string) {\n\t\tdb, err := OpenDB(home)\n\t\tif err != nil {\n\t\t\tfmt.Println(\"ERROR DB OPEN:\", err)\n\t\t}\n\n\t\tPrintDBStats(db)\n\t},\n}\n\nvar pruneCmd = &cobra.Command{\n\tUse:   \"prune\",\n\tShort: \"Prune leveldb\",\n\tArgs:  cobra.NoArgs,\n\tRun: func(cmd *cobra.Command, args []string) {\n\t\tdb, _ := goleveldb.OpenFile(home+\"/application.db\", nil)\n\t\tdefer db.Close()\n\t\t_ = db.CompactRange(util.Range{Start: nil, Limit: nil})\n\t},\n}\n\nfunc OpenDB(dir string) (dbm.DB, error) {\n\tdb, err := dbm.NewDB(\"application\", dbm.GoLevelDBBackend, dir)\n\treturn db, err\n}\n\nfunc PrintDBStats(db dbm.DB) {\n\tcount := 0\n\tprefix := map[string]int{}\n\titer, err := db.Iterator(nil, nil)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tfor ; iter.Valid(); iter.Next() {\n\t\tkey := string(iter.Key()[:1])\n\t\tprefix[key]++\n\t\tcount++\n\t}\n\titer.Close()\n\tfmt.Printf(\"DB contains %d entries\\n\", count)\n\tfor k, v := range prefix {\n\t\tfmt.Printf(\"  %s: %d\\n\", k, v)\n\t}\n}\n\n// ReadTree loads an iavl tree from the directory\n// If version is 0, load latest, otherwise, load named version\nfunc ReadTree(db dbm.DB, version int64, name string) (*iavl.MutableTree, error) {\n\tfmt.Println(\"--------------[\", name, \"]--------------\")\n\ttree, err := iavl.NewMutableTree(dbm.NewPrefixDB(db, []byte(\"s/k:\"+name+\"/\")), DefaultCacheSize, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tver, err := tree.LoadVersion(version)\n\tfmt.Printf(\"Got version: %d\\n\", ver)\n\treturn tree, err\n}\n\nfunc GetTree(db dbm.DB, name string) (*iavl.MutableTree, error) {\n\ttree, err := iavl.NewMutableTree(dbm.NewPrefixDB(db, []byte(\"s/k:\"+name+\"/\")), DefaultCacheSize, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t_, err = tree.LoadVersion(int64(0))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn tree, err\n}\n\nfunc PrintKeys(tree *iavl.MutableTree, hashing bool) {\n\tfmt.Println(\"Printing all keys with hashed values (to detect diff)\")\n\t_, err := tree.Iterate(func(key, value []byte) bool {\n\t\tif hashing {\n\t\t\tprintKey := parseWeaveKey(key)\n\t\t\tdigest := sha256.Sum256(value)\n\t\t\tfmt.Printf(\"  %s\\n    %X\\n\", printKey, digest)\n\t\t} else {\n\t\t\tfmt.Printf(\"  %s\\n    %X\\n\", key, value)\n\t\t}\n\t\treturn false\n\t})\n\tif err != nil {\n\t\tpanic(err)\n\t}\n}\n\n// parseWeaveKey assumes a separating : where all in front should be ascii,\n// and all afterwards may be ascii or binary\nfunc parseWeaveKey(key []byte) string {\n\tcut := bytes.IndexRune(key, ':')\n\tif cut == -1 {\n\t\treturn encodeID(key)\n\t}\n\tprefix := key[:cut]\n\tid := key[cut+1:]\n\treturn fmt.Sprintf(\"%s:%s\", encodeID(prefix), encodeID(id))\n}\n\n// casts to a string if it is printable ascii, hex-encodes otherwise\nfunc encodeID(id []byte) string {\n\tfor _, b := range id {\n\t\tif b < 0x20 || b >= 0x80 {\n\t\t\treturn strings.ToUpper(hex.EncodeToString(id))\n\t\t}\n\t}\n\treturn string(id)\n}\n\nfunc PrintShape(tree *iavl.MutableTree) {\n\t// shape := tree.RenderShape(\"  \", nil)\n\tshape, _ := tree.RenderShape(\"  \", nodeEncoder)\n\tfmt.Println(strings.Join(shape, \"\\n\"))\n}\n\nfunc nodeEncoder(id []byte, depth int, isLeaf bool) string {\n\tprefix := fmt.Sprintf(\"-%d \", depth)\n\tif isLeaf {\n\t\tprefix = fmt.Sprintf(\"*%d \", depth)\n\t}\n\tif len(id) == 0 {\n\t\treturn fmt.Sprintf(\"%s<nil>\", prefix)\n\t}\n\treturn fmt.Sprintf(\"%s%s\", prefix, parseWeaveKey(id))\n}\n\nfunc PrintVersions(tree *iavl.MutableTree) {\n\tversions := tree.AvailableVersions()\n\tfmt.Println(\"Available versions:\")\n\tfor _, v := range versions {\n\t\tfmt.Printf(\"  %d\\n\", v)\n\t}\n}\n"
  },
  {
    "path": "cmd/iavltool/main.go",
    "content": "package main\n\nimport (\n\t\"github.com/cybercongress/go-cyber/v7/cmd/iavltool/cmd\"\n)\n\nfunc main() {\n\terr := cmd.Execute()\n\tif err != nil {\n\t\treturn\n\t}\n}\n"
  },
  {
    "path": "contrib/Dockerfile",
    "content": "# Simple usage with a mounted data directory:\n# > docker build -t cyber .\n# > docker run -it -p 46657:46657 -p 46656:46656 -v ~/.cyber:/root/.cyber -v ~/.cybercli:/root/.cybercli cyber cyber init\n# > docker run -it -p 46657:46657 -p 46656:46656 -v ~/.cyber:/root/.cyber -v ~/.cybercli:/root/.cybercli cyber cyber start\nFROM golang:1.16-alpine3.13 AS build-env\n\n# Set up dependencies\nENV PACKAGES curl make git libc-dev bash gcc linux-headers eudev-dev python3\n\n# Set working directory for the build\nWORKDIR /go/src/github.com/cybercongress/cyber\n\n# Add source files\nCOPY . .\n\n# Install minimum necessary dependencies, build Cosmos SDK, remove packages\nRUN apk add $PACKAGES && \\\n  make install\n\n# Final image\nFROM alpine:edge\n\n# Install ca-certificates\nRUN apk add --update ca-certificates\nWORKDIR /root\n\n# Copy over binaries from the build-env\nCOPY --from=build-env /go/bin/cyber /usr/bin/cyber\n\nCOPY ./contrib/single-node.sh .\n\nEXPOSE 26657\n\nENTRYPOINT [ \"./single-node.sh\" ]\n# NOTE: to run this image, docker run -d -p 26657:26657 ./single-node.sh {{chain_id}} {{genesis_account}}"
  },
  {
    "path": "contrib/devtools/Makefile",
    "content": "###\n# Find OS and Go environment\n# GO contains the Go binary\n# FS contains the OS file separator\n###\nifeq ($(OS),Windows_NT)\n  GO := $(shell where go.exe 2> NUL)\n  FS := \"\\\\\"\nelse\n  GO := $(shell command -v go 2> /dev/null)\n  FS := \"/\"\nendif\n\nifeq ($(GO),)\n  $(error could not find go. Is it in PATH? $(GO))\nendif\n\n###############################################################################\n###                                Functions                                ###\n###############################################################################\n\ngo_get = $(if $(findstring Windows_NT,$(OS)),\\\nIF NOT EXIST $(GITHUBDIR)$(FS)$(1)$(FS) ( mkdir $(GITHUBDIR)$(FS)$(1) ) else (cd .) &\\\nIF NOT EXIST $(GITHUBDIR)$(FS)$(1)$(FS)$(2)$(FS) ( cd $(GITHUBDIR)$(FS)$(1) && git clone https://github.com/$(1)/$(2) ) else (cd .) &\\\n,\\\nmkdir -p $(GITHUBDIR)$(FS)$(1) &&\\\n(test ! -d $(GITHUBDIR)$(FS)$(1)$(FS)$(2) && cd $(GITHUBDIR)$(FS)$(1) && git clone https://github.com/$(1)/$(2)) || true &&\\\n)\\\ncd $(GITHUBDIR)$(FS)$(1)$(FS)$(2) && git fetch origin && git checkout -q $(3)\n\nmkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))\nmkfile_dir := $(shell cd $(shell dirname $(mkfile_path)); pwd)\n\n\n###############################################################################\n###                                 Tools                                   ###\n###############################################################################\n\nPREFIX ?= /usr/local\nBIN ?= $(PREFIX)/bin\nUNAME_S ?= $(shell uname -s)\nUNAME_M ?= $(shell uname -m)\n\nGOPATH ?= $(shell $(GO) env GOPATH)\nGITHUBDIR := $(GOPATH)$(FS)src$(FS)github.com\n\nBUF_VERSION ?= 0.11.0\n\nTOOLS_DESTDIR  ?= $(GOPATH)/bin\nSTATIK         = $(TOOLS_DESTDIR)/statik\nRUNSIM         = $(TOOLS_DESTDIR)/runsim\n\ntools: tools-stamp\ntools-stamp: statik runsim\n\t# Create dummy file to satisfy dependency and avoid\n\t# rebuilding when this Makefile target is hit twice\n\t# in a row.\n\ttouch $@\n\nproto-tools: proto-tools-stamp\nproto-tools-stamp:\n\tbash contrib/devtools/proto-tools-installer.sh\n\t# Create dummy file to satisfy dependency and avoid\n\t# rebuilding when this Makefile target is hit twice\n\t# in a row.\n\ttouch $@\n\n# Install the runsim binary with a temporary workaround of entering an outside\n# directory as the \"go get\" command ignores the -mod option and will polute the\n# go.{mod, sum} files.\n#\n# ref: https://github.com/golang/go/issues/30515\nstatik: $(STATIK)\n$(STATIK):\n\t@echo \"Installing statik...\"\n\t@(cd /tmp && go get github.com/rakyll/statik@v0.1.6)\n\n# Install the runsim binary with a temporary workaround of entering an outside\n# directory as the \"go get\" command ignores the -mod option and will polute the\n# go.{mod, sum} files.\n#\n# ref: https://github.com/golang/go/issues/30515\nrunsim: $(RUNSIM)\n$(RUNSIM):\n\t@echo \"Installing runsim...\"\n\t@(cd /tmp && go get github.com/cosmos/tools/cmd/runsim@v1.0.0)\n\ntools-clean:\n\trm -f $(STATIK) $(GOLANGCI_LINT) $(RUNSIM)\n\trm -f proto-tools-stamp tools-stamp\n\n.PHONY: tools-clean statik runsim\n"
  },
  {
    "path": "contrib/devtools/dockerfile",
    "content": ""
  },
  {
    "path": "contrib/devtools/proto-tools-installer.sh",
    "content": "#!/bin/bash\n\nset -ue\n\nDESTDIR=${DESTDIR:-}\nPREFIX=${PREFIX:-/usr/local}\nUNAME_S=\"$(uname -s 2>/dev/null)\"\nUNAME_M=\"$(uname -m 2>/dev/null)\"\nBUF_VERSION=0.11.0\nPROTOC_VERSION=3.13.0\nPROTOC_GRPC_GATEWAY_VERSION=1.15.2\n\nf_abort() {\n  local l_rc=$1\n  shift\n\n  echo $@ >&2\n  exit ${l_rc}\n}\n\ncase \"${UNAME_S}\" in\nLinux)\n  PROTOC_ZIP=\"protoc-${PROTOC_VERSION}-linux-x86_64.zip\"\n  PROTOC_GRPC_GATEWAY_BIN=\"protoc-gen-grpc-gateway-v${PROTOC_GRPC_GATEWAY_VERSION}-linux-x86_64\"\n  ;;\nDarwin)\n  PROTOC_ZIP=\"protoc-${PROTOC_VERSION}-osx-x86_64.zip\"\n  PROTOC_GRPC_GATEWAY_BIN=\"protoc-gen-grpc-gateway-v${PROTOC_GRPC_GATEWAY_VERSION}-darwin-x86_64\"\n  ;;\n*)\n  f_abort 1 \"Unknown kernel name. Exiting.\"\nesac\n\nTEMPDIR=\"$(mktemp -d)\"\n\ntrap \"rm -rvf ${TEMPDIR}\" EXIT\n\nf_print_installing_with_padding() {\n  printf \"Installing %30s ...\" \"$1\" >&2\n}\n\nf_print_done() {\n  echo -e \"\\tDONE\" >&2\n}\n\nf_ensure_tools() {\n  ! which curl &>/dev/null && f_abort 2 \"couldn't find curl, aborting\" || true\n}\n\nf_ensure_dirs() {\n  mkdir -p \"${DESTDIR}/${PREFIX}/bin\"\n  mkdir -p \"${DESTDIR}/${PREFIX}/include\"\n}\n\nf_needs_install() {\n  if [ -x $1 ]; then\n    echo -e \"\\talready installed. Skipping.\" >&2\n    return 1\n  fi\n\n  return 0\n}\n\nf_install_protoc() {\n  f_print_installing_with_padding proto_c\n  f_needs_install \"${DESTDIR}/${PREFIX}/bin/protoc\" || return 0\n\n  pushd \"${TEMPDIR}\" >/dev/null\n  curl -o \"${PROTOC_ZIP}\" -sSL \"https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VERSION}/${PROTOC_ZIP}\"\n  unzip -q -o ${PROTOC_ZIP} -d ${DESTDIR}/${PREFIX} bin/protoc; \\\n  unzip -q -o ${PROTOC_ZIP} -d ${DESTDIR}/${PREFIX} 'include/*'; \\\n  rm -f ${PROTOC_ZIP}\n  popd >/dev/null\n  f_print_done\n}\n\nf_install_buf() {\n  f_print_installing_with_padding buf\n  f_needs_install \"${DESTDIR}/${PREFIX}/bin/buf\" || return 0\n\n  curl -sSL \"https://github.com/bufbuild/buf/releases/download/v${BUF_VERSION}/buf-${UNAME_S}-${UNAME_M}\" -o \"${DESTDIR}/${PREFIX}/bin/buf\"\n  chmod +x \"${DESTDIR}/${PREFIX}/bin/buf\"\n  f_print_done\n}\n\nf_install_protoc_gen_gocosmos() {\n  f_print_installing_with_padding protoc-gen-gocosmos\n\n  go get github.com/regen-network/cosmos-proto/protoc-gen-gocosmos 2>/dev/null\n  f_print_done\n}\n\nf_install_protoc_gen_grpc_gateway() {\n  f_print_installing_with_padding protoc-gen-grpc-gateway\n  f_needs_install \"${DESTDIR}/${PREFIX}/bin/protoc-gen-grpc-gateway\" || return 0\n\n  curl -o \"${DESTDIR}/${PREFIX}/bin/protoc-gen-grpc-gateway\" -sSL \"https://github.com/grpc-ecosystem/grpc-gateway/releases/download/v${PROTOC_GRPC_GATEWAY_VERSION}/${PROTOC_GRPC_GATEWAY_BIN}\"\n  f_print_done\n}\n\nf_install_protoc_gen_swagger() {\n  f_print_installing_with_padding protoc-gen-swagger\n  f_needs_install \"${DESTDIR}/${PREFIX}/bin/protoc-gen-swagger\" || return 0\n\n  if ! which npm &>/dev/null ; then\n    echo -e \"\\tNPM is not installed. Skipping.\"\n    return 0\n  fi\n\n  pushd \"${TEMPDIR}\" >/dev/null\n  go get github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger\n  npm install -g swagger-combine\n  popd >/dev/null\n  f_print_done\n}\n\nf_ensure_tools\nf_ensure_dirs\nf_install_protoc\nf_install_buf\nf_install_protoc_gen_gocosmos\nf_install_protoc_gen_grpc_gateway\nf_install_protoc_gen_swagger\n"
  },
  {
    "path": "contrib/links-load.sh",
    "content": "#!/bin/sh\n\nCNT=0\nITER=$1\nSLEEP=$2\nNUMBLOCKS=$3\nNODEADDR=$4\nCHAINID=$5\n\nif [ -z \"$1\" ]; then\n  echo \"Need to input number of iterations to run...\"\n  exit 1\nfi\n\nif [ -z \"$2\" ]; then\n  echo \"Need to input number of seconds to sleep between iterations\"\n  exit 1\nfi\n\nif [ -z \"$3\" ]; then\n  echo \"Need to input block height to declare completion...\"\n  exit 1\nfi\n\nif [ -z \"$4\" ]; then\n  echo \"Need to input node address to poll...\"\n  exit 1\nfi\n\nif [ -z \"$5\" ]; then\n  echo \"Need to input chain-id...\"\n  exit 1\nfi\n\n#MNEMONIC=\"\"\n#echo $MNEMONIC | cyber keys add $ADDR --recover --keyring-backend test\n\nwhile [ ${CNT} -lt $ITER ]; do\n  curr_block=$(curl -s $NODEADDR:26657/status | jq -r '.result.sync_info.latest_block_height')\n\n  if [ ! -z ${curr_block} ] ; then\n    echo \"Number of Blocks: ${curr_block}\"\n  fi\n\n  if [ ! -z ${curr_block} ] && [ ${curr_block} -gt ${NUMBLOCKS} ]; then\n    echo \"Number of blocks reached. Success!\"\n    exit 0\n  fi\n\n#  if ! ((${CNT} % 5)); then\n    R1=$RANDOM\n    R2=$RANDOM\n    FROM=$(echo $R1 | ipfs add -Q)\n    TO=$(echo $R2 | ipfs add -Q)\n    ADDR=$(cyber keys show tester3 -a --keyring-backend=\"test\")\n    cyber tx graph cyberlink $FROM $TO --from $ADDR --chain-id $CHAINID --keyring-backend=\"test\" --node \"tcp://$NODEADDR:26657\" -b block -y\n#  fi\n\n  let CNT=CNT+1\n  sleep $SLEEP\ndone\n\necho \"Timeout reached. Failure!\"\nexit 1"
  },
  {
    "path": "contrib/localnet-blocks-test.sh",
    "content": "#!/bin/bash\n\nCNT=0\nITER=$1\nSLEEP=$2\nNUMBLOCKS=$3\nNODEADDR=$4\n\nif [ -z \"$1\" ]; then\n  echo \"Need to input number of iterations to run...\"\n  exit 1\nfi\n\nif [ -z \"$2\" ]; then\n  echo \"Need to input number of seconds to sleep between iterations\"\n  exit 1\nfi\n\nif [ -z \"$3\" ]; then\n  echo \"Need to input block height to declare completion...\"\n  exit 1\nfi\n\nif [ -z \"$4\" ]; then\n  echo \"Need to input node address to poll...\"\n  exit 1\nfi\n\ndocker_containers=( $(docker ps -q -f name=cyber --format='{{.Names}}') )\n\nwhile [ ${CNT} -lt $ITER ]; do\n  curr_block=$(curl -s $NODEADDR:26657/status | jq -r '.result.sync_info.latest_block_height')\n\n  if [ ! -z ${curr_block} ] ; then\n    echo \"Number of Blocks: ${curr_block}\"\n  fi\n\n  if [ ! -z ${curr_block} ] && [ ${curr_block} -gt ${NUMBLOCKS} ]; then\n    echo \"Number of blocks reached. Success!\"\n    exit 0\n  fi\n\n  # Emulate network chaos:\n  #\n  # Every 10 blocks, pick a random container and restart it.\n  if ! ((${CNT} % 10)); then\n    rand_container=${docker_containers[\"$[RANDOM % ${#docker_containers[@]}]\"]};\n    echo \"Restarting random docker container ${rand_container}\"\n    docker restart ${rand_container} &>/dev/null &\n  fi\n\n  let CNT=CNT+1\n  sleep $SLEEP\ndone\n\necho \"Timeout reached. Failure!\"\nexit 1\n"
  },
  {
    "path": "contrib/reset-chain.sh",
    "content": "#!/bin/sh\n\nfor OUTPUT in ../build/node*\ndo\n  cyber unsafe-reset-all --home $OUTPUT/cyber\ndone"
  },
  {
    "path": "contrib/single-node.sh",
    "content": "#!/bin/sh\n\nset -o errexit -o nounset\n\nCHAINID=$1\nHMDIR=$2\n\nif [ -z \"$1\" ]; then\n  echo \"Need to input chain id\"\n  exit 1\nfi\n\nif [ -z \"$2\" ]; then\n  echo \"Need to input home directory\"\n  exit 1\nfi\n\n# validator and dev accounts should be added to .cyber dir in user's root with keyring-backend test\ncoins=\"1000000000000boot\"\ncyber init --chain-id \"$CHAINID\" \"$CHAINID\" --home \"$HMDIR\"\nsed -i '' 's#\"stake\"#\"boot\"#g' \"$HMDIR\"/config/genesis.json\ncp -R ~/.cyber/keyring-test $HMDIR\ncyber genesis add-genesis-account \"$(cyber keys show validator -a --keyring-backend=\"test\")\" $coins --home \"$HMDIR\"\ncyber genesis add-genesis-account \"$(cyber keys show dev -a --keyring-backend=\"test\")\" $coins --home \"$HMDIR\"\ncyber genesis gentx validator 5000000000boot --keyring-backend=\"test\" --chain-id $CHAINID --home \"$HMDIR\"\ncyber genesis collect-gentxs --home \"$HMDIR\""
  },
  {
    "path": "docker-compose.yml",
    "content": "version: '3'\n\nservices:\n  cybernode0:\n    container_name: cybernode0\n    image: \"cybercongress/cyber\"\n    ports:\n      - \"26656-26657:26656-26657\"\n      - \"1317:1317\"\n    environment:\n      - ID=0\n      - LOG=${LOG:-cyber.log}\n    volumes:\n      - ./build:/cyber:Z\n    networks:\n      localnet:\n        ipv4_address: 192.168.10.2\n\n  cybernode1:\n    container_name: cybernode1\n    image: \"cybercongress/cyber\"\n    ports:\n      - \"26659-26660:26656-26657\"\n    environment:\n      - ID=1\n      - LOG=${LOG:-cyber.log}\n    volumes:\n      - ./build:/cyber:Z\n    networks:\n      localnet:\n        ipv4_address: 192.168.10.3\n\n  cybernode2:\n    container_name: cybernode2\n    image: \"cybercongress/cyber\"\n    environment:\n      - ID=2\n      - LOG=${LOG:-cyber.log}\n    ports:\n      - \"26661-26662:26656-26657\"\n    volumes:\n      - ./build:/cyber:Z\n    networks:\n      localnet:\n        ipv4_address: 192.168.10.4\n\n  cybernode3:\n    container_name: cybernode3\n    image: \"cybercongress/cyber\"\n    environment:\n      - ID=3\n      - LOG=${LOG:-cyber.log}\n    ports:\n      - \"26663-26664:26656-26657\"\n    volumes:\n      - ./build:/cyber:Z\n    networks:\n      localnet:\n        ipv4_address: 192.168.10.5\n\nnetworks:\n  localnet:\n    driver: bridge\n    ipam:\n      driver: default\n      config:\n      -\n        subnet: 192.168.10.0/16\n\n"
  },
  {
    "path": "docs/README.md",
    "content": "# Concepts (WIP)\n\n## soft2 and soft3\n- [soft2 and soft3](soft2-soft3-concepts.md)\n- content from presentation\n- knowledge graph\n- content oracle\n- particle\n- cyberlink\n- neuron\n\n## consensus computer  \n- [cyber-sdk](#cyber-sdk-modules-documentation)\n- resources\n- tendermint\n- abci\n- ibc\n- ikp\n\n## sequential computation  \n- cosmwasm\n- dmn\n- bindings\n- cw-cyber\n\n## parallel computation\n- relevance machine\n- semcon\n- linkchain\n- motif\n- blas\n- cyb and sparks\n- superintelligence\n\n# Tutorials (WIP)\n- install cyber cli\n- run node\n- [send transactions](send_txs.md) in your dapp\n- [cyberlink content](cyberlink_content.md) in dapp\n- [deploy contract](deploy_contract.md)\n- [run local network](../networks/local/README.md) for development\n\n# How-To (WIP)\n- [run validator](run_validator.md) guide\n- [network upgrade](upgra) guide\n- setup local environment  \n- [daemon configuration](setup_cyber_configuration.md) guide\n- [ultimate cli](ultimate_commands_guide.md) guide\n- [managing multisig](multisig_guide.md) guide\n- [ledger](cyber_ledger_guide) guide\n\n# Reference\n- [swagger](https://lcd.bostrom.cybernode.ai/)\n\n\n---\n\n\n### Extras\n- [supported GPUs](supported_gpu_list.md) list\n- [Tendermint KMS](validator_launch_with_tendermintKMS_and_ledger.md) guide\n- [keystore](keystore.md) guide\n\n### cyber-sdk modules documentation\n- **[graph](../x/graph/spec/README.md)**\n- **[rank](../x/rank/spec/README.md)**\n- **[bandwidth](../x/bandwidth/spec/README.md)**\n- **[cyberbank](../x/cyberbank/spec/README.md)**\n- **[energy](../x/energy/spec/README.md)**\n- **[resources](../x/resources/spec/README.md)**\n- **[dmn](../x/dmn/spec/README.md)**\n- **[staking](../x/staking/spec/README.md)**\n"
  },
  {
    "path": "docs/cyber_ledger_guide.md",
    "content": "# Ledger Support\n\nIt is possible to use your Ledger device with cyber to store keys and sign transactions.\n\n## Cyberd CLI & Ledger Nano\n\nHow to get started. First of all, you'll need a couple of things to be done:\n\n+ A running and synced cyber node (how to: [here](https://github.com/cybercongress/go-cyber/blob/bostrom-dev/docs/run_validator.md) and [here](https://github.com/cybercongress/go-cyber/blob/main/docs/ultimate_commands_guide.md))\n\n+ [Setup](https://support.ledger.com/hc/en-us/articles/360000613793-Set-up-as-new-device) your Ledger device and [install Cosmos app on it](https://github.com/cosmos/ledger-cosmos/blob/master/README.md#installing) (the latest firmware for Ledger and Cosmos app required)\n\nIt is necessary to verify that cyber is built with netgo and Ledger tags. To check that, we can run: `cyber version --long`.\n\n## Add your Ledger key\n\nIf you have set up your Ledger device on a different machine than the one running cyber, it is necessary to make sure that the Ledger device is generally working on this machine. A great way to do so is installing [Ledger Live](https://shop.ledger.com/pages/ledger-live) on the machine and trying to connect your Ledger device to it. This will show possible issues and error codes to work with ([Fix connection issues](https://support.ledger.com/hc/en-us/articles/115005165269-Fix-connection-issues) guide from Ledger).\nWhen you made sure that your Ledger device is successfully interacting with your machine do the following:\n\n+ Connect and unlock your Ledger device\n+ Open the Cosmos app on your Ledger\n+ Create an account in cyber from your Ledger key\n\nFor account creation run:\n\n``` js\ncyber keys add <your_key_name> --ledger\n```\n\nAfter submitting this command your Ledger device should show a generated address and will wait for confirmation. Hit confirm the button and in the console, you'll see the following output:\n\n``` js\n- name: <your_key_name>\n  type: ledger\n  address: cyber1gw5kdey7fs9wvh05w66s034s24tjdvxcp5fhkz\n  pubkey: cyberpub1addwnpepq0lfpdumac47nyel06u95czd4026ahzmjr8stsx4h65kw3dhh60py0m7k6r\n  mnemonic: \"\"\n  threshold: 0\n  pubkeys: []\n  ```\n\nBy default, the `...keys add` command with account and index set to 0 of [bip44](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) derivation path is used. To add more than one key account and/or index it must be specified separately in the following way:\n\n``` js\ncyber keys add <your_key2_name> --ledger --account 1 --index 1\n```\n\nYou don't need to remember which numbers for account and index you've used, it will be matched to <your_key_name> automatically.\n\n## Confirm your address\n\nTo make sure you have added everything correctly just run:\n\n``` js\ncyber keys show <key_name> -d\n```\n\nIt's necessary to confirm that the key on your Ledger matches the one shown in the console.\n\n## Signing transactions\n\nYou are now ready to sign and send transactions. This could be done by using the `tx bank send` command. Your Ledger device should be connected and unlocked at this step. Run the following to send some CYB tokens:\n\n``` js\ncyber tx bank send <from_key_name> <destination_address> <ammount>cyb --chain-id <current_chain_id>\n```\n\n`<from_key_name>` is your ledger key name, `<destination_address>` is the address of the recipient in the following format: `cyber1wq7p5qfygxr37vqqufhj5fzwlg55zmm4w0p8sw`.\nWhen prompted with `confirm transaction before signing`, answer Y. Your Ledger will ask to approve the transaction. Make sure you'll inspect the transaction JSON before signing it. When the transaction is signed on the Ledger, usually, the output will show up in the console.\n"
  },
  {
    "path": "docs/cyberlink_content.md",
    "content": "# Cyberlink content with Cyber-js\n\n## Script preparation\n\nA small, ready-made repository exists so you can experiment with Cyber-js. Clone it from here. You need [NodeJs](https://nodejs.org/en/download/). If you open the folder in [Visual Studio Code](https://code.visualstudio.com/Download), the IDE should give you all the coding help you require. In the cloned folder you need to install the required modules:\n\n```sh\n$ npm install\n```\n\nCreate a new file named `experiment.ts`. In it, put these lines to confirm it works:\n\n```typescript\nconst runAll = async(): Promise<void> => {\n    console.log(\"TODO\")\n}\n\nrunAll()\n```\n\nTo execute, this TypeScript file needs to be compiled into JavaScript before being interpreted by NodeJs. Add this as a run target in `package.json`:\n\n```json\n...\n    \"scripts\": {\n        ...\n        \"experiment\": \"ts-node experiment.ts\"\n    }\n...\n```\n\nConfirm that it does what you want:\n\n```sh\n$ npm run experiment\n```\n\nThis returns:\n\n```\n> ts-node experiment.ts\n\nTODO\n```\n\nYou will soon make this script more meaningful. With the basic script ready, you need to prepare some elements.\n\n## Testnet preparation\n\nThe Bostrom has a number of testnets running. The Bostrom is currently running a [public testnet](https://github.com/cybercongress/cybernode) for the Space-pussy-1 upgrade that you are connecting to and running your script on. You need to connect to a public node so that you can query information and broadcast transactions. One of the available nodes is:\n\n```\nRPC: https://rpc.space-pussy-1.cybernode.ai\n```\n\nYou need a wallet address on the testnet and you must create a 24-word mnemonic in order to do so. CosmJS can generate one for you. Create a new file `generate_mnemonic.ts` with the following script:\n\n```typescript\nimport { DirectSecp256k1HdWallet } from \"@cosmjs/proto-signing\"\n\nconst generateKey = async (): Promise<void> => {\n    const wallet: DirectSecp256k1HdWallet = await DirectSecp256k1HdWallet.generate(24)\n    process.stdout.write(wallet.mnemonic)\n    const accounts = await wallet.getAccounts()\n    console.error(\"Mnemonic with 1st account:\", accounts[0].address)\n}\n\ngenerateKey()\n```\n\nNow create a **key** for our imaginary user **Alice**:\n\n*Note: You likely need to update Node.js to a later version if this fails. Find a guide [here](https://phoenixnap.com/kb/update-node-js-version).\n\n```sh\n$ npx ts-node generate_mnemonic.ts > testnet.alice.mnemonic.key\n```\n\nWhen done, it should also tell you the address of the first account:\n\n```\nMnemonic with 1st account: bostrom1sw8xv3mv2n4xfv6rlpzsevusyzzg78r3e78xnp\n```\n\nTemporarily keep this address for convenience, although CosmJS can always recalculate it from the mnemonic. Privately examine the file to confirm it contains your 24 words.\n\n<HighlightBox type=\"warn\">\n\nImportant considerations:\n\n1. `process.stdout.write` was used to avoid any line return. Be careful not to add any empty lines or any other character in your `.key` file (this occurs with VSCode under certain conditions). If you add any characters, ComsJs may not be able to parse it.\n2. Adjust the `.gitignore` file to not commit your `.key` file by mistake:\n\n    ```\n    node_modules\n    *.key\n    ```\n\n</HighlightBox>\n\n<!-- <HighlightBox type=\"tip\">\n\nFor your convenience, we have a branch available [here](https://github.com/b9lab/cosmjs-sandbox/tree/file-preparation) that contains all the code and files you've added so far.\n\n</HighlightBox> -->\n\n## Add your imports\n\nYou need a small, simple interface to a blockchain, one which could eventually have users. Good practice is to refrain from requesting a user address until necessary (e.g. when a user clicks a relevant button). Therefore, in `experiment.ts` you first use the read-only client. Import it at the top of the file:\n\n```typescript\nimport { CyberClient } from \"@cybercongress/cyber-js\"\n```\n\n<HighlightBox type=\"info\">\n\nNote that VSCode assists you to auto-complete [`CyberClient`](https://github.com/cybercongress/soft3.js/blob/main/src/cyberclient.ts#L144) if you type <kbd>CTRL-Space</kbd> inside the `{}` of the `import` line.\n\n</HighlightBox>\n\n## Define your connection\n\nNext, you need to tell the client how to connect to the RPC port of your blockchain:\n\n```typescript\nconst rpc = \"https://rpc.space-pussy-1.cybernode.ai\"\n```\n\nInside the `runAll` function you [initialize the connection](https://github.com/cybercongress/soft3.js/blob/main/src/cyberclient.ts#L165) and immediately [check](https://github.com/cybercongress/soft3.js/blob/main/src/cyberclient.ts#L244) you connected to the right place:\n\n```typescript\nconst runAll = async(): Promise<void> => {\n    const client = await CyberClient.connect(rpc)\n    console.log(\"With client, chain id:\", await client.getChainId(), \", height:\", await client.getHeight())\n}\n```\n\nRun again to check with `npm run experiment`, and you get:\n\n```\nWith client, chain id: space-pussy-1 , height: 9507032\n```\n\n## Prepare a signing client\n\nIf you go through the methods inside [`CyberClient`](https://github.com/cybercongress/soft3.js/blob/main/src/cyberclient.ts#L144), you see that it only contains query-type methods and none for sending transactions.\n\nNow, for Alice to send transactions, she needs to be able to sign them. And to be able to sign transactions, she needs access to her _private keys_ or _mnemonics_. Or rather she needs a client that has access to those. That is where [`SigningCyberClient`](https://github.com/cybercongress/soft3.js/blob/main/src/signingcyberclient.ts#L239) comes in. Conveniently, `SigningCyberClient` inherits from `CyberClient`.\n\nUpdate your import line:\n\n```typescript\nimport { SigningCyberClient, CyberClient } from \"@cybercongress/cyber-js\"\n```\n\nLook at its declaration by right-clicking on the `SigningCyberClient` in your imports and choosing <kbd>Go to Definition</kbd>.\n\nWhen you instantiate `SigningCyberClient` by using the [`connectWithSigner`](https://github.com/cybercongress/soft3.js/blob/main/src/signingcyberclient.ts#L247) method, you need to pass it a [**signer**](https://github.com/cybercongress/soft3.js/blob/main/src/signingcyberclient.ts#L249). In this case, use the [`OfflineDirectSigner`](https://github.com/cybercongress/soft3.js/blob/main/src/signingcyberclient.ts#L29) interface.\n\n<HighlightBox type=\"info\">\n\nThe recommended way to encode messages is by using `OfflineDirectSigner`, which uses Protobuf. However, hardware wallets such as Ledger do not support this and still require the legacy Amino encoder. If your app requires Amino support, you have to use the `OfflineAminoSigner`.\n<br></br>\nRead more about encoding [here](https://docs.cosmos.network/master/core/encoding.html).\n\n</HighlightBox>\n\nThe signer needs access to Alice's **private key**, and there are several ways to accomplish this. In this example, use Alice's saved **mnemonic**. To load the mnemonic as text in your code you need this import:\n\n```typescript\nimport { readFile } from \"fs/promises\"\n```\n\nThere are several implementations of `OfflineDirectSigner` available. The [`DirectSecp256k1HdWallet`](https://github.com/cosmos/cosmjs/blob/0f0c9d8/packages/proto-signing/src/directsecp256k1hdwallet.ts#L133) implementation is most relevant to us due to its [`fromMnemonic`](https://github.com/cosmos/cosmjs/blob/0f0c9d8/packages/proto-signing/src/directsecp256k1hdwallet.ts#L140-L141) method. Add the import:\n\n```typescript\nimport { DirectSecp256k1HdWallet, OfflineDirectSigner } from \"@cosmjs/proto-signing\"\n```\n\nThe `fromMnemonic` factory function needs a string with the mnemonic. You read this string from the mnemonic file. Create a new top-level function that returns an `OfflineDirectSigner`:\n\n```typescript [https://github.com/b9lab/cosmjs-sandbox/blob/4168b97/experiment.ts#L9-L13]\nconst getAliceSignerFromMnemonic = async (): Promise<OfflineDirectSigner> => {\n    return DirectSecp256k1HdWallet.fromMnemonic((await readFile(\"./testnet.alice.mnemonic.key\")).toString(), {\n        prefix: \"bostrom\",\n    })\n}\n\n```\n\nThe Bostrom Testnet uses the `bostrom` address prefix. This is the default used by `DirectSecp256k1HdWallet`, but you are encouraged to explicitly define it as you might be working with different prefixes on different blockchains. In your `runAll` function, add:\n\n```typescript\nconst aliceSigner: OfflineDirectSigner = await getAliceSignerFromMnemonic()\n```\n\nAs a first step, confirm that it recovers Alice's address as expected:\n\n```typescript\nconst alice = (await aliceSigner.getAccounts())[0].address\nconsole.log(\"Alice's address from signer\", alice)\n```\n\nNow add the line that finally creates the signing client:\n\n```typescript\nconst signingClient = await SigningCyberClient.connectWithSigner(rpc, aliceSigner)\n```\n\nCheck that it works like the read-only client that you used earlier, and from which [it inherits](https://github.com/cybercongress/soft3.js/blob/main/src/signingcyberclient.ts#L239), by adding:\n\n```typescript\nconsole.log(\n    \"With signing client, chain id:\",\n    await signingClient.getChainId(),\n    \", height:\",\n    await signingClient.getHeight()\n)\n```\n\n## Cyberlinks\n\nA cyberlink (noun) is a link between two particles registered in Bostrom blockchain by a particular neuron.\n\nTo cyberlink (verb) - to create a cyberlink between two particles.\n\n## Bandwidth\n\nThe bandwidth module process and stores neuron's bandwidth in the network, dynamically adjust bandwidth price to network load. Neurons use bandwidth to add cyberlinks to the network and not need to pay gas fees.\n\n## Bandwidth model\n\nBandwidth is used for billing for cyberlinks creation instead of fee billing based on gas. Using the bandwidth model removes the cognitive gap for cyberlinks creation because not force neurons to pay a fee. Holding 1 volt represents the possibility to create 1 cyberlinks per `RecoveryPeriod` blocks. (example 1 cyberlink per day holding 1 Volt) Total supply of VOLTs (volts' holdings of all neurons) it's desirable network bandwidth. By investminting of HYDROGEN to VOLT then neuron increase personal bandwidth and desirable bandwidth of network. If the network has low bandwidth consumption, then the network provides a discount using `BasePrice` multiplier for neurons.\n\n## Personal Bandwidth\n\nThe volt's stake of the given neuron are easy to understand as the size of his battery. The creation of cyberlinks will consume battery charge, and the battery will be fully recharged during `RecoveryPeriod` blocks period. If a neuron consumes half of its bandwidth, its battery will be fully charged in the `RecoveryPeriod/2` blocks period. If a neuron act when network bandwidth consumption is low, then he will consume less personal bandwidth.\n\n## Get Bandwidth\n\nAlise needs to [`investmint`](https://github.com/cybercongress/soft3.js/blob/main/src/signingcyberclient.ts#L370) `HYDROGEN(stake token)` to `VOLT` and `AMPERE` of  get `Bandwidth`\n\nAlise would like to investmint 1000000000 BOOT (1 GBOOT) to VOLT resource with lock for 30 DAYS (no spendable) and Alise will get newly minted 1 VOLT to my account locked for 30 DAYS (no spendable).\n\n```\n(1 GBOOT | 30 DAYS | VOLT) ---investmint---> locked (1 GBOOT | 30 DAYS) + minted and locked (1 VOLT | 30 DAYS)\n```\n\nAlise would like to investmint 4000000000 BOOT (4 GBOOT) to AMPERE resource with lock for 7 DAYS (no spendable) and Alise will get newly minted 1 AMPERE to my account locked for 7 DAYS (no spendable).\n\n```\n(4.2 GBOOT | 7 DAYS | AMPERE) ---investmint---> locked (4.2 GBOOT | 7 DAYS) + minted and locked (1 AMPERE | 7 DAYS)\n\n```\n\n## Cyberlink content\n\nAlice can send cyberlink, but to do so she also needs to pay the network's gas fee. How much gas should she use, and at what price?\n\nShe can copy this:\n\n```\nGas fee: [ { denom: 'boot', amount: '0' } ]\nGas limit: 200000\n```\n\nWith the gas information now decided, how does Alice structure her command so that she cyberlinks content to network ? `SigningCyberClient`'s [`cyberlink`](https://github.com/cybercongress/soft3.js/blob/main/src/signingcyberclient.ts#L316) function takes a `CidFrom` and `CidTo` as input.:\n\n```typescript\ncyberlink(\n    neuron: string,\n    from: string,\n    to: string,\n    fee: StdFee,\n    memo = \"\",\n  ): Promise<DeliverTxResponse | string[]> \n```\n\n### Upload content to IPFS\n\nBefore sending the cyberlink, Alice needs to upload the content to `ipfs`. She can use [`js-ipfs`](https://github.com/ipfs/js-ipfs/)\n\n### Running js-IPFS in your application\n\nIf you do not need to run a command line daemon, use the ipfs-core package - it has all the features of ipfs but in a lighter package:\n\n```sh\n$ npm install ipfs-core\n```\n\nThen start a node in your app:\n\n```js\nimport * as IPFS from 'ipfs-core'\n\nconst ipfs = await IPFS.create()\nconst { cid } = await ipfs.add('Hello world')\nconsole.info(cid)\n// QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf\n```\n\n### Running js-IPFS on the CLI\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```sh\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```sh\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\nBefore the cyberlink, Alisa needs to check `PersonalBandwidth` for the possibility of making a cyberlink:\n\n```typescript\nconst checkPersonalBandwidth = async (client: CyberClient, alice: string): Promise<boolean> => {\n  try {\n    const response = await client.price()\n    const priceLink = response.price.dec * 10 ** -18\n\n    const responseAccountBandwidth = await client.accountBandwidth(alice)\n    const { maxValue, remainedValue } = responseAccountBandwidth.neuronBandwidth\n\n    if (maxValue === 0 || remainedValue === 0) {\n      return false\n    } else if (Math.floor(remainedValue / (priceLink * 1000)) === 0) {\n      return false\n    }\n\n    return true\n  } catch (error) {\n    console.log('error', error)\n    return false\n  }\n}\n```\n\nWith this gas and cids, add the command:\n\n```typescript\n// Execute the cyberlink Tx and store the result\nconst result = await signingClient.cyberlink(\n    alice,\n    CidFrom,\n    CidTo,\n    {\n        amount: [{ denom: \"boot\", amount: \"0\" }],\n        gas: \"200000\",\n    },\n)\n// Output the result of the Tx\nconsole.log(\"Transfer result:\", result)\n```\n\nRun this with `npm run experiment` and you should get:\n\n```\n...\nTransfer result: {\n  code: 0,\n  height: 0,\n  rawLog: '[]',\n  transactionHash: '2A2F6D0610FF60458EFC05A820B610CEFBCB5C9EF1CA322808DD8B88D369B5E0',\n  gasUsed: 0,\n  gasWanted: 0\n}\n```\nCheck that Alice upload information with [`getTx`](https://github.com/cybercongress/soft3.js/blob/main/src/cyberclient.ts#L314)\n\n```typescript\nconst result = await client.getTx(\"2A2F6D0610FF60458EFC05A820B610CEFBCB5C9EF1CA322808DD8B88D369B5E0\")\n```\n"
  },
  {
    "path": "docs/deploy_contract.md",
    "content": "# Deploy contract with Cyber-js\n\n## Script preparation\n\nA small, ready-made repository exists so you can experiment with Cyber-js. Clone it from here. You need [NodeJs](https://nodejs.org/en/download/). If you open the folder in [Visual Studio Code](https://code.visualstudio.com/Download), the IDE should give you all the coding help you require. In the cloned folder you need to install the required modules:\n\n```sh\n$ npm install\n```\n\nCreate a new file named `experiment.ts`. In it, put these lines to confirm it works:\n\n```typescript\nconst runAll = async(): Promise<void> => {\n    console.log(\"TODO\")\n}\n\nrunAll()\n```\n\nTo execute, this TypeScript file needs to be compiled into JavaScript before being interpreted by NodeJs. Add this as a run target in `package.json`:\n\n```json\n...\n    \"scripts\": {\n        ...\n        \"experiment\": \"ts-node experiment.ts\"\n    }\n...\n```\n\nConfirm that it does what you want:\n\n```sh\n$ npm run experiment\n```\n\nThis returns:\n\n```\n> ts-node experiment.ts\n\nTODO\n```\n\nYou will soon make this script more meaningful. With the basic script ready, you need to prepare some elements.\n\n## Testnet preparation\n\nThe Bostrom has a number of testnets running. The Bostrom is currently running a [public testnet](https://github.com/cybercongress/cybernode) for the Space-pussy-1 upgrade that you are connecting to and running your script on. You need to connect to a public node so that you can query information and broadcast transactions. One of the available nodes is:\n\n```\nRPC: https://rpc.space-pussy-1.cybernode.ai\n```\n\nYou need a wallet address on the testnet and you must create a 24-word mnemonic in order to do so. CosmJS can generate one for you. Create a new file `generate_mnemonic.ts` with the following script:\n\n```typescript\nimport { DirectSecp256k1HdWallet } from \"@cosmjs/proto-signing\"\n\nconst generateKey = async (): Promise<void> => {\n    const wallet: DirectSecp256k1HdWallet = await DirectSecp256k1HdWallet.generate(24)\n    process.stdout.write(wallet.mnemonic)\n    const accounts = await wallet.getAccounts()\n    console.error(\"Mnemonic with 1st account:\", accounts[0].address)\n}\n\ngenerateKey()\n```\n\nNow create a **key** for our imaginary user **Alice**:\n\n*Note: You likely need to update Node.js to a later version if this fails. Find a guide [here](https://phoenixnap.com/kb/update-node-js-version).\n\n```sh\n$ npx ts-node generate_mnemonic.ts > testnet.alice.mnemonic.key\n```\n\nWhen done, it should also tell you the address of the first account:\n\n```\nMnemonic with 1st account: bostrom1sw8xv3mv2n4xfv6rlpzsevusyzzg78r3e78xnp\n```\n\nTemporarily keep this address for convenience, although CosmJS can always recalculate it from the mnemonic. Privately examine the file to confirm it contains your 24 words.\n\n<HighlightBox type=\"warn\">\n\nImportant considerations:\n\n1. `process.stdout.write` was used to avoid any line return. Be careful not to add any empty lines or any other character in your `.key` file (this occurs with VSCode under certain conditions). If you add any characters, ComsJs may not be able to parse it.\n2. Adjust the `.gitignore` file to not commit your `.key` file by mistake:\n\n    ```\n    node_modules\n    *.key\n    ```\n\n</HighlightBox>\n\n<!-- <HighlightBox type=\"tip\">\n\nFor your convenience, we have a branch available [here](https://github.com/b9lab/cosmjs-sandbox/tree/file-preparation) that contains all the code and files you've added so far.\n\n</HighlightBox> -->\n\n## Add your imports\n\nYou need a small, simple interface to a blockchain, one which could eventually have users. Good practice is to refrain from requesting a user address until necessary (e.g. when a user clicks a relevant button). Therefore, in `experiment.ts` you first use the read-only client. Import it at the top of the file:\n\n```typescript\nimport { CyberClient } from \"@cybercongress/cyber-js\"\n```\n\n<HighlightBox type=\"info\">\n\nNote that VSCode assists you to auto-complete [`CyberClient`](https://github.com/cybercongress/soft3.js/blob/main/src/cyberclient.ts#L144) if you type <kbd>CTRL-Space</kbd> inside the `{}` of the `import` line.\n\n</HighlightBox>\n\n## Define your connection\n\nNext, you need to tell the client how to connect to the RPC port of your blockchain:\n\n```typescript\nconst rpc = \"https://rpc.space-pussy-1.cybernode.ai\"\n```\n\nInside the `runAll` function you [initialize the connection](https://github.com/cybercongress/soft3.js/blob/main/src/cyberclient.ts#L165) and immediately [check](https://github.com/cybercongress/soft3.js/blob/main/src/cyberclient.ts#L244) you connected to the right place:\n\n```typescript\nconst runAll = async(): Promise<void> => {\n    const client = await CyberClient.connect(rpc)\n    console.log(\"With client, chain id:\", await client.getChainId(), \", height:\", await client.getHeight())\n}\n```\n\nRun again to check with `npm run experiment`, and you get:\n\n```\nWith client, chain id: space-pussy-1 , height: 9507032\n```\n\n## Get a balance\n\nNormally you would not yet have access to your user's address. However, for this exercise you need to know how many tokens Alice has, so add a temporary new command inside `runAll`:\n\n```typescript\nconsole.log(\n    \"Alice balances:\",\n    await client.getAllBalances(\"bostrom1sw8xv3mv2n4xfv6rlpzsevusyzzg78r3e78xnp\"), // <-- replace with your generated address\n)\n```\n\n`getAllBalances` is used because the default token name is not yet known. When you run it again, you get:\n\n```\nAlice balances: []\n```\n\nIf you just created this account, Alice's balance is zero. Alice needs tokens to be able to send transactions and participate in the network. A common practice with testnets is to expose **faucets** (services that send you test tokens for free, within limits).\n\nRequest tokens for Alice by entering this command in command line:\n\n```sh\ncurl --header \"Content-Type: application/json\" --request POST --data '{\"denom\":\"boot\",\"address\":\"bostrom1sw8xv3mv2n4xfv6rlpzsevusyzzg78r3e78xnp\"}' https://space-pussy-1.cybernode.ai/credit\n```\n\nCheck that Alice received the tokens with `npm run experiment`.\n\n## Prepare a signing client\n\nIf you go through the methods inside [`CyberClient`](https://github.com/cybercongress/soft3.js/blob/main/src/cyberclient.ts#L144), you see that it only contains query-type methods and none for sending transactions.\n\nNow, for Alice to send transactions, she needs to be able to sign them. And to be able to sign transactions, she needs access to her _private keys_ or _mnemonics_. Or rather she needs a client that has access to those. That is where [`SigningCyberClient`](https://github.com/cybercongress/soft3.js/blob/main/src/signingcyberclient.ts#L239) comes in. Conveniently, `SigningCyberClient` inherits from `CyberClient`.\n\nUpdate your import line:\n\n```typescript\nimport { SigningCyberClient, CyberClient } from \"@cybercongress/cyber-js\"\n```\n\nLook at its declaration by right-clicking on the `SigningCyberClient` in your imports and choosing <kbd>Go to Definition</kbd>.\n\nWhen you instantiate `SigningCyberClient` by using the [`connectWithSigner`](https://github.com/cybercongress/soft3.js/blob/main/src/signingcyberclient.ts#L247) method, you need to pass it a [**signer**](https://github.com/cybercongress/soft3.js/blob/main/src/signingcyberclient.ts#L249). In this case, use the [`OfflineDirectSigner`](https://github.com/cybercongress/soft3.js/blob/main/src/signingcyberclient.ts#L29) interface.\n\n<HighlightBox type=\"info\">\n\nThe recommended way to encode messages is by using `OfflineDirectSigner`, which uses Protobuf. However, hardware wallets such as Ledger do not support this and still require the legacy Amino encoder. If your app requires Amino support, you have to use the `OfflineAminoSigner`.\n<br></br>\nRead more about encoding [here](https://docs.cosmos.network/master/core/encoding.html).\n\n</HighlightBox>\n\nThe signer needs access to Alice's **private key**, and there are several ways to accomplish this. In this example, use Alice's saved **mnemonic**. To load the mnemonic as text in your code you need this import:\n\n```typescript\nimport { readFile } from \"fs/promises\"\n```\n\nThere are several implementations of `OfflineDirectSigner` available. The [`DirectSecp256k1HdWallet`](https://github.com/cosmos/cosmjs/blob/0f0c9d8/packages/proto-signing/src/directsecp256k1hdwallet.ts#L133) implementation is most relevant to us due to its [`fromMnemonic`](https://github.com/cosmos/cosmjs/blob/0f0c9d8/packages/proto-signing/src/directsecp256k1hdwallet.ts#L140-L141) method. Add the import:\n\n```typescript\nimport { DirectSecp256k1HdWallet, OfflineDirectSigner } from \"@cosmjs/proto-signing\"\n```\n\nThe `fromMnemonic` factory function needs a string with the mnemonic. You read this string from the mnemonic file. Create a new top-level function that returns an `OfflineDirectSigner`:\n\n```typescript [https://github.com/b9lab/cosmjs-sandbox/blob/4168b97/experiment.ts#L9-L13]\nconst getAliceSignerFromMnemonic = async (): Promise<OfflineDirectSigner> => {\n    return DirectSecp256k1HdWallet.fromMnemonic((await readFile(\"./testnet.alice.mnemonic.key\")).toString(), {\n        prefix: \"bostrom\",\n    })\n}\n\n```\n\nThe Bostrom Testnet uses the `bostrom` address prefix. This is the default used by `DirectSecp256k1HdWallet`, but you are encouraged to explicitly define it as you might be working with different prefixes on different blockchains. In your `runAll` function, add:\n\n```typescript\nconst aliceSigner: OfflineDirectSigner = await getAliceSignerFromMnemonic()\n```\n\nAs a first step, confirm that it recovers Alice's address as expected:\n\n```typescript\nconst alice = (await aliceSigner.getAccounts())[0].address\nconsole.log(\"Alice's address from signer\", alice)\n```\n\nNow add the line that finally creates the signing client:\n\n```typescript\nconst signingClient = await SigningCyberClient.connectWithSigner(rpc, aliceSigner)\n```\n\nCheck that it works like the read-only client that you used earlier, and from which [it inherits](https://github.com/cybercongress/soft3.js/blob/main/src/signingcyberclient.ts#L239), by adding:\n\n```typescript\nconsole.log(\n    \"With signing client, chain id:\",\n    await signingClient.getChainId(),\n    \", height:\",\n    await signingClient.getHeight()\n)\n```\n\n## Upload wasm code\n\nAlice can now upload wasm code, but to do so she also needs to pay the network's gas fee. How much gas should she use, and at what price?\n\nShe can copy this and change GasLimit if need:\n\n```\nGas fee: [ { denom: 'boot', amount: '0' } ]\nGas limit: 200000\n```\n\nWith the gas information now decided, how does Alice structure her command so that she uploads wasm code to network ? `SigningCyberClient`'s [`upload`](https://github.com/cybercongress/soft3.js/blob/main/src/signingcyberclient.ts#L466) function takes a `wasmCode` as input. `wasmCode` must be as `Uint8Array`:\n\n```typescript\nupload(\n    senderAddress: string,\n    wasmCode: Uint8Array,\n    fee: StdFee,\n    memo = \"\",\n  ): Promise<DeliverTxResponse | string[]>\n```\n\nAlice can pick any `wasmCodeData` and upload, the signing client signs the transaction and broadcasts it. In this case it is:\n\n```typescript\nconst wasmCode = new Uint8Array(wasmCodeData);\n```\n\nWith this gas and wasm information, add the command:\n\n```typescript [https://github.com/b9lab/cosmjs-sandbox/blob/2c7b137/experiment.ts#L57-L63]\n// Execute the upload Tx and store the result\nconst result = await signingClient.upload(\n    alice,\n    wasmCode,\n    {\n        amount: [{ denom: \"boot\", amount: \"0\" }],\n        gas: \"200000\",\n    },\n)\n// Output the result of the Tx\nconsole.log(\"Transfer result:\", result)\n```\n\nRun this with `npm run experiment` and you should get:\n\n```\n...\nTransfer result: {\n  code: 0,\n  height: 0,\n  rawLog: '[]',\n  transactionHash: '60F91D7B365245409E71D35C405D1FD5AD9D00E333CC0F992D0AC9E3A04DF0F2',\n  gasUsed: 0,\n  gasWanted: 0\n}\n```\nCheck that Alice upload information with [`getTx`](https://github.com/cybercongress/soft3.js/blob/main/src/cyberclient.ts#L314)\n\n```typescript\nconst result = await client.getTx(\"60F91D7B365245409E71D35C405D1FD5AD9D00E333CC0F992D0AC9E3A04DF0F2\")\n```\n\nUploads code and returns a receipt, including the code ID:\n\n```JSON\n[\n  {\n    \"events\": [\n      {\n        \"type\": \"message\",\n        \"attributes\": [\n          { \"key\": \"action\", \"value\": \"/cosmwasm.wasm.v1.MsgStoreCode\" },\n          { \"key\": \"module\", \"value\": \"wasm\" },\n          {\n            \"key\": \"sender\",\n            \"value\": \"bostrom1sw8xv3mv2n4xfv6rlpzsevusyzzg78r3e78xnp\"\n          }\n        ]\n      },\n      {\n        \"type\": \"store_code\",\n        \"attributes\": [{ \"key\": \"code_id\", \"value\": \"68\" }]\n      }\n    ]\n  }\n]\n```\n"
  },
  {
    "path": "docs/help/problem_to_install_drivers.md",
    "content": "# Possible issue during drivers install\n\nIn an installation from 0 we can find an error that forces us to restart and modify some parts\nin [BIOS](https://en.wikipedia.org/wiki/BIOS), I put the necessary steps here.\n\n> In this case the motherboard is an [Asus Z-97A](https://www.asus.com/Motherboards/Z97A/),\nbut will be similar in others motherboards.\n\n## Steps to follow\n\n1. Go to BIOS by pressing the key for it (usually `F10` or `DEL`)\n\n2. Go to Advanced Mode (`F7`)\n\n3. Go to `Secure Boot`\n\n4. In `OS Type` change `Windows UEFI mode` to `Other OS`\n\n5. Save and restart\n\n![mod_BIOS](../img/cyberdModBIOS2.gif)"
  },
  {
    "path": "docs/keystore.md",
    "content": "# Keystore management\n\n## Key types\n\nKey types can be conditionally divided into two groups: **agents** and **validators**.\n\n**Agents** keys are used for linking content, sending liquid tokens, delegating, redelegating, and undelegating tokens to validators. Also, withdrawing rewards, voting and creating multisig accounts.\n\n- `bostrom` a.k.a. address. Cyber application key.\n  - Derived from account mnemonic phrase, generated by `cyber keys add`\n  - e.g. `bostrom 15h6vd5f0wqps26zjlwrc6chah08ryu4hzzdwhc`\n\n- `bostrom pub` the public key of an account address. It is used for generating multisig addresses.  \n  - Derived from account mnemonic phrase, generated by `cyber keys add`\n  - e.g. `bostrom pub1zcjduc3q7fu03jnlu2xpl75s2nkt7krm6grh4cc5aqth73v0zwmea25wj2hsqhlqzm`\n\nAll agents keypairs are stored locally in the `PATH_TO_CYBER/keys` folder. \n\n**Validators** are actors on the network committing new blocks by submitting their votes. This refers to the node itself, not a single person or a single account. Therefore, the public key here is referring to the nodes public key, not the public key of the agent address.\n\n- `bostrom valoper` validator application-level address. It is associated with a public key `bostrom valconspub`. This is the address used to identify your validator publicly. The private key associated with this address is used to delegate, unbond, claim rewards, and participate in governance. Generated by cyber on the application level. Application keys are associated with a public key prefixed by `bostrom pub` and an address prefixed by cyber  network. Both are derived from account keys generated by cyber keys add. \n  - e.g. `bostrom valoper1carzvgq3e6y3z5kz5y6gxp3wpy3qdrv928vyah`\n\n-  the public key of node/validator address has been recently migrated to protobuf look. The private key associated with this Tendermint PubKey is used to sign prevotes and precommits.\n  - Generated when the node is created\n  - Get this value with `cyber tendermint show-validator`\n  - e.g. `{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"YxN/kkQlXBwKNF4Cgi6tiqMh2ae8+tpo9VxENmFUhv8=\"}`\n\n> Note: A validator's operator key is directly tied to an application key, but uses reserved prefixes solely for this purpose: `bostrom valoper`.\n\nA nodes keypair is stored in `node_key.json` and `priv_validator_key.json` at `$HOME/.cyber/config` folder. You can delete them and restart `cyber` if you want to change this keypair. The new pair will be created automatically.\n\n## Generate keys\n\nYou'll need an account private and public key pair \\(a.k.a. `sk, pk` respectively\\) to be able to receive funds, send txs, bond tx, etc.\n\nTo generate a new _secp256k1_ key:\n\n```bash\ncyber keys add <account_name>\n```\n\nNext, you will have to create a passphrase to protect the key on disk. The output of the above\ncommand will contain a _seed phrase_. It is recommended to save the _seed phrase_ in a safe\nplace so that in case you forget the password, you could eventually regenerate the key from\nthe seed phrase with the following command:\n\n```bash\ncyber keys add <account_name> --recover\n```\n\nAlso, you can import your Cosmos account to `cyber cli` using seed phrase:\n\n```bash\ncyber keys add <account_name> --recover \n```\n\ncyber provides compatibility of Cosmos with Cyber addresses.\n\nYou can check your application account details by account name:\n\n```bash\ncyber keys show <account_name>\n```\n\nYou can see all of your available keys by typing:\n\n```bash\ncyber keys list\n```\n\nView the validator pubkey for your node by typing:\n\n```bash\ncyber tendermint show-validator\n```\n\nNote that this is the Tendermint signing key, _not_ the operator key you will use in delegation transactions.\n\n\n**Important note**: Starting with v.38 cosmos-SDK uses os-native keyring to store all your keys. We've noticed that in certain cases this does not work well by default (for example if you don't have any GUI installed on your machine). If during the execution of the `cyber keys add` command you get this type of error:\n\n```bash\npanic: No such interface 'org.freedesktop.DBus.Properties' on object at path /\n\ngoroutine 1 [running]:\ngithub.com/cosmos/cosmos-sdk/crypto/keys.keyringKeybase.writeInfo(0x1307a18, 0x1307a10, 0xc000b37160, 0x1, 0x1, 0xc000b37170, 0x1, 0x1, 0x147a6c0, 0xc000f1c780, ...)\n    /root/go/pkg/mod/github.com/cosmos/cosmos-sdk@v0.38.1/crypto/keys/keyring.go:479 +0x38c\ngithub.com/cosmos/cosmos-sdk/crypto/keys.keyringKeybase.writeLocalKey(0x1307a18, 0x1307a10, 0xc000b37160, 0x1, 0x1, 0xc000b37170, 0x1, 0x1, 0x147a6c0, 0xc000f1c780, ...)\n    /root/go/pkg/mod/github.com/cosmos/cosmos-sdk@v0.38.1/crypto/keys/keyring.go:465 +0x189\ngithub.com/cosmos/cosmos-sdk/crypto/keys.baseKeybase.CreateAccount(0x1307a18, 0x1307a10, 0xc000b37160, 0x1, 0x1, 0xc000b37170, 0x1, 0x1, 0x146aa00, 0xc000b15630, ...)\n    /root/go/pkg/mod/github.com/cosmos/cosmos-sdk@v0.38.1/crypto/keys/keybase_base.go:171 +0x192\ngithub.com/cosmos/cosmos-sdk/crypto/keys.keyringKeybase.CreateAccount(...)\n    /root/go/pkg/mod/github.com/cosmos/cosmos-sdk@v0.38.1/crypto/keys/keyring.go:107\ngithub.com/cosmos/cosmos-sdk/client/keys.RunAddCmd(0xc000f0b400, 0xc000f125f0, 0x1, 0x1, 0x148dcc0, 0xc000aca550, 0xc000ea75c0, 0xc000ae1c08, 0x5e93b7)\n    /root/go/pkg/mod/github.com/cosmos/cosmos-sdk@v0.38.1/client/keys/add.go:273 +0xa8b\n... etc\n```\n\nYou will have to use another keyring backend to keep your keys. Here are 2 options: store the files within the cli folder or a `pass` manager.\n\nUsing the keyring backend as a **local file**:\n\nExecute:\n\n```bash\ncyber keys add <key_name> keyring-backend file\n```\n\nThis means that you've saved your keyring-backend to a local file. *Note*, in this case, all the keys in your keyring will be encrypted using the same password. If you would like to set up a unique password for each key, you should set a unique `--home` folder for each key. To do that, just use `--home=/<unique_path_to_key_folder>/` with setup keyring backend and at all interactions with keys when using cyber cli:\n\n```bash\ncyber config keyring-backend file --home=/<unique_path_to_key_folder>/\ncyber keys add <your_second_key_name> --home=/<unique_path_to_key_folder>/\ncyber keys list --home=/<unique_path_to_key_folder>/\n```\n"
  },
  {
    "path": "docs/menu/index.md",
    "content": "---\nheadless: true\n---\n- [Whitepaper]({{< relref \"/docs/go-cyber/cyber.md\" >}})\n- Usage:\n  - [Run the validator]({{< relref \"/docs/go-cyber/run_validator.md\" >}})\n  - [Supported GPUs list]({{< relref \"/docs/go-cyber/supported_gpu_list.md\" >}})\n  - [CLI guide]({{< relref \"/docs/go-cyber/ultimate-commands-guide.md\" >}})\n  - [Port forwarding]({{< relref \"/docs/go-cyber/port_forwarding_guide.md\" >}})\n  - [Cyberd Ledger guide]({{< relref \"/docs/go-cyber/cyber_Ledger_guide.md\" >}})\n  - [Multisig guide]({{< relref \"/docs/go-cyber/multisig_guide.md\" >}})\n  - [Run validator with Tendermint and Ledger]({{< relref \"/docs/go-cyber/validator_launch_with_tendermintKMS_and_ledger.md\" >}})\n  - [Set up config.toml in the right way]({{< relref \"/docs/go-cyber/setup_cyber_configuration.md\" >}})\n  - [Upgrade guide]({{< relref \"/docs/go-cyber/upgrade_guide.md\" >}})\n- Dev environment:\n  - [Setup development environment]({{< relref \"/docs/go-cyber/setup_dev_env.md\" >}})\n- Specs:\n  - [RPC]({{< relref \"/docs/go-cyber/rpc.md\" >}})\n  - [Keystore]({{< relref \"/docs/go-cyber/keystore.md\" >}})\n  - [CHANGELOG]({{< relref \"/docs/go-cyber/Changelog.md\" >}})\n  - [CONTRIBUTING]({{< relref \"/docs/go-cyber/Contributing.md\" >}})\n"
  },
  {
    "path": "docs/multisig_guide.md",
    "content": "# A guide for creating a 2 of 3 multisig account and sending transactions\n\nTo follow this guide you'll need `cyber` installed and connected to any cyber node (refer to our cli [guide](https://github.com/cybercongress/go-cyber/blob/main/docs/ultimate_commands_guide.md)).\nA reminder: this guide covers all types of transactions, not only send transactions. This guide is also relevant for Cosmos Hub Gaiacli users, except for the bandwidth params, in Cosmos we pay a fee using tokens.\n\nDo not forget about the `--chain-id` flag in `cyber`, and in the `Cosmos Hub` networks.\nYou can always get the current `<chain-id>` in the master branch of the [repository](https://github.com/cybercongress/go-cyber).\n\n## Creating a multisig\n\nThe multisig account creation and sending transactions are simple and clear but can be a little long.\n\n1. Import or create a thresholder accounts for multisig:\n\n```bash\ncyber keys add test1\ncyber keys add test2\n```\n\n2. Add pubkeys of remote thresholder accounts:\n\n```bash\ncyber keys add test3 --pubkey=<thresholder_pub_key>\n```\n\nWe now have 3 accounts for multisig account generating:\n`test1` and `test2` on a local machine that we have access to.\n`test3` from a remote thresholder that we do not have access to.\nAll the created and imported accounts can be checked with:\n\n```bash\ncyber keys list\n```\n\n3. Now, we can create and test the 2-of-3 multisig account, named for example: `multitest1` with keys `test1`,`test2` on a local machine and `test3` on a remote thresholder:\n\n```bash\ncyber keys add multitest1 --multisig=test1,test2,test3 --multisig-threshold=2\n```\n\n4. You should top up the balance of your multisig account. Make sure that you have enough bandwidth to execute transactions later.\n\n## Spending out of a multisig account\n\n5. Create an unsigned transaction from the multisig account and store it in the `unsigned.json` file:\n\n```bash\ncyber tx send <recipient_address> <amount>boot \\\n--from=<multisig_address> \\\n--chain-id=<chain_id> \\\n--generate-only > unsigned.json\n```\n\n6. Sign this transaction with the following command and then store the signed file in `sign1.json`:\n\n```bash\ncyber tx sign unsigned.json --multisig=<multisig_address> \\\n--from=<your_account_name> \\\n--output-document=sign1.json \\\n--chain-id=<chain_id>\n```\n\n7. You need to send the obtained file to a remote thresholders for signing. You can see the content of the file containing the transaction with:\n\n ```bash\ncat unsigned.json\n```\n\nYou may now copy the content that is convenient to your `.json` file and send it.\n\n8. You should also sign the remote thresholder, just like you did two steps above, and send your signed file back.\nFor example `sign2.json`\n\n9. Copy the signed file from the remote thresholder into your cli home directory with the following command:\n\n```bash\ncp sign2.json $HOME/.cyber\n```\n\nYour cli-home folder should content 3 `.json` files:\n`unsigned.json`, `sign1.json`, and `sign2.json` (at least). Those are the necessary and sufficient conditions, because we've set up a 2-out-of 3 multisig account.\n\n10. Generate a multisig transaction with all signatures:\n\n```bash\ncyber tx multisign unsigned.json multitest1 sign1.json sign2.json \\\n--chain-id=<chain_id> > signed.json\n```\n\n11. Finally, we need to broadcast this transaction to the network:\n\n```bash\ncyber tx broadcast signed.json --chain-id=<chain_id>\n```\n\nIf the multisig account has enough bandwidth, the transaction should be broadcasted to the network.\n"
  },
  {
    "path": "docs/port_forwarding_guide.md",
    "content": "# Decentralization must be decentralized\n\nJanuary 3, 2019, we've launched first public testnet Euler-3. Since this time we have 3 relaunches and there will be some in the future. With help from our testers and validators we are finding and fixing new bugs every day. But now one fundamental and critical bug is not fixed yet.\n\nAn obvious problem of decentralization is that no entity has a global vision of the system, and there is no central authority to direct nodes in making optimal decisions with regard to software updates, routing, or solving consensus. This makes the availability of a decentralized network more difficult to maintain, a factor significant enough to contribute to the failure of a system.\n\nBy the way, a huge part of disconnections and, as result, validators jailing happens by this reason.\n\nCyberd cli can’t automatically configure your router to open port `26656`, so you will need to manually configure your router.\n\nEnabling inbound connections requires two steps:\n\n1. Giving your computer a static (unchanging) internal IP address by configuring the Dynamic Host Configuration Protocol (DHCP) on your router.\n\n2. Forwarding inbound connections from the Internet through your router to your computer where cyber container can process them.\n\n3. Editing cyber configuration file.  \n\n## Configuring DHCP\n\nIn order for your router to direct incoming port `26656` connections to your computer, it needs to know your computer’s internal IP address. However, routers usually give computers dynamic IP addresses that change frequently, so we need to ensure your router always gives your computer the same internal IP address.\n\nStart by logging into your router’s administration interface. Most routers can be configured using one of the following URLs, so keep clicking links until you find one that works. If none work, consult your router’s manual.\n\n```py\n    http://192.168.0.1 (some Linksys/Cisco models)\n    http://192.168.1.1 (some D-Link/Netgear models)\n    http://192.168.2.1 (some Belkin/SMC models)\n    http://192.168.123.254 (some US Robotics models)\n    http://10.0.1.1 (some Apple models)\n```\n\nUpon connecting, you will probably be prompted for a username and password. If you configured a password, enter it now. If not, the Router Passwords site provides a database of known default username and password pairs.\n\nAfter logging in, you want to search your router’s menus for options related to DHCP, the Dynamic Host Configuration Protocol. These options may also be called Address Reservation.\n\nIn the reservation configuration, some routers will display a list of computers and devices currently connected to your network, and then let you select a device to make its current IP address permanent.\n\nIf that’s the case, find the computer running cyber container in the list, select it, and add it to the list of reserved addresses. Make a note of its current IP address—we’ll use the address in the next section.\n\nOther routers require a more manual configuration. For these routers, you will need to look up the fixed address (MAC address) for your computer’s network card and add it to the list.\n\nOpen a terminal and type ifconfig. Find the result that best matches your connection—a result starting with wlan indicates a wireless connection. Find the field that starts with HWaddr and copy the immediately following field that looks like `01:23:45:67:89:ab`. Use that value in the instructions below.\n\nOnce you have the MAC address, you can fill it into to your router’s manual DHCP assignment table. Also, choose an IP address and make a note of it for the instructions in the next subsection. After entering this information, click the Add or Save button.\n\nThen reboot your computer to ensure it gets assigned the address you selected and proceed to the Port Forwarding instructions below.\n\n## Port Forwarding\n\nAn easiest way to find some detailed instructions for your router is to check [here](https://portforward.com/router.htm) or [here](https://setuprouter.com/).\n\nHere we'll provide you general idea of what has to be done.\n\nYou need to know the local IP address of the computer running cyber container. You should have this information from configuring the DHCP assignment table in the subsection above.\n\nLogin to your router using the same steps described near the top of the DHCP subsection. Look for an option called Port Forwarding, Port Assignment, or anything with “Port” in its name. On some routers, this option is buried in an Applications & Gaming menu.\n\nThe port forwarding settings should allow you to map an external port on your router to the “internal port” of a device on your network.\n\nBoth the external port and the internal port should be `26656` for cyber container.\n\nMake sure the IP address you enter is the same one you configured in the previous subsection.\n\nAfter filling in the details for the mapping, save the entry. You should not need to restart anything.\n\nIf you still can’t connect and you use a firewall, you probably need to change your firewall settings. Ubuntu comes with its firewall disabled by default, but if you have enabled it, see the Ubuntu [wiki page](https://help.ubuntu.com/community/Gufw) for information about adding port forwarding rules.\n\nIf something else went wrong, it’s probably a problem with your router configuration. Re-read the instructions above to see if you missed anything, try to look for some port-forwarding instructions [here](https://portforward.com/router.htm) or [here](https://setuprouter.com/).\n\n## Configuring cyber\n\nGo to cyber daemon folder, then go to `config` folder and open `config.toml` file for editing.\n\nFind `peer to peer configuration options` section and edit `external_address` variable with your IP address and port `26656`\n\n![peer_to_peer_config](https://ipfs.io/ipfs/QmQRqM4PbPt8cbDN49nAktT23XWfCixbfzfyUEkSyDUWYP)\n\nRestart cyber service.\n\n---\n\nWe call to you, validators, with a proposal to open port `26656` and make your validator-nodes available to the incoming connection.\n"
  },
  {
    "path": "docs/proto/proto-docs.md",
    "content": "<!-- This file is auto-generated. Please do not modify it yourself. -->\n# Protobuf Documentation\n<a name=\"top\"></a>\n\n## Table of Contents\n\n- [cyber/bandwidth/v1beta1/types.proto](#cyber/bandwidth/v1beta1/types.proto)\n    - [NeuronBandwidth](#cyber.bandwidth.v1beta1.NeuronBandwidth)\n    - [Params](#cyber.bandwidth.v1beta1.Params)\n    - [Price](#cyber.bandwidth.v1beta1.Price)\n  \n- [cyber/bandwidth/v1beta1/genesis.proto](#cyber/bandwidth/v1beta1/genesis.proto)\n    - [GenesisState](#cyber.bandwidth.v1beta1.GenesisState)\n  \n- [cyber/bandwidth/v1beta1/query.proto](#cyber/bandwidth/v1beta1/query.proto)\n    - [QueryLoadRequest](#cyber.bandwidth.v1beta1.QueryLoadRequest)\n    - [QueryLoadResponse](#cyber.bandwidth.v1beta1.QueryLoadResponse)\n    - [QueryNeuronBandwidthRequest](#cyber.bandwidth.v1beta1.QueryNeuronBandwidthRequest)\n    - [QueryNeuronBandwidthResponse](#cyber.bandwidth.v1beta1.QueryNeuronBandwidthResponse)\n    - [QueryParamsRequest](#cyber.bandwidth.v1beta1.QueryParamsRequest)\n    - [QueryParamsResponse](#cyber.bandwidth.v1beta1.QueryParamsResponse)\n    - [QueryPriceRequest](#cyber.bandwidth.v1beta1.QueryPriceRequest)\n    - [QueryPriceResponse](#cyber.bandwidth.v1beta1.QueryPriceResponse)\n    - [QueryTotalBandwidthRequest](#cyber.bandwidth.v1beta1.QueryTotalBandwidthRequest)\n    - [QueryTotalBandwidthResponse](#cyber.bandwidth.v1beta1.QueryTotalBandwidthResponse)\n  \n    - [Query](#cyber.bandwidth.v1beta1.Query)\n  \n- [cyber/bandwidth/v1beta1/tx.proto](#cyber/bandwidth/v1beta1/tx.proto)\n    - [MsgUpdateParams](#cyber.bandwidth.v1beta1.MsgUpdateParams)\n    - [MsgUpdateParamsResponse](#cyber.bandwidth.v1beta1.MsgUpdateParamsResponse)\n  \n    - [Msg](#cyber.bandwidth.v1beta1.Msg)\n  \n- [cyber/clock/v1/clock.proto](#cyber/clock/v1/clock.proto)\n    - [ClockContract](#cyber.clock.v1.ClockContract)\n  \n- [cyber/clock/v1/genesis.proto](#cyber/clock/v1/genesis.proto)\n    - [GenesisState](#cyber.clock.v1.GenesisState)\n    - [Params](#cyber.clock.v1.Params)\n  \n- [cyber/clock/v1/query.proto](#cyber/clock/v1/query.proto)\n    - [QueryClockContract](#cyber.clock.v1.QueryClockContract)\n    - [QueryClockContractResponse](#cyber.clock.v1.QueryClockContractResponse)\n    - [QueryClockContracts](#cyber.clock.v1.QueryClockContracts)\n    - [QueryClockContractsResponse](#cyber.clock.v1.QueryClockContractsResponse)\n    - [QueryParamsRequest](#cyber.clock.v1.QueryParamsRequest)\n    - [QueryParamsResponse](#cyber.clock.v1.QueryParamsResponse)\n  \n    - [Query](#cyber.clock.v1.Query)\n  \n- [cyber/clock/v1/tx.proto](#cyber/clock/v1/tx.proto)\n    - [MsgRegisterClockContract](#cyber.clock.v1.MsgRegisterClockContract)\n    - [MsgRegisterClockContractResponse](#cyber.clock.v1.MsgRegisterClockContractResponse)\n    - [MsgUnjailClockContract](#cyber.clock.v1.MsgUnjailClockContract)\n    - [MsgUnjailClockContractResponse](#cyber.clock.v1.MsgUnjailClockContractResponse)\n    - [MsgUnregisterClockContract](#cyber.clock.v1.MsgUnregisterClockContract)\n    - [MsgUnregisterClockContractResponse](#cyber.clock.v1.MsgUnregisterClockContractResponse)\n    - [MsgUpdateParams](#cyber.clock.v1.MsgUpdateParams)\n    - [MsgUpdateParamsResponse](#cyber.clock.v1.MsgUpdateParamsResponse)\n  \n    - [Msg](#cyber.clock.v1.Msg)\n  \n- [cyber/dmn/v1beta1/types.proto](#cyber/dmn/v1beta1/types.proto)\n    - [Load](#cyber.dmn.v1beta1.Load)\n    - [Params](#cyber.dmn.v1beta1.Params)\n    - [Thought](#cyber.dmn.v1beta1.Thought)\n    - [ThoughtStats](#cyber.dmn.v1beta1.ThoughtStats)\n    - [Trigger](#cyber.dmn.v1beta1.Trigger)\n  \n- [cyber/dmn/v1beta1/genesis.proto](#cyber/dmn/v1beta1/genesis.proto)\n    - [GenesisState](#cyber.dmn.v1beta1.GenesisState)\n  \n- [cyber/dmn/v1beta1/query.proto](#cyber/dmn/v1beta1/query.proto)\n    - [QueryParamsRequest](#cyber.dmn.v1beta1.QueryParamsRequest)\n    - [QueryParamsResponse](#cyber.dmn.v1beta1.QueryParamsResponse)\n    - [QueryThoughtParamsRequest](#cyber.dmn.v1beta1.QueryThoughtParamsRequest)\n    - [QueryThoughtResponse](#cyber.dmn.v1beta1.QueryThoughtResponse)\n    - [QueryThoughtStatsResponse](#cyber.dmn.v1beta1.QueryThoughtStatsResponse)\n    - [QueryThoughtsFeesRequest](#cyber.dmn.v1beta1.QueryThoughtsFeesRequest)\n    - [QueryThoughtsFeesResponse](#cyber.dmn.v1beta1.QueryThoughtsFeesResponse)\n    - [QueryThoughtsRequest](#cyber.dmn.v1beta1.QueryThoughtsRequest)\n    - [QueryThoughtsResponse](#cyber.dmn.v1beta1.QueryThoughtsResponse)\n    - [QueryThoughtsStatsRequest](#cyber.dmn.v1beta1.QueryThoughtsStatsRequest)\n    - [QueryThoughtsStatsResponse](#cyber.dmn.v1beta1.QueryThoughtsStatsResponse)\n  \n    - [Query](#cyber.dmn.v1beta1.Query)\n  \n- [cyber/dmn/v1beta1/tx.proto](#cyber/dmn/v1beta1/tx.proto)\n    - [MsgChangeThoughtBlock](#cyber.dmn.v1beta1.MsgChangeThoughtBlock)\n    - [MsgChangeThoughtBlockResponse](#cyber.dmn.v1beta1.MsgChangeThoughtBlockResponse)\n    - [MsgChangeThoughtGasPrice](#cyber.dmn.v1beta1.MsgChangeThoughtGasPrice)\n    - [MsgChangeThoughtGasPriceResponse](#cyber.dmn.v1beta1.MsgChangeThoughtGasPriceResponse)\n    - [MsgChangeThoughtInput](#cyber.dmn.v1beta1.MsgChangeThoughtInput)\n    - [MsgChangeThoughtInputResponse](#cyber.dmn.v1beta1.MsgChangeThoughtInputResponse)\n    - [MsgChangeThoughtName](#cyber.dmn.v1beta1.MsgChangeThoughtName)\n    - [MsgChangeThoughtNameResponse](#cyber.dmn.v1beta1.MsgChangeThoughtNameResponse)\n    - [MsgChangeThoughtParticle](#cyber.dmn.v1beta1.MsgChangeThoughtParticle)\n    - [MsgChangeThoughtParticleResponse](#cyber.dmn.v1beta1.MsgChangeThoughtParticleResponse)\n    - [MsgChangeThoughtPeriod](#cyber.dmn.v1beta1.MsgChangeThoughtPeriod)\n    - [MsgChangeThoughtPeriodResponse](#cyber.dmn.v1beta1.MsgChangeThoughtPeriodResponse)\n    - [MsgCreateThought](#cyber.dmn.v1beta1.MsgCreateThought)\n    - [MsgCreateThoughtResponse](#cyber.dmn.v1beta1.MsgCreateThoughtResponse)\n    - [MsgForgetThought](#cyber.dmn.v1beta1.MsgForgetThought)\n    - [MsgForgetThoughtResponse](#cyber.dmn.v1beta1.MsgForgetThoughtResponse)\n    - [MsgUpdateParams](#cyber.dmn.v1beta1.MsgUpdateParams)\n    - [MsgUpdateParamsResponse](#cyber.dmn.v1beta1.MsgUpdateParamsResponse)\n  \n    - [Msg](#cyber.dmn.v1beta1.Msg)\n  \n- [cyber/graph/v1beta1/query.proto](#cyber/graph/v1beta1/query.proto)\n    - [QueryBurnStatsRequest](#cyber.graph.v1beta1.QueryBurnStatsRequest)\n    - [QueryBurnStatsResponse](#cyber.graph.v1beta1.QueryBurnStatsResponse)\n    - [QueryGraphStatsRequest](#cyber.graph.v1beta1.QueryGraphStatsRequest)\n    - [QueryGraphStatsResponse](#cyber.graph.v1beta1.QueryGraphStatsResponse)\n  \n    - [Query](#cyber.graph.v1beta1.Query)\n  \n- [cyber/graph/v1beta1/types.proto](#cyber/graph/v1beta1/types.proto)\n    - [Link](#cyber.graph.v1beta1.Link)\n  \n- [cyber/graph/v1beta1/tx.proto](#cyber/graph/v1beta1/tx.proto)\n    - [MsgCyberlink](#cyber.graph.v1beta1.MsgCyberlink)\n    - [MsgCyberlinkResponse](#cyber.graph.v1beta1.MsgCyberlinkResponse)\n  \n    - [Msg](#cyber.graph.v1beta1.Msg)\n  \n- [cyber/grid/v1beta1/types.proto](#cyber/grid/v1beta1/types.proto)\n    - [Params](#cyber.grid.v1beta1.Params)\n    - [Route](#cyber.grid.v1beta1.Route)\n    - [Value](#cyber.grid.v1beta1.Value)\n  \n- [cyber/grid/v1beta1/genesis.proto](#cyber/grid/v1beta1/genesis.proto)\n    - [GenesisState](#cyber.grid.v1beta1.GenesisState)\n  \n- [cyber/grid/v1beta1/query.proto](#cyber/grid/v1beta1/query.proto)\n    - [QueryDestinationRequest](#cyber.grid.v1beta1.QueryDestinationRequest)\n    - [QueryParamsRequest](#cyber.grid.v1beta1.QueryParamsRequest)\n    - [QueryParamsResponse](#cyber.grid.v1beta1.QueryParamsResponse)\n    - [QueryRouteRequest](#cyber.grid.v1beta1.QueryRouteRequest)\n    - [QueryRouteResponse](#cyber.grid.v1beta1.QueryRouteResponse)\n    - [QueryRoutedEnergyResponse](#cyber.grid.v1beta1.QueryRoutedEnergyResponse)\n    - [QueryRoutesRequest](#cyber.grid.v1beta1.QueryRoutesRequest)\n    - [QueryRoutesResponse](#cyber.grid.v1beta1.QueryRoutesResponse)\n    - [QuerySourceRequest](#cyber.grid.v1beta1.QuerySourceRequest)\n  \n    - [Query](#cyber.grid.v1beta1.Query)\n  \n- [cyber/grid/v1beta1/tx.proto](#cyber/grid/v1beta1/tx.proto)\n    - [MsgCreateRoute](#cyber.grid.v1beta1.MsgCreateRoute)\n    - [MsgCreateRouteResponse](#cyber.grid.v1beta1.MsgCreateRouteResponse)\n    - [MsgDeleteRoute](#cyber.grid.v1beta1.MsgDeleteRoute)\n    - [MsgDeleteRouteResponse](#cyber.grid.v1beta1.MsgDeleteRouteResponse)\n    - [MsgEditRoute](#cyber.grid.v1beta1.MsgEditRoute)\n    - [MsgEditRouteName](#cyber.grid.v1beta1.MsgEditRouteName)\n    - [MsgEditRouteNameResponse](#cyber.grid.v1beta1.MsgEditRouteNameResponse)\n    - [MsgEditRouteResponse](#cyber.grid.v1beta1.MsgEditRouteResponse)\n    - [MsgUpdateParams](#cyber.grid.v1beta1.MsgUpdateParams)\n    - [MsgUpdateParamsResponse](#cyber.grid.v1beta1.MsgUpdateParamsResponse)\n  \n    - [Msg](#cyber.grid.v1beta1.Msg)\n  \n- [cyber/liquidity/v1beta1/tx.proto](#cyber/liquidity/v1beta1/tx.proto)\n    - [MsgCreatePool](#cyber.liquidity.v1beta1.MsgCreatePool)\n    - [MsgCreatePoolResponse](#cyber.liquidity.v1beta1.MsgCreatePoolResponse)\n    - [MsgDepositWithinBatch](#cyber.liquidity.v1beta1.MsgDepositWithinBatch)\n    - [MsgDepositWithinBatchResponse](#cyber.liquidity.v1beta1.MsgDepositWithinBatchResponse)\n    - [MsgSwapWithinBatch](#cyber.liquidity.v1beta1.MsgSwapWithinBatch)\n    - [MsgSwapWithinBatchResponse](#cyber.liquidity.v1beta1.MsgSwapWithinBatchResponse)\n    - [MsgWithdrawWithinBatch](#cyber.liquidity.v1beta1.MsgWithdrawWithinBatch)\n    - [MsgWithdrawWithinBatchResponse](#cyber.liquidity.v1beta1.MsgWithdrawWithinBatchResponse)\n  \n    - [Msg](#cyber.liquidity.v1beta1.Msg)\n  \n- [cyber/liquidity/v1beta1/liquidity.proto](#cyber/liquidity/v1beta1/liquidity.proto)\n    - [DepositMsgState](#cyber.liquidity.v1beta1.DepositMsgState)\n    - [Params](#cyber.liquidity.v1beta1.Params)\n    - [Pool](#cyber.liquidity.v1beta1.Pool)\n    - [PoolBatch](#cyber.liquidity.v1beta1.PoolBatch)\n    - [PoolMetadata](#cyber.liquidity.v1beta1.PoolMetadata)\n    - [PoolType](#cyber.liquidity.v1beta1.PoolType)\n    - [SwapMsgState](#cyber.liquidity.v1beta1.SwapMsgState)\n    - [WithdrawMsgState](#cyber.liquidity.v1beta1.WithdrawMsgState)\n  \n- [cyber/liquidity/v1beta1/genesis.proto](#cyber/liquidity/v1beta1/genesis.proto)\n    - [GenesisState](#cyber.liquidity.v1beta1.GenesisState)\n    - [PoolRecord](#cyber.liquidity.v1beta1.PoolRecord)\n  \n- [cyber/liquidity/v1beta1/query.proto](#cyber/liquidity/v1beta1/query.proto)\n    - [QueryLiquidityPoolBatchRequest](#cyber.liquidity.v1beta1.QueryLiquidityPoolBatchRequest)\n    - [QueryLiquidityPoolBatchResponse](#cyber.liquidity.v1beta1.QueryLiquidityPoolBatchResponse)\n    - [QueryLiquidityPoolByPoolCoinDenomRequest](#cyber.liquidity.v1beta1.QueryLiquidityPoolByPoolCoinDenomRequest)\n    - [QueryLiquidityPoolByReserveAccRequest](#cyber.liquidity.v1beta1.QueryLiquidityPoolByReserveAccRequest)\n    - [QueryLiquidityPoolRequest](#cyber.liquidity.v1beta1.QueryLiquidityPoolRequest)\n    - [QueryLiquidityPoolResponse](#cyber.liquidity.v1beta1.QueryLiquidityPoolResponse)\n    - [QueryLiquidityPoolsRequest](#cyber.liquidity.v1beta1.QueryLiquidityPoolsRequest)\n    - [QueryLiquidityPoolsResponse](#cyber.liquidity.v1beta1.QueryLiquidityPoolsResponse)\n    - [QueryParamsRequest](#cyber.liquidity.v1beta1.QueryParamsRequest)\n    - [QueryParamsResponse](#cyber.liquidity.v1beta1.QueryParamsResponse)\n    - [QueryPoolBatchDepositMsgRequest](#cyber.liquidity.v1beta1.QueryPoolBatchDepositMsgRequest)\n    - [QueryPoolBatchDepositMsgResponse](#cyber.liquidity.v1beta1.QueryPoolBatchDepositMsgResponse)\n    - [QueryPoolBatchDepositMsgsRequest](#cyber.liquidity.v1beta1.QueryPoolBatchDepositMsgsRequest)\n    - [QueryPoolBatchDepositMsgsResponse](#cyber.liquidity.v1beta1.QueryPoolBatchDepositMsgsResponse)\n    - [QueryPoolBatchSwapMsgRequest](#cyber.liquidity.v1beta1.QueryPoolBatchSwapMsgRequest)\n    - [QueryPoolBatchSwapMsgResponse](#cyber.liquidity.v1beta1.QueryPoolBatchSwapMsgResponse)\n    - [QueryPoolBatchSwapMsgsRequest](#cyber.liquidity.v1beta1.QueryPoolBatchSwapMsgsRequest)\n    - [QueryPoolBatchSwapMsgsResponse](#cyber.liquidity.v1beta1.QueryPoolBatchSwapMsgsResponse)\n    - [QueryPoolBatchWithdrawMsgRequest](#cyber.liquidity.v1beta1.QueryPoolBatchWithdrawMsgRequest)\n    - [QueryPoolBatchWithdrawMsgResponse](#cyber.liquidity.v1beta1.QueryPoolBatchWithdrawMsgResponse)\n    - [QueryPoolBatchWithdrawMsgsRequest](#cyber.liquidity.v1beta1.QueryPoolBatchWithdrawMsgsRequest)\n    - [QueryPoolBatchWithdrawMsgsResponse](#cyber.liquidity.v1beta1.QueryPoolBatchWithdrawMsgsResponse)\n  \n    - [Query](#cyber.liquidity.v1beta1.Query)\n  \n- [cyber/rank/v1beta1/types.proto](#cyber/rank/v1beta1/types.proto)\n    - [Params](#cyber.rank.v1beta1.Params)\n    - [RankedParticle](#cyber.rank.v1beta1.RankedParticle)\n  \n- [cyber/rank/v1beta1/genesis.proto](#cyber/rank/v1beta1/genesis.proto)\n    - [GenesisState](#cyber.rank.v1beta1.GenesisState)\n  \n- [cyber/rank/v1beta1/pagination.proto](#cyber/rank/v1beta1/pagination.proto)\n    - [PageRequest](#cyber.rank.v1beta1.PageRequest)\n    - [PageResponse](#cyber.rank.v1beta1.PageResponse)\n  \n- [cyber/rank/v1beta1/query.proto](#cyber/rank/v1beta1/query.proto)\n    - [QueryIsAnyLinkExistRequest](#cyber.rank.v1beta1.QueryIsAnyLinkExistRequest)\n    - [QueryIsLinkExistRequest](#cyber.rank.v1beta1.QueryIsLinkExistRequest)\n    - [QueryKarmaRequest](#cyber.rank.v1beta1.QueryKarmaRequest)\n    - [QueryKarmaResponse](#cyber.rank.v1beta1.QueryKarmaResponse)\n    - [QueryLinkExistResponse](#cyber.rank.v1beta1.QueryLinkExistResponse)\n    - [QueryNegentropyParticleResponse](#cyber.rank.v1beta1.QueryNegentropyParticleResponse)\n    - [QueryNegentropyPartilceRequest](#cyber.rank.v1beta1.QueryNegentropyPartilceRequest)\n    - [QueryNegentropyRequest](#cyber.rank.v1beta1.QueryNegentropyRequest)\n    - [QueryNegentropyResponse](#cyber.rank.v1beta1.QueryNegentropyResponse)\n    - [QueryParamsRequest](#cyber.rank.v1beta1.QueryParamsRequest)\n    - [QueryParamsResponse](#cyber.rank.v1beta1.QueryParamsResponse)\n    - [QueryRankRequest](#cyber.rank.v1beta1.QueryRankRequest)\n    - [QueryRankResponse](#cyber.rank.v1beta1.QueryRankResponse)\n    - [QuerySearchRequest](#cyber.rank.v1beta1.QuerySearchRequest)\n    - [QuerySearchResponse](#cyber.rank.v1beta1.QuerySearchResponse)\n    - [QueryTopRequest](#cyber.rank.v1beta1.QueryTopRequest)\n  \n    - [Query](#cyber.rank.v1beta1.Query)\n  \n- [cyber/rank/v1beta1/tx.proto](#cyber/rank/v1beta1/tx.proto)\n    - [MsgUpdateParams](#cyber.rank.v1beta1.MsgUpdateParams)\n    - [MsgUpdateParamsResponse](#cyber.rank.v1beta1.MsgUpdateParamsResponse)\n  \n    - [Msg](#cyber.rank.v1beta1.Msg)\n  \n- [cyber/resources/v1beta1/types.proto](#cyber/resources/v1beta1/types.proto)\n    - [Params](#cyber.resources.v1beta1.Params)\n  \n- [cyber/resources/v1beta1/genesis.proto](#cyber/resources/v1beta1/genesis.proto)\n    - [GenesisState](#cyber.resources.v1beta1.GenesisState)\n  \n- [cyber/resources/v1beta1/query.proto](#cyber/resources/v1beta1/query.proto)\n    - [QueryAdjustedPriceRequest](#cyber.resources.v1beta1.QueryAdjustedPriceRequest)\n    - [QueryAdjustedPriceResponse](#cyber.resources.v1beta1.QueryAdjustedPriceResponse)\n    - [QueryInvestmintRequest](#cyber.resources.v1beta1.QueryInvestmintRequest)\n    - [QueryInvestmintResponse](#cyber.resources.v1beta1.QueryInvestmintResponse)\n    - [QueryParamsRequest](#cyber.resources.v1beta1.QueryParamsRequest)\n    - [QueryParamsResponse](#cyber.resources.v1beta1.QueryParamsResponse)\n  \n    - [Query](#cyber.resources.v1beta1.Query)\n  \n- [cyber/resources/v1beta1/tx.proto](#cyber/resources/v1beta1/tx.proto)\n    - [MsgInvestmint](#cyber.resources.v1beta1.MsgInvestmint)\n    - [MsgInvestmintResponse](#cyber.resources.v1beta1.MsgInvestmintResponse)\n    - [MsgUpdateParams](#cyber.resources.v1beta1.MsgUpdateParams)\n    - [MsgUpdateParamsResponse](#cyber.resources.v1beta1.MsgUpdateParamsResponse)\n  \n    - [Msg](#cyber.resources.v1beta1.Msg)\n  \n- [osmosis/tokenfactory/v1beta1/authority_metadata.proto](#osmosis/tokenfactory/v1beta1/authority_metadata.proto)\n    - [DenomAuthorityMetadata](#osmosis.tokenfactory.v1beta1.DenomAuthorityMetadata)\n  \n- [osmosis/tokenfactory/v1beta1/params.proto](#osmosis/tokenfactory/v1beta1/params.proto)\n    - [Params](#osmosis.tokenfactory.v1beta1.Params)\n  \n- [osmosis/tokenfactory/v1beta1/genesis.proto](#osmosis/tokenfactory/v1beta1/genesis.proto)\n    - [GenesisDenom](#osmosis.tokenfactory.v1beta1.GenesisDenom)\n    - [GenesisState](#osmosis.tokenfactory.v1beta1.GenesisState)\n  \n- [osmosis/tokenfactory/v1beta1/query.proto](#osmosis/tokenfactory/v1beta1/query.proto)\n    - [QueryDenomAuthorityMetadataRequest](#osmosis.tokenfactory.v1beta1.QueryDenomAuthorityMetadataRequest)\n    - [QueryDenomAuthorityMetadataResponse](#osmosis.tokenfactory.v1beta1.QueryDenomAuthorityMetadataResponse)\n    - [QueryDenomsFromCreatorRequest](#osmosis.tokenfactory.v1beta1.QueryDenomsFromCreatorRequest)\n    - [QueryDenomsFromCreatorResponse](#osmosis.tokenfactory.v1beta1.QueryDenomsFromCreatorResponse)\n    - [QueryParamsRequest](#osmosis.tokenfactory.v1beta1.QueryParamsRequest)\n    - [QueryParamsResponse](#osmosis.tokenfactory.v1beta1.QueryParamsResponse)\n  \n    - [Query](#osmosis.tokenfactory.v1beta1.Query)\n  \n- [osmosis/tokenfactory/v1beta1/tx.proto](#osmosis/tokenfactory/v1beta1/tx.proto)\n    - [MsgBurn](#osmosis.tokenfactory.v1beta1.MsgBurn)\n    - [MsgBurnResponse](#osmosis.tokenfactory.v1beta1.MsgBurnResponse)\n    - [MsgChangeAdmin](#osmosis.tokenfactory.v1beta1.MsgChangeAdmin)\n    - [MsgChangeAdminResponse](#osmosis.tokenfactory.v1beta1.MsgChangeAdminResponse)\n    - [MsgCreateDenom](#osmosis.tokenfactory.v1beta1.MsgCreateDenom)\n    - [MsgCreateDenomResponse](#osmosis.tokenfactory.v1beta1.MsgCreateDenomResponse)\n    - [MsgForceTransfer](#osmosis.tokenfactory.v1beta1.MsgForceTransfer)\n    - [MsgForceTransferResponse](#osmosis.tokenfactory.v1beta1.MsgForceTransferResponse)\n    - [MsgMint](#osmosis.tokenfactory.v1beta1.MsgMint)\n    - [MsgMintResponse](#osmosis.tokenfactory.v1beta1.MsgMintResponse)\n    - [MsgSetDenomMetadata](#osmosis.tokenfactory.v1beta1.MsgSetDenomMetadata)\n    - [MsgSetDenomMetadataResponse](#osmosis.tokenfactory.v1beta1.MsgSetDenomMetadataResponse)\n    - [MsgUpdateParams](#osmosis.tokenfactory.v1beta1.MsgUpdateParams)\n    - [MsgUpdateParamsResponse](#osmosis.tokenfactory.v1beta1.MsgUpdateParamsResponse)\n  \n    - [Msg](#osmosis.tokenfactory.v1beta1.Msg)\n  \n- [Scalar Value Types](#scalar-value-types)\n\n\n\n<a name=\"cyber/bandwidth/v1beta1/types.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/bandwidth/v1beta1/types.proto\n\n\n\n<a name=\"cyber.bandwidth.v1beta1.NeuronBandwidth\"></a>\n\n### NeuronBandwidth\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `neuron` | [string](#string) |  |  |\n| `remained_value` | [uint64](#uint64) |  |  |\n| `last_updated_block` | [uint64](#uint64) |  |  |\n| `max_value` | [uint64](#uint64) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.bandwidth.v1beta1.Params\"></a>\n\n### Params\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `recovery_period` | [uint64](#uint64) |  |  |\n| `adjust_price_period` | [uint64](#uint64) |  |  |\n| `base_price` | [string](#string) |  |  |\n| `base_load` | [string](#string) |  |  |\n| `max_block_bandwidth` | [uint64](#uint64) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.bandwidth.v1beta1.Price\"></a>\n\n### Price\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `price` | [string](#string) |  |  |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/bandwidth/v1beta1/genesis.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/bandwidth/v1beta1/genesis.proto\n\n\n\n<a name=\"cyber.bandwidth.v1beta1.GenesisState\"></a>\n\n### GenesisState\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `params` | [Params](#cyber.bandwidth.v1beta1.Params) |  |  |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/bandwidth/v1beta1/query.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/bandwidth/v1beta1/query.proto\n\n\n\n<a name=\"cyber.bandwidth.v1beta1.QueryLoadRequest\"></a>\n\n### QueryLoadRequest\n\n\n\n\n\n\n\n<a name=\"cyber.bandwidth.v1beta1.QueryLoadResponse\"></a>\n\n### QueryLoadResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `load` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.bandwidth.v1beta1.QueryNeuronBandwidthRequest\"></a>\n\n### QueryNeuronBandwidthRequest\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `neuron` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.bandwidth.v1beta1.QueryNeuronBandwidthResponse\"></a>\n\n### QueryNeuronBandwidthResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `neuron_bandwidth` | [NeuronBandwidth](#cyber.bandwidth.v1beta1.NeuronBandwidth) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.bandwidth.v1beta1.QueryParamsRequest\"></a>\n\n### QueryParamsRequest\n\n\n\n\n\n\n\n<a name=\"cyber.bandwidth.v1beta1.QueryParamsResponse\"></a>\n\n### QueryParamsResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `params` | [Params](#cyber.bandwidth.v1beta1.Params) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.bandwidth.v1beta1.QueryPriceRequest\"></a>\n\n### QueryPriceRequest\n\n\n\n\n\n\n\n<a name=\"cyber.bandwidth.v1beta1.QueryPriceResponse\"></a>\n\n### QueryPriceResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `price` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.bandwidth.v1beta1.QueryTotalBandwidthRequest\"></a>\n\n### QueryTotalBandwidthRequest\n\n\n\n\n\n\n\n<a name=\"cyber.bandwidth.v1beta1.QueryTotalBandwidthResponse\"></a>\n\n### QueryTotalBandwidthResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `total_bandwidth` | [uint64](#uint64) |  |  |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n\n<a name=\"cyber.bandwidth.v1beta1.Query\"></a>\n\n### Query\n\n\n| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |\n| ----------- | ------------ | ------------- | ------------| ------- | -------- |\n| `Load` | [QueryLoadRequest](#cyber.bandwidth.v1beta1.QueryLoadRequest) | [QueryLoadResponse](#cyber.bandwidth.v1beta1.QueryLoadResponse) |  | GET|/cyber/bandwidth/v1beta1/bandwidth/load|\n| `Price` | [QueryPriceRequest](#cyber.bandwidth.v1beta1.QueryPriceRequest) | [QueryPriceResponse](#cyber.bandwidth.v1beta1.QueryPriceResponse) |  | GET|/cyber/bandwidth/v1beta1/bandwidth/price|\n| `TotalBandwidth` | [QueryTotalBandwidthRequest](#cyber.bandwidth.v1beta1.QueryTotalBandwidthRequest) | [QueryTotalBandwidthResponse](#cyber.bandwidth.v1beta1.QueryTotalBandwidthResponse) |  | GET|/cyber/bandwidth/v1beta1/bandwidth/total|\n| `NeuronBandwidth` | [QueryNeuronBandwidthRequest](#cyber.bandwidth.v1beta1.QueryNeuronBandwidthRequest) | [QueryNeuronBandwidthResponse](#cyber.bandwidth.v1beta1.QueryNeuronBandwidthResponse) |  | GET|/cyber/bandwidth/v1beta1/bandwidth/neuron/{neuron}|\n| `Params` | [QueryParamsRequest](#cyber.bandwidth.v1beta1.QueryParamsRequest) | [QueryParamsResponse](#cyber.bandwidth.v1beta1.QueryParamsResponse) |  | GET|/cyber/bandwidth/v1beta1/bandwidth/params|\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/bandwidth/v1beta1/tx.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/bandwidth/v1beta1/tx.proto\n\n\n\n<a name=\"cyber.bandwidth.v1beta1.MsgUpdateParams\"></a>\n\n### MsgUpdateParams\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `authority` | [string](#string) |  |  |\n| `params` | [Params](#cyber.bandwidth.v1beta1.Params) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.bandwidth.v1beta1.MsgUpdateParamsResponse\"></a>\n\n### MsgUpdateParamsResponse\n\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n\n<a name=\"cyber.bandwidth.v1beta1.Msg\"></a>\n\n### Msg\n\n\n| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |\n| ----------- | ------------ | ------------- | ------------| ------- | -------- |\n| `UpdateParams` | [MsgUpdateParams](#cyber.bandwidth.v1beta1.MsgUpdateParams) | [MsgUpdateParamsResponse](#cyber.bandwidth.v1beta1.MsgUpdateParamsResponse) |  | |\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/clock/v1/clock.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/clock/v1/clock.proto\n\n\n\n<a name=\"cyber.clock.v1.ClockContract\"></a>\n\n### ClockContract\nThis object is used to store the contract address and the\njail status of the contract.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `contract_address` | [string](#string) |  | The address of the contract. |\n| `is_jailed` | [bool](#bool) |  | The jail status of the contract. |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/clock/v1/genesis.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/clock/v1/genesis.proto\n\n\n\n<a name=\"cyber.clock.v1.GenesisState\"></a>\n\n### GenesisState\nGenesisState - initial state of module\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `params` | [Params](#cyber.clock.v1.Params) |  | Params of this module |\n\n\n\n\n\n\n<a name=\"cyber.clock.v1.Params\"></a>\n\n### Params\nParams defines the set of module parameters.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `contract_gas_limit` | [uint64](#uint64) |  | contract_gas_limit defines the maximum amount of gas that can be used by a contract. |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/clock/v1/query.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/clock/v1/query.proto\n\n\n\n<a name=\"cyber.clock.v1.QueryClockContract\"></a>\n\n### QueryClockContract\nQueryClockContract is the request type to get a single contract.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `contract_address` | [string](#string) |  | contract_address is the address of the contract to query. |\n\n\n\n\n\n\n<a name=\"cyber.clock.v1.QueryClockContractResponse\"></a>\n\n### QueryClockContractResponse\nQueryClockContractResponse is the response type for the Query/ClockContract\nRPC method.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `clock_contract` | [ClockContract](#cyber.clock.v1.ClockContract) |  | contract is the clock contract. |\n\n\n\n\n\n\n<a name=\"cyber.clock.v1.QueryClockContracts\"></a>\n\n### QueryClockContracts\nQueryClockContracts is the request type to get all contracts.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `pagination` | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) |  | pagination defines an optional pagination for the request. |\n\n\n\n\n\n\n<a name=\"cyber.clock.v1.QueryClockContractsResponse\"></a>\n\n### QueryClockContractsResponse\nQueryClockContractsResponse is the response type for the Query/ClockContracts\nRPC method.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `clock_contracts` | [ClockContract](#cyber.clock.v1.ClockContract) | repeated | clock_contracts are the clock contracts. |\n| `pagination` | [cosmos.base.query.v1beta1.PageResponse](#cosmos.base.query.v1beta1.PageResponse) |  | pagination defines the pagination in the response. |\n\n\n\n\n\n\n<a name=\"cyber.clock.v1.QueryParamsRequest\"></a>\n\n### QueryParamsRequest\nQueryParams is the request type to get all module params.\n\n\n\n\n\n\n<a name=\"cyber.clock.v1.QueryParamsResponse\"></a>\n\n### QueryParamsResponse\nQueryClockContractsResponse is the response type for the Query/ClockContracts\nRPC method.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `params` | [Params](#cyber.clock.v1.Params) |  |  |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n\n<a name=\"cyber.clock.v1.Query\"></a>\n\n### Query\nQuery defines the gRPC querier service.\n\n| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |\n| ----------- | ------------ | ------------- | ------------| ------- | -------- |\n| `ClockContracts` | [QueryClockContracts](#cyber.clock.v1.QueryClockContracts) | [QueryClockContractsResponse](#cyber.clock.v1.QueryClockContractsResponse) | ClockContracts | GET|/cyber/clock/v1/contracts|\n| `ClockContract` | [QueryClockContract](#cyber.clock.v1.QueryClockContract) | [QueryClockContractResponse](#cyber.clock.v1.QueryClockContractResponse) | ClockContract | GET|/cyber/clock/v1/contracts/{contract_address}|\n| `Params` | [QueryParamsRequest](#cyber.clock.v1.QueryParamsRequest) | [QueryParamsResponse](#cyber.clock.v1.QueryParamsResponse) | Params | GET|/cyber/clock/v1/params|\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/clock/v1/tx.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/clock/v1/tx.proto\n\n\n\n<a name=\"cyber.clock.v1.MsgRegisterClockContract\"></a>\n\n### MsgRegisterClockContract\nMsgRegisterClockContract is the Msg/RegisterClockContract request type.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `sender_address` | [string](#string) |  | The address of the sender. |\n| `contract_address` | [string](#string) |  | The address of the contract to register. |\n\n\n\n\n\n\n<a name=\"cyber.clock.v1.MsgRegisterClockContractResponse\"></a>\n\n### MsgRegisterClockContractResponse\nMsgRegisterClockContractResponse defines the response structure for executing\na MsgRegisterClockContract message.\n\n\n\n\n\n\n<a name=\"cyber.clock.v1.MsgUnjailClockContract\"></a>\n\n### MsgUnjailClockContract\nMsgUnjailClockContract is the Msg/UnjailClockContract request type.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `sender_address` | [string](#string) |  | The address of the sender. |\n| `contract_address` | [string](#string) |  | The address of the contract to unjail. |\n\n\n\n\n\n\n<a name=\"cyber.clock.v1.MsgUnjailClockContractResponse\"></a>\n\n### MsgUnjailClockContractResponse\nMsgUnjailClockContractResponse defines the response structure for executing a\nMsgUnjailClockContract message.\n\n\n\n\n\n\n<a name=\"cyber.clock.v1.MsgUnregisterClockContract\"></a>\n\n### MsgUnregisterClockContract\nMsgUnregisterClockContract is the Msg/UnregisterClockContract request type.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `sender_address` | [string](#string) |  | The address of the sender. |\n| `contract_address` | [string](#string) |  | The address of the contract to unregister. |\n\n\n\n\n\n\n<a name=\"cyber.clock.v1.MsgUnregisterClockContractResponse\"></a>\n\n### MsgUnregisterClockContractResponse\nMsgUnregisterClockContractResponse defines the response structure for\nexecuting a MsgUnregisterClockContract message.\n\n\n\n\n\n\n<a name=\"cyber.clock.v1.MsgUpdateParams\"></a>\n\n### MsgUpdateParams\nMsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `authority` | [string](#string) |  | authority is the address of the governance account. |\n| `params` | [Params](#cyber.clock.v1.Params) |  | params defines the x/clock parameters to update.\n\nNOTE: All parameters must be supplied. |\n\n\n\n\n\n\n<a name=\"cyber.clock.v1.MsgUpdateParamsResponse\"></a>\n\n### MsgUpdateParamsResponse\nMsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n\n<a name=\"cyber.clock.v1.Msg\"></a>\n\n### Msg\nMsg defines the Msg service.\n\n| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |\n| ----------- | ------------ | ------------- | ------------| ------- | -------- |\n| `RegisterClockContract` | [MsgRegisterClockContract](#cyber.clock.v1.MsgRegisterClockContract) | [MsgRegisterClockContractResponse](#cyber.clock.v1.MsgRegisterClockContractResponse) | RegisterClockContract defines the endpoint for registering a new clock contract. | POST|/cyber/clock/v1/tx/register|\n| `UnregisterClockContract` | [MsgUnregisterClockContract](#cyber.clock.v1.MsgUnregisterClockContract) | [MsgUnregisterClockContractResponse](#cyber.clock.v1.MsgUnregisterClockContractResponse) | UnregisterClockContract defines the endpoint for unregistering a clock contract. | POST|/cyber/clock/v1/tx/unregister|\n| `UnjailClockContract` | [MsgUnjailClockContract](#cyber.clock.v1.MsgUnjailClockContract) | [MsgUnjailClockContractResponse](#cyber.clock.v1.MsgUnjailClockContractResponse) | UnjailClockContract defines the endpoint for unjailing a clock contract. | POST|/cyber/clock/v1/tx/unjail|\n| `UpdateParams` | [MsgUpdateParams](#cyber.clock.v1.MsgUpdateParams) | [MsgUpdateParamsResponse](#cyber.clock.v1.MsgUpdateParamsResponse) | UpdateParams defines a governance operation for updating the x/clock module parameters. The authority is hard-coded to the x/gov module account.\n\nSince: cosmos-sdk 0.47 | |\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/dmn/v1beta1/types.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/dmn/v1beta1/types.proto\n\n\n\n<a name=\"cyber.dmn.v1beta1.Load\"></a>\n\n### Load\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `input` | [string](#string) |  |  |\n| `gas_price` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.Params\"></a>\n\n### Params\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `max_slots` | [uint32](#uint32) |  |  |\n| `max_gas` | [uint32](#uint32) |  |  |\n| `fee_ttl` | [uint32](#uint32) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.Thought\"></a>\n\n### Thought\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `program` | [string](#string) |  |  |\n| `trigger` | [Trigger](#cyber.dmn.v1beta1.Trigger) |  |  |\n| `load` | [Load](#cyber.dmn.v1beta1.Load) |  |  |\n| `name` | [string](#string) |  |  |\n| `particle` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.ThoughtStats\"></a>\n\n### ThoughtStats\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `program` | [string](#string) |  |  |\n| `name` | [string](#string) |  |  |\n| `calls` | [uint64](#uint64) |  |  |\n| `fees` | [uint64](#uint64) |  |  |\n| `gas` | [uint64](#uint64) |  |  |\n| `last_block` | [uint64](#uint64) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.Trigger\"></a>\n\n### Trigger\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `period` | [uint64](#uint64) |  |  |\n| `block` | [uint64](#uint64) |  |  |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/dmn/v1beta1/genesis.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/dmn/v1beta1/genesis.proto\n\n\n\n<a name=\"cyber.dmn.v1beta1.GenesisState\"></a>\n\n### GenesisState\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `params` | [Params](#cyber.dmn.v1beta1.Params) |  |  |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/dmn/v1beta1/query.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/dmn/v1beta1/query.proto\n\n\n\n<a name=\"cyber.dmn.v1beta1.QueryParamsRequest\"></a>\n\n### QueryParamsRequest\n\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.QueryParamsResponse\"></a>\n\n### QueryParamsResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `params` | [Params](#cyber.dmn.v1beta1.Params) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.QueryThoughtParamsRequest\"></a>\n\n### QueryThoughtParamsRequest\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `program` | [string](#string) |  |  |\n| `name` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.QueryThoughtResponse\"></a>\n\n### QueryThoughtResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `thought` | [Thought](#cyber.dmn.v1beta1.Thought) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.QueryThoughtStatsResponse\"></a>\n\n### QueryThoughtStatsResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `thought_stats` | [ThoughtStats](#cyber.dmn.v1beta1.ThoughtStats) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.QueryThoughtsFeesRequest\"></a>\n\n### QueryThoughtsFeesRequest\n\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.QueryThoughtsFeesResponse\"></a>\n\n### QueryThoughtsFeesResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `fees` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated |  |\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.QueryThoughtsRequest\"></a>\n\n### QueryThoughtsRequest\n\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.QueryThoughtsResponse\"></a>\n\n### QueryThoughtsResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `thoughts` | [Thought](#cyber.dmn.v1beta1.Thought) | repeated |  |\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.QueryThoughtsStatsRequest\"></a>\n\n### QueryThoughtsStatsRequest\n\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.QueryThoughtsStatsResponse\"></a>\n\n### QueryThoughtsStatsResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `thoughts_stats` | [ThoughtStats](#cyber.dmn.v1beta1.ThoughtStats) | repeated |  |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n\n<a name=\"cyber.dmn.v1beta1.Query\"></a>\n\n### Query\n\n\n| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |\n| ----------- | ------------ | ------------- | ------------| ------- | -------- |\n| `Params` | [QueryParamsRequest](#cyber.dmn.v1beta1.QueryParamsRequest) | [QueryParamsResponse](#cyber.dmn.v1beta1.QueryParamsResponse) |  | GET|/cyber/dmn/v1beta1/dmn/params|\n| `Thought` | [QueryThoughtParamsRequest](#cyber.dmn.v1beta1.QueryThoughtParamsRequest) | [QueryThoughtResponse](#cyber.dmn.v1beta1.QueryThoughtResponse) |  | GET|/cyber/dmn/v1beta1/dmn/thought|\n| `ThoughtStats` | [QueryThoughtParamsRequest](#cyber.dmn.v1beta1.QueryThoughtParamsRequest) | [QueryThoughtStatsResponse](#cyber.dmn.v1beta1.QueryThoughtStatsResponse) |  | GET|/cyber/dmn/v1beta1/dmn/thought_stats|\n| `Thoughts` | [QueryThoughtsRequest](#cyber.dmn.v1beta1.QueryThoughtsRequest) | [QueryThoughtsResponse](#cyber.dmn.v1beta1.QueryThoughtsResponse) |  | GET|/cyber/dmn/v1beta1/dmn/thoughts|\n| `ThoughtsStats` | [QueryThoughtsStatsRequest](#cyber.dmn.v1beta1.QueryThoughtsStatsRequest) | [QueryThoughtsStatsResponse](#cyber.dmn.v1beta1.QueryThoughtsStatsResponse) |  | GET|/cyber/dmn/v1beta1/dmn/thoughts_stats|\n| `ThoughtsFees` | [QueryThoughtsFeesRequest](#cyber.dmn.v1beta1.QueryThoughtsFeesRequest) | [QueryThoughtsFeesResponse](#cyber.dmn.v1beta1.QueryThoughtsFeesResponse) |  | GET|/cyber/dmn/v1beta1/dmn/thoughts_fees|\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/dmn/v1beta1/tx.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/dmn/v1beta1/tx.proto\n\n\n\n<a name=\"cyber.dmn.v1beta1.MsgChangeThoughtBlock\"></a>\n\n### MsgChangeThoughtBlock\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `program` | [string](#string) |  |  |\n| `name` | [string](#string) |  |  |\n| `block` | [uint64](#uint64) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.MsgChangeThoughtBlockResponse\"></a>\n\n### MsgChangeThoughtBlockResponse\n\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.MsgChangeThoughtGasPrice\"></a>\n\n### MsgChangeThoughtGasPrice\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `program` | [string](#string) |  |  |\n| `name` | [string](#string) |  |  |\n| `gas_price` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.MsgChangeThoughtGasPriceResponse\"></a>\n\n### MsgChangeThoughtGasPriceResponse\n\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.MsgChangeThoughtInput\"></a>\n\n### MsgChangeThoughtInput\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `program` | [string](#string) |  |  |\n| `name` | [string](#string) |  |  |\n| `input` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.MsgChangeThoughtInputResponse\"></a>\n\n### MsgChangeThoughtInputResponse\n\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.MsgChangeThoughtName\"></a>\n\n### MsgChangeThoughtName\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `program` | [string](#string) |  |  |\n| `name` | [string](#string) |  |  |\n| `new_name` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.MsgChangeThoughtNameResponse\"></a>\n\n### MsgChangeThoughtNameResponse\n\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.MsgChangeThoughtParticle\"></a>\n\n### MsgChangeThoughtParticle\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `program` | [string](#string) |  |  |\n| `name` | [string](#string) |  |  |\n| `particle` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.MsgChangeThoughtParticleResponse\"></a>\n\n### MsgChangeThoughtParticleResponse\n\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.MsgChangeThoughtPeriod\"></a>\n\n### MsgChangeThoughtPeriod\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `program` | [string](#string) |  |  |\n| `name` | [string](#string) |  |  |\n| `period` | [uint64](#uint64) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.MsgChangeThoughtPeriodResponse\"></a>\n\n### MsgChangeThoughtPeriodResponse\n\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.MsgCreateThought\"></a>\n\n### MsgCreateThought\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `program` | [string](#string) |  |  |\n| `trigger` | [Trigger](#cyber.dmn.v1beta1.Trigger) |  |  |\n| `load` | [Load](#cyber.dmn.v1beta1.Load) |  |  |\n| `name` | [string](#string) |  |  |\n| `particle` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.MsgCreateThoughtResponse\"></a>\n\n### MsgCreateThoughtResponse\n\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.MsgForgetThought\"></a>\n\n### MsgForgetThought\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `program` | [string](#string) |  |  |\n| `name` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.MsgForgetThoughtResponse\"></a>\n\n### MsgForgetThoughtResponse\n\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.MsgUpdateParams\"></a>\n\n### MsgUpdateParams\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `authority` | [string](#string) |  |  |\n| `params` | [Params](#cyber.dmn.v1beta1.Params) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.dmn.v1beta1.MsgUpdateParamsResponse\"></a>\n\n### MsgUpdateParamsResponse\n\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n\n<a name=\"cyber.dmn.v1beta1.Msg\"></a>\n\n### Msg\n\n\n| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |\n| ----------- | ------------ | ------------- | ------------| ------- | -------- |\n| `CreateThought` | [MsgCreateThought](#cyber.dmn.v1beta1.MsgCreateThought) | [MsgCreateThoughtResponse](#cyber.dmn.v1beta1.MsgCreateThoughtResponse) |  | |\n| `ForgetThought` | [MsgForgetThought](#cyber.dmn.v1beta1.MsgForgetThought) | [MsgForgetThoughtResponse](#cyber.dmn.v1beta1.MsgForgetThoughtResponse) |  | |\n| `ChangeThoughtParticle` | [MsgChangeThoughtParticle](#cyber.dmn.v1beta1.MsgChangeThoughtParticle) | [MsgChangeThoughtParticleResponse](#cyber.dmn.v1beta1.MsgChangeThoughtParticleResponse) |  | |\n| `ChangeThoughtName` | [MsgChangeThoughtName](#cyber.dmn.v1beta1.MsgChangeThoughtName) | [MsgChangeThoughtNameResponse](#cyber.dmn.v1beta1.MsgChangeThoughtNameResponse) |  | |\n| `ChangeThoughtInput` | [MsgChangeThoughtInput](#cyber.dmn.v1beta1.MsgChangeThoughtInput) | [MsgChangeThoughtInputResponse](#cyber.dmn.v1beta1.MsgChangeThoughtInputResponse) |  | |\n| `ChangeThoughtGasPrice` | [MsgChangeThoughtGasPrice](#cyber.dmn.v1beta1.MsgChangeThoughtGasPrice) | [MsgChangeThoughtGasPriceResponse](#cyber.dmn.v1beta1.MsgChangeThoughtGasPriceResponse) |  | |\n| `ChangeThoughtPeriod` | [MsgChangeThoughtPeriod](#cyber.dmn.v1beta1.MsgChangeThoughtPeriod) | [MsgChangeThoughtPeriodResponse](#cyber.dmn.v1beta1.MsgChangeThoughtPeriodResponse) |  | |\n| `ChangeThoughtBlock` | [MsgChangeThoughtBlock](#cyber.dmn.v1beta1.MsgChangeThoughtBlock) | [MsgChangeThoughtBlockResponse](#cyber.dmn.v1beta1.MsgChangeThoughtBlockResponse) |  | |\n| `UpdateParams` | [MsgUpdateParams](#cyber.dmn.v1beta1.MsgUpdateParams) | [MsgUpdateParamsResponse](#cyber.dmn.v1beta1.MsgUpdateParamsResponse) |  | |\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/graph/v1beta1/query.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/graph/v1beta1/query.proto\n\n\n\n<a name=\"cyber.graph.v1beta1.QueryBurnStatsRequest\"></a>\n\n### QueryBurnStatsRequest\n\n\n\n\n\n\n\n<a name=\"cyber.graph.v1beta1.QueryBurnStatsResponse\"></a>\n\n### QueryBurnStatsResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `millivolt` | [uint64](#uint64) |  |  |\n| `milliampere` | [uint64](#uint64) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.graph.v1beta1.QueryGraphStatsRequest\"></a>\n\n### QueryGraphStatsRequest\n\n\n\n\n\n\n\n<a name=\"cyber.graph.v1beta1.QueryGraphStatsResponse\"></a>\n\n### QueryGraphStatsResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `cyberlinks` | [uint64](#uint64) |  |  |\n| `particles` | [uint64](#uint64) |  |  |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n\n<a name=\"cyber.graph.v1beta1.Query\"></a>\n\n### Query\n\n\n| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |\n| ----------- | ------------ | ------------- | ------------| ------- | -------- |\n| `GraphStats` | [QueryGraphStatsRequest](#cyber.graph.v1beta1.QueryGraphStatsRequest) | [QueryGraphStatsResponse](#cyber.graph.v1beta1.QueryGraphStatsResponse) |  | GET|/cyber/graph/v1beta1/graph_stats|\n| `BurnStats` | [QueryBurnStatsRequest](#cyber.graph.v1beta1.QueryBurnStatsRequest) | [QueryBurnStatsResponse](#cyber.graph.v1beta1.QueryBurnStatsResponse) |  | GET|/cyber/graph/v1beta1/burn_stats|\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/graph/v1beta1/types.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/graph/v1beta1/types.proto\n\n\n\n<a name=\"cyber.graph.v1beta1.Link\"></a>\n\n### Link\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `from` | [string](#string) |  |  |\n| `to` | [string](#string) |  |  |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/graph/v1beta1/tx.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/graph/v1beta1/tx.proto\n\n\n\n<a name=\"cyber.graph.v1beta1.MsgCyberlink\"></a>\n\n### MsgCyberlink\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `neuron` | [string](#string) |  |  |\n| `links` | [Link](#cyber.graph.v1beta1.Link) | repeated |  |\n\n\n\n\n\n\n<a name=\"cyber.graph.v1beta1.MsgCyberlinkResponse\"></a>\n\n### MsgCyberlinkResponse\n\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n\n<a name=\"cyber.graph.v1beta1.Msg\"></a>\n\n### Msg\n\n\n| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |\n| ----------- | ------------ | ------------- | ------------| ------- | -------- |\n| `Cyberlink` | [MsgCyberlink](#cyber.graph.v1beta1.MsgCyberlink) | [MsgCyberlinkResponse](#cyber.graph.v1beta1.MsgCyberlinkResponse) |  | |\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/grid/v1beta1/types.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/grid/v1beta1/types.proto\n\n\n\n<a name=\"cyber.grid.v1beta1.Params\"></a>\n\n### Params\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `max_routes` | [uint32](#uint32) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.grid.v1beta1.Route\"></a>\n\n### Route\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `source` | [string](#string) |  |  |\n| `destination` | [string](#string) |  |  |\n| `name` | [string](#string) |  |  |\n| `value` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated |  |\n\n\n\n\n\n\n<a name=\"cyber.grid.v1beta1.Value\"></a>\n\n### Value\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `value` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated |  |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/grid/v1beta1/genesis.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/grid/v1beta1/genesis.proto\n\n\n\n<a name=\"cyber.grid.v1beta1.GenesisState\"></a>\n\n### GenesisState\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `params` | [Params](#cyber.grid.v1beta1.Params) |  |  |\n| `routes` | [Route](#cyber.grid.v1beta1.Route) | repeated |  |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/grid/v1beta1/query.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/grid/v1beta1/query.proto\n\n\n\n<a name=\"cyber.grid.v1beta1.QueryDestinationRequest\"></a>\n\n### QueryDestinationRequest\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `destination` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.grid.v1beta1.QueryParamsRequest\"></a>\n\n### QueryParamsRequest\n\n\n\n\n\n\n\n<a name=\"cyber.grid.v1beta1.QueryParamsResponse\"></a>\n\n### QueryParamsResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `params` | [Params](#cyber.grid.v1beta1.Params) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.grid.v1beta1.QueryRouteRequest\"></a>\n\n### QueryRouteRequest\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `source` | [string](#string) |  |  |\n| `destination` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.grid.v1beta1.QueryRouteResponse\"></a>\n\n### QueryRouteResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `route` | [Route](#cyber.grid.v1beta1.Route) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.grid.v1beta1.QueryRoutedEnergyResponse\"></a>\n\n### QueryRoutedEnergyResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `value` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated |  |\n\n\n\n\n\n\n<a name=\"cyber.grid.v1beta1.QueryRoutesRequest\"></a>\n\n### QueryRoutesRequest\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `pagination` | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.grid.v1beta1.QueryRoutesResponse\"></a>\n\n### QueryRoutesResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `routes` | [Route](#cyber.grid.v1beta1.Route) | repeated |  |\n| `pagination` | [cosmos.base.query.v1beta1.PageResponse](#cosmos.base.query.v1beta1.PageResponse) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.grid.v1beta1.QuerySourceRequest\"></a>\n\n### QuerySourceRequest\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `source` | [string](#string) |  |  |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n\n<a name=\"cyber.grid.v1beta1.Query\"></a>\n\n### Query\n\n\n| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |\n| ----------- | ------------ | ------------- | ------------| ------- | -------- |\n| `Params` | [QueryParamsRequest](#cyber.grid.v1beta1.QueryParamsRequest) | [QueryParamsResponse](#cyber.grid.v1beta1.QueryParamsResponse) |  | GET|/cyber/grid/v1beta1/grid/params|\n| `SourceRoutes` | [QuerySourceRequest](#cyber.grid.v1beta1.QuerySourceRequest) | [QueryRoutesResponse](#cyber.grid.v1beta1.QueryRoutesResponse) |  | GET|/cyber/grid/v1beta1/grid/source_routes|\n| `DestinationRoutes` | [QueryDestinationRequest](#cyber.grid.v1beta1.QueryDestinationRequest) | [QueryRoutesResponse](#cyber.grid.v1beta1.QueryRoutesResponse) |  | GET|/cyber/grid/v1beta1/grid/destination_routes|\n| `DestinationRoutedEnergy` | [QueryDestinationRequest](#cyber.grid.v1beta1.QueryDestinationRequest) | [QueryRoutedEnergyResponse](#cyber.grid.v1beta1.QueryRoutedEnergyResponse) |  | GET|/cyber/grid/v1beta1/grid/destination_routed_energy|\n| `SourceRoutedEnergy` | [QuerySourceRequest](#cyber.grid.v1beta1.QuerySourceRequest) | [QueryRoutedEnergyResponse](#cyber.grid.v1beta1.QueryRoutedEnergyResponse) |  | GET|/cyber/grid/v1beta1/grid/source_routed_energy|\n| `Route` | [QueryRouteRequest](#cyber.grid.v1beta1.QueryRouteRequest) | [QueryRouteResponse](#cyber.grid.v1beta1.QueryRouteResponse) |  | GET|/cyber/grid/v1beta1/grid/route|\n| `Routes` | [QueryRoutesRequest](#cyber.grid.v1beta1.QueryRoutesRequest) | [QueryRoutesResponse](#cyber.grid.v1beta1.QueryRoutesResponse) |  | GET|/cyber/grid/v1beta1/grid/routes|\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/grid/v1beta1/tx.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/grid/v1beta1/tx.proto\n\n\n\n<a name=\"cyber.grid.v1beta1.MsgCreateRoute\"></a>\n\n### MsgCreateRoute\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `source` | [string](#string) |  |  |\n| `destination` | [string](#string) |  |  |\n| `name` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.grid.v1beta1.MsgCreateRouteResponse\"></a>\n\n### MsgCreateRouteResponse\n\n\n\n\n\n\n\n<a name=\"cyber.grid.v1beta1.MsgDeleteRoute\"></a>\n\n### MsgDeleteRoute\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `source` | [string](#string) |  |  |\n| `destination` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.grid.v1beta1.MsgDeleteRouteResponse\"></a>\n\n### MsgDeleteRouteResponse\n\n\n\n\n\n\n\n<a name=\"cyber.grid.v1beta1.MsgEditRoute\"></a>\n\n### MsgEditRoute\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `source` | [string](#string) |  |  |\n| `destination` | [string](#string) |  |  |\n| `value` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.grid.v1beta1.MsgEditRouteName\"></a>\n\n### MsgEditRouteName\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `source` | [string](#string) |  |  |\n| `destination` | [string](#string) |  |  |\n| `name` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.grid.v1beta1.MsgEditRouteNameResponse\"></a>\n\n### MsgEditRouteNameResponse\n\n\n\n\n\n\n\n<a name=\"cyber.grid.v1beta1.MsgEditRouteResponse\"></a>\n\n### MsgEditRouteResponse\n\n\n\n\n\n\n\n<a name=\"cyber.grid.v1beta1.MsgUpdateParams\"></a>\n\n### MsgUpdateParams\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `authority` | [string](#string) |  |  |\n| `params` | [Params](#cyber.grid.v1beta1.Params) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.grid.v1beta1.MsgUpdateParamsResponse\"></a>\n\n### MsgUpdateParamsResponse\n\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n\n<a name=\"cyber.grid.v1beta1.Msg\"></a>\n\n### Msg\n\n\n| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |\n| ----------- | ------------ | ------------- | ------------| ------- | -------- |\n| `CreateRoute` | [MsgCreateRoute](#cyber.grid.v1beta1.MsgCreateRoute) | [MsgCreateRouteResponse](#cyber.grid.v1beta1.MsgCreateRouteResponse) |  | |\n| `EditRoute` | [MsgEditRoute](#cyber.grid.v1beta1.MsgEditRoute) | [MsgEditRouteResponse](#cyber.grid.v1beta1.MsgEditRouteResponse) |  | |\n| `DeleteRoute` | [MsgDeleteRoute](#cyber.grid.v1beta1.MsgDeleteRoute) | [MsgDeleteRouteResponse](#cyber.grid.v1beta1.MsgDeleteRouteResponse) |  | |\n| `EditRouteName` | [MsgEditRouteName](#cyber.grid.v1beta1.MsgEditRouteName) | [MsgEditRouteNameResponse](#cyber.grid.v1beta1.MsgEditRouteNameResponse) |  | |\n| `UpdateParams` | [MsgUpdateParams](#cyber.grid.v1beta1.MsgUpdateParams) | [MsgUpdateParamsResponse](#cyber.grid.v1beta1.MsgUpdateParamsResponse) |  | |\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/liquidity/v1beta1/tx.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/liquidity/v1beta1/tx.proto\n\n\n\n<a name=\"cyber.liquidity.v1beta1.MsgCreatePool\"></a>\n\n### MsgCreatePool\nMsgCreatePool defines an sdk.Msg type that supports submitting a create\nliquidity pool tx.\n\nSee:\nhttps://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `pool_creator_address` | [string](#string) |  |  |\n| `pool_type_id` | [uint32](#uint32) |  | id of the target pool type, must match the value in the pool. Only pool-type-id 1 is supported. |\n| `deposit_coins` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated | reserve coin pair of the pool to deposit. |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.MsgCreatePoolResponse\"></a>\n\n### MsgCreatePoolResponse\nMsgCreatePoolResponse defines the Msg/CreatePool response type.\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.MsgDepositWithinBatch\"></a>\n\n### MsgDepositWithinBatch\n`MsgDepositWithinBatch defines` an `sdk.Msg` type that supports submitting\na deposit request to the batch of the liquidity pool.\nDeposit is submitted to the batch of the Liquidity pool with the specified\n`pool_id`, `deposit_coins` for reserve.\nThis request is stacked in the batch of the liquidity pool, is not processed\nimmediately, and is processed in the `endblock` at the same time as other\nrequests.\n\nSee:\nhttps://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `depositor_address` | [string](#string) |  |  |\n| `pool_id` | [uint64](#uint64) |  | id of the target pool |\n| `deposit_coins` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated | reserve coin pair of the pool to deposit |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.MsgDepositWithinBatchResponse\"></a>\n\n### MsgDepositWithinBatchResponse\nMsgDepositWithinBatchResponse defines the Msg/DepositWithinBatch response\ntype.\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.MsgSwapWithinBatch\"></a>\n\n### MsgSwapWithinBatch\n`MsgSwapWithinBatch` defines an sdk.Msg type that supports submitting a swap\noffer request to the batch of the liquidity pool. Submit swap offer to the\nliquidity pool batch with the specified the `pool_id`, `swap_type_id`,\n`demand_coin_denom` with the coin and the price you're offering\nand `offer_coin_fee` must be half of offer coin amount * current\n`params.swap_fee_rate` and ceil for reservation to pay fees. This request is\nstacked in the batch of the liquidity pool, is not processed immediately, and\nis processed in the `endblock` at the same time as other requests. You must\nrequest the same fields as the pool. Only the default `swap_type_id` 1 is\nsupported.\n\nSee: https://github.com/gravity-devs/liquidity/tree/develop/doc\nhttps://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `swap_requester_address` | [string](#string) |  | address of swap requester |\n| `pool_id` | [uint64](#uint64) |  | id of swap type, must match the value in the pool. Only `swap_type_id` 1 is supported. |\n| `swap_type_id` | [uint32](#uint32) |  | id of swap type. Must match the value in the pool. |\n| `offer_coin` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) |  | offer sdk.coin for the swap request, must match the denom in the pool. |\n| `demand_coin_denom` | [string](#string) |  | denom of demand coin to be exchanged on the swap request, must match the denom in the pool. |\n| `offer_coin_fee` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) |  | half of offer coin amount * params.swap_fee_rate and ceil for reservation to pay fees. |\n| `order_price` | [string](#string) |  | limit order price for the order, the price is the exchange ratio of X/Y where X is the amount of the first coin and Y is the amount of the second coin when their denoms are sorted alphabetically. |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.MsgSwapWithinBatchResponse\"></a>\n\n### MsgSwapWithinBatchResponse\nMsgSwapWithinBatchResponse defines the Msg/Swap response type.\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.MsgWithdrawWithinBatch\"></a>\n\n### MsgWithdrawWithinBatch\n`MsgWithdrawWithinBatch` defines an `sdk.Msg` type that supports submitting\na withdraw request to the batch of the liquidity pool.\nWithdraw is submitted to the batch from the Liquidity pool with the\nspecified `pool_id`, `pool_coin` of the pool.\nThis request is stacked in the batch of the liquidity pool, is not processed\nimmediately, and is processed in the `endblock` at the same time as other\nrequests.\n\nSee:\nhttps://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `withdrawer_address` | [string](#string) |  |  |\n| `pool_id` | [uint64](#uint64) |  | id of the target pool |\n| `pool_coin` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.MsgWithdrawWithinBatchResponse\"></a>\n\n### MsgWithdrawWithinBatchResponse\nMsgWithdrawWithinBatchResponse defines the Msg/WithdrawWithinBatch response\ntype.\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n\n<a name=\"cyber.liquidity.v1beta1.Msg\"></a>\n\n### Msg\nMsg defines the liquidity Msg service.\n\n| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |\n| ----------- | ------------ | ------------- | ------------| ------- | -------- |\n| `CreatePool` | [MsgCreatePool](#cyber.liquidity.v1beta1.MsgCreatePool) | [MsgCreatePoolResponse](#cyber.liquidity.v1beta1.MsgCreatePoolResponse) | Submit a create liquidity pool message. | |\n| `DepositWithinBatch` | [MsgDepositWithinBatch](#cyber.liquidity.v1beta1.MsgDepositWithinBatch) | [MsgDepositWithinBatchResponse](#cyber.liquidity.v1beta1.MsgDepositWithinBatchResponse) | Submit a deposit to the liquidity pool batch. | |\n| `WithdrawWithinBatch` | [MsgWithdrawWithinBatch](#cyber.liquidity.v1beta1.MsgWithdrawWithinBatch) | [MsgWithdrawWithinBatchResponse](#cyber.liquidity.v1beta1.MsgWithdrawWithinBatchResponse) | Submit a withdraw from the liquidity pool batch. | |\n| `Swap` | [MsgSwapWithinBatch](#cyber.liquidity.v1beta1.MsgSwapWithinBatch) | [MsgSwapWithinBatchResponse](#cyber.liquidity.v1beta1.MsgSwapWithinBatchResponse) | Submit a swap to the liquidity pool batch. | |\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/liquidity/v1beta1/liquidity.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/liquidity/v1beta1/liquidity.proto\n\n\n\n<a name=\"cyber.liquidity.v1beta1.DepositMsgState\"></a>\n\n### DepositMsgState\nDepositMsgState defines the state of deposit message that contains state\ninformation as it is processed in the next batch or batches.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `msg_height` | [int64](#int64) |  | height where this message is appended to the batch |\n| `msg_index` | [uint64](#uint64) |  | index of this deposit message in this liquidity pool |\n| `executed` | [bool](#bool) |  | true if executed on this batch, false if not executed |\n| `succeeded` | [bool](#bool) |  | true if executed successfully on this batch, false if failed |\n| `to_be_deleted` | [bool](#bool) |  | true if ready to be deleted on kvstore, false if not ready to be deleted |\n| `msg` | [MsgDepositWithinBatch](#cyber.liquidity.v1beta1.MsgDepositWithinBatch) |  | MsgDepositWithinBatch |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.Params\"></a>\n\n### Params\nParams defines the parameters for the liquidity module.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `pool_types` | [PoolType](#cyber.liquidity.v1beta1.PoolType) | repeated | list of available pool types |\n| `min_init_deposit_amount` | [string](#string) |  | Minimum number of coins to be deposited to the liquidity pool on pool creation. |\n| `init_pool_coin_mint_amount` | [string](#string) |  | Initial mint amount of pool coins upon pool creation. |\n| `max_reserve_coin_amount` | [string](#string) |  | Limit the size of each liquidity pool to minimize risk. In development, set to 0 for no limit. In production, set a limit. |\n| `pool_creation_fee` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated | Fee paid to create a Liquidity Pool. Set a fee to prevent spamming. |\n| `swap_fee_rate` | [string](#string) |  | Swap fee rate for every executed swap. |\n| `withdraw_fee_rate` | [string](#string) |  | Reserve coin withdrawal with less proportion by withdrawFeeRate. |\n| `max_order_amount_ratio` | [string](#string) |  | Maximum ratio of reserve coins that can be ordered at a swap order. |\n| `unit_batch_height` | [uint32](#uint32) |  | The smallest unit batch height for every liquidity pool. |\n| `circuit_breaker_enabled` | [bool](#bool) |  | Circuit breaker enables or disables transaction messages in liquidity module. |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.Pool\"></a>\n\n### Pool\nPool defines the liquidity pool that contains pool information.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `id` | [uint64](#uint64) |  | id of the pool |\n| `type_id` | [uint32](#uint32) |  | id of the pool_type |\n| `reserve_coin_denoms` | [string](#string) | repeated | denoms of reserve coin pair of the pool |\n| `reserve_account_address` | [string](#string) |  | reserve account address of the pool |\n| `pool_coin_denom` | [string](#string) |  | denom of pool coin of the pool |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.PoolBatch\"></a>\n\n### PoolBatch\nPoolBatch defines the batch or batches of a given liquidity pool that\ncontains indexes of deposit, withdraw, and swap messages. Index param\nincrements by 1 if the pool id is same.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `pool_id` | [uint64](#uint64) |  | id of the pool |\n| `index` | [uint64](#uint64) |  | index of this batch |\n| `begin_height` | [int64](#int64) |  | height where this batch is started |\n| `deposit_msg_index` | [uint64](#uint64) |  | last index of DepositMsgStates |\n| `withdraw_msg_index` | [uint64](#uint64) |  | last index of WithdrawMsgStates |\n| `swap_msg_index` | [uint64](#uint64) |  | last index of SwapMsgStates |\n| `executed` | [bool](#bool) |  | true if executed, false if not executed |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.PoolMetadata\"></a>\n\n### PoolMetadata\nMetadata for the state of each pool for invariant checking after genesis\nexport or import.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `pool_id` | [uint64](#uint64) |  | id of the pool |\n| `pool_coin_total_supply` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) |  | pool coin issued at the pool |\n| `reserve_coins` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated | reserve coins deposited in the pool |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.PoolType\"></a>\n\n### PoolType\nStructure for the pool type to distinguish the characteristics of the reserve\npools.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `id` | [uint32](#uint32) |  | This is the id of the pool_type that is used as pool_type_id for pool creation. In this version, only pool-type-id 1 is supported. {\"id\":1,\"name\":\"ConstantProductLiquidityPool\",\"min_reserve_coin_num\":2,\"max_reserve_coin_num\":2,\"description\":\"\"} |\n| `name` | [string](#string) |  | name of the pool type. |\n| `min_reserve_coin_num` | [uint32](#uint32) |  | minimum number of reserveCoins for LiquidityPoolType, only 2 reserve coins are supported. |\n| `max_reserve_coin_num` | [uint32](#uint32) |  | maximum number of reserveCoins for LiquidityPoolType, only 2 reserve coins are supported. |\n| `description` | [string](#string) |  | description of the pool type. |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.SwapMsgState\"></a>\n\n### SwapMsgState\nSwapMsgState defines the state of the swap message that contains state\ninformation as the message is processed in the next batch or batches.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `msg_height` | [int64](#int64) |  | height where this message is appended to the batch |\n| `msg_index` | [uint64](#uint64) |  | index of this swap message in this liquidity pool |\n| `executed` | [bool](#bool) |  | true if executed on this batch, false if not executed |\n| `succeeded` | [bool](#bool) |  | true if executed successfully on this batch, false if failed |\n| `to_be_deleted` | [bool](#bool) |  | true if ready to be deleted on kvstore, false if not ready to be deleted |\n| `order_expiry_height` | [int64](#int64) |  | swap orders are cancelled when current height is equal to or higher than ExpiryHeight |\n| `exchanged_offer_coin` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) |  | offer coin exchanged until now |\n| `remaining_offer_coin` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) |  | offer coin currently remaining to be exchanged |\n| `reserved_offer_coin_fee` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) |  | reserve fee for pays fee in half offer coin |\n| `msg` | [MsgSwapWithinBatch](#cyber.liquidity.v1beta1.MsgSwapWithinBatch) |  | MsgSwapWithinBatch |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.WithdrawMsgState\"></a>\n\n### WithdrawMsgState\nWithdrawMsgState defines the state of the withdraw message that contains\nstate information as the message is processed in the next batch or batches.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `msg_height` | [int64](#int64) |  | height where this message is appended to the batch |\n| `msg_index` | [uint64](#uint64) |  | index of this withdraw message in this liquidity pool |\n| `executed` | [bool](#bool) |  | true if executed on this batch, false if not executed |\n| `succeeded` | [bool](#bool) |  | true if executed successfully on this batch, false if failed |\n| `to_be_deleted` | [bool](#bool) |  | true if ready to be deleted on kvstore, false if not ready to be deleted |\n| `msg` | [MsgWithdrawWithinBatch](#cyber.liquidity.v1beta1.MsgWithdrawWithinBatch) |  | MsgWithdrawWithinBatch |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/liquidity/v1beta1/genesis.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/liquidity/v1beta1/genesis.proto\n\n\n\n<a name=\"cyber.liquidity.v1beta1.GenesisState\"></a>\n\n### GenesisState\nGenesisState defines the liquidity module's genesis state.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `params` | [Params](#cyber.liquidity.v1beta1.Params) |  | params defines all the parameters for the liquidity module. |\n| `pool_records` | [PoolRecord](#cyber.liquidity.v1beta1.PoolRecord) | repeated |  |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.PoolRecord\"></a>\n\n### PoolRecord\nrecords the state of each pool after genesis export or import, used to check\nvariables\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `pool` | [Pool](#cyber.liquidity.v1beta1.Pool) |  |  |\n| `pool_metadata` | [PoolMetadata](#cyber.liquidity.v1beta1.PoolMetadata) |  |  |\n| `pool_batch` | [PoolBatch](#cyber.liquidity.v1beta1.PoolBatch) |  |  |\n| `deposit_msg_states` | [DepositMsgState](#cyber.liquidity.v1beta1.DepositMsgState) | repeated |  |\n| `withdraw_msg_states` | [WithdrawMsgState](#cyber.liquidity.v1beta1.WithdrawMsgState) | repeated |  |\n| `swap_msg_states` | [SwapMsgState](#cyber.liquidity.v1beta1.SwapMsgState) | repeated |  |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/liquidity/v1beta1/query.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/liquidity/v1beta1/query.proto\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryLiquidityPoolBatchRequest\"></a>\n\n### QueryLiquidityPoolBatchRequest\nthe request type for the QueryLiquidityPoolBatch RPC method. requestable\nincluding specified pool_id.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `pool_id` | [uint64](#uint64) |  | id of the target pool for query |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryLiquidityPoolBatchResponse\"></a>\n\n### QueryLiquidityPoolBatchResponse\nthe response type for the QueryLiquidityPoolBatchResponse RPC method. Returns\nthe liquidity pool batch that corresponds to the requested pool_id.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `batch` | [PoolBatch](#cyber.liquidity.v1beta1.PoolBatch) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryLiquidityPoolByPoolCoinDenomRequest\"></a>\n\n### QueryLiquidityPoolByPoolCoinDenomRequest\nthe request type for the QueryLiquidityByPoolCoinDenomPool RPC method.\nRequestable specified pool_coin_denom.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `pool_coin_denom` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryLiquidityPoolByReserveAccRequest\"></a>\n\n### QueryLiquidityPoolByReserveAccRequest\nthe request type for the QueryLiquidityByReserveAcc RPC method. Requestable\nspecified reserve_acc.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `reserve_acc` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryLiquidityPoolRequest\"></a>\n\n### QueryLiquidityPoolRequest\nthe request type for the QueryLiquidityPool RPC method. requestable specified\npool_id.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `pool_id` | [uint64](#uint64) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryLiquidityPoolResponse\"></a>\n\n### QueryLiquidityPoolResponse\nthe response type for the QueryLiquidityPoolResponse RPC method. Returns the\nliquidity pool that corresponds to the requested pool_id.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `pool` | [Pool](#cyber.liquidity.v1beta1.Pool) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryLiquidityPoolsRequest\"></a>\n\n### QueryLiquidityPoolsRequest\nthe request type for the QueryLiquidityPools RPC method. Requestable\nincluding pagination offset, limit, key.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `pagination` | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) |  | pagination defines an optional pagination for the request. |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryLiquidityPoolsResponse\"></a>\n\n### QueryLiquidityPoolsResponse\nthe response type for the QueryLiquidityPoolsResponse RPC method. This\nincludes a list of all existing liquidity pools and paging results that\ncontain next_key and total count.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `pools` | [Pool](#cyber.liquidity.v1beta1.Pool) | repeated |  |\n| `pagination` | [cosmos.base.query.v1beta1.PageResponse](#cosmos.base.query.v1beta1.PageResponse) |  | pagination defines the pagination in the response. not working on this version. |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryParamsRequest\"></a>\n\n### QueryParamsRequest\nQueryParamsRequest is request type for the QueryParams RPC method.\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryParamsResponse\"></a>\n\n### QueryParamsResponse\nthe response type for the QueryParamsResponse RPC method. This includes\ncurrent parameter of the liquidity module.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `params` | [Params](#cyber.liquidity.v1beta1.Params) |  | params holds all the parameters of this module. |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryPoolBatchDepositMsgRequest\"></a>\n\n### QueryPoolBatchDepositMsgRequest\nthe request type for the QueryPoolBatchDeposit RPC method. requestable\nincluding specified pool_id and msg_index.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `pool_id` | [uint64](#uint64) |  | id of the target pool for query |\n| `msg_index` | [uint64](#uint64) |  | target msg_index of the pool |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryPoolBatchDepositMsgResponse\"></a>\n\n### QueryPoolBatchDepositMsgResponse\nthe response type for the QueryPoolBatchDepositMsg RPC method. This includes\na batch swap message of the batch.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `deposit` | [DepositMsgState](#cyber.liquidity.v1beta1.DepositMsgState) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryPoolBatchDepositMsgsRequest\"></a>\n\n### QueryPoolBatchDepositMsgsRequest\nthe request type for the QueryPoolBatchDeposit RPC method. Requestable\nincluding specified pool_id and pagination offset, limit, key.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `pool_id` | [uint64](#uint64) |  | id of the target pool for query |\n| `pagination` | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) |  | pagination defines an optional pagination for the request. |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryPoolBatchDepositMsgsResponse\"></a>\n\n### QueryPoolBatchDepositMsgsResponse\nthe response type for the QueryPoolBatchDeposit RPC method. This includes a\nlist of all currently existing deposit messages of the batch and paging\nresults that contain next_key and total count.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `deposits` | [DepositMsgState](#cyber.liquidity.v1beta1.DepositMsgState) | repeated |  |\n| `pagination` | [cosmos.base.query.v1beta1.PageResponse](#cosmos.base.query.v1beta1.PageResponse) |  | pagination defines the pagination in the response. not working on this version. |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryPoolBatchSwapMsgRequest\"></a>\n\n### QueryPoolBatchSwapMsgRequest\nthe request type for the QueryPoolBatchSwap RPC method. Requestable including\nspecified pool_id and msg_index.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `pool_id` | [uint64](#uint64) |  | id of the target pool for query |\n| `msg_index` | [uint64](#uint64) |  | target msg_index of the pool |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryPoolBatchSwapMsgResponse\"></a>\n\n### QueryPoolBatchSwapMsgResponse\nthe response type for the QueryPoolBatchSwapMsg RPC method. This includes a\nbatch swap message of the batch.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `swap` | [SwapMsgState](#cyber.liquidity.v1beta1.SwapMsgState) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryPoolBatchSwapMsgsRequest\"></a>\n\n### QueryPoolBatchSwapMsgsRequest\nthe request type for the QueryPoolBatchSwapMsgs RPC method. Requestable\nincluding specified pool_id and pagination offset, limit, key.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `pool_id` | [uint64](#uint64) |  | id of the target pool for query |\n| `pagination` | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) |  | pagination defines an optional pagination for the request. |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryPoolBatchSwapMsgsResponse\"></a>\n\n### QueryPoolBatchSwapMsgsResponse\nthe response type for the QueryPoolBatchSwapMsgs RPC method. This includes\nlist of all currently existing swap messages of the batch and paging results\nthat contain next_key and total count.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `swaps` | [SwapMsgState](#cyber.liquidity.v1beta1.SwapMsgState) | repeated |  |\n| `pagination` | [cosmos.base.query.v1beta1.PageResponse](#cosmos.base.query.v1beta1.PageResponse) |  | pagination defines the pagination in the response. not working on this version. |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryPoolBatchWithdrawMsgRequest\"></a>\n\n### QueryPoolBatchWithdrawMsgRequest\nthe request type for the QueryPoolBatchWithdraw RPC method. requestable\nincluding specified pool_id and msg_index.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `pool_id` | [uint64](#uint64) |  | id of the target pool for query |\n| `msg_index` | [uint64](#uint64) |  | target msg_index of the pool |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryPoolBatchWithdrawMsgResponse\"></a>\n\n### QueryPoolBatchWithdrawMsgResponse\nthe response type for the QueryPoolBatchWithdrawMsg RPC method. This includes\na batch swap message of the batch.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `withdraw` | [WithdrawMsgState](#cyber.liquidity.v1beta1.WithdrawMsgState) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryPoolBatchWithdrawMsgsRequest\"></a>\n\n### QueryPoolBatchWithdrawMsgsRequest\nthe request type for the QueryPoolBatchWithdraw RPC method. Requestable\nincluding specified pool_id and pagination offset, limit, key.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `pool_id` | [uint64](#uint64) |  | id of the target pool for query |\n| `pagination` | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) |  | pagination defines an optional pagination for the request. |\n\n\n\n\n\n\n<a name=\"cyber.liquidity.v1beta1.QueryPoolBatchWithdrawMsgsResponse\"></a>\n\n### QueryPoolBatchWithdrawMsgsResponse\nthe response type for the QueryPoolBatchWithdraw RPC method. This includes a\nlist of all currently existing withdraw messages of the batch and paging\nresults that contain next_key and total count.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `withdraws` | [WithdrawMsgState](#cyber.liquidity.v1beta1.WithdrawMsgState) | repeated |  |\n| `pagination` | [cosmos.base.query.v1beta1.PageResponse](#cosmos.base.query.v1beta1.PageResponse) |  | pagination defines the pagination in the response. Not supported on this version. |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n\n<a name=\"cyber.liquidity.v1beta1.Query\"></a>\n\n### Query\nQuery defines the gRPC query service for the liquidity module.\n\n| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |\n| ----------- | ------------ | ------------- | ------------| ------- | -------- |\n| `LiquidityPools` | [QueryLiquidityPoolsRequest](#cyber.liquidity.v1beta1.QueryLiquidityPoolsRequest) | [QueryLiquidityPoolsResponse](#cyber.liquidity.v1beta1.QueryLiquidityPoolsResponse) | Get existing liquidity pools. | GET|/cosmos/liquidity/v1beta1/pools|\n| `LiquidityPool` | [QueryLiquidityPoolRequest](#cyber.liquidity.v1beta1.QueryLiquidityPoolRequest) | [QueryLiquidityPoolResponse](#cyber.liquidity.v1beta1.QueryLiquidityPoolResponse) | Get specific liquidity pool. | GET|/cosmos/liquidity/v1beta1/pools/{pool_id}|\n| `LiquidityPoolByPoolCoinDenom` | [QueryLiquidityPoolByPoolCoinDenomRequest](#cyber.liquidity.v1beta1.QueryLiquidityPoolByPoolCoinDenomRequest) | [QueryLiquidityPoolResponse](#cyber.liquidity.v1beta1.QueryLiquidityPoolResponse) | Get specific liquidity pool corresponding to the pool_coin_denom. | GET|/cosmos/liquidity/v1beta1/pools/pool_coin_denom/{pool_coin_denom}|\n| `LiquidityPoolByReserveAcc` | [QueryLiquidityPoolByReserveAccRequest](#cyber.liquidity.v1beta1.QueryLiquidityPoolByReserveAccRequest) | [QueryLiquidityPoolResponse](#cyber.liquidity.v1beta1.QueryLiquidityPoolResponse) | Get specific liquidity pool corresponding to the reserve account. | GET|/cosmos/liquidity/v1beta1/pools/reserve_acc/{reserve_acc}|\n| `LiquidityPoolBatch` | [QueryLiquidityPoolBatchRequest](#cyber.liquidity.v1beta1.QueryLiquidityPoolBatchRequest) | [QueryLiquidityPoolBatchResponse](#cyber.liquidity.v1beta1.QueryLiquidityPoolBatchResponse) | Get the pool's current batch. | GET|/cosmos/liquidity/v1beta1/pools/{pool_id}/batch|\n| `PoolBatchSwapMsgs` | [QueryPoolBatchSwapMsgsRequest](#cyber.liquidity.v1beta1.QueryPoolBatchSwapMsgsRequest) | [QueryPoolBatchSwapMsgsResponse](#cyber.liquidity.v1beta1.QueryPoolBatchSwapMsgsResponse) | Get all swap messages in the pool's current batch. | GET|/cosmos/liquidity/v1beta1/pools/{pool_id}/batch/swaps|\n| `PoolBatchSwapMsg` | [QueryPoolBatchSwapMsgRequest](#cyber.liquidity.v1beta1.QueryPoolBatchSwapMsgRequest) | [QueryPoolBatchSwapMsgResponse](#cyber.liquidity.v1beta1.QueryPoolBatchSwapMsgResponse) | Get a specific swap message in the pool's current batch. | GET|/cosmos/liquidity/v1beta1/pools/{pool_id}/batch/swaps/{msg_index}|\n| `PoolBatchDepositMsgs` | [QueryPoolBatchDepositMsgsRequest](#cyber.liquidity.v1beta1.QueryPoolBatchDepositMsgsRequest) | [QueryPoolBatchDepositMsgsResponse](#cyber.liquidity.v1beta1.QueryPoolBatchDepositMsgsResponse) | Get all deposit messages in the pool's current batch. | GET|/cosmos/liquidity/v1beta1/pools/{pool_id}/batch/deposits|\n| `PoolBatchDepositMsg` | [QueryPoolBatchDepositMsgRequest](#cyber.liquidity.v1beta1.QueryPoolBatchDepositMsgRequest) | [QueryPoolBatchDepositMsgResponse](#cyber.liquidity.v1beta1.QueryPoolBatchDepositMsgResponse) | Get a specific deposit message in the pool's current batch. | GET|/cosmos/liquidity/v1beta1/pools/{pool_id}/batch/deposits/{msg_index}|\n| `PoolBatchWithdrawMsgs` | [QueryPoolBatchWithdrawMsgsRequest](#cyber.liquidity.v1beta1.QueryPoolBatchWithdrawMsgsRequest) | [QueryPoolBatchWithdrawMsgsResponse](#cyber.liquidity.v1beta1.QueryPoolBatchWithdrawMsgsResponse) | Get all withdraw messages in the pool's current batch. | GET|/cosmos/liquidity/v1beta1/pools/{pool_id}/batch/withdraws|\n| `PoolBatchWithdrawMsg` | [QueryPoolBatchWithdrawMsgRequest](#cyber.liquidity.v1beta1.QueryPoolBatchWithdrawMsgRequest) | [QueryPoolBatchWithdrawMsgResponse](#cyber.liquidity.v1beta1.QueryPoolBatchWithdrawMsgResponse) | Get a specific withdraw message in the pool's current batch. | GET|/cosmos/liquidity/v1beta1/pools/{pool_id}/batch/withdraws/{msg_index}|\n| `Params` | [QueryParamsRequest](#cyber.liquidity.v1beta1.QueryParamsRequest) | [QueryParamsResponse](#cyber.liquidity.v1beta1.QueryParamsResponse) | Get all parameters of the liquidity module. | GET|/cosmos/liquidity/v1beta1/params|\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/rank/v1beta1/types.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/rank/v1beta1/types.proto\n\n\n\n<a name=\"cyber.rank.v1beta1.Params\"></a>\n\n### Params\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `calculation_period` | [int64](#int64) |  |  |\n| `damping_factor` | [string](#string) |  |  |\n| `tolerance` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.rank.v1beta1.RankedParticle\"></a>\n\n### RankedParticle\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `particle` | [string](#string) |  |  |\n| `rank` | [uint64](#uint64) |  |  |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/rank/v1beta1/genesis.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/rank/v1beta1/genesis.proto\n\n\n\n<a name=\"cyber.rank.v1beta1.GenesisState\"></a>\n\n### GenesisState\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `params` | [Params](#cyber.rank.v1beta1.Params) |  |  |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/rank/v1beta1/pagination.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/rank/v1beta1/pagination.proto\n\n\n\n<a name=\"cyber.rank.v1beta1.PageRequest\"></a>\n\n### PageRequest\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `page` | [uint32](#uint32) |  |  |\n| `per_page` | [uint32](#uint32) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.rank.v1beta1.PageResponse\"></a>\n\n### PageResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `total` | [uint32](#uint32) |  |  |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/rank/v1beta1/query.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/rank/v1beta1/query.proto\n\n\n\n<a name=\"cyber.rank.v1beta1.QueryIsAnyLinkExistRequest\"></a>\n\n### QueryIsAnyLinkExistRequest\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `from` | [string](#string) |  |  |\n| `to` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.rank.v1beta1.QueryIsLinkExistRequest\"></a>\n\n### QueryIsLinkExistRequest\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `from` | [string](#string) |  |  |\n| `to` | [string](#string) |  |  |\n| `address` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.rank.v1beta1.QueryKarmaRequest\"></a>\n\n### QueryKarmaRequest\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `neuron` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.rank.v1beta1.QueryKarmaResponse\"></a>\n\n### QueryKarmaResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `karma` | [uint64](#uint64) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.rank.v1beta1.QueryLinkExistResponse\"></a>\n\n### QueryLinkExistResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `exist` | [bool](#bool) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.rank.v1beta1.QueryNegentropyParticleResponse\"></a>\n\n### QueryNegentropyParticleResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `entropy` | [uint64](#uint64) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.rank.v1beta1.QueryNegentropyPartilceRequest\"></a>\n\n### QueryNegentropyPartilceRequest\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `particle` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.rank.v1beta1.QueryNegentropyRequest\"></a>\n\n### QueryNegentropyRequest\n\n\n\n\n\n\n\n<a name=\"cyber.rank.v1beta1.QueryNegentropyResponse\"></a>\n\n### QueryNegentropyResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `negentropy` | [uint64](#uint64) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.rank.v1beta1.QueryParamsRequest\"></a>\n\n### QueryParamsRequest\n\n\n\n\n\n\n\n<a name=\"cyber.rank.v1beta1.QueryParamsResponse\"></a>\n\n### QueryParamsResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `params` | [Params](#cyber.rank.v1beta1.Params) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.rank.v1beta1.QueryRankRequest\"></a>\n\n### QueryRankRequest\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `particle` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.rank.v1beta1.QueryRankResponse\"></a>\n\n### QueryRankResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `rank` | [uint64](#uint64) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.rank.v1beta1.QuerySearchRequest\"></a>\n\n### QuerySearchRequest\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `particle` | [string](#string) |  |  |\n| `pagination` | [PageRequest](#cyber.rank.v1beta1.PageRequest) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.rank.v1beta1.QuerySearchResponse\"></a>\n\n### QuerySearchResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `result` | [RankedParticle](#cyber.rank.v1beta1.RankedParticle) | repeated |  |\n| `pagination` | [PageResponse](#cyber.rank.v1beta1.PageResponse) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.rank.v1beta1.QueryTopRequest\"></a>\n\n### QueryTopRequest\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `pagination` | [PageRequest](#cyber.rank.v1beta1.PageRequest) |  |  |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n\n<a name=\"cyber.rank.v1beta1.Query\"></a>\n\n### Query\n\n\n| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |\n| ----------- | ------------ | ------------- | ------------| ------- | -------- |\n| `Params` | [QueryParamsRequest](#cyber.rank.v1beta1.QueryParamsRequest) | [QueryParamsResponse](#cyber.rank.v1beta1.QueryParamsResponse) |  | GET|/cyber/rank/v1beta1/rank/params|\n| `Rank` | [QueryRankRequest](#cyber.rank.v1beta1.QueryRankRequest) | [QueryRankResponse](#cyber.rank.v1beta1.QueryRankResponse) |  | GET|/cyber/rank/v1beta1/rank/rank/{particle}|\n| `Search` | [QuerySearchRequest](#cyber.rank.v1beta1.QuerySearchRequest) | [QuerySearchResponse](#cyber.rank.v1beta1.QuerySearchResponse) |  | GET|/cyber/rank/v1beta1/rank/search/{particle}|\n| `Backlinks` | [QuerySearchRequest](#cyber.rank.v1beta1.QuerySearchRequest) | [QuerySearchResponse](#cyber.rank.v1beta1.QuerySearchResponse) |  | GET|/cyber/rank/v1beta1/rank/backlinks/{particle}|\n| `Top` | [QueryTopRequest](#cyber.rank.v1beta1.QueryTopRequest) | [QuerySearchResponse](#cyber.rank.v1beta1.QuerySearchResponse) |  | GET|/cyber/rank/v1beta1/rank/top|\n| `IsLinkExist` | [QueryIsLinkExistRequest](#cyber.rank.v1beta1.QueryIsLinkExistRequest) | [QueryLinkExistResponse](#cyber.rank.v1beta1.QueryLinkExistResponse) |  | GET|/cyber/rank/v1beta1/is_link_exist|\n| `IsAnyLinkExist` | [QueryIsAnyLinkExistRequest](#cyber.rank.v1beta1.QueryIsAnyLinkExistRequest) | [QueryLinkExistResponse](#cyber.rank.v1beta1.QueryLinkExistResponse) |  | GET|/cyber/rank/v1beta1/is_any_link_exist|\n| `ParticleNegentropy` | [QueryNegentropyPartilceRequest](#cyber.rank.v1beta1.QueryNegentropyPartilceRequest) | [QueryNegentropyParticleResponse](#cyber.rank.v1beta1.QueryNegentropyParticleResponse) |  | GET|/cyber/rank/v1beta1/negentropy/{particle}|\n| `Negentropy` | [QueryNegentropyRequest](#cyber.rank.v1beta1.QueryNegentropyRequest) | [QueryNegentropyResponse](#cyber.rank.v1beta1.QueryNegentropyResponse) |  | GET|/cyber/rank/v1beta1/negentropy|\n| `Karma` | [QueryKarmaRequest](#cyber.rank.v1beta1.QueryKarmaRequest) | [QueryKarmaResponse](#cyber.rank.v1beta1.QueryKarmaResponse) |  | GET|/cyber/rank/v1beta1/karma/{neuron}|\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/rank/v1beta1/tx.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/rank/v1beta1/tx.proto\n\n\n\n<a name=\"cyber.rank.v1beta1.MsgUpdateParams\"></a>\n\n### MsgUpdateParams\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `authority` | [string](#string) |  |  |\n| `params` | [Params](#cyber.rank.v1beta1.Params) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.rank.v1beta1.MsgUpdateParamsResponse\"></a>\n\n### MsgUpdateParamsResponse\n\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n\n<a name=\"cyber.rank.v1beta1.Msg\"></a>\n\n### Msg\n\n\n| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |\n| ----------- | ------------ | ------------- | ------------| ------- | -------- |\n| `UpdateParams` | [MsgUpdateParams](#cyber.rank.v1beta1.MsgUpdateParams) | [MsgUpdateParamsResponse](#cyber.rank.v1beta1.MsgUpdateParamsResponse) |  | |\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/resources/v1beta1/types.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/resources/v1beta1/types.proto\n\n\n\n<a name=\"cyber.resources.v1beta1.Params\"></a>\n\n### Params\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `max_slots` | [uint32](#uint32) |  |  |\n| `halving_period_volt_blocks` | [uint32](#uint32) |  |  |\n| `halving_period_ampere_blocks` | [uint32](#uint32) |  |  |\n| `base_investmint_period_volt` | [uint32](#uint32) |  |  |\n| `base_investmint_period_ampere` | [uint32](#uint32) |  |  |\n| `min_investmint_period` | [uint32](#uint32) |  |  |\n| `base_investmint_amount_volt` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) |  |  |\n| `base_investmint_amount_ampere` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) |  |  |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/resources/v1beta1/genesis.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/resources/v1beta1/genesis.proto\n\n\n\n<a name=\"cyber.resources.v1beta1.GenesisState\"></a>\n\n### GenesisState\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `params` | [Params](#cyber.resources.v1beta1.Params) |  |  |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/resources/v1beta1/query.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/resources/v1beta1/query.proto\n\n\n\n<a name=\"cyber.resources.v1beta1.QueryAdjustedPriceRequest\"></a>\n\n### QueryAdjustedPriceRequest\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `base` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) |  |  |\n| `resource` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.resources.v1beta1.QueryAdjustedPriceResponse\"></a>\n\n### QueryAdjustedPriceResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `adjusted` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.resources.v1beta1.QueryInvestmintRequest\"></a>\n\n### QueryInvestmintRequest\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `amount` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) |  |  |\n| `resource` | [string](#string) |  |  |\n| `length` | [uint64](#uint64) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.resources.v1beta1.QueryInvestmintResponse\"></a>\n\n### QueryInvestmintResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `amount` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.resources.v1beta1.QueryParamsRequest\"></a>\n\n### QueryParamsRequest\n\n\n\n\n\n\n\n<a name=\"cyber.resources.v1beta1.QueryParamsResponse\"></a>\n\n### QueryParamsResponse\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `params` | [Params](#cyber.resources.v1beta1.Params) |  |  |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n\n<a name=\"cyber.resources.v1beta1.Query\"></a>\n\n### Query\n\n\n| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |\n| ----------- | ------------ | ------------- | ------------| ------- | -------- |\n| `Params` | [QueryParamsRequest](#cyber.resources.v1beta1.QueryParamsRequest) | [QueryParamsResponse](#cyber.resources.v1beta1.QueryParamsResponse) |  | GET|/cyber/resources/v1beta1/resources/params|\n| `Investmint` | [QueryInvestmintRequest](#cyber.resources.v1beta1.QueryInvestmintRequest) | [QueryInvestmintResponse](#cyber.resources.v1beta1.QueryInvestmintResponse) |  | GET|/cyber/resources/v1beta1/resources/investmint|\n| `AdjustedPrice` | [QueryAdjustedPriceRequest](#cyber.resources.v1beta1.QueryAdjustedPriceRequest) | [QueryAdjustedPriceResponse](#cyber.resources.v1beta1.QueryAdjustedPriceResponse) |  | GET|/cyber/resources/v1beta1/resources/adjusted_price|\n\n <!-- end services -->\n\n\n\n<a name=\"cyber/resources/v1beta1/tx.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## cyber/resources/v1beta1/tx.proto\n\n\n\n<a name=\"cyber.resources.v1beta1.MsgInvestmint\"></a>\n\n### MsgInvestmint\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `neuron` | [string](#string) |  |  |\n| `amount` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) |  |  |\n| `resource` | [string](#string) |  |  |\n| `length` | [uint64](#uint64) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.resources.v1beta1.MsgInvestmintResponse\"></a>\n\n### MsgInvestmintResponse\n\n\n\n\n\n\n\n<a name=\"cyber.resources.v1beta1.MsgUpdateParams\"></a>\n\n### MsgUpdateParams\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `authority` | [string](#string) |  |  |\n| `params` | [Params](#cyber.resources.v1beta1.Params) |  |  |\n\n\n\n\n\n\n<a name=\"cyber.resources.v1beta1.MsgUpdateParamsResponse\"></a>\n\n### MsgUpdateParamsResponse\n\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n\n<a name=\"cyber.resources.v1beta1.Msg\"></a>\n\n### Msg\n\n\n| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |\n| ----------- | ------------ | ------------- | ------------| ------- | -------- |\n| `Investmint` | [MsgInvestmint](#cyber.resources.v1beta1.MsgInvestmint) | [MsgInvestmintResponse](#cyber.resources.v1beta1.MsgInvestmintResponse) |  | |\n| `UpdateParams` | [MsgUpdateParams](#cyber.resources.v1beta1.MsgUpdateParams) | [MsgUpdateParamsResponse](#cyber.resources.v1beta1.MsgUpdateParamsResponse) |  | |\n\n <!-- end services -->\n\n\n\n<a name=\"osmosis/tokenfactory/v1beta1/authority_metadata.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## osmosis/tokenfactory/v1beta1/authority_metadata.proto\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.DenomAuthorityMetadata\"></a>\n\n### DenomAuthorityMetadata\nDenomAuthorityMetadata specifies metadata for addresses that have specific\ncapabilities over a token factory denom. Right now there is only one Admin\npermission, but is planned to be extended to the future.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `admin` | [string](#string) |  | Can be empty for no admin, or a valid osmosis address |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n <!-- end services -->\n\n\n\n<a name=\"osmosis/tokenfactory/v1beta1/params.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## osmosis/tokenfactory/v1beta1/params.proto\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.Params\"></a>\n\n### Params\nParams defines the parameters for the tokenfactory module.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `denom_creation_fee` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated |  |\n| `denom_creation_gas_consume` | [uint64](#uint64) |  | if denom_creation_fee is an empty array, then this field is used to add more gas consumption to the base cost. https://github.com/CosmWasm/token-factory/issues/11 |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n <!-- end services -->\n\n\n\n<a name=\"osmosis/tokenfactory/v1beta1/genesis.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## osmosis/tokenfactory/v1beta1/genesis.proto\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.GenesisDenom\"></a>\n\n### GenesisDenom\nGenesisDenom defines a tokenfactory denom that is defined within genesis\nstate. The structure contains DenomAuthorityMetadata which defines the\ndenom's admin.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `denom` | [string](#string) |  |  |\n| `authority_metadata` | [DenomAuthorityMetadata](#osmosis.tokenfactory.v1beta1.DenomAuthorityMetadata) |  |  |\n\n\n\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.GenesisState\"></a>\n\n### GenesisState\nGenesisState defines the tokenfactory module's genesis state.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `params` | [Params](#osmosis.tokenfactory.v1beta1.Params) |  | params defines the parameters of the module. |\n| `factory_denoms` | [GenesisDenom](#osmosis.tokenfactory.v1beta1.GenesisDenom) | repeated |  |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n <!-- end services -->\n\n\n\n<a name=\"osmosis/tokenfactory/v1beta1/query.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## osmosis/tokenfactory/v1beta1/query.proto\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.QueryDenomAuthorityMetadataRequest\"></a>\n\n### QueryDenomAuthorityMetadataRequest\nQueryDenomAuthorityMetadataRequest defines the request structure for the\nDenomAuthorityMetadata gRPC query.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `denom` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.QueryDenomAuthorityMetadataResponse\"></a>\n\n### QueryDenomAuthorityMetadataResponse\nQueryDenomAuthorityMetadataResponse defines the response structure for the\nDenomAuthorityMetadata gRPC query.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `authority_metadata` | [DenomAuthorityMetadata](#osmosis.tokenfactory.v1beta1.DenomAuthorityMetadata) |  |  |\n\n\n\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.QueryDenomsFromCreatorRequest\"></a>\n\n### QueryDenomsFromCreatorRequest\nQueryDenomsFromCreatorRequest defines the request structure for the\nDenomsFromCreator gRPC query.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `creator` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.QueryDenomsFromCreatorResponse\"></a>\n\n### QueryDenomsFromCreatorResponse\nQueryDenomsFromCreatorRequest defines the response structure for the\nDenomsFromCreator gRPC query.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `denoms` | [string](#string) | repeated |  |\n\n\n\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.QueryParamsRequest\"></a>\n\n### QueryParamsRequest\nQueryParamsRequest is the request type for the Query/Params RPC method.\n\n\n\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.QueryParamsResponse\"></a>\n\n### QueryParamsResponse\nQueryParamsResponse is the response type for the Query/Params RPC method.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `params` | [Params](#osmosis.tokenfactory.v1beta1.Params) |  | params defines the parameters of the module. |\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.Query\"></a>\n\n### Query\nQuery defines the gRPC querier service.\n\n| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |\n| ----------- | ------------ | ------------- | ------------| ------- | -------- |\n| `Params` | [QueryParamsRequest](#osmosis.tokenfactory.v1beta1.QueryParamsRequest) | [QueryParamsResponse](#osmosis.tokenfactory.v1beta1.QueryParamsResponse) | Params defines a gRPC query method that returns the tokenfactory module's parameters. | GET|/osmosis/tokenfactory/v1beta1/params|\n| `DenomAuthorityMetadata` | [QueryDenomAuthorityMetadataRequest](#osmosis.tokenfactory.v1beta1.QueryDenomAuthorityMetadataRequest) | [QueryDenomAuthorityMetadataResponse](#osmosis.tokenfactory.v1beta1.QueryDenomAuthorityMetadataResponse) | DenomAuthorityMetadata defines a gRPC query method for fetching DenomAuthorityMetadata for a particular denom. | GET|/osmosis/tokenfactory/v1beta1/denoms/{denom}/authority_metadata|\n| `DenomsFromCreator` | [QueryDenomsFromCreatorRequest](#osmosis.tokenfactory.v1beta1.QueryDenomsFromCreatorRequest) | [QueryDenomsFromCreatorResponse](#osmosis.tokenfactory.v1beta1.QueryDenomsFromCreatorResponse) | DenomsFromCreator defines a gRPC query method for fetching all denominations created by a specific admin/creator. | GET|/osmosis/tokenfactory/v1beta1/denoms_from_creator/{creator}|\n\n <!-- end services -->\n\n\n\n<a name=\"osmosis/tokenfactory/v1beta1/tx.proto\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## osmosis/tokenfactory/v1beta1/tx.proto\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.MsgBurn\"></a>\n\n### MsgBurn\nMsgBurn is the sdk.Msg type for allowing an admin account to burn\na token.  For now, we only support burning from the sender account.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `sender` | [string](#string) |  |  |\n| `amount` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) |  |  |\n| `burnFromAddress` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.MsgBurnResponse\"></a>\n\n### MsgBurnResponse\n\n\n\n\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.MsgChangeAdmin\"></a>\n\n### MsgChangeAdmin\nMsgChangeAdmin is the sdk.Msg type for allowing an admin account to reassign\nadminship of a denom to a new account\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `sender` | [string](#string) |  |  |\n| `denom` | [string](#string) |  |  |\n| `new_admin` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.MsgChangeAdminResponse\"></a>\n\n### MsgChangeAdminResponse\nMsgChangeAdminResponse defines the response structure for an executed\nMsgChangeAdmin message.\n\n\n\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.MsgCreateDenom\"></a>\n\n### MsgCreateDenom\nMsgCreateDenom defines the message structure for the CreateDenom gRPC service\nmethod. It allows an account to create a new denom. It requires a sender\naddress and a sub denomination. The (sender_address, sub_denomination) tuple\nmust be unique and cannot be re-used.\n\nThe resulting denom created is defined as\n<factory/{creatorAddress}/{subdenom}>. The resulting denom's admin is\noriginally set to be the creator, but this can be changed later. The token\ndenom does not indicate the current admin.\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `sender` | [string](#string) |  |  |\n| `subdenom` | [string](#string) |  | subdenom can be up to 44 \"alphanumeric\" characters long. |\n\n\n\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.MsgCreateDenomResponse\"></a>\n\n### MsgCreateDenomResponse\nMsgCreateDenomResponse is the return value of MsgCreateDenom\nIt returns the full string of the newly created denom\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `new_token_denom` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.MsgForceTransfer\"></a>\n\n### MsgForceTransfer\n\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `sender` | [string](#string) |  |  |\n| `amount` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) |  |  |\n| `transferFromAddress` | [string](#string) |  |  |\n| `transferToAddress` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.MsgForceTransferResponse\"></a>\n\n### MsgForceTransferResponse\n\n\n\n\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.MsgMint\"></a>\n\n### MsgMint\nMsgMint is the sdk.Msg type for allowing an admin account to mint\nmore of a token.  For now, we only support minting to the sender account\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `sender` | [string](#string) |  |  |\n| `amount` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) |  |  |\n| `mintToAddress` | [string](#string) |  |  |\n\n\n\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.MsgMintResponse\"></a>\n\n### MsgMintResponse\n\n\n\n\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.MsgSetDenomMetadata\"></a>\n\n### MsgSetDenomMetadata\nMsgSetDenomMetadata is the sdk.Msg type for allowing an admin account to set\nthe denom's bank metadata\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `sender` | [string](#string) |  |  |\n| `metadata` | [cosmos.bank.v1beta1.Metadata](#cosmos.bank.v1beta1.Metadata) |  |  |\n\n\n\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.MsgSetDenomMetadataResponse\"></a>\n\n### MsgSetDenomMetadataResponse\nMsgSetDenomMetadataResponse defines the response structure for an executed\nMsgSetDenomMetadata message.\n\n\n\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.MsgUpdateParams\"></a>\n\n### MsgUpdateParams\nMsgUpdateParams is the Msg/UpdateParams request type.\n\nSince: cosmos-sdk 0.47\n\n\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n| `authority` | [string](#string) |  | authority is the address of the governance account. |\n| `params` | [Params](#osmosis.tokenfactory.v1beta1.Params) |  | params defines the x/mint parameters to update.\n\nNOTE: All parameters must be supplied. |\n\n\n\n\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.MsgUpdateParamsResponse\"></a>\n\n### MsgUpdateParamsResponse\nMsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\n\nSince: cosmos-sdk 0.47\n\n\n\n\n\n <!-- end messages -->\n\n <!-- end enums -->\n\n <!-- end HasExtensions -->\n\n\n<a name=\"osmosis.tokenfactory.v1beta1.Msg\"></a>\n\n### Msg\nMsg defines the tokefactory module's gRPC message service.\n\n| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |\n| ----------- | ------------ | ------------- | ------------| ------- | -------- |\n| `CreateDenom` | [MsgCreateDenom](#osmosis.tokenfactory.v1beta1.MsgCreateDenom) | [MsgCreateDenomResponse](#osmosis.tokenfactory.v1beta1.MsgCreateDenomResponse) |  | |\n| `Mint` | [MsgMint](#osmosis.tokenfactory.v1beta1.MsgMint) | [MsgMintResponse](#osmosis.tokenfactory.v1beta1.MsgMintResponse) |  | |\n| `Burn` | [MsgBurn](#osmosis.tokenfactory.v1beta1.MsgBurn) | [MsgBurnResponse](#osmosis.tokenfactory.v1beta1.MsgBurnResponse) |  | |\n| `ChangeAdmin` | [MsgChangeAdmin](#osmosis.tokenfactory.v1beta1.MsgChangeAdmin) | [MsgChangeAdminResponse](#osmosis.tokenfactory.v1beta1.MsgChangeAdminResponse) |  | |\n| `SetDenomMetadata` | [MsgSetDenomMetadata](#osmosis.tokenfactory.v1beta1.MsgSetDenomMetadata) | [MsgSetDenomMetadataResponse](#osmosis.tokenfactory.v1beta1.MsgSetDenomMetadataResponse) |  | |\n| `ForceTransfer` | [MsgForceTransfer](#osmosis.tokenfactory.v1beta1.MsgForceTransfer) | [MsgForceTransferResponse](#osmosis.tokenfactory.v1beta1.MsgForceTransferResponse) |  | |\n| `UpdateParams` | [MsgUpdateParams](#osmosis.tokenfactory.v1beta1.MsgUpdateParams) | [MsgUpdateParamsResponse](#osmosis.tokenfactory.v1beta1.MsgUpdateParamsResponse) | UpdateParams defines a governance operation for updating the x/mint module parameters. The authority is hard-coded to the x/gov module account.\n\nSince: cosmos-sdk 0.47 | |\n\n <!-- end services -->\n\n\n\n## Scalar Value Types\n\n| .proto Type | Notes | C++ | Java | Python | Go | C# | PHP | Ruby |\n| ----------- | ----- | --- | ---- | ------ | -- | -- | --- | ---- |\n| <a name=\"double\" /> double |  | double | double | float | float64 | double | float | Float |\n| <a name=\"float\" /> float |  | float | float | float | float32 | float | float | Float |\n| <a name=\"int32\" /> int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |\n| <a name=\"int64\" /> int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | int64 | long | integer/string | Bignum |\n| <a name=\"uint32\" /> uint32 | Uses variable-length encoding. | uint32 | int | int/long | uint32 | uint | integer | Bignum or Fixnum (as required) |\n| <a name=\"uint64\" /> uint64 | Uses variable-length encoding. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum or Fixnum (as required) |\n| <a name=\"sint32\" /> sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |\n| <a name=\"sint64\" /> sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | int64 | long | integer/string | Bignum |\n| <a name=\"fixed32\" /> fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | uint32 | uint | integer | Bignum or Fixnum (as required) |\n| <a name=\"fixed64\" /> fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum |\n| <a name=\"sfixed32\" /> sfixed32 | Always four bytes. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |\n| <a name=\"sfixed64\" /> sfixed64 | Always eight bytes. | int64 | long | int/long | int64 | long | integer/string | Bignum |\n| <a name=\"bool\" /> bool |  | bool | boolean | boolean | bool | bool | boolean | TrueClass/FalseClass |\n| <a name=\"string\" /> string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | string | string | string | String (UTF-8) |\n| <a name=\"bytes\" /> bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | []byte | ByteString | string | String (ASCII-8BIT) |\n\n"
  },
  {
    "path": "docs/proto/protodoc-markdown.tmpl",
    "content": "<!-- This file is auto-generated. Please do not modify it yourself. -->\n# Protobuf Documentation\n<a name=\"top\"></a>\n\n## Table of Contents\n{{range .Files}}\n{{$file_name := .Name}}- [{{.Name}}](#{{.Name}})\n  {{- if .Messages }}\n  {{range .Messages}}  - [{{.LongName}}](#{{.FullName}})\n  {{end}}\n  {{- end -}}\n  {{- if .Enums }}\n  {{range .Enums}}  - [{{.LongName}}](#{{.FullName}})\n  {{end}}\n  {{- end -}}\n  {{- if .Extensions }}\n  {{range .Extensions}}  - [File-level Extensions](#{{$file_name}}-extensions)\n  {{end}}\n  {{- end -}}\n  {{- if .Services }}\n  {{range .Services}}  - [{{.Name}}](#{{.FullName}})\n  {{end}}\n  {{- end -}}\n{{end}}\n- [Scalar Value Types](#scalar-value-types)\n\n{{range .Files}}\n{{$file_name := .Name}}\n<a name=\"{{.Name}}\"></a>\n<p align=\"right\"><a href=\"#top\">Top</a></p>\n\n## {{.Name}}\n{{.Description}}\n\n{{range .Messages}}\n<a name=\"{{.FullName}}\"></a>\n\n### {{.LongName}}\n{{.Description}}\n\n{{if .HasFields}}\n| Field | Type | Label | Description |\n| ----- | ---- | ----- | ----------- |\n{{range .Fields -}}\n  | `{{.Name}}` | [{{.LongType}}](#{{.FullType}}) | {{.Label}} | {{if (index .Options \"deprecated\"|default false)}}**Deprecated.** {{end}}{{nobr .Description}}{{if .DefaultValue}} Default: {{.DefaultValue}}{{end}} |\n{{end}}\n{{end}}\n\n{{if .HasExtensions}}\n| Extension | Type | Base | Number | Description |\n| --------- | ---- | ---- | ------ | ----------- |\n{{range .Extensions -}}\n  | `{{.Name}}` | {{.LongType}} | {{.ContainingLongType}} | {{.Number}} | {{nobr .Description}}{{if .DefaultValue}} Default: {{.DefaultValue}}{{end}} |\n{{end}}\n{{end}}\n\n{{end}} <!-- end messages -->\n\n{{range .Enums}}\n<a name=\"{{.FullName}}\"></a>\n\n### {{.LongName}}\n{{.Description}}\n\n| Name | Number | Description |\n| ---- | ------ | ----------- |\n{{range .Values -}}\n  | {{.Name}} | {{.Number}} | {{nobr .Description}} |\n{{end}}\n\n{{end}} <!-- end enums -->\n\n{{if .HasExtensions}}\n<a name=\"{{$file_name}}-extensions\"></a>\n\n### File-level Extensions\n| Extension | Type | Base | Number | Description |\n| --------- | ---- | ---- | ------ | ----------- |\n{{range .Extensions -}}\n  | `{{.Name}}` | {{.LongType}} | {{.ContainingLongType}} | {{.Number}} | {{nobr .Description}}{{if .DefaultValue}} Default: `{{.DefaultValue}}`{{end}} |\n{{end}}\n{{end}} <!-- end HasExtensions -->\n\n{{range .Services}}\n<a name=\"{{.FullName}}\"></a>\n\n### {{.Name}}\n{{.Description}}\n\n| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |\n| ----------- | ------------ | ------------- | ------------| ------- | -------- |\n{{range .Methods -}}\n  | `{{.Name}}` | [{{.RequestLongType}}](#{{.RequestFullType}}){{if .RequestStreaming}} stream{{end}} | [{{.ResponseLongType}}](#{{.ResponseFullType}}){{if .ResponseStreaming}} stream{{end}} | {{nobr .Description}} | {{with (index .Options \"google.api.http\")}}{{range .Rules}}{{.Method}}|{{.Pattern}}{{end}}{{end}}|\n{{end}}\n{{end}} <!-- end services -->\n\n{{end}}\n\n## Scalar Value Types\n\n| .proto Type | Notes | C++ | Java | Python | Go | C# | PHP | Ruby |\n| ----------- | ----- | --- | ---- | ------ | -- | -- | --- | ---- |\n{{range .Scalars -}}\n  | <a name=\"{{.ProtoType}}\" /> {{.ProtoType}} | {{.Notes}} | {{.CppType}} | {{.JavaType}} | {{.PythonType}} | {{.GoType}} | {{.CSharp}} | {{.PhpType}} | {{.RubyType}} |\n{{end}}\n"
  },
  {
    "path": "docs/rpc.md",
    "content": "# API reference\n\n** TODO upgrade for bostrom network **\n\nCyberd provides a [JSON-RPC](http://json-rpc.org/wiki/specification) type API. The HTTP endpoint is served under\n `localhost:20657`. WebSockets are the preferred transport for cyberd RPC and are used by applications, such as cyb.\n The default WebSocket connection endpoint for cyberd is `ws://localhost:26657/websocket`. There are test endpoints\n available at `https://titan.cybernode.ai/api/` and `ws://titan.cybernode.ai/websocket`.\n\n<br />\n\n## Standard Methods\n\n### Query Example\n\nQuery the HTTP endpoint using curl:\n\n```bash\ncurl --data '{\"method\":\"status\",\"params\":[],\"id\":\"1\",\"jsonrpc\":\"2.0\"}' \\\n-H \"Content-Type: application/json\" -X POST earth.cybernode.ai:34657\n```\n\nQuery ws endpoint from JS:\n\n```js\nlet websocket = new WebSocket(\"ws://earth.cybernode.ai:34657/websocket\");\nwebsocket.send(JSON.stringify({\n  \"method\":\"status\",\n  \"params\":[],\n  \"id\":\"1\",\n  \"jsonrpc\":\"2.0\"\n}));\n```\n\n### Method Overview\n\nThe following is an overview of the RPC methods and their current status.  Click\nthe method name for further detail, such as parameter, and this will return information.\n\n|#|Method|Description|\n|---|------|-----------|\n|1|[status](#status)|Get node info, pubkey, latest block hash, app hash, block height and time.|\n|2|[account](#account)|Get account nonce, pubkey, number, and coins.|\n|3|[account_bandwidth](#account-bandwidth)|Get account bandwidth info for current height.|\n|4|[is_link_exist](#link-exist)|Return true, if given link exist.|\n|5|[current_bandwidth_price](#current-bandwidth-price)|Returns current bandwidth credit price.|\n|6|[index_stats](#index-stats)|Returns current index entities count.|\n\n### Method Details\n\n***\n<a name=\"status\"/>\n\n|   |   |\n|---|---|\n|Method|status|\n|Parameters|None|\n|Description|Get node info, pubkey, latest block hash, app hash, block height and time.|\n|[Return to Overview](#method-overview)<br />\n\n<a name=\"account\"/>\n\n|   |   |\n|---|---|\n|Method|account|\n|Parameters|1. address (string, required)<br />|\n|Description|Get account nonce, pubkey, number, and coins.|\n|[Return to Overview](#method-overview)<br />\n\n<a name=\"account-bandwidth\"/>\n\n|   |   |\n|---|---|\n|Method|account_bandwidth|\n|Parameters|1. address (string, required)<br />|\n|Description|Get account bandwidth info for current height.|\n|[Return to Overview](#method-overview)<br />\n\n<a name=\"link-exist\"/>\n\n|   |   |\n|---|---|\n|Method|is_link_exist|\n|Parameters|1. from (cid, required)<br />2. to (cid, required)<br />3. address (string, required)<br />|\n|Description|Return true, if given link exist.|\n|[Return to Overview](#method-overview)<br />\n\n<a name=\"current-bandwidth-price\"/>\n\n|   |   |\n|---|---|\n|Method|current_bandwidth_price|\n|Parameters|None|\n|Description|Returns current bandwidth credit price.|\n|[Return to Overview](#method-overview)<br />\n\n<a name=\"index-stats\"/>\n\n|   |   |\n|---|---|\n|Method|index_stats|\n|Parameters|None|\n|Description|Returns current index entities count.|\n|[Return to Overview](#method-overview)<br />\n\n***\n<br />\n<br />\n\n## Notifications (WebSocket-specific)\n\nCyberd uses standard JSON-RPC notifications to notify clients of changes rather than requiring clients to poll cyberd\n for updates. JSON-RPC notifications are a subset of requests, but do not contain an ID. The notification type \n is categorized by the `query` params field.\n\n### Subscribe Example \n\nSubscribe for new block headers from JS:\n\n ```js\n let websocket = new WebSocket(\"ws://earth.cybernode.ai:34657/websocket\");\n websocket.send(JSON.stringify({\n   \"method\": \"subscribe\",\n   \"params\": [\"tm.event='NewBlockHeader'\"],\n   \"id\": \"1\",\n   \"jsonrpc\": \"2.0\"\n }));\n ```\n\n### Events Overview\n\n|#|Event|Description|\n|---|------|-----------|\n|1|[NewBlockHeader](#NewBlockHeader)|Sends a block header notification when a new block is committed.|\n|2|[CoinsReceived](#CoinsReceived)|Sends a notification when new coinc arrive to a given address.|\n|3|[CoinsSend](#CoinsSend)|Sends a notification when new coins are sent from a given address.|\n|4|[СidsLinked](#СidsLinked)|Notification of links created by a given address.|\n|5|[SignedTxCommitted](#SignedTxCommitted)|Notify when any tx for a given signer is committed.|\n\n### Events Details\n\n#### NewBlockHeader\n\n|   |   |\n|---|---|\n|Event|NewBlockHeader|\n|Description|Sends block header notification when a new block is committed.|\n|Query|`tm.event='NewBlockHeader'`|\n|[Return to Overview](#events-overview)<br />\n\n#### CoinsReceived\n\n|   |   |\n|---|---|\n|Event|CoinsReceived|\n|Description|Sends a notification when new coins have arrived to a given address.|\n|Query|`tm.event='EventTx' AND recipient='cbd1sk3uvpacpjm2t3389caqk4gd9n9gkzq2054yds'`|\n|[Return to Overview](#events-overview)<br />\n\n#### CoinsSend\n\n|   |   |\n|---|---|\n|Event|CoinsSend|\n|Description|Sends a notification when new coins are sent from a given address.|\n|Query|`tm.event='EventTx' AND sender='cbd1sk3uvpacpjm2t3389caqk4gd9n9gkzq2054yds'`|\n|[Return to Overview](#events-overview)<br />\n\n#### СidsLinked\n|   |   |\n|---|---|\n|Event|СidsLinked|\n|Description|Notification of links created by a given address.|\n|Query|`tm.event='EventTx' AND signer='cbd1sk3uvpacpjm2t3389caqk4gd9n9gkzq2054yds' AND action='link'`|\n|[Return to Overview](#events-overview)<br />\n\n#### SignedTxCommitted\n\n|   |   |\n|---|---|\n|Event|SignedTxCommitted|\n|Description|Notify when any tx for a given signer is committed.|\n|Query|`tm.event='EventTx' AND signer='cbd1sk3uvpacpjm2t3389caqk4gd9n9gkzq2054yds'`|\n|[Return to Overview](#events-overview)<br />\n\n\n\n\n\n"
  },
  {
    "path": "docs/run_validator.md",
    "content": "\n# Join cyber as a Validator\n\n## Prepare your server\n\nFirst, you should set up a server.\nYour node should be online constantly. This means that you will need a reliable server.\nYou may also consider using any cloud service with a dedicated GPU, like Hetzner, Cherryservers etc. (or use a local machine). Whatever you choose, in order to achieve better stability and consistency we recommend you use a dedicated server for each validator node.\n\nCyber is based on Cosmos-SDK and is written in Go.\nIt should work on any platform which can compile and run programs in Go.\nWe strongly recommend running the validator node on a Linux-based server.\n\nCyber-rank computations are performed on GPU, so it is required to have it (GPU) on-board your node.\n\nRecommended hardware setup:\n\n```js\nCPU: 6 cores\nRAM: 32 GB\nSSD: 1 TB\nConnection: 50+Mbps, Stable and low-latency connection\nGPU: Nvidia GeForce (or Tesla/Titan/Quadro) with CUDA-cores; 4+ Gb of video memory*\nSoftware: Ubuntu  20.04 LTS / 22.04 LTS\n```\n\n*Cyber runs well on consumer-grade cards like Geforce GTX 1070, but we expect load growth and advise you use Error Correction compatible cards from Tesla or Quadro families. Also, make sure your card is compatible with >= v.410 of NVIDIA driver.*\n\nOf course the hardware is your own choice and technically it might be possible to run the node on *\"even - 1 CUDA core GPU\"*, but you should be aware of performance drop and rank calculation speed decline.\n\n## Node setup\n\n*To avoid possible misconfiguration issues and simplify the setup of `$ENV`, we recommend to perform all the commands as `root` (here root - is literally root, not just a user with root priveliges). For the case of a dedicated server for cybernode it should be concidered as ok from the security side.*\n\n### Third-party software\n\nThe main distribution unit for Cyber is a [docker](https://www.docker.com/) container. All images are located in the default [Dockerhub registry](https://hub.docker.com/r/cyberd/cyber). In order to access the GPU from the container, Nvidia driver version **410+** and [Nvidia docker runtime](https://github.com/NVIDIA/nvidia-docker) should be installed on the host system.\n\nAll commands below suppose `amd64` architecture, as the different architectures commands may differ accordingly.\n\n### Docker installation\n\nSimply copy the commands below and paste into CLI.\n\n1. Update the `apt` package index:\n\n```bash\nsudo apt-get update\n```\n\n2. Install packages to allow apt to use a repository over HTTPS:\n\n```bash\nsudo apt install -y \\\n     apt-transport-https \\\n     ca-certificates \\\n     curl \\\n     gnupg-agent \\\n     software-properties-common\n```\n\n3. Add Docker’s official GPG key:\n\n```bash\ncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -\n```\n\n```bash\nsudo add-apt-repository \\\n   \"deb [arch=amd64] https://download.docker.com/linux/ubuntu \\\n   $(lsb_release -cs) \\\n   stable\"\n```\n\n4. Update the apt package index:\n\n```bash\nsudo apt update\n```\n\n5. Install the latest version of Docker CE and containerd:\n\n```bash\nsudo apt-get install docker-ce docker-ce-cli containerd.io\n```\n\n### Installing Nvidia drivers\n\n1. To proceed, first add the `ppa:graphics-drivers/ppa` repository:\n\n```bash\nsudo add-apt-repository ppa:graphics-drivers/ppa\n```\n\n```bash\nsudo apt update\n```\n\n2. Install Ubuntu-drivers:\n\n```bash\nsudo apt install -y ubuntu-drivers-common\n```\n\n3. Next check what are recommended drivers for your card:\n\n```bash\nubuntu-drivers devices\n```\n\nYou should see something similar to this:\n\n```bash\n== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==\nmodalias : pci:v000010DEd00001BA1sv00001462sd000011E4bc03sc00i00\nvendor   : NVIDIA Corporation\nmodel    : GP104M [GeForce GTX 1070 Mobile]\ndriver   : nvidia-driver-418 - third-party free\ndriver   : nvidia-driver-430 - third-party free\ndriver   : nvidia-driver-440 - third-party free\ndriver   : nvidia-driver-460 - third-party free recommended\ndriver   : xserver-xorg-video-nouveau - distro free builtin\n```\n\n4. We need the **410+** drivers release, *up to v515 is tested*. As you can see the v460 is recommended. The command below will install the recommended version of the drivers:\n\n```bash\nsudo ubuntu-drivers autoinstall\n```\n\nTo install specific version of a driver use `sudo apt install nvidia-driver-460`\n\n\nThe driver installation takes approximately 10 minutes.\n\n```bash\nDKMS: install completed.\nSetting up libxdamage1:i386 (1:1.1.4-3) ...\nSetting up libxext6:i386 (2:1.3.3-1) ...\nSetting up libxfixes3:i386 (1:5.0.3-1) ...\nSetting up libnvidia-decode-415:i386 (460.84-0ubuntu0~gpu18.04.1) ...\nSetting up build-essential (12.4ubuntu1) ...\nSetting up libnvidia-gl-415:i386 (460.84-0ubuntu0~gpu18.04.1) ...\nSetting up libnvidia-encode-415:i386 (460.84-0ubuntu0~gpu18.04.1) ...\nSetting up nvidia-driver-415 (460.84-0ubuntu0~gpu18.04.1) ...\nSetting up libxxf86vm1:i386 (1:1.1.4-1) ...\nSetting up libglx-mesa0:i386 (18.0.5-0ubuntu0~18.04.1) ...\nSetting up libglx0:i386 (1.0.0-2ubuntu2.2) ...\nSetting up libgl1:i386 (1.0.0-2ubuntu2.2) ...\nSetting up libnvidia-ifr1-415:i386 (460.84-0ubuntu0~gpu18.04.1) ...\nSetting up libnvidia-fbc1-415:i386 (460.84-0ubuntu0~gpu18.04.1) ...\nProcessing triggers for libc-bin (2.27-3ubuntu1) ...\nProcessing triggers for initramfs-tools (0.130ubuntu3.1) ...\nupdate-initramfs: Generating /boot/initrd.img-4.15.0-45-generic\n```\n\n5. **Reboot** the system for the changes to take effect.\n\n```bash\nsudo reboot\n```\n\n6. Check the installed drivers:\n\n```bash\nnvidia-smi\n```\n\nYou should see this:\n(Some version/driver numbers might differ. You might also have some processes already running)\n\n```bash\n+-----------------------------------------------------------------------------+\n| NVIDIA-SMI 460.84       Driver Version: 460.84       CUDA Version: 11.2     |\n|-------------------------------+----------------------+----------------------+\n| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |\n| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |\n|===============================+======================+======================|\n|   0  GeForce GTX 1070    Off  | 00000000:01:00.0 Off |                  N/A |\n| 26%   36C    P5    26W / 180W |      0MiB /  8119MiB |      2%      Default |\n+-------------------------------+----------------------+----------------------+\n\n+-----------------------------------------------------------------------------+\n| Processes:                                                       GPU Memory |\n|  GPU       PID   Type   Process name                             Usage      |\n|=============================================================================|\n|  No running processes found                                                 |\n+-----------------------------------------------------------------------------+\n```\n\n#### Install Nvidia container runtime for docker\n\n1. Add package repositories:\n\n```bash\ndistribution=$(. /etc/os-release;echo $ID$VERSION_ID)\n```\n\n```bash\ncurl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -\n```\n\n```bash\ncurl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list\n```\n\nYou should see something like this:\n\n```bash\ndeb https://nvidia.github.io/libnvidia-container/ubuntu20.04/$(ARCH) /\ndeb https://nvidia.github.io/nvidia-container-runtime/ubuntu20.04/$(ARCH) /\ndeb https://nvidia.github.io/nvidia-docker/ubuntu20.04/$(ARCH) /\n```\n\n2. Install nvidia-container toolkit and reload the Docker daemon configuration\n\n```bash\nsudo apt-get update && sudo apt-get install -y nvidia-container-toolkit\n```\n\n```bash\nsudo systemctl restart docker\n```\n\n3. Test nvidia-smi with the latest official CUDA image\n\n```bash\ndocker run --gpus all nvidia/cuda:11.4.0-base nvidia-smi\n```\n\nOutput logs should coincide as earlier:\n\n```bash\nUnable to find image 'nvidia/cuda:11.4.0-base' locally\n11.1-base: Pulling from nvidia/cuda\n54ee1f796a1e: Pull complete \nf7bfea53ad12: Pull complete \n46d371e02073: Pull complete \nb66c17bbf772: Pull complete \n3642f1a6dfb3: Pull complete \ne5ce55b8b4b9: Pull complete \n155bc0332b0a: Pull complete \nDigest: sha256:774ca3d612de15213102c2dbbba55df44dc5cf9870ca2be6c6e9c627fa63d67a\nStatus: Downloaded newer image for nvidia/cuda:11.2.0-base-ubuntu20.04\nMon Jun 21 14:07:52 2021 \n+------------------------------------------------------------------------+\n|NVIDIA-SMI 460.84      Driver Version:460.84      CUDA Version: 11.4    |\n|-----------------------------+--------------------+---------------------+\n|GPU  Name       Persistence-M| Bus-Id       Disp.A| Volatile Uncorr. ECC|\n|Fan  Temp  Perf Pwr:Usage/Cap|        Memory-Usage| GPU-Util  Compute M.|\n|                             |                    |               MIG M.|\n|=============================+====================+=====================|\n|  0  GeForce GTX165...  Off  |00000000:01:00.0 Off|                  N/A|\n|N/A   47C    P0   16W /  N/A |      0MB /  3914MiB|      0%      Default|\n|                             |                    |                  N/A|\n+-----------------------------+--------------------+---------------------+\n                                                                       \n+------------------------------------------------------------------------+\n|Processes:                                                              |\n| GPU   GI   CI       PID   Type   Process name                GPU Memory|\n|       ID   ID                                                Usage     |\n|========================================================================|\n| No running processes found                                             |\n+------------------------------------------------------------------------+\n```\n\nYour machine is ready to launch the node.\n\n\n### Launching cyber fullnode\n\nMake a directory tree for storing your daemon:\n\n```bash\nmkdir $HOME/.cyber\nmkdir $HOME/.cyber/data\nmkdir $HOME/.cyber/config\n```\n\n\n2. Run the full node:\n(This will pull and extract the image from cyberd/cyber of latest version, containing all upgrades binaries)\n\n```bash\ndocker run -d --gpus all --name=bostrom --restart always -p 26656:26656 -p 26657:26657 -p 1317:1317 -e ALLOW_SEARCH=true -v $HOME/.cyber:/root/.cyber  cyberd/bostrom:v3.0.0-cuda11.4\n```\n\nDocker image already contain all binaries to either sync from 0 or start form snapshot.\n\n3. Setup some peers to `persistent_peers` and `seeds` to $HOME/.cyber/config/config.toml line 184:\n\n\n```bash\n# Comma separated list of seed nodes to connect to\nseeds = \"\"\n\n# Comma separated list of nodes to keep persistent connections to\npersistent_peers = \"\"\n```\n\nFor peers addresses please refer to appropriate section of the [networks](https://github.com/cybercongress/networks) repo.\n\n4. To speed-up sync use chain snapshot (check for most recent pinned snap in [Hall of Fame](https://t.me/fameofcyber)). Download the snapshot, unpack it and replace your node `.cyber/data` and `.cyber/wasm` folders to one's from snapshot.\n\n```bash\nwget https://link_to_actual_snapshot:bostrom_pruned_4302990.tar.gz\ntar -I pigz -xf bostrom_pruned_4302990.tar.gz -C $HOME/.cyber\nrm -rf $HOME/.cyber/data $HOME/.cyber/wasm\ncp bostrom_pruned_4302990/* $HOME/.cyber\n```\n\nAlso adjust your config `.cyber/config/app.toml` pruning stratege to be similar with snapshot you've selected (`pruning = \"everything\"` for pruned snapshot, `pruning = \"nothing\"` for archive)\n\n```bash\nnano $HOME/.cyber/config/app.toml\nset line 17 `pruning = \"everything\"`\n```\n\nIf you would like to sync all the way from the bottom - you may just fill the peers and let thing spin, upgrade block would be handled automatically.\n\n\n\n5. To apply config changes restart the container:\n\n```bash\ndocker restart bostrom\n```\n\n6. Then check the status of your node:\n\n```bash\ndocker exec bostrom cyber status\n```\n\nA possible output may look like this:\n\n```bash\n{\"NodeInfo\":{\"protocol_version\":{\"p2p\":\"8\",\"block\":\"11\",\"app\":\"0\"},\"id\":\"808a3773d8adabc78bca6ef8d6b2ee20456bfbcb\",\"listen_addr\":\"tcp://86.57.207.105:26656\",\"network\":\"bostrom\",\"version\":\"\",\"channels\":\"40202122233038606100\",\"moniker\":\"node1234\",\"other\":\n{\"tx_index\":\"on\",\"rpc_address\":\"tcp://0.0.0.0:26657\"}},\"SyncInfo\":{\"latest_block_hash\":\"241BA3E744A9024A2D04BDF4CE7CF4985D7922054B38AF258712027D0854E930\",\"latest_app_hash\":\"5BF4B64508A95984F017BD6C29012FE5E66ADCB367D06345EE1EB2ED18314437\",\"latest_block_height\":\"521\",\n\"latest_block_time\":\"2021-06-21T14:21:41.817756021Z\",\"earliest_block_hash\":\"98DD3065543108F5EBEBC45FAAAEA868B3C84426572BE9FDA2E3F1C49A2C0CE8\",\"earliest_app_hash\":\"E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855\",\"earliest_block_height\":\"1\",\n\"earliest_block_time\":\"2021-06-10T00:00:00Z\",\"catching_up\":false},\"ValidatorInfo\":{\"Address\":\"611C9F3568E7341155DBF0546795BF673FD84EB1\",\"PubKey\":{\"type\":\"tendermint/PubKeyEd25519\",\"value\":\"0iGriT3gyRJXQXR/98c+2MTAhChIo5F5v7FfPmOAH5o=\"},\"VotingPower\":\"0\"}}\n\n```\n\nTo check container logs use:\n\n```bash\ndocker logs bostrom -f --tail 10\n```\n\n## Validator start\n\nAfter your node has successfully synced, you can run a validator.\n\n### Prepare the staking address\n\n1. To proceed further you need to add your existing address to the node or generate one and fund it. \n\nTo **create** a new one use:\n\n```bash\ndocker exec -ti bostrom cyber keys add <your_key_name>\n```\n\nThe above command returns the address, the public key and the seed phrase, which you can use to\nrecover your account if you forget your password later.\n\n**Keep you seed phrase safe. Your keys are only your responsibility!**\n\nTo **import** existing address use: \n\n```bash\ndocker exec -ti bostrom cyber keys add <your_key_name> --recover\n```\n\nYou can use your **ledger** device with the Cosmos app installed on it to sign transactions. Add address from Ledger:\n\n```bash\ndocker exec -ti bostrom cyber keys add <your_key_name> --ledger\n```\n\n**<your_key_name>** is any name you pick to represent this key pair.\nYou have to refer to that name later when you use cli to sign transactions.\n\n### Send the create validator transaction\n\nValidators are actors on the network committing new blocks by submitting their votes.\nThis refers to the node itself, not a single person or a single account.\n\nThe next step is to declare a validator candidate.\nTo declare a validator candidate, run the following command adjusting the stake amount and the other fields:\n\n```bash\ndocker exec -ti bostrom cyber tx staking create-validator \\\n  --amount=10000000boot \\\n  --min-self-delegation \"1000000\" \\\n  --pubkey=$(docker exec -ti bostrom cyber tendermint show-validator) \\\n  --moniker=<your_node_nickname> \\\n  --from=<your_key_name> \\\n  --commission-rate=\"0.10\" \\\n  --commission-max-rate=\"0.20\" \\\n  --commission-max-change-rate=\"0.01\" \\\n  --chain-id=bostrom \\\n  --gas-prices=0.01boot \\\n  --gas=600000\n```\n\n### Verify that you are validating\n\n```bash\ndocker exec -ti bostrom cyber query staking validators\n```\n\nIf you see your `<your_node_nickname>` with the status `Bonded` and Jailed `false` everything is good.\nYou are validating the network.\n\n## Maintenance of the validator\n\n### Jailing\n\nIf your validator got under slashing conditions, it will be jailed.\nAfter such an event an operator must unjail the validator manually:\n\n```bash\ndocker exec -ti bostrom cyber tx slashing unjail --from=<your_key_name> --chain-id=bostrom --gas-prices=0.01boot --gas=300000\n```\n\n### Back-up validator keys (!)\n\nYour identity as a validator consists of two things: \n\n- your account (to sign transactions)\n- your validator private key (to sign stuff on the chain consensus layer)\n\nPlease back up `$HOME/.cyber/config/priv_validator_key.json` along with your seed phrase. In case of occasional node loss you would be able to restore your validator operation with this file and another full node.\n\nFinally, in case you want to keep your cyber node ID consistent during networks please backup `$HOME/.cyber/config/node_key.json`.\n\n### Rebase to snapshot\n\nYou can use a snapshot to start a node from scratch, as well as to reduce its disk space.  \nPlease check the latest snapshot [here](https://snapshot.cybernode.ai/).  \n\nDownload snapshot\n```bash\nwget https://snapshot.cybernode.ai/bostrom_pruned_<*>.tar\n```\n\nStop your node\n```bash\ndocker stop bostrom\n```\nReplace data folder to snapshot\n```bash \nsudo -H rm -r ~/.cyber/data/ ~/.cyber/wasm/\ntar -xf bostrom_pruned_<*>.tar -C ~/.cyber/\n```\nStart node\n```bash\ndocker start bostrom\n```\nCheck node status and logs after startup\n```bash\ndocker exec -ti bostrom cyber status\ndocker logs bostrom -f --tail 20\n```\n"
  },
  {
    "path": "docs/send_txs.md",
    "content": "# Your First Cyber-js Actions - Send Tokens\n\n<HighlightBox type=\"learning\">\n\nTake your first steps with cyber-js. Use it to send some simple transactions.\n<br></br>\nIn this section, you will:\n\n* Download and install cyber-js.\n* Create a small experiment.\n* Testnet preparation\n* Establish your connection.\n* Inspect a balance.\n* Send transactions.\n\n</HighlightBox>\n\nA basic feature of a Bostrom chain is the ability to send tokens via the `bank` module. Cyber-js naturally offers functions to cover this facility. You are going to:\n\n1. Use an existing test network (testnet) with a key of your own.\n2. Run basic Cyber-js commands in a script that you run using the CLI.\n\nAdditionally, you can choose to:\n\n1. Start a local chain that exposes RPCs instead of using a testnet.\n2. Run the same basic Cyber-js commands, but for this local chain.\n\nAlong the way, you learn the basic Cyber-js concepts needed to start interacting with the Cosmos Ecosystem.\n\n## Script preparation\n\nA small, ready-made repository exists so you can experiment with Cyber-js. Clone it from here. You need [NodeJs](https://nodejs.org/en/download/). If you open the folder in [Visual Studio Code](https://code.visualstudio.com/Download), the IDE should give you all the coding help you require. In the cloned folder you need to install the required modules:\n\n```sh\n$ npm install\n```\n\nCreate a new file named `experiment.ts`. In it, put these lines to confirm it works:\n\n```typescript\nconst runAll = async(): Promise<void> => {\n    console.log(\"TODO\")\n}\n\nrunAll()\n```\n\nTo execute, this TypeScript file needs to be compiled into JavaScript before being interpreted by NodeJs. Add this as a run target in `package.json`:\n\n```json\n...\n    \"scripts\": {\n        ...\n        \"experiment\": \"ts-node experiment.ts\"\n    }\n...\n```\n\nConfirm that it does what you want:\n\n```sh\n$ npm run experiment\n```\n\nThis returns:\n\n```\n> ts-node experiment.ts\n\nTODO\n```\n\nYou will soon make this script more meaningful. With the basic script ready, you need to prepare some elements.\n\n## Testnet preparation\n\nThe Bostrom has a number of testnets running. The Bostrom is currently running a [public testnet](https://github.com/cybercongress/cybernode) for the Space-pussy-1 upgrade that you are connecting to and running your script on. You need to connect to a public node so that you can query information and broadcast transactions. One of the available nodes is:\n\n```\nRPC: https://rpc.space-pussy-1.cybernode.ai\n```\n\nYou need a wallet address on the testnet and you must create a 24-word mnemonic in order to do so. CosmJS can generate one for you. Create a new file `generate_mnemonic.ts` with the following script:\n\n```typescript\nimport { DirectSecp256k1HdWallet } from \"@cosmjs/proto-signing\"\n\nconst generateKey = async (): Promise<void> => {\n    const wallet: DirectSecp256k1HdWallet = await DirectSecp256k1HdWallet.generate(24)\n    process.stdout.write(wallet.mnemonic)\n    const accounts = await wallet.getAccounts()\n    console.error(\"Mnemonic with 1st account:\", accounts[0].address)\n}\n\ngenerateKey()\n```\n\nNow create a **key** for our imaginary user **Alice**:\n\n*Note: You likely need to update Node.js to a later version if this fails. Find a guide [here](https://phoenixnap.com/kb/update-node-js-version).\n\n```sh\n$ npx ts-node generate_mnemonic.ts > testnet.alice.mnemonic.key\n```\n\nWhen done, it should also tell you the address of the first account:\n\n```\nMnemonic with 1st account: bostrom1sw8xv3mv2n4xfv6rlpzsevusyzzg78r3e78xnp\n```\n\nTemporarily keep this address for convenience, although CosmJS can always recalculate it from the mnemonic. Privately examine the file to confirm it contains your 24 words.\n\n<HighlightBox type=\"warn\">\n\nImportant considerations:\n\n1. `process.stdout.write` was used to avoid any line return. Be careful not to add any empty lines or any other character in your `.key` file (this occurs with VSCode under certain conditions). If you add any characters, ComsJs may not be able to parse it.\n2. Adjust the `.gitignore` file to not commit your `.key` file by mistake:\n\n    ```\n    node_modules\n    *.key\n    ```\n\n</HighlightBox>\n\n<!-- <HighlightBox type=\"tip\">\n\nFor your convenience, we have a branch available [here](https://github.com/b9lab/cosmjs-sandbox/tree/file-preparation) that contains all the code and files you've added so far.\n\n</HighlightBox> -->\n\n## Add your imports\n\nYou need a small, simple interface to a blockchain, one which could eventually have users. Good practice is to refrain from requesting a user address until necessary (e.g. when a user clicks a relevant button). Therefore, in `experiment.ts` you first use the read-only client. Import it at the top of the file:\n\n```typescript\nimport { CyberClient } from \"@cybercongress/cyber-js\"\n```\n\n<HighlightBox type=\"info\">\n\nNote that VSCode assists you to auto-complete [`CyberClient`](https://github.com/cybercongress/soft3.js/blob/main/src/cyberclient.ts#L144) if you type <kbd>CTRL-Space</kbd> inside the `{}` of the `import` line.\n\n</HighlightBox>\n\n## Define your connection\n\nNext, you need to tell the client how to connect to the RPC port of your blockchain:\n\n```typescript\nconst rpc = \"https://rpc.space-pussy-1.cybernode.ai\"\n```\n\nInside the `runAll` function you [initialize the connection](https://github.com/cybercongress/soft3.js/blob/main/src/cyberclient.ts#L165) and immediately [check](https://github.com/cybercongress/soft3.js/blob/main/src/cyberclient.ts#L244) you connected to the right place:\n\n```typescript\nconst runAll = async(): Promise<void> => {\n    const client = await CyberClient.connect(rpc)\n    console.log(\"With client, chain id:\", await client.getChainId(), \", height:\", await client.getHeight())\n}\n```\n\nRun again to check with `npm run experiment`, and you get:\n\n```\nWith client, chain id: space-pussy-1 , height: 9507032\n```\n\n## Get a balance\n\nNormally you would not yet have access to your user's address. However, for this exercise you need to know how many tokens Alice has, so add a temporary new command inside `runAll`:\n\n```typescript\nconsole.log(\n    \"Alice balances:\",\n    await client.getAllBalances(\"bostrom1sw8xv3mv2n4xfv6rlpzsevusyzzg78r3e78xnp\"), // <-- replace with your generated address\n)\n```\n\n`getAllBalances` is used because the default token name is not yet known. When you run it again, you get:\n\n```\nAlice balances: []\n```\n\nIf you just created this account, Alice's balance is zero. Alice needs tokens to be able to send transactions and participate in the network. A common practice with testnets is to expose **faucets** (services that send you test tokens for free, within limits).\n\nRequest tokens for Alice by entering this command in command line:\n\n```sh\ncurl --header \"Content-Type: application/json\" --request POST --data '{\"denom\":\"boot\",\"address\":\"bostrom1sw8xv3mv2n4xfv6rlpzsevusyzzg78r3e78xnp\"}' https://space-pussy-1.cybernode.ai/credit\n```\n\nCheck that Alice received the tokens with `npm run experiment`.\n\n## Prepare a signing client\n\nIf you go through the methods inside [`CyberClient`](https://github.com/cybercongress/soft3.js/blob/main/src/cyberclient.ts#L144), you see that it only contains query-type methods and none for sending transactions.\n\nNow, for Alice to send transactions, she needs to be able to sign them. And to be able to sign transactions, she needs access to her _private keys_ or _mnemonics_. Or rather she needs a client that has access to those. That is where [`SigningCyberClient`](https://github.com/cybercongress/soft3.js/blob/main/src/signingcyberclient.ts#L239) comes in. Conveniently, `SigningCyberClient` inherits from `CyberClient`.\n\nUpdate your import line:\n\n```typescript\nimport { SigningCyberClient, CyberClient } from \"@cybercongress/cyber-js\"\n```\n\nLook at its declaration by right-clicking on the `SigningCyberClient` in your imports and choosing <kbd>Go to Definition</kbd>.\n\nWhen you instantiate `SigningCyberClient` by using the [`connectWithSigner`](https://github.com/cybercongress/soft3.js/blob/main/src/signingcyberclient.ts#L247) method, you need to pass it a [**signer**](https://github.com/cybercongress/soft3.js/blob/main/src/signingcyberclient.ts#L249). In this case, use the [`OfflineDirectSigner`](https://github.com/cybercongress/soft3.js/blob/main/src/signingcyberclient.ts#L29) interface.\n\n<HighlightBox type=\"info\">\n\nThe recommended way to encode messages is by using `OfflineDirectSigner`, which uses Protobuf. However, hardware wallets such as Ledger do not support this and still require the legacy Amino encoder. If your app requires Amino support, you have to use the `OfflineAminoSigner`.\n<br></br>\nRead more about encoding [here](https://docs.cosmos.network/master/core/encoding.html).\n\n</HighlightBox>\n\nThe signer needs access to Alice's **private key**, and there are several ways to accomplish this. In this example, use Alice's saved **mnemonic**. To load the mnemonic as text in your code you need this import:\n\n```typescript\nimport { readFile } from \"fs/promises\"\n```\n\nThere are several implementations of `OfflineDirectSigner` available. The [`DirectSecp256k1HdWallet`](https://github.com/cosmos/cosmjs/blob/0f0c9d8/packages/proto-signing/src/directsecp256k1hdwallet.ts#L133) implementation is most relevant to us due to its [`fromMnemonic`](https://github.com/cosmos/cosmjs/blob/0f0c9d8/packages/proto-signing/src/directsecp256k1hdwallet.ts#L140-L141) method. Add the import:\n\n```typescript\nimport { DirectSecp256k1HdWallet, OfflineDirectSigner } from \"@cosmjs/proto-signing\"\n```\n\nThe `fromMnemonic` factory function needs a string with the mnemonic. You read this string from the mnemonic file. Create a new top-level function that returns an `OfflineDirectSigner`:\n\n```typescript [https://github.com/b9lab/cosmjs-sandbox/blob/4168b97/experiment.ts#L9-L13]\nconst getAliceSignerFromMnemonic = async (): Promise<OfflineDirectSigner> => {\n    return DirectSecp256k1HdWallet.fromMnemonic((await readFile(\"./testnet.alice.mnemonic.key\")).toString(), {\n        prefix: \"bostrom\",\n    })\n}\n\n```\n\nThe Bostrom Testnet uses the `bostrom` address prefix. This is the default used by `DirectSecp256k1HdWallet`, but you are encouraged to explicitly define it as you might be working with different prefixes on different blockchains. In your `runAll` function, add:\n\n```typescript\nconst aliceSigner: OfflineDirectSigner = await getAliceSignerFromMnemonic()\n```\n\nAs a first step, confirm that it recovers Alice's address as expected:\n\n```typescript\nconst alice = (await aliceSigner.getAccounts())[0].address\nconsole.log(\"Alice's address from signer\", alice)\n```\n\nNow add the line that finally creates the signing client:\n\n```typescript\nconst signingClient = await SigningCyberClient.connectWithSigner(rpc, aliceSigner)\n```\n\nCheck that it works like the read-only client that you used earlier, and from which [it inherits](https://github.com/cybercongress/soft3.js/blob/main/src/signingcyberclient.ts#L239), by adding:\n\n```typescript\nconsole.log(\n    \"With signing client, chain id:\",\n    await signingClient.getChainId(),\n    \", height:\",\n    await signingClient.getHeight()\n)\n```\n\n## Send tokens\n\nAlice can now send some tokens to Bob, but to do so she also needs to pay the network's gas fee. How much gas should she use, and at what price?\n\nShe can copy this:\n\n```\nGas fee: [ { denom: 'boot', amount: '0' } ]\nGas limit: 200000\n```\n\nWith the gas information now decided, how does Alice structure her command so that she sends tokens to Bob ? `SigningCyberClient`'s [`sendTokens`](https://github.com/cybercongress/soft3.js/blob/main/src/signingcyberclient.ts#L604) function takes a `Coin[]` as input. `Coin` is simply defined as:\n\n```typescript\nexport interface Coin {\n    denom: string;\n    amount: string;\n}\n```\n\nAlice can pick any `denom` and any `amount` as long as she owns them, the signing client signs the transaction and broadcasts it. In this case it is:\n\n```typescript\n{ denom: \"boot\", amount: \"1\" }\n```\n\nWith this gas and coin information, add the command:\n\n```typescript [https://github.com/b9lab/cosmjs-sandbox/blob/2c7b137/experiment.ts#L57-L63]\n// Check the balance of Alice and the Faucet\nconsole.log(\"Alice balance before:\", await client.getAllBalances(alice))\nconsole.log(\"Bob balance before:\", await client.getAllBalances(bobAddress))\n// Execute the sendTokens Tx and store the result\nconst result = await signingClient.sendTokens(\n    alice,\n    bobAddress,\n    [{ denom: \"boot\", amount: \"1\" }],\n    {\n        amount: [{ denom: \"boot\", amount: \"0\" }],\n        gas: \"200000\",\n    },\n)\n// Output the result of the Tx\nconsole.log(\"Transfer result:\", result)\n```\n\nRun this with `npm run experiment` and you should get:\n\n```\n...\nTransfer result: {\n  code: 0,\n  height: 0,\n  rawLog: '[]',\n  transactionHash: '104BFAB101D8EB88C14D7EFCF50F96F29DA02C7DD85C70FAAB1D96D41C2FA04E',\n  gasUsed: 0,\n  gasWanted: 0\n}\n```\nCheck that Alice sended the tokens with [`getTx`](https://github.com/cybercongress/soft3.js/blob/main/src/cyberclient.ts#L314)\n\n```typescript\nconst result = await client.getTx(\"104BFAB101D8EB88C14D7EFCF50F96F29DA02C7DD85C70FAAB1D96D41C2FA04E\")\n```\n\n\nThis concludes your first use of cyber-js to send tokens.\n"
  },
  {
    "path": "docs/setup_cyber_configuration.md",
    "content": "# Setup config.toml\n\nCorrect configuration is one of the main keys to consistent and proper functioning of your node no matter if it is a validator or a sentinel/service node.\n\nThroughout this document, we will check all the key points of the `config.toml` file and explain how to configure them for all use-cases.\n\nWe will operate a basic configuration file (according to the number of the line in the actual file), generated after the initialization of cyber daemon and typically located inside `$HOME/.cyber/config directory`.\n\n> All changes made to the `config.toml` file, require to restart cyber to take effect!\n\n## Port / Address configuration\n\n### RPC port\n\nFirst of all, let's look through the ports cyber uses to communicate with the outside world. On *line 84* the specified port is used for an RPC server (TCP and UNIX websocket connections):\n\n```bash\n# TCP or UNIX socket address for the RPC server to listen on\nladdr = \"tcp://127.0.0.1:26657\"\n```\n\nAfter the node starts the RPC server provides endpoints to check chain/node parameters, accepts $POST transactions and so on. It can be opened locally using your favourite browser via: `http://localhost:26657`.\n\n- We do not recommend a validator node to open this port to the outside world, as it may allow anyone to produce transactions using your node and allows DOS attacks (you don't want your validator attacked, right?). So let's leave it like this:\n\n```bash\nladdr = \"tcp://127.0.0.1:26657\"\n```\n\n- For Sentinel nodes this should be kept the same as for validators:\n\n```bash\nladdr = \"tcp://127.0.0.1:26657\"\n```\n\n- For Service nodes, when use cases include remote access to the RPC for yourself or for your great service, it is allowable to expose it to the outside by using the following values:\n\n```bash\nladdr = \"tcp://0.0.0.0:26657\"\n```\n\nIf you would like to make the RPC server respond on a different port, you may change this value to whatever you'd like (just make sure it will not cross with any of the other services), for example, to change it to `9588` use:\n\n```bash\n# TCP or UNIX socket address for the RPC server to listen on\nladdr = \"tcp://0.0.0.0:9588\"\n```\n\n### Cyberd communication port\n\nOn *line 163* we can find the following:\n\n```bash\n# Address to listen for incoming connections\nladdr = \"tcp://0.0.0.0:26656\"\n```\n\nThis is the way the node communicates with other nodes in the chain. For all possible cases(**Validator, Sentinel, Service**) leave it as default, bound to  `0.0.0.0`. And if you need to change the port number to something different like `35622` just use:\n\n```bash\nladdr = \"tcp://0.0.0.0:35622\"\n```\n\nIf changed, your node peer address would be changed accordingly: `75e8f44072b0dd598dfa95aaf9b5f2c60f956819@your_external_ip:35622`.\n\n### Prometheus collectors port\n\nOn *line 325* the port for Prometheus monitoring service is located: \n\n```bash\n# Address to listen for Prometheus collector(s) connections\nprometheus_listen_addr = \":26660\"\n```\n\nIt is useful if you want to monitor remotely the condition of your node using the [Prometheus](https://prometheus.io/) metrics collector service and could be changed to whatever you like `23456`:\n\n```bash\nprometheus_listen_addr = \":23456\"\n```\n\nDon't forget to enable Prometheus metrics by changing to `true` on *line 322*, if needed:\n\n```bash\n# When true, Prometheus metrics are served under /metrics on\n# PrometheusListenAddr.\n# Check out the documentation for the list of available metrics.\nprometheus = true\n```\n\n### External address\n\nOn *line 169* you should find the following:\n\n```bash\n# Address to advertise to peers for them to dial\n# If empty, will use the same port as the laddr,\n# and will introspect on the listener or use UPnP\n# to figure out the address.\nexternal_address = \"\"\n```\n\nThis line implies specifying your external IP address, which means the presence of a static external address at your network connection. If you don't have one, just skip it.\n\n- For Validator nodes, you may skip it, until you have **enough private peers** to get synced with. Otherwise, you have to specify your external static IP to improve peer discovery for your node. Also, don't forget to change the port according to *line [163](#cyber-communication-port)*:\n\n```bash\nexternal_address = \"tcp://<your_external_static_ip>:26656\"\n```\n\n- For Sentinel nodes it is a good idea to specify the IP for better peer discovery:\n\n```bash\nexternal_address = \"tcp://<your_external_static_ip>:26656\"\n```\n\n- For Servie nodes this setting can be the same as for Sentinel nodes:\n\n```bash\nexternal_address = \"tcp://<your_external_static_ip>:26656\"\n```\n\nAnd again, all of the above settings apply to the cases when **STATIC EXTERNAL IP** is available.\n\n### Allow duplicated IP's\n\n*Line 224* of the config.toml holds the following:\n\n```bash\n# Toggle to disable guard against peers connecting from the same ip.\nallow_duplicate_ip = false\n```\n\nThis variable configures the possibility for different peers to be connected from the same IP. Lets imagine a situation where you run 2 nodes (lets say that the node ID of the first one is: `75e8f44072b0dd598dfa95aaf9b5f2c60f956819` and the second one is: `d0518ce9881a4b0c5872e5e9b7c4ea8d760dad3f`) on one internet provider, with an external IP of 92.23.45.123. In this case, all other nodes in the network with `allow_duplicate_ip = false` will see attempts to connect from peers `d0518ce9881a4b0c5872e5e9b7c4ea8d760dad3f@92.23.45.123:26656` and `75e8f44072b0dd598dfa95aaf9b5f2c60f956819@92.23.45.123:36656` and will block the one which comes last because the originating IP address is the same for both nodes. If this case applies to you, change this setting to the following:\n\n```bash\n# Toggle to disable guard against peers connecting from the same ip.\nallow_duplicate_ip = true\n```\n\n## P2P configuration\n\n### Seed nodes\n\nOn *line 172* of the config.toml we see the following:\n\n```bash\n# Comma separated list of seed nodes to connect to\nseeds = \"\"\n```\n\nThis line is dedicated to the list of seed nodes you want to establish a connection with. To get some seed and peers addresses take a look at networks [repository](https://github.com/cybercongress/networks).\n\n- For validators with sentinel nodes or with a decent quantity of peers connected it is not required to fill it out:\n\n```bash\nseeds = \"\"\n```\n\n- For Sentinel nodes and Service nodes it's a good idea to fill it out with a couple of seed node addresses, separated with commas: \n\n```bash\nseeds = \"<seed_node1_ID>@<seed_node1_ip>:<port>,<seed_node2_ID>@<seed_node2_ip>:<port>\"\n```\n\n### Persistent peers\n\nThe place to add persistent peers is located on *line 175.* Presence of persistent peers is very important for the correct functioning of the node:\n\n```bash\n# Comma separated list of nodes to keep persistent connections to\npersistent_peers = \"\"\n```\n\n- For Validator nodes you have to fill out this line with a decent amount of peers you **trust**, otherwise, your validator node address will be exposed. In the perfect case scenario, you should add to this section only the addresses of your sentinel nodes:\n\n```bash\npersistent_peers =\"<sentinel_node1_ID>@<sentinel_node1_ip>:<port>,<sentinel_node2_ID>@<sentinel_node2_ip>:<port>\"\n```\n\n- For Sentinel nodes and Service nodes add as many peers as possible to keep a persistent connection and network stability, but **DO NOT** put here you'r validator nodes ID's:\n\n```bash\npersistent_peers =\"<node1_ID>@<node1_ip>:<port>,<node2_ID>@<node2_ip>:<port>,...,<node_n_ID>@<node_n_ip>:<port>\"\n```\n\n### Peer Exchange Reactor\n\n*Line 212* shows by default:\n\n```bash\n# Set true to enable the peer-exchange reactor\npex = true\n```\n\nThis is a peer exchange module, which is responsible for exchanging node IDs across the network.\n\n- For Validator nodes with Sentinel architecture set this to be disabled:\n\n```bash\npex = false\n```\n\n- For Sentinel nodes and Service nodes leave as default:\n\n```bash\npex = true\n```\n\n### Private peers ID's\n\nOn *line 221* we see:\n\n```bash\n# Comma separated list of peer IDs to keep private (will not be gossiped to other peers)\nprivate_peer_ids = \"\"\n```\n\nThis is the list of peers which IDs should not gossip to others.\n\n- For Validator nodes, leave as default:\n\n```bash\nprivate_peer_ids = \"\"\n```\n\n- For Sentinel nodes, add your validator/s address  here:\n\n```bash\nprivate_peer_ids = \"<validator_node_ID>@<validator_node_ip>:<port>\"\n```\n\n- For Service nodes leave blank:\n\n```bash\nprivate_peer_ids = \"\"\n```\n\n## Node Index, Naming\n\n### Indexed tags\n\nA node can index and store a decent amount of keys and values with regards to transactions, accounts etc. *Lines 306 and 304* are responsible for this:\n\n```bash\n# You can also index transactions by height by adding \"tx.height\" key here.\n#\n# It's recommended to index only a subset of keys due to possible memory\n# bloat. This is, of course, depends on the indexer's DB and the volume of\n# transactions.\nindex_keys = \"\"\n\n# When set to true, tells indexer to index all compositeKeys (predefined keys:\n# \"tx.hash\", \"tx.height\" and all keys from DeliverTx responses).\n#\n# Note this may be not desirable (see the comment above). IndexKeys has a\n# precedence over IndexAllKeys (i.e. when given both, IndexKeys will be\n# indexed).\nindex_all_keys = false\n```\n\n- For Validator and Sentinel nodes this is not necessary, so leave as default: \n\n```bash\nindex_keys = \"\"\n\nindex_all_keys = false\n```\n\n- For Service nodes, you should specify a subset of keys you want to index:\n\n```bash\nindex_keys = \"tx.hash,tx.height,...etc..\"\n\nindex_all_keys = true\n```\n\n### Naming\n\nTo setup up your node moniker please refer to *line 16* and type in whatever you want to have as moniker:\n\n```bash\n# A custom human readable name for this node\nmoniker = \"rocket_node\"\n```\n"
  },
  {
    "path": "docs/setup_dev_env.md",
    "content": "# Setup development environment\n\n## Prestart\n* Install [Golang 1.11+](https://golang.org/doc/install)\n* Install [GoLand IDE](https://www.jetbrains.com/go/)\n\n## Import project to GoLand\nOpen Project in GoLand by selecting: Open Project -> selecting cloned repository root folder\n![Open project](https://ipfs.io/ipfs/QmYQxSKzQkkpCofuHmbJZqYoTo4cuvHQuUNYkJRBKgSduL)\n\nEnable **go mod** package management\n![Enable go mod](https://ipfs.io/ipfs/Qmaz3o7LjAG9bNhE8VkHSUokM8EqgfcVXT9R5qB3XxLZSe)\nWait for dependency downloading and indexation\n\n## Add Run Configurations\n###Add testnet configuration\n![Generate testnet](./img/generate-testnet.png)\n\n### Add run configuration with GPU\n![Run node](./img/run-node.png)\n\n#### Notes about GPU dev environment\n\n```\nTO DO\n```\n\n### Add run configuration with CPU\n![Run node CPU](./img/run-node-cpu.png)\n\n```\nstart --allow-search=true --compute-rank-on-gpu=false --home=./mytestnet/node0/cyberd\n```\n\n### Add reset configuration\n![Reset node data](./img/reset-node-data.png)\n\n\n## Running Node\n### Generate testnet\nBefore node running, setup testnet with run configuration **D TESTNET**. \n- Folder **/mytestnet** will be added to the project root.\n- In **/node0** subfolder you can find daemon and cli folders.\n- Daemon folder will contain validator node data.\n- In **/cyberdcli** folder you can find initial validator seed.\n\n```\nmytestnet\n├── gentxs\n│   └── node0.json\n└── node0\n    ├── cyberd\n    │   ├── config\n    │   │   ├── config.toml\n    │   │   ├── genesis.json\n    │   │   ├── node_key.json\n    │   │   └── priv_validator_key.json\n    │   └── data\n    │       ├── priv_validator_state.json\n    └── cyberdcli\n        └── key_seed.json\n```\n\n### Run with GPU or CPU\nAfter, just run **RUN** node configuration.\n\n\n```\nI[2019-05-15|15:06:56.735] Starting ABCI with Tendermint                module=main \nI[2019-05-15|15:06:56.789] Loading mem state                            module=main \nI[2019-05-15|15:06:56.789] App loaded                                   module=main time=118.743µs\nI[2019-05-15|15:06:56.793] Search index loaded!                         module=main time=3.416449ms\nI[2019-05-15|15:06:56.793] Search index starting listen new links       module=main \nI[2019-05-15|15:06:56.793] Search index starting listen new rank        module=main \nI[2019-05-15|15:06:56.910] Applying genesis                             module=main \nI[2019-05-15|15:06:56.914] File with links not found. Empty set will be used module=main \nI[2019-05-15|15:06:56.914] Genesis applied                              module=main time=3.420262ms\nE[2019-05-15|15:06:56.947] Couldn't connect to any seeds                module=p2p \nI[2019-05-15|15:07:02.014] Executed block                               module=state height=1 validTxs=0 invalidTxs=0\nI[2019-05-15|15:07:02.014] Rank calculated                              module=main time=2.069µs links=0 cids=0 hash=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nI[2019-05-15|15:07:02.047] Committed state                              module=state height=1 txs=0 appHash=E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855\nI[2019-05-15|15:07:07.078] Executed block                               module=state height=2 validTxs=0 invalidTxs=0\nI[2019-05-15|15:07:07.107] Committed state                              module=state height=2 txs=0 appHash=E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855\nI[2019-05-15|15:07:12.113] Executed block                               module=state height=3 validTxs=0 invalidTxs=0\nI[2019-05-15|15:07:12.144] Committed state                              module=state height=3 txs=0 appHash=E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855\nI[2019-05-15|15:07:17.168] Executed block                               module=state height=4 validTxs=0 invalidTxs=0\nI[2019-05-15|15:07:17.207] Committed state                              module=state height=4 txs=0 appHash=E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855\n```\n\n### You may stop, and RUN again\n```\nI[2019-05-15|14:48:58.191] Starting ABCI with Tendermint                module=main \nI[2019-05-15|14:48:58.343] Loading mem state                            module=main \nI[2019-05-15|14:48:58.344] App loaded                                   module=main time=929.472µs\nI[2019-05-15|14:48:58.399] Search index loaded!                         module=main time=16.928556ms\nI[2019-05-15|14:48:58.399] Search index starting listen new links       module=main \nI[2019-05-15|14:48:58.399] Search index starting listen new rank        module=main \nE[2019-05-15|14:48:58.638] Couldn't connect to any seeds                module=p2p \nI[2019-05-15|14:49:03.716] Executed block                               module=state height=2032 validTxs=0 invalidTxs=0\nI[2019-05-15|14:49:03.755] Committed state                              module=state height=2032 txs=0 appHash=1BAA91AD6FD9742B7B094204037F80A8174673BA0FF304D3FF5DFEEAF8FF7DDC\nI[2019-05-15|14:49:08.759] Executed block                               module=state height=2033 validTxs=0 invalidTxs=0\nI[2019-05-15|14:49:08.793] Committed state                              module=state height=2033 txs=0 appHash=1BAA91AD6FD9742B7B094204037F80A8174673BA0FF304D3FF5DFEEAF8FF7DDC\nI[2019-05-15|14:49:13.826] Executed block                               module=state height=2034 validTxs=0 invalidTxs=0\nI[2019-05-15|14:49:13.860] Committed state                              module=state height=2034 txs=0 appHash=1BAA91AD6FD9742B7B094204037F80A8174673BA0FF304D3FF5DFEEAF8FF7DDC\n```\n\n### Reset\nYou can reset chains data to genesis at any time by executing **RESET** run configuration\n```\nI[2019-05-15|15:09:43.338] Removed existing address book                module=main file=mytestnet/node0/cyberd/config/addrbook.json\nI[2019-05-15|15:09:43.345] Removed all blockchain history               module=main dir=mytestnet/node0/cyberd/data\nI[2019-05-15|15:09:43.347] Reset private validator file to genesis state module=main keyFile=mytestnet/node0/cyberd/config/priv_validator_key.json stateFile=mytestnet/node0/cyberd/data/priv_validator_state.json\n```\n\n## Exploring\n\nGuide to all commands you may to research here: [Ultimate cyberd CLI guide](https://github.com/cybercongress/cyberd/blob/master/docs/help/ultimate-commands-guide_v2.md)\n\n### Before, build cyberd cli:\n```\ngo build -o cyberdcli ./cli\n```\nYou will get cyberdcli into you project root\n\n### Add keys:\n```\n./cyberdcli keys add validator --recover\n```\nEnter and you protection password-passphrase and mnemocic from file **mytestnet/node0/cyberdcli/key_seed.json**\n```\n\nEnter a passphrase to encrypt your key to disk:\nRepeat the passphrase:\n> Enter your bip39 mnemonic\ninhale enforce brand fever core smart draft ceiling among cluster orbit robust tonight elephant below twice goat update uncover employ spider brass consider shiver\n\nNAME:   TYPE:   ADDRESS:                                        PUBKEY:\nvalidator       local   cyber18l4v00ar4xsgzc4rr40tfctcjgyp7ppwysdcns    cyberpub1addwnpepq0zm06twxtf7ezv4nj9dhud9ds0fnhkks6qw4g8pdwxzh3evggpvvksh60l\n\n```\n\n### Query status:\n```\n./cyberdcli status --indent\n```\n\n```\n{\n  \"node_info\": {\n    \"protocol_version\": {\n      \"p2p\": \"7\",\n      \"block\": \"10\",\n      \"app\": \"0\"\n    },\n    \"id\": \"b99f3254757310d1f470f5cd0331b766f2a843f9\",\n    \"listen_addr\": \"tcp://0.0.0.0:26656\",\n    \"network\": \"chain-K6U4uZ\",\n    \"version\": \"0.30.1\",\n    \"channels\": \"4020212223303800\",\n    \"moniker\": \"node0\",\n    \"other\": {\n      \"tx_index\": \"on\",\n      \"rpc_address\": \"tcp://0.0.0.0:26657\"\n    }\n  },\n  \"sync_info\": {\n    \"latest_block_hash\": \"8059683636349AF9237FABFD147BAD89C7188571E37E8F09356B1837A88337BA\",\n    \"latest_app_hash\": \"E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855\",\n    \"latest_block_height\": \"134\",\n    \"latest_block_time\": \"2019-05-15T09:04:31.768026Z\",\n    \"catching_up\": false\n  },\n  \"validator_info\": {\n    \"address\": \"9C2C13F2B6608BF00BADF501A04E728AC5FF7ADC\",\n    \"pub_key\": {\n      \"type\": \"tendermint/PubKeyEd25519\",\n      \"value\": \"or7X/1BYcGE1cVX5e3vG9G76JPfXZDKTDg8YL3vtKzo=\"\n    },\n    \"voting_power\": \"10000000000\"\n  }\n}\n\n```\n\n### Query balance:\n```\n./cyberdcli query account cyber18l4v00ar4xsgzc4rr40tfctcjgyp7ppwysdcns \n```\n\n```\nAccount:\n  Address:       cyber18l4v00ar4xsgzc4rr40tfctcjgyp7ppwysdcns\n  Pubkey:        cyberpub1addwnpepq0zm06twxtf7ezv4nj9dhud9ds0fnhkks6qw4g8pdwxzh3evggpvvksh60l\n  Coins:         10000000000000000cyb\n  AccountNumber: 0\n  Sequence:      1\n```\n\n### Query validators:\n```\n./cyberdcli query staking validators  \n```\n\n```\nValidator\n  Operator Address:           cybervaloper18l4v00ar4xsgzc4rr40tfctcjgyp7ppwy3lgak\n  Validator Consensus Pubkey: cybervalconspub1zcjduepq52ld0l6stpcxzdt32huhk77x73h05f8h6ajr9ycwpuvz77ld9vaq6ka2zl\n  Jailed:                     false\n  Status:                     Bonded\n  Tokens:                     10000000000000000\n  Delegator Shares:           10000000000000000.000000000000000000\n  Description:                {node0 tst com.com det}\n  Unbonding Height:           0\n  Unbonding Completion Time:  1970-01-01 00:00:00 +0000 UTC\n  Minimum Self Delegation:    1\n  Commission:                 rate: 0.000000000000000000, maxRate: 0.000000000000000000, maxChangeRate: 0.000000000000000000, updateTime: 2019-05-15 08:52:36.324624 +0000 UTC\n\n```\n\n### Add links\n```\n./cyberdcli link --from=validator --cid-from=QmbTARMsUw9X2ZEbBaFXRu9JEqNN2g4VZ6DPgtgZH1opy9 --cid-to=QmNWkR2v4ZEzT43xiNKJcFPkFQioGbhqsWcE5qayWQHXAo --chain-id=chain-K6U4uZ\n./cyberdcli link --from=validator --cid-from=QmbTARMsUw9X2ZEbBaFXRu9JEqNN2g4VZ6DPgtgZH1opy9 --cid-to=Qmd7AaekFAxXedSQx3B3h8Wc5aeYPYRiYF83Vjb4tVLkMM --chain-id=chain-K6U4uZ\n./cyberdcli link --from=validator --cid-from=QmbTARMsUw9X2ZEbBaFXRu9JEqNN2g4VZ6DPgtgZH1opy9 --cid-to=QmfSh5obPXmkaTd9aaNCYWxnKHZTH6EYeEh7Hq7xgGnRVy --chain-id=chain-K6U4uZ\n```\n\n```\n{\"chain_id\":\"chain-K6U4uZ\",\"account_number\":\"0\",\"sequence\":\"1\",\"fee\":{\"amount\":null,\"gas\":\"200000\"},\"msgs\":[{\"type\":\"cyberd/Link\",\"value\":{\"address\":\"cyber18l4v00ar4xsgzc4rr40tfctcjgyp7ppwysdcns\",\"links\":[{\"from\":\"QmbTARMsUw9X2ZEbBaFXRu9JEqNN2g4VZ6DPgtgZH1opy9\",\"to\":\"QmNWkR2v4ZEzT43xiNKJcFPkFQioGbhqsWcE5qayWQHXAo\"}]}}],\"memo\":\"\"}\n\nconfirm transaction before signing and broadcasting [Y/n]: Y\nPassword to sign with 'validator':\nResponse:\n  Height: 1720\n  TxHash: 68C4F6389D36747A6A609CCDD9D44027A5234850FF065C78D1B1AB3FAC421541\n  Logs: [{\"msg_index\":0,\"success\":true,\"log\":\"\"}]\n  GasUsed: 31368\n  Tags: \n    - action = link\n```\n\n### Search and get links with rank:\n```\ncurl -X GET 'localhost:26657/search?cid=\"QmbTARMsUw9X2ZEbBaFXRu9JEqNN2g4VZ6DPgtgZH1opy9\"'\n```\n\n#### Links added, rank for them will be computed at next round:\n```\n{\n  \"jsonrpc\": \"2.0\",\n  \"id\": \"\",\n  \"result\": {\n    \"cids\": [\n      {\n        \"cid\": \"QmNWkR2v4ZEzT43xiNKJcFPkFQioGbhqsWcE5qayWQHXAo\",\n        \"rank\": 0\n      },\n      {\n        \"cid\": \"Qmd7AaekFAxXedSQx3B3h8Wc5aeYPYRiYF83Vjb4tVLkMM\",\n        \"rank\": 0\n      },\n      {\n        \"cid\": \"QmfSh5obPXmkaTd9aaNCYWxnKHZTH6EYeEh7Hq7xgGnRVy\",\n        \"rank\": 0\n      }\n    ],\n    \"total\": \"3\",\n    \"page\": \"0\",\n    \"perPage\": \"100\"\n  }\n}%   \n```\n\n#### When rank computed:\n```\n{\n  \"jsonrpc\": \"2.0\",\n  \"id\": \"\",\n  \"result\": {\n    \"cids\": [\n      {\n        \"cid\": \"QmNWkR2v4ZEzT43xiNKJcFPkFQioGbhqsWcE5qayWQHXAo\",\n        \"rank\": 0.056093750000000005\n      },\n      {\n        \"cid\": \"Qmd7AaekFAxXedSQx3B3h8Wc5aeYPYRiYF83Vjb4tVLkMM\",\n        \"rank\": 0.056093750000000005\n      },\n      {\n        \"cid\": \"QmfSh5obPXmkaTd9aaNCYWxnKHZTH6EYeEh7Hq7xgGnRVy\",\n        \"rank\": 0.056093750000000005\n      }\n    ],\n    \"total\": \"3\",\n    \"page\": \"0\",\n    \"perPage\": \"100\"\n  }\n}   \n```\n\n# #fuckgoogle\n\n"
  },
  {
    "path": "docs/soft2-soft3-concepts.md",
    "content": "# soft2 and soft3\n\n## content from presentation\n\n## particle\n\nA particle is a content identifier (CID) of the file in IPFS network. CIDs are based on the file’s cryptographic hash. That means:\n\n- Any difference in the content will produce a different CID and\n- The same content added to two different IPFS nodes using the same settings will produce the same CID.\n\nA file can be retrieved from IPFS network using this hash. Particles are written into Bostrom blockchain in a form of cyberlinks.\n\n## cyberlink\n\nA cyberlink is a link between two particles registered in Bostrom blockchain by a particular neuron.\n\nCyberlinks are the edges of the knowledge graph, particles are the vertexes (aka nodes).\n\n## neuron\n\nNeuron is an agent that creates cyberlinks. A neuron can be:\n\n- a private key holder;\n- a cosm-wasm contract (autonomus program).\n\n## knowledge graph\n\nThe knowledge graph is a directed weighted graph between particles.\n\nThe knowledge graph of Bostrom blockchain consists of pairs: each source particle is connected to a destination particle via cyberlink (with additional information of neuron's address and the height info). So each cyberlink recorded into blockchain in a form of:\n\n`source_particle - destination_particle - neuron - height`\n\n## content oracle\n"
  },
  {
    "path": "docs/supported_gpu_list.md",
    "content": "# Supported GPU list for cyber validators\n\nIn our `cyber protocol` implementation on `GO` proof of relevance root hash is computed on Cuda GPUs every round as the best way to calculate merkle tree faster. We need to load the whole graph in memory for calculating that's why memory volume is important. GPU with 6Gb memory can calculate graph with ~200 M links.\n\n|GPU|Supported|Tested|CUDA cores|Memory|Year of production|\n|---|---|---|---|---|---|\n|[GEFORCE RTX 2080 Ti](https://www.nvidia.com/en-us/geforce/graphics-cards/rtx-2080-ti/)|:white_check_mark:|:x:|4352|11GB GDDR 6|2018|\n|[GEFORCE RTX 2080](https://www.nvidia.com/en-us/geforce/graphics-cards/rtx-2080/)|:white_check_mark:|:x:|4352|11GB GDDR 6|2018|\n|[GEFORCE RTX 2070](https://www.nvidia.com/en-us/geforce/graphics-cards/rtx-2070/)|:white_check_mark:|:x:|2304|8 GB GDDR6|2019|\n|[GeForce RTX 2060](https://www.nvidia.com/en-us/geforce/graphics-cards/rtx-2060/)|:white_check_mark:|:x:|1920|6 GB GDDR6|2019|\n|[GEFORCE GTX 1660 Ti](https://www.nvidia.com/en-us/geforce/graphics-cards/gtx-1660-ti/)|:white_check_mark:|:x:|1536|6GB GDDR6|2019|\n|[GEFORCE GTX 1660](https://www.nvidia.com/en-us/geforce/graphics-cards/gtx-1660-ti/)|:white_check_mark:|:x:|1408|6GB GDDR5|2019|\n|[GEFORCE GTX 1650](https://www.nvidia.com/en-us/geforce/graphics-cards/gtx-1650/)|:white_check_mark:|:white_check_mark:|896|4GB GDDR5|2019|\n|[GeForce GTX 1080](https://www.nvidia.com/en-us/geforce/products/10series/geforce-gtx-1080/)|:white_check_mark:|:white_check_mark:|2560|8 GB GDDR5X|2016|\n|[GeForce GTX 980](https://www.geforce.com/hardware/desktop-gpus/geforce-gtx-980/specifications)|:white_check_mark:|:x:|2048|4 GB GDDR5|2014|\n|[TITAN Xp](https://www.nvidia.com/en-us/titan/titan-xp/)|:white_check_mark:|:x:|3840|12 GB GDDR5|2017|\n|[GeForce GTX 1080 Ti](https://www.nvidia.com/en-us/geforce/products/10series/geforce-gtx-1080-ti/)|:white_check_mark:|:x:|3584|11 GB GDDR5X|2017|\n|[GeForce GTX 980 Ti](https://www.nvidia.com/en-us/geforce/products/10series/geforce-gtx-1080-ti/)|:white_check_mark:|:x:|2816|6 GB GDDR5|2015|\n|[GeForce GTX 1070 Ti](https://www.nvidia.com/en-us/geforce/products/10series/geforce-gtx-1070-ti/)|:white_check_mark:|:white_check_mark:|2432|8 GB GDDR5|2017|\n|[GeForce GTX 1070](https://www.nvidia.com/en-us/geforce/products/10series/geforce-gtx-1070-ti/)|:white_check_mark:|:white_check_mark:|1920|8 GB GDDR5|2016|\n|[GeForce GTX 970](https://www.nvidia.com/en-us/geforce/products/10series/geforce-gtx-1070-ti/)|:white_check_mark:|:x:|1664|4 GB GDDR5|2015|\n|[GEFORCE GTX 1060 6GB](https://www.nvidia.com/en-us/geforce/products/10series/geforce-gtx-1060/)|:white_check_mark:|:white_check_mark:|1280|6 GB GDDR5|2016|\n|[GeForce GTX 1050 Ti 4GB](https://www.nvidia.com/en-us/geforce/products/10series/geforce-gtx-1050/)|:white_check_mark:|:white_check_mark:|768|4 GB GDDR5|2016|\n|[GeForce GTX 1050 4GB mobile](https://www.techpowerup.com/gpu-specs/asus-gtx-1050-mobile-4-gb.b5497)|:white_check_mark:|:white_check_mark:|640|4 GB GDDR5|2020|\n|[GeForce GTX 745 (OEM) 4GB](https://www.geforce.com/hardware/desktop-gpus/geforce-gtx-745-oem/specifications)|:white_check_mark:|:x:|768|4 GB GDDR3|2014|\n|[GeForce GTX TITAN X](https://www.geforce.com/hardware/desktop-gpus/geforce-gtx-titan-x/specifications)|:white_check_mark:|:x:|3072|12 GB GDDR5|2016|\n|[GeForce GTX TITAN Z](https://www.geforce.com/hardware/desktop-gpus/geforce-gtx-titan-z/specifications)|:white_check_mark:|:x:|5760|12 GB GDDR5|2014|\n|[GeForce GTX TITAN Black](https://www.geforce.com/hardware/desktop-gpus/geforce-gtx-titan-black/specifications)|:white_check_mark:|:x:|2880|6 GB GDDR5|2014|\n|[GeForce GTX 770](https://www.geforce.com/hardware/desktop-gpus/geforce-gtx-770/specifications)|:white_check_mark:|:x:|1536|4 GB GDDR5|2013|\n|[Nvidia Quadro K2200](https://www.nvidia.com/content/dam/en-zz/Solutions/design-visualization/documents/75509_DS_NV_Quadro_K2200_US_NV_HR.pdf)|:white_check_mark:|:white_check_mark:|640|4 GB GDDR5|2016|\n\nIf you have used some GPU from `column` supported but without :white_check_mark: at `tested` column please submit a pull request with corrections. If you have tested GPU and it's not contained in that list submit PR too.\n\n**Note** If you using some old cards (like GTX 770, or older) make sure your card will be supported by al least **v.410** of NVIDIA diver for Linux.\n"
  },
  {
    "path": "docs/ultimate_commands_guide.md",
    "content": "# Ultimate cyber CLI guide. Chain: bostrom\n\n## Install cyber client\n\nIt is possible to interact with cyber even if you don't have your own node. All you need to do is install `cyber` client on your machine using the script below, paste it in the console (currently Linux supported):\n\n```bash\nbash < <(curl -s https://raw.githubusercontent.com/cybercongress/go-cyber/main/scripts/install_cyber.sh)\n```\n\nAfter installation, you will be able to use `cyber` to [import accounts](#account-management), create links or swap tokens.\n\nIn case you have your own node, which is already running inside Docker container, please add `docker exec -ti container-name` before every cyber command:\n\n```bash\ndocker exec -ti bostrom cyber --help\n```\n\nFirst of all, I would like to encourage you to use the  `--help` feature if you want to have a better experience using cyber. This is a really easy way to find all the necessary commands with the appropriate options and flags.\n\nFor example, you can enter:\n\n```bash\ncyber --help\n```\n\nYou should see this message:\n\n```bash\nUsage:\n  cyber [command]\n\nAvailable Commands:\n  add-genesis-account Add a genesis account to genesis.json\n  collect-gentxs      Collect genesis txs and output a genesis.json file\n  config              Create or query an application CLI configuration file\n  debug               Tool for helping with debugging your application\n  export              Export state to JSON\n  gentx               Generate a genesis tx carrying a self delegation\n  help                Help about any command\n  init                Initialize private validator, p2p, genesis, and application configuration files\n  keys                Manage your applications keys\n  migrate             Migrate genesis to a specified target version\n  query               Querying subcommands\n  start               Run the full node\n  status              Query remote node for status\n  tendermint          Tendermint subcommands\n  testnet             Initialize files for a simapp testnet\n  tx                  Transactions subcommands\n  unsafe-reset-all    Resets the blockchain database, removes address book files, and resets data/priv_validator_state.json to the genesis state\n  validate-genesis    validates the genesis file at the default location or at the location passed as an arg\n  version             Print the application binary version information\n```\n\nThe help feature works like a pyramid, you can use it with any command to find available options, subcommands and flags. For example, lets explore the `query` subcommands:\n\n```bash\ncyber query --help\n```\n\nYou can see the structure of the subcommand:\n\n```bash\nUsage:\n  cyber query [flags]\n  cyber query [command]\n```\n\nAnd the available subcommands and flags:\n\n```bash\nQuerying subcommands\n\nAliases:\n  query, q\n\nAvailable Commands:\n  account                  Query for account by address\n  auth                     Querying commands for the auth module\n  authz                    Querying commands for the authz module\n  bandwidth                Querying commands for the bandwidth module\n  bank                     Querying commands for the bank module\n  block                    Get verified data for a the block at given height\n  distribution             Querying commands for the distribution module\n  dmn                      Querying commands for the dmn module\n  evidence                 Query for evidence by hash or for all (paginated) submitted evidence\n  feegrant                 Querying commands for the feegrant module\n  gov                      Querying commands for the governance module\n  graph                    Querying commands for the graph module\n  grid                     Querying commands for the grid module\n  ibc                      Querying commands for the IBC module\n  ibc-transfer             IBC fungible token transfer query subcommands\n  liquidity                Querying commands for the liquidity module\n  mint                     Querying commands for the minting module\n  params                   Querying commands for the params module\n  rank                     Querying commands for the rank module\n  resources                Querying commands for the resources module\n  slashing                 Querying commands for the slashing module\n  staking                  Querying commands for the staking module\n  tendermint-validator-set Get the full tendermint validator set at given height\n  tx                       Query for a transaction by hash, \"<addr>/<seq>\" combination or comma-separated signatures in a committed block\n  txs                      Query for paginated transactions that match a set of events\n  upgrade                  Querying commands for the upgrade module\n  wasm                     Querying commands for the wasm module\n\nFlags:\n      --chain-id string   The network chain ID\n  -h, --help              help for query\n\nGlobal Flags:\n      --home string         directory for config and data (default \"/root/.cyber\")\n      --log_format string   The logging format (json|plain) (default \"plain\")\n      --log_level string    The logging level (trace|debug|info|warn|error|fatal|panic) (default \"info\")\n      --trace               print out full stack trace on errors\n\nUse \"cyber query [command] --help\" for more information about a command.\n\n```\n\nLet's explore the `bank` subcommand:\n\n```bash\ncyber query bank --help\n```\n\nWe can see all of the options available for these subcommands, names and account address:\n\n```bash\nUsage:\n  cyber query bank [flags]\n  cyber query bank [command]\n\nAvailable Commands:\n  balances       Query for account balances by address\n  denom-metadata Query the client metadata for coin denominations\n  total          Query the total supply of coins of the chain\n```\n\nIn most cases you will need just two extra flags:\n\n```bash\n--from=<your_key_name> \\\n--chain-id=bostrom \\\n--node=<rpc_node_path>\n```\n\nThat's it. This is a very useful tool for using cyber and troubleshooting.\n\n## Glossary\n\n**Bonded tokens** - Tokens that are nominated to a validator, non transferable.\n\n**Commission** -  The tokens that you've earned via validating from delegators.\n\n**Dyson Sphere** - Construct in cyber responsible for energy transformation and routing.\n\n**Investminting** - Process of convertation Hydrogen to Volts or Amperes, locking a certain amount of H for a certain amount of time produces some V or A.\n\n**Hero** - A validator.\n\n**Hydrogen** - Token issued after boot delegation, 1:1 H to boot. Used to generate enery through the Dyson sphere (investminting process).\n\n**Unbonding** - The process of taking back your share (delegated tokens + any rewards). 4 days for `bostrom` chain.\n\n\n**link** - A reference between a CID key and a CID value. Link message cost is `100*n`, where `n` is the number of links in a message. Link finalization time is 1 block. New rank for CIDs of links will be recalculated at a period of 5 blocks.\n\n**liquid tokens** - Transferable tokens within the cyber.\n\n**local keystore** - A store with keys on your local machine.\n\n**rewards** - Tokens that a hero earned via delegation. To reduce network load all the rewards are stored in a pool. You can take your part of the bounty at any time with commands from the **delegator** section.\n\n**<comission_rate_percentage>** - The commission that a validator gets for their work. Must be a fraction >0 and <=1\n\n**<delegator_address>** - Delegator address. Starts with `bostrom` most often coinciding with **<key_address>**\n\n**<key_address>** - An account address. Starts with `bostrom`\n\n**<key_name>** - The name of the account in cyber\n\n**<operator_address>** - Validator address. Starts with `cybervaloper`\n\n**<shares_percentage>** - The part of illiquid tokens that you want to unbond or redelegate. Must be a fraction >0 and <=1\n\n**<chain_id>** - The current version of the chain  (bostrom).\n\n## General commands\n\n### Show all validators\n\nReturn the set of all active and jailed validators:\n\n```bash\ncyber query staking validators \n```\n\n### Show chain status\n\nReturn general chain information:\n\n```bash\n cyber status\n```\n\n### Distribution params\n\n```bash\n cyber query distribution params \n```\n\n### Staking params\n\nChain staking info:\n\n```bash\n cyber query staking params \n```\n\n### Staking pool\n\n```bash\n cyber query staking pool \n```\n\n## Account management\n\n### Import an account with a seed phrase and store it in the local keystore\n\n```bash\n cyber keys add <your_key_name> --recover\n```\n\n### Create a new account\n\n```bash\n cyber keys add <your_key_name>\n```\n\n### Show account information\n\nName, address and the public key of the current account\n\n```bash\n cyber keys show <your_key_name>\n```\n\n### Show account balance\n\nReturn account number and amount of tokens.\n\n```bash\n cyber query bank balances <your_key_address>\n```\n\n### List existing keys\n\nReturn all the existing keys in cyber:\n\n```bash\n cyber keys list\n```\n\n### Delete account from cyber\n\n```bash\n cyber keys delete <deleting_key_name>\n```\n\n### Keyring manipulation settings\n\n**Important note**: Starting with v.38, Cosmos-SDK uses os-native keyring to store all of your keys. We've noticed that in certain cases it does not work well by default (for example if you don't have any GUI installed on your machine). If during the execution `cyber keys add` command, you are getting this type of error:\n\n```bash\npanic: No such interface 'org.freedesktop.DBus.Properties' on object at path /\n\ngoroutine 1 [running]:\ngithub.com/cosmos/cosmos-sdk/crypto/keys.keyringKeybase.writeInfo(0x1307a18, 0x1307a10, 0xc000b37160, 0x1, 0x1, 0xc000b37170, 0x1, 0x1, 0x147a6c0, 0xc000f1c780, ...)\n    /root/go/pkg/mod/github.com/cosmos/cosmos-sdk@v0.38.1/crypto/keys/keyring.go:479 +0x38c\ngithub.com/cosmos/cosmos-sdk/crypto/keys.keyringKeybase.writeLocalKey(0x1307a18, 0x1307a10, 0xc000b37160, 0x1, 0x1, 0xc000b37170, 0x1, 0x1, 0x147a6c0, 0xc000f1c780, ...)\n    /root/go/pkg/mod/github.com/cosmos/cosmos-sdk@v0.38.1/crypto/keys/keyring.go:465 +0x189\ngithub.com/cosmos/cosmos-sdk/crypto/keys.baseKeybase.CreateAccount(0x1307a18, 0x1307a10, 0xc000b37160, 0x1, 0x1, 0xc000b37170, 0x1, 0x1, 0x146aa00, 0xc000b15630, ...)\n    /root/go/pkg/mod/github.com/cosmos/cosmos-sdk@v0.38.1/crypto/keys/keybase_base.go:171 +0x192\ngithub.com/cosmos/cosmos-sdk/crypto/keys.keyringKeybase.CreateAccount(...)\n    /root/go/pkg/mod/github.com/cosmos/cosmos-sdk@v0.38.1/crypto/keys/keyring.go:107\ngithub.com/cosmos/cosmos-sdk/client/keys.RunAddCmd(0xc000f0b400, 0xc000f125f0, 0x1, 0x1, 0x148dcc0, 0xc000aca550, 0xc000ea75c0, 0xc000ae1c08, 0x5e93b7)\n    /root/go/pkg/mod/github.com/cosmos/cosmos-sdk@v0.38.1/client/keys/add.go:273 +0xa8b\n... etc\n```\n\nYou will have to use another keyring backend to keep your keys. \n\nIn that case you'll have to use file based keyring by adding the `--keyring-backend file` option to every key manipulation command:\n\n```bash\ncyber keys add key_name --keyring-backend file\n```\n\nThat means that you've set your keyring-backend to a local file. *Note*, in this case, all the keys in your keyring will be encrypted using the same password. If you would like to set up a unique password for each key, you should set a unique `--home` folder for each key. To do that, just use `--home=/<unique_path_to_key_folder>/` with setup keyring backend and at all interactions with keys when using cyber:\n\n```bash\ncyber keys add <your_second_key_name> --keyring-backend file --home=/<unique_path_to_key_folder>/\ncyber keys list --home=/<unique_path_to_key_folder>/\n```\n\n### Send tokens\n\n```bash\ncyber tx bank send [from_key_or_address] [to_address] [amount] \\\n--from=<your_key_name> \\\n--chain-id=bostrom\n```\n\n### Linking content\n\nOnly IPFS hashes are available to use as CIDs\n\n```bash\ncyber tx graph cyberlink [cid-from] [cid-to] [flags] \\\n--from=<your_key_name> \\\n--chain-id=bostrom\n```\n\nReal command example:\n\n```bash \ncyber tx graph cyberlink QmWZYRj344JSLShtBnrMS4vw5DQ2zsGqrytYKMqcQgEneB QmfZwbahFLTcB3MTMT8TA8si5khhRmzm7zbHToo4WVK3zn --from fuckgoogle --chain-id bostrom --yes\n```\n\n## Validator commands\n\n### Get all validators\n\n```bash\n cyber query staking validators \n```\n\n### State of a current validator\n\n```bash\ncyber query staking validator <operator_address>\n```\n\n### Return all delegations to a validator\n\n```bash\n cyber query staking delegations-to <operator_address>\n```\n\n### Edit the commission in an existing validator account\n\n```bash\n cyber tx staking edit-validator \\\n  --from=<your_key_name> \\\n  --commission-rate=<new_comission_rate_percentage> \\\n  --chain-id=bostrom\n```\n\n### Withdraw the commission for any delegation\n\n```bash\n cyber tx distribution withdraw-rewards <operator_address> --commission \\\n  --from=<your_key_name> \\\n  --chain-id=bostrom\n```\n\n### Edit the site and description for an existing validator account\n\n```bash\n cyber tx staking edit-validator \\\n  --from=<your_key_name> \\\n  --details=\"<description>\" \\\n  --website=<your_website> \\\n  --chain-id=bostrom\n```\n\n### Unjail a validator previously jailed for downtime\n\n```bash\n cyber tx slashing unjail --from=<your_key_name> --chain-id=bostrom\n```\n\n### Get info about a redelegation process from a validator\n\n```bash\n cyber query staking redelegations-from <operator_address>\n```\n\n## Delegator commands\n\n### Return distribution delegator rewards for a specified validator\n\n```bash\n cyber query distribution rewards <delegator_address> <operator_address>\n```\n\n### Return delegator shares for the specified validator\n\n```bash\n cyber query staking delegation <delegator_address> <operator_address>\n```\n\n### Return all delegations made from a delegator\n\n```bash\n cyber query staking delegations <delegator_address>\n```\n\n### Return all unbonding delegations from a validator\n\n```bash\n cyber query staking unbonding-delegations-from <operator_address>\n```\n\n### Withdraw rewards for any delegation\n\n```bash\n cyber tx distribution withdraw-rewards <operator_address> \\\n  --from=<your_key_name> \\\n  --chain-id=bostrom\n```\n\n### Withdraw all delegation rewards\n\n```bash\n cyber tx distribution withdraw-all-rewards \\\n  --from=<your_key_name> \\\n  --chain-id=bostrom\n```\n\n### Change the default withdrawal address for rewards associated with an address\n\n```bash\n cyber tx distribution set-withdraw-addr <your_new_address> \\\n  --from=<your_key_name> \\\n  --chain-id=bostrom\n```\n\n### Delegate liquid tokens to a validator\n\n```bash\n cyber tx staking delegate <operator_address> <amount_boot> \\\n  --from=<your_key_name> \\\n  --chain-id=bostrom\n```\n\n### Redelegate illiquid tokens from one validator to another in absolute BOOT value\n\n> There is a 4-day unbonding period\n\n```bash\n cyber tx staking redelegate <old_operator_address> <new_operator_address> <amount_boot> \\\n --from=<your_key_name> \\\n --chain-id=bostrom\n```\n\n### Redelegate illiquid tokens from one validator to another in percentages\n\n```bash\n cyber tx staking redelegate <old_operator_address> <new_operator_address> <shares_percentage>\n  --from=<your_key_name> \\\n  --chain-id=bostrom\n```\n\n### Unbond shares from a validator in absolute BOOT value\n\n> 8 days for unbonding\n\n```bash\n cyber tx staking unbond <operator_address> <amount_boot>\n  --from=<your_key_name> \\\n  --chain-id=bostrom\n```\n\n### Unbond shares from a validator in percentages\n\n> 8 days for unbonding\n\n```bash\n cyber tx staking unbond <operator_address> <shares_percentage>\n  --from=<your_key_name> \\\n  --chain-id=bostrom\n```\n\n### Get info about the unbonding delegation process to any validator\n\n```bash\n cyber query staking unbonding-delegation <delegator_address> <operator_address>\n```\n\n### Get info about the unbonding delegation process to all unbonded validators\n\n```bash\n cyber query staking unbonding-delegation <delegator_address>\n```\n\n### Get info about redelegation process from to current validator\n\n```bash\n cyber query staking redelegation <delegator_address> <old_operator_address> <new_operator_address>\n```\n\n### Get the info about all the redelegation processes by a delegator\n\n```bash\n cyber query staking redelegations <delegator_address>\n```\n\n## Governance and voting\n\n### Query specific proposal\n\n```bash\ncyber q gov proposal <proposal_id> \n```\n\n### Query all proposals\n\n```bash\ncyber q gov proposals \n```\n\n### Query votes on proposal\n\n```bash\ncyber q gov votes \n```\n\n### Query parameters from governance module\n\n```bash\ncyber q gov params\n```\n\n### Vote for specific proposal\n\n```bash\ncyber tx gov vote <proposal_id> <vote_option:_yes_no_abstain> \\\n--from=<your_key_name> \\\n--chain-id=bostrom\n```\n\n### Submit text proposal\n\n```bash\ncyber tx gov submit-proposal --title=\"Test Proposal\" --description=\"My awesome proposal\" --type=\"Text\" --deposit=\"10boot\" \\\n--from=<your_key_name> \\\n--chain-id=bostrom\n```\n\n### Submit community spend proposal\n\n```bash\ncyber tx gov submit-proposal community-pool-spend <path/to/proposal.json> \\\n--from=<key_or_address> \\\n--chain-id=bostrom\n```\n\nWhere `proposal.json` is a file, structured in following way:\n\n```json\n{\n  \"title\": \"Community Pool Spend\",\n  \"description\": \"Pay me some boots!\",\n  \"recipient\": \"bostrom1s5afhd6gxevu37mkqcvvsj8qeylhn0rz46zdlq\",\n  \"amount\": [\n    {\n      \"denom\": \"boot\",\n      \"amount\": \"10000\"\n    }\n  ],\n  \"deposit\": [\n    {\n      \"denom\": \"boot\",\n      \"amount\": \"10000\"\n    }\n  ]\n}\n```\n\n### Submit chain parameters change proposal\n\n```bash\ncyber tx gov submit-proposal param-change <path/to/proposal.json> \\\n--from=<key_or_address> \\\n--chain-id=bostrom\n```\n\nWhere `proposal.json` is a file, structured in following way:\n\n```json\n{\n  \"title\": \"Staking Param Change\",\n  \"description\": \"Update max validators\",\n  \"changes\": [\n    {\n      \"subspace\": \"staking\",\n      \"key\": \"MaxValidators\",\n      \"value\": 105\n    }\n  ],\n  \"deposit\": [\n    {\n      \"denom\": \"stake\",\n      \"amount\": \"10000\"\n    }\n  ]\n}\n```\n\nFew examples of real param-change proposals:\n\n- Change max block bandwidth:\n\n  ```json\n  {\n    \"title\": \"Insrease max block bandwidth to 500000\",\n    \"description\": \"Increase max block bandwidth to 500000.\\n\",\n    \"changes\": [\n      {\n        \"subspace\": \"bandwidth\",\n        \"key\": \"MaxBlockBandwidth\",\n        \"value\": \"500000\"\n      }\n    ],\n    \"deposit\": \"10000boot\"\n  }\n  ```\n- Increase max block gas:\n\n  ```json\n  {\n    \"title\": \"Increase max gasprice\",\n    \"description\": \"Increase  maximum block gas.\\n\",\n    \"changes\": [\n      {\n        \"subspace\": \"baseapp\",\n        \"key\": \"BlockParams\",\n        \"value\": '\"{\\n                \\\"max_bytes\\\": \\\"22020096\\\",  \\n                \\\"max_gas\\\": \\\"200000000\\\",\\n                 \\\"time_iota_ms\\\": \\\"1000\\\"\\n            }\"'\n      }\n    ],\n    \"deposit\": \"10000boot\"\n  }\n  ```\n\n- Change rank calculation window:\n\n  ```json\n  {\n    \"title\": \"Change rank calculation window to 25\",\n    \"description\": \"Increase rank calculation window from every 5 to every 25 blocks.\\n\",\n    \"changes\": [\n      {\n        \"subspace\": \"rank\",\n        \"key\": \"CalculationPeriod\",\n        \"value\": \"25\"\n      }\n    ],\n    \"deposit\": \"10000boot\"\n  }\n  ```\n\n## Liquidity and pools \n\nCyber has Gravity-DEX module implemented, so it is possible to create pools, swap tokens and add\\remove liquidity to exisitng pools: \n\n```bash\nLiquidity transaction subcommands\n\nUsage:\n  cyber tx liquidity [flags]\n  cyber tx liquidity [command]\n\nAvailable Commands:\n  create-pool Create liquidity pool and deposit coins\n  deposit     Deposit coins to a liquidity pool\n  swap        Swap offer coin with demand coin from the liquidity pool with the given order price\n  withdraw    Withdraw pool coin from the specified liquidity pool\n```\n\n### Create liquidity pool\n\n\nThis example creates a liquidity pool of pool-type 1 (two coins) and deposits 2000000milliampere and 200000000000boot.\nNew liquidity pools can be created only for coin combinations that do not already exist in the network.\n\n[pool-type]: The id of the liquidity pool-type. The only supported pool type is 1\n[deposit-coins]: The amount of coins to deposit to the liquidity pool. The number of deposit coins must be 2 in pool type 1.\n\nExample:\n\n```bash\ncyber tx liquidity create-pool 1 2000000milliampere,200000000000boot \\\n--from=mykey \\\n--chain-id=bostrom  \\\n--yes\n```\n\n### Deposit tokens to liquidity pool\n\nDeposit coins a liquidity pool.\n\nThis deposit request is not processed immediately since it is accumulated in the liquidity pool batch.\nAll requests in a batch are treated equally and executed at the same swap price.\n\nExample:\n\n```bash\ncyber tx liquidity deposit 1 100000000milliampere,50000000000boot \\\n--from=mykey \\\n--chain-id=bostrom\n```\n\nThis example request deposits 100000000milliampere and 50000000000boot to pool-id 1.\nDeposits must be the same coin denoms as the reserve coins.\n\n[pool-id]: The pool id of the liquidity pool\n[deposit-coins]: The amount of coins to deposit to the liquidity pool\n\n### Swap coins\n\nSwap offer coin with demand coin from the liquidity pool with the given order price.\n\nThis swap request is not processed immediately since it is accumulated in the liquidity pool batch.\nAll requests in a batch are treated equally and executed at the same swap price.\nThe order of swap requests is ignored since the universal swap price is calculated in every batch to prevent front running.\n\nThe requested swap is executed with a swap price that is calculated from the given swap price function of the pool, the other swap requests, and the liquidity pool coin reserve status.\nSwap orders are executed only when the execution swap price is equal to or greater than the submitted order price of the swap order.\n\nExample:\n\n```bash\ncyber tx liquidity swap 1 1 50000000boot hydrogen 0.019 0.003 \\\n--from=mykey \\\n--chain-id=bostrom\n```\n\nFor this example, imagine that an existing liquidity pool has with 1000000000hydrogen and 50000000000boot.\nThis example request swaps 50000000boot for at least 950000hydrogen with the order price of 0.019 and swap fee rate of 0.003.\nA sufficient balance of half of the swap-fee-rate of the offer coin is required to reserve the offer coin fee.\n\nThe order price is the exchange ratio of X/Y, where X is the amount of the first coin and Y is the amount of the second coin when their denoms are sorted alphabetically.\nIncreasing order price reduces the possibility for your request to be processed and results in buying hydrogen at a lower price than the pool price.\n\nFor explicit calculations, The swap fee rate must be the value that is set as liquidity parameter in the current network.\nThe only supported swap-type is 1. For the detailed swap algorithm, see https://github.com/gravity-devs/liquidity\n\n[pool-id]: The pool id of the liquidity pool\n[swap-type]: The swap type of the swap message. The only supported swap type is 1 (instant swap).\n[offer-coin]: The amount of offer coin to swap\n[demand-coin-denom]: The denomination of the coin to exchange with offer coin\n[order-price]: The limit order price for the swap order. The price is the exchange ratio of X/Y where X is the amount of the first coin and Y is the amount of the second coin when their denoms are sorted alphabetically\n[swap-fee-rate]: The swap fee rate to pay for swap that is proportional to swap amount. The swap fee rate must be the value that is set as liquidity parameter in the current network.\n\nUsage:\n\n```bash\n  cyber tx liquidity swap [pool-id] [swap-type] [offer-coin] [demand-coin-denom] [order-price] [swap-fee-rate] [flags]\n```\n\n### Withdraw tokens from liquidity pool\n\nWithdraw pool coin from the specified liquidity pool.\n\nThis swap request is not processed immediately since it is accumulated in the liquidity pool batch.\nAll requests in a batch are treated equally and executed at the same swap price.\n\nExample:\n\n```bash\n cyber tx liquidity withdraw 1 10000pool96EF6EA6E5AC828ED87E8D07E7AE2A8180570ADD212117B2DA6F0B75D17A6295 \\\n --from=mykey \\\n --chain-id=bostrom\n```\n\nThis example request withdraws 10000 pool coin from the specified liquidity pool.\nThe appropriate pool coin must be requested from the specified pool.\n\n[pool-id]: The pool id of the liquidity pool\n[pool-coin]: The amount of pool coin to withdraw from the liquidity pool\n\nUsage:\n\n```bash\n  cyber tx liquidity withdraw [pool-id] [pool-coin] [flags]\\\n  --from=<key_or_address> \\\n  --chain-id=bostrom\n```\n\n### Query existing pools\n\nQuery details of a liquidity pool\n\n```bash\ncyber query liquidity pool 1\n```\n\nExample (with pool coin denom):\n\n```bash\ncyber query liquidity pool --pool-coin-denom=[denom]\n```\n\nQuery details about all liquidity pools on a network.\nExample:\n\n```bash\ncyber query liquidity pools\n```\n\n## \n"
  },
  {
    "path": "docs/upgrade-plan.md",
    "content": "# go-cyber Dependency Upgrade Plan\n\nThis document describes the upgrade path for go-cyber's core dependencies from the current v7 stack to the latest available versions, covering what each step unlocks, what breaks, and the recommended execution order.\n\n## Current Stack (go-cyber v7)\n\n| Component | Version | Notes |\n|---|---|---|\n| Cosmos SDK | v0.47.16 | Forked as `cybercongress/cosmos-sdk` |\n| CometBFT | v0.37.18 | Tachyon security fix applied |\n| IBC-Go | v7.10.0 | |\n| CosmWasm/wasmd | v0.46.0 | |\n| CosmWasm/wasmvm | v1.5.9 | CosmWasm 1.x runtime |\n| Packet-Forward-Middleware | v7.3.0 | |\n| async-icq | v7.1.1 | |\n| ibc-hooks | v7.0.0 | |\n| Go | 1.22.7 | |\n\n## Target Stack (Latest Stable)\n\n| Component | Version | Notes |\n|---|---|---|\n| Cosmos SDK | **v0.53.6** | Released 2026-02-10 |\n| CometBFT | **v0.38.21** | Released 2026-01-23 |\n| IBC-Go | **v10.5.0** | IBC Eureka / IBC v2 |\n| CosmWasm/wasmd | **v0.61.8** | Released 2026-02-11 |\n| CosmWasm/wasmvm | **v3.0.3** | CosmWasm 3.0 runtime |\n| Packet-Forward-Middleware | **v10.1.0** | |\n| async-icq | **v8.0.0** | No v10 release yet |\n| ibc-hooks | **v8.0.0** | No v10 release yet |\n| Go | 1.23.2+ | Required by SDK v0.53 |\n\n---\n\n## Roadmap: Priorities and Execution Order\n\nEverything we want to do, sorted by dependency chain and impact. Three phases: what we can ship **now** on SDK v0.47, what requires the **SDK v0.50 upgrade**, and what comes **after v0.53**.\n\n### Phase 0 — Now (SDK v0.47, no consensus change)\n\nThese items can ship as point releases or soft-fork patches. No chain upgrade required.\n\n| # | Item | Scope | Depends On |\n|---|------|-------|------------|\n| 0.1 | **Graph Streaming gRPC** — `GraphSnapshot`, `CyberlinksAfter`, `CyberlinksByParticle` endpoints | `x/graph` new queries | — |\n| 0.2 | **Native Graph Query Endpoints** — `CyberlinksByNeuron`, `ParticlesByNeuron` (replace cyberindex for basic queries) | `x/graph` new queries | — |\n| 0.3 | **cyb (go-cyb) Tray App** — orchestrator managing `cyber` + `ipfs`, tray icon, health polling, Start/Stop | new repo `go-cyb` | — |\n| 0.4 | **Embedded Dashboard** — single HTML page on `:26660`, node/IPFS/graph/rank stats | `cyber` binary, `//go:embed` | — |\n| 0.5 | **IPFS Sidecar: Kubo Lifecycle** — `cyber init` creates IPFS repo, `cyber start` manages Kubo subprocess | `app/` startup code | — |\n| 0.6 | **`cyber service` command** — systemd/launchd install/start/stop for headless servers | `cmd/cyber/` | — |\n| 0.7 | **CPU Rank Optimization** — SIMD, goroutine parallelism, memoize per-CID stake | `x/rank/keeper/calculate_cpu.go` | — |\n| 0.8 | **Installer & Packaging** — `get.cyber.page` script, GoReleaser update, Homebrew formula | build/release infra | 0.3, 0.5 |\n| 0.9 | **Graph Inference: Embeddings + Retrieval** — cid2vec from topology (TransE/RotatE), HNSW index, Similar/Predict gRPC | `scripts/`, `x/inference` | 0.1 |\n| 0.10 | **Graph Inference: LLM Training + Native Inference** — resolve content via IPFS, fine-tune Llama 3B (LoRA), llama-server sidecar, Ask/AskStream gRPC, RAG pipeline | `scripts/`, `x/inference`, sidecar | 0.5, 0.9 |\n| 0.11 | **Query-time Negentropy** *(done)* — `J(π) = log₂(n) − H(π)` from rank distribution | `x/rank` gRPC | ✅ committed |\n| 0.12 | **Dead Code Removal** *(done)* — karma/entropy/luminosity kernels removed | `x/rank/cuda/rank.cu` | ✅ committed |\n\n**Priority order:** 0.1 → 0.3 → 0.5 → 0.4 → 0.2 → 0.9 → 0.10 → 0.6 → 0.7 → 0.8\n\nRationale: Graph streaming (0.1) is the foundation for light clients, inference training, and any external tool. The tray app (0.3) and IPFS sidecar (0.5) together make \"download → run → it works\" possible. Dashboard (0.4) gives visual feedback. Native queries (0.2) start replacing cyberindex. Inference training (0.9) needs graph streaming, then native inference (0.10) makes it available on the node. Service management (0.6) and CPU optimization (0.7) are independent polish items. Packaging (0.8) wraps everything for distribution.\n\n### Phase 1 — SDK v0.50 Chain Upgrade\n\nAll of these require the consensus-breaking upgrade to Cosmos SDK v0.50 + CometBFT v0.38.\n\n| # | Item | Scope | Depends On |\n|---|------|-------|------------|\n| 1.0 | **Remove `x/liquidity` module** — delete module code, drop store key via `StoreUpgrades.Deleted`, clean up params and codec registrations | `x/liquidity`, `app/`, upgrade handler | — |\n| 1.1 | **SDK v0.47 → v0.50 migration** — ABCI 2.0, FinalizeBlock, context.Context keepers, x/params removal | all modules, `app/` | 1.0 |\n| 1.2 | **Eliminate Cosmos SDK fork** — remove `cybercongress/cosmos-sdk` replace directive | `go.mod` | 1.1 |\n| 1.3 | **Snapshot Extensions** — graph + rank data in state-sync snapshots (instant sync without GPU) | `x/graph`, `x/rank` snapshotters | 1.1 |\n| 1.4 | **Height Index for Incremental Sync** — `[0x07][Height][Seq]` secondary index for O(k) `CyberlinksAfter` | `x/graph` store | 1.1 |\n| 1.5 | **Rank Computation Fixes** — div-by-zero guard (CPU), overflow protection, dangling node decision | `x/rank` | 1.1 |\n| 1.6 | **Multi-chain Binary (Phase A)** — configurable bech32, denoms from genesis, chain-id switch in upgrade handlers | `app/`, `types/` | 1.1 |\n| 1.7 | **ABCIListener Indexing Plugin** — embedded SQLite/DuckDB via ADR-038, replace cyberindex | `app/`, new plugin | 1.1 |\n| 1.8 | **Space-Pussy Upgrade (Phase B)** — in-place upgrade v0.45→v0.50 using unified binary | upgrade handler | 1.1, 1.6 |\n| 1.9 | **IBC-Go v7 → v8, wasmd v0.46 → v0.54, wasmvm v1.5 → v2.2** | deps | 1.1 |\n| 1.10 | **Graph Inference: On-Chain Commitment** — `MsgCommitModel`, validator verification, embedding merkle tree | `x/inference` | 0.10, 1.1 |\n| 1.11 | **Personal Networks (`cyber network`)** — one-command launch of a private chain, peer join, graph sync between machines | `cmd/cyber/`, `app/` | 1.6 |\n| 1.12 | **Inter-Knowledge Protocol (IKP): Basic Link Sync** — `x/ikp` IBC module, SyncCyberlinks packet, derived neurons, push links between chains | `x/ikp`, new module | 1.1, 1.9 |\n\n**Priority order:** 1.0 → 1.1 → 1.2 → 1.9 → 1.5 → 1.3 → 1.4 → 1.6 → 1.11 → 1.12 → 1.7 → 1.8 → 1.10\n\nRationale: Liquidity removal (1.0) comes first — it is a standalone consensus-breaking change that eliminates dead module code, its SDK fork dependency (`RegisterCustomTypeURL`), and simplifies the subsequent SDK migration. The SDK migration (1.1) unlocks everything else. Fork elimination (1.2) and dep updates (1.9) are part of the same push. Rank fixes (1.5) are consensus-breaking so bundle with the upgrade. Snapshots (1.3) and height index (1.4) make light client experience good. Multi-chain binary (1.6) is prerequisite for personal networks (1.11). IKP (1.12) enables graph sync between personal networks and bostrom — requires IBC v8 from 1.9. ABCIListener indexing (1.7) replaces cyberindex. Inference on-chain commitment (1.10) makes the model verifiable.\n\n### Phase 2 — SDK v0.53 + CosmWasm 3.0\n\n| # | Item | Scope | Depends On |\n|---|------|-------|------------|\n| 2.1 | **SDK v0.50 → v0.53 migration** — IBC Eureka, unordered TXs, x/epochs, auth PreBlocker | all modules | 1.1 |\n| 2.2 | **IBC-Go v8 → v10 (IBC Eureka)** — Ethereum connectivity, remove capabilities module | IBC wiring | 2.1 |\n| 2.3 | **CosmWasm 3.0** — IBCv2 entrypoints, Uint256 balances, wasmd v0.61, wasmvm v3.0 | deps | 2.1 |\n| 2.4 | **Schema/Indexer Framework** — `HasModuleCodec` for auto-generated SQL tables | custom modules | 2.1, 1.7 |\n| 2.5 | **wgpu Prototype (f32)** — port 4 CUDA kernels to WGSL compute shaders, test precision | `x/rank` | 0.7 |\n| 2.6 | **Light Client with Rank Proofs** — `QueryRankWithProof`, `--rank-proofs` flag, full merkle tree | `x/rank` | 1.3 |\n| 2.7 | **Graph Inference: Incremental Training + 7B Model** — daily LoRA adapters, weekly full retrain, 7B option for validators | `x/inference` | 0.10 |\n| 2.8 | **IKP: Pull Sync + Rank Signals** — RequestSubgraph, selective filters, ShareRankSignal, trust governance | `x/ikp` | 1.12 |\n\n### Phase 3 — Long-term / Research\n\n| # | Item | Notes |\n|---|------|-------|\n| 3.1 | **Rust Migration Path** — CosmWasm-first (move logic to contracts), then pure Rust ABCI | Research done: Penumbra, Namada, Nomic as references |\n| 3.2 | **wgpu f64** — native on Vulkan/DX12, emulated double-single on Metal | Depends on 2.5 precision results |\n| 3.3 | **Graph Store Separation** — flat append-only store for cyberlinks, only merkle root in IAVL | SDK v0.53 pluggable storage |\n| 3.4 | **SDK v0.54 + CometBFT v0.39** — BlockSTM, BLS signing, concurrent ABCI | Planned Q2 2026 |\n| 3.5 | **macOS .dmg / Linux .deb** — native OS packages for cyb | Depends on 0.3, 0.8 |\n\n### Summary Table\n\n| Phase | Items | Consensus Change | Key Deliverable |\n|-------|-------|:----------------:|-----------------|\n| **0** | 12 items (2 done) | No | Graph sync + Desktop app + IPFS sidecar + **LLM inference from graph** |\n| **1** | 13 items | Yes (SDK v0.50) | Liquidity removal + full SDK upgrade + snapshot sync + rank fixes + **personal networks** + **IKP basic sync** |\n| **2** | 8 items | Yes (SDK v0.53) | IBC Eureka + CosmWasm 3.0 + wgpu + **IKP pull/rank signals** |\n| **3** | 5 items | TBD | Rust migration + advanced GPU + native packages |\n\n---\n\n## Compatibility Matrix\n\nAll versions in a row must be used together. Mixing across rows is not supported.\n\n| SDK | CometBFT | IBC-Go | wasmd | wasmvm | CosmWasm |\n|---|---|---|---|---|---|\n| v0.47.x (current) | v0.37.x | v7.x | v0.46.x | v1.5.x | 1.x |\n| **v0.50.x** | **v0.38.x** | **v8.x** | v0.50 - v0.54 | v1.5 - v2.2.x | 2.0 - 2.2 |\n| **v0.53.x** | **v0.38.x** | **v10.x** | v0.60 - v0.61 | v2.3 - v3.0.x | 2.3 - 3.0 |\n| v0.54.x (planned Q2 2026) | v0.39.x | v11.x | TBD | TBD | TBD |\n\nSkipped versions that were never released: SDK v0.48/v0.49/v0.51/v0.52, IBC-Go v9, wasmd v0.47-v0.49, CometBFT v1.x (retracted).\n\n---\n\n## Upgrade Path: Two Steps\n\nThe upgrade must happen in two sequential steps. There is no way to skip Step 1.\n\n### Step 1: SDK v0.47 -> v0.50 (Major)\n\nThis is the largest and hardest step. All four core dependencies change simultaneously.\n\n#### Version Targets for Step 1\n\n| Component | From | To |\n|---|---|---|\n| Cosmos SDK | v0.47.16 | **v0.50.15** |\n| CometBFT | v0.37.18 | **v0.38.21** |\n| IBC-Go | v7.10.0 | **v8.8.0** |\n| wasmd | v0.46.0 | **v0.54.6** |\n| wasmvm | v1.5.9 | **v2.2.6** |\n| PFM | v7.3.0 | **v8.2.0** |\n| async-icq | v7.1.1 | **v8.0.0** |\n| ibc-hooks | v7.0.0 | **v8.0.0** |\n| Go | 1.22.7 | 1.22+ (no change required) |\n\n#### Breaking Changes in Step 1\n\n**ABCI 2.0 (CometBFT v0.37 -> v0.38)**\n- `BeginBlock`, `DeliverTx`, and `EndBlock` are removed. Replaced by a single `FinalizeBlock` method.\n- New `ExtendVote` and `VerifyVoteExtension` methods added (vote extensions).\n- CometBFT package renames: `client.TendermintRPC` -> `client.CometRPC`, `client/grpc/tmservice` -> `client/grpc/cmtservice`.\n\n**Cosmos SDK v0.50 Module Interface Overhaul**\n- All keeper methods now accept `context.Context` instead of `sdk.Context`.\n- `BeginBlock` signature changes from `(sdk.Context, abci.RequestBeginBlock)` to `(context.Context) error`.\n- `EndBlock` no longer returns `[]abci.ValidatorUpdate`; returns `error` instead.\n- Messages no longer need `ValidateBasic()` or `GetSignBytes()` implementations. Validation moves to message server handlers.\n- `GetSigners()` replaced by protobuf `cosmos.msg.v1.signer` field annotations.\n\n**App Wiring**\n- Global `ModuleBasics` variable eliminated; use `module.NewBasicManagerFromManager()`.\n- Modules accept `KVStoreService` instead of `StoreKey` (wrap with `runtime.NewKVStoreService()`).\n- New `PreBlocker` concept: upgrade module must be in `PreBlockers`.\n- Store upgrades required for new modules `circuit` and `feeibc` (panic without them).\n\n**x/params Deprecation**\n- `x/params` is deprecated. All SDK modules store parameters directly via `MsgUpdateParams`.\n- Custom modules must migrate their parameters out of `x/params`.\n- v0.50 is the mandatory migration point; future versions drop `x/params` migration support entirely.\n\n**Database Backends**\n- ClevelDB, BoltDB, and BadgerDB are no longer supported.\n\n**wasmvm v2 (v1.5 -> v2.2)**\n- Import path changes from `github.com/CosmWasm/wasmvm` to `github.com/CosmWasm/wasmvm/v2`.\n- Gas values reduced by 1000x. Any hardcoded gas values or gas-related parameters need recalibration.\n- `InstantiateContractCosts` renamed to `SetupContractCost`.\n- Backward compatible for existing contracts: contracts compiled with cosmwasm-std ^1.0.0 continue to work.\n\n**IBC-Go v8**\n- `PortKeeper` field changed to `*portkeeper.Keeper` (pointer type).\n- `NewKeeper` functions require an authority identifier parameter.\n- `SerializeCosmosTx` / `DeserializeCosmosTx` take an extra `encoding` parameter.\n- Channel upgradability introduced (new channel states: `FLUSHING`, `FLUSHCOMPLETE`).\n\n**go-cyber Specific: Forked Cosmos SDK**\n- The fork `cybercongress/cosmos-sdk` must be rebased onto SDK v0.50.x.\n- This is the single largest piece of work in the entire upgrade. The v0.50 SDK has fundamental changes to BaseApp, module interfaces, and the ABCI layer.\n- All cyber-specific modules must migrate keepers to `context.Context`, remove legacy `BeginBlock`/`EndBlock`, and update parameter management.\n\n#### What Step 1 Unlocks\n\n| Capability | Description |\n|---|---|\n| **ABCI 2.0 / FinalizeBlock** | Simplified block processing, foundation for all advanced features |\n| **Vote Extensions** | Validators inject custom data into consensus (oracles, MEV protection, encrypted mempools). Rujira reported oracle latency dropping from 30s to 6s |\n| **Optimistic Execution** | Block execution runs in parallel with voting. Sei Network showed 50% block time reduction (~300ms saved) |\n| **IAVL v1** | ~7x improvement in set operations (1,800 -> 12,225 leaves/sec), reduced storage overhead via orphan removal |\n| **AutoCLI** | Automatic CLI command generation from gRPC definitions, no more hand-written CLI boilerplate |\n| **SIGN_MODE_TEXTUAL** | Human-readable transaction signing for hardware wallets |\n| **CosmWasm 2.x** | `CosmosMsg::Any`, `QueryRequest::Grpc`, IBC callbacks (ADR-8), secp256r1/BLS12-381 crypto, MessagePack support |\n| **IBC Channel Upgradability** | Upgrade existing IBC channels without closing them |\n\n---\n\n### Step 2: SDK v0.50 -> v0.53 + CosmWasm 3.0 (Moderate)\n\nThis step is significantly easier. The SDK v0.50 -> v0.53 upgrade was designed to be non-breaking and was described by Cosmos Labs as requiring \"only 2 lines of code changed\" for many chains.\n\n#### Version Targets for Step 2\n\n| Component | From | To |\n|---|---|---|\n| Cosmos SDK | v0.50.15 | **v0.53.6** |\n| CometBFT | v0.38.21 | v0.38.21 (no change) |\n| IBC-Go | v8.8.0 | **v10.5.0** |\n| wasmd | v0.54.6 | **v0.61.8** |\n| wasmvm | v2.2.6 | **v3.0.3** |\n| PFM | v8.2.0 | **v10.1.0** |\n| async-icq | v8.0.0 | v8.0.0 (no v10 release yet) |\n| ibc-hooks | v8.0.0 | v8.0.0 (no v10 release yet) |\n| Go | 1.22+ | **1.23.2+** |\n\n#### Breaking Changes in Step 2\n\n**Cosmos SDK v0.53**\n- `x/auth` module now has a `PreBlocker` that must be added to `SetOrderPreBlockers` alongside the upgrade module.\n- All modules split into separate `go.mod` files (`cosmossdk.io/x/{moduleName}`).\n- Address codecs and bech32 prefixes must be supplied in `client.Context`.\n\n**IBC-Go v10 (IBC Eureka)**\n- **Capabilities module removed entirely.** Remove `CapabilityKeeper`, all scoped keepers, and related store keys.\n- **Fee middleware (ICS-29) removed entirely.** Remove `IBCFeeKeeper` from App struct, module account permissions, and store keys.\n- **Channel upgradability removed** (was added in v8, removed in v10).\n- Import paths change from `/v8/` to `/v10/`.\n- Light client modules need explicit wiring in keeper construction.\n- IBC v2 stack must be wired alongside the classic IBC stack.\n\n**CosmWasm 3.0 / wasmvm v3**\n- `Coin::amount` changed from `Uint128` to `Uint256` in the contract API.\n- `serde-json-wasm` replaced with standard `serde_json`.\n- `MemoryStorage` removed (use `MockStorage`).\n- `BankQuery::AllBalances` and `IbcQuery::ListChannels` removed.\n- Backward compatible: contracts compiled with cosmwasm-std ^1.0.0 and ^2.0.0 continue to work on CosmWasm 3.0 chains.\n\n**Potential Blockers**\n- `async-icq` and `ibc-hooks` do not have v10 releases as of February 2026. If go-cyber depends on these, this may require using unreleased branches or waiting for releases.\n\n#### What Step 2 Unlocks\n\n| Capability | Description |\n|---|---|\n| **IBC Eureka / IBC v2** | Ethereum connectivity via ZK light clients. Any chain connected to the Cosmos Hub can reach Ethereum permissionlessly. Transfer WETH, WBTC, stablecoins for ~$1 in fees |\n| **IBC v2 Simplified Setup** | 3-step handshake instead of 8-10 steps. Dramatically cheaper channel establishment |\n| **CosmWasm 3.0 IBCv2 Entrypoints** | Native `ibc2_packet_send`, `ibc2_packet_receive`, `ibc2_packet_ack`, `ibc2_packet_timeout` in smart contracts |\n| **Unordered Transactions** | Timestamp-based transactions without sequence numbers. Enables concurrent sends from same account (critical for relayers and exchanges) |\n| **x/epochs** | Cron-job scheduling for periodic on-chain actions |\n| **x/protocolpool** | Upgraded community pool with continuous fund streaming |\n| **Wasmer 5.0.6** | Fully FOSS-licensed Wasm runtime |\n| **CosmWasm cw-schema** | Concise alternative to JSON Schema for contract interfaces |\n| **Path to IAVLx** | SDK v0.53+ positions for IAVLx storage backend (Q2 2026): 30x faster writes, 20ms commits, ~25,000 ops/sec |\n\n---\n\n## Future: Step 3 (SDK v0.54, planned Q2 2026)\n\nNot yet released. When available, this step would bring:\n\n| Component | Version | Key Feature |\n|---|---|---|\n| Cosmos SDK | v0.54.x | BlockSTM parallel execution, x/poa |\n| CometBFT | v0.39.x | BLS signing, concurrent ABCI |\n| IBC-Go | v11.x | TBD |\n| IAVLx | New | 30x write improvement, 20ms commits |\n\nKey capabilities:\n- **BlockSTM**: Parallel transaction execution. Internal testing showed doubled TPS.\n- **BLS Signing**: Aggregated validator signatures for reduced block size and faster verification.\n- **Native Proof of Authority**: Token-free PoA with migration path to PoS via `x/poa`.\n- **Target**: 5,000 TPS and 500ms block times sustained in production by Q4 2026.\n\n---\n\n## Why Upgrade: Summary of Benefits\n\n### Performance\n\n| Metric | Current (SDK v0.47) | After Step 1 (SDK v0.50) | After Step 2 (SDK v0.53) |\n|---|---|---|---|\n| IAVL set ops/sec | ~1,800 | ~12,225 (IAVL v1) | ~25,000 (IAVLx, when ready) |\n| Block execution | Sequential | Optimistic (50% faster) | Optimistic |\n| ABCI calls per block | 3+ (BeginBlock, DeliverTx..., EndBlock) | 1 (FinalizeBlock) | 1 (FinalizeBlock) |\n\n### Security\n\n- CometBFT v0.37.x has received critical security advisories (ASA-2024-001, ASA-2025-003). While patches exist for v0.37, the line receives only critical fixes and is approaching end of life.\n- SDK v0.53.3 fixed a chain-halting bug in `x/distribution` (GHSA-p22h-3m2v-cmgh).\n- The `x/params` module (used in v0.47) is a historical attack vector; direct parameter storage in modules is more secure.\n\n### Interoperability\n\n| Feature | Current | After Step 1 | After Step 2 |\n|---|---|---|---|\n| IBC Classic | Yes | Yes | Yes |\n| IBC Eureka (Ethereum) | No | No | **Yes** |\n| CosmWasm contract compatibility | 1.x only | 1.x + 2.x | 1.x + 2.x + **3.x** |\n| IBC Callbacks in contracts | No | **Yes** (CosmWasm 2.1) | Yes |\n| IBCv2 in contracts | No | No | **Yes** (CosmWasm 3.0) |\n| Vote extensions (oracles) | No | **Yes** | Yes |\n| Unordered transactions | No | No | **Yes** |\n\n### Ecosystem Relevance\n\nChains that have already upgraded to SDK v0.53: Cosmos Hub, Babylon, MANTRA, Warden, Cronos, Akash Network. Osmosis remains on SDK v0.50.x.\n\nSmart contracts and dApps targeting CosmWasm 2.0+ features will not deploy on chains running SDK < v0.50. As the ecosystem moves forward, staying on v0.47 means growing incompatibility with new contracts and tooling.\n\n---\n\n## Cosmos SDK Fork Analysis\n\nThe `go.mod` replace directive points to a fork: `github.com/cybercongress/cosmos-sdk` (branch `bostrom-47-custom`).\n\nThe fork contains **exactly 4 commits** (5 files changed) on top of upstream `release/v0.47.x`:\n\n### Change 1: `RegisterCustomTypeURL` on InterfaceRegistry Interface\n\n**Files:** `codec/types/interface_registry.go`, `client/grpc_query.go`\n\nThe upstream SDK v0.47 has `RegisterCustomTypeURL` as a method on the **concrete struct** `interfaceRegistry`, but it is **not declared on the `InterfaceRegistry` interface**. The fork promotes it to the interface level.\n\n**Why:** The `x/liquidity` module registers messages under legacy Tendermint-namespaced type URLs for backward compatibility:\n\n```go\n// x/liquidity/types/codec.go\nregistry.RegisterCustomTypeURL((*sdk.Msg)(nil), \"/tendermint.liquidity.v1beta1.MsgCreatePool\", &MsgCreatePool{})\nregistry.RegisterCustomTypeURL((*sdk.Msg)(nil), \"/tendermint.liquidity.v1beta1.MsgDepositWithinBatch\", &MsgDepositWithinBatch{})\nregistry.RegisterCustomTypeURL((*sdk.Msg)(nil), \"/tendermint.liquidity.v1beta1.MsgWithdrawWithinBatch\", &MsgWithdrawWithinBatch{})\nregistry.RegisterCustomTypeURL((*sdk.Msg)(nil), \"/tendermint.liquidity.v1beta1.MsgSwapWithinBatch\", &MsgSwapWithinBatch{})\n```\n\nThis call goes through the `InterfaceRegistry` interface (not the concrete type), so without the fork change it fails to compile.\n\n**Elimination strategy for v0.50+:** Use a type assertion to the concrete `interfaceRegistry` type instead of modifying the interface. Alternatively, check if SDK v0.50+ already exposes this method on the interface.\n\n### Change 2: In-Place Testnet Command\n\n**Files:** `server/start.go` (+325 lines), `server/util.go`, `baseapp/options.go`\n\nAdds a CLI command `in-place-testnet [newChainID] [newOperatorAddress]` that takes a node's existing mainnet state and rewrites it into a single-validator local testnet. Originally pioneered by Osmosis.\n\nUsed in `cmd/cyber/cmd/root.go`:\n```go\nserver.AddTestnetCreatorCommand(rootCmd, app.DefaultNodeHome, newTestnetApp, addModuleInitFlags)\n```\n\n**Elimination strategy for v0.50+:** This feature was upstreamed into later SDK versions. On SDK v0.50+ the fork change is unnecessary — use the native implementation.\n\n### Fork Elimination Plan\n\nBoth fork changes can be eliminated during the Step 1 upgrade, **removing the need for a forked SDK entirely**:\n\n| Fork Change | Action on SDK v0.50+ |\n|---|---|\n| `RegisterCustomTypeURL` on interface | No longer needed — `x/liquidity` (sole consumer) is removed in Step 0 (item 1.0) |\n| In-place testnet command | Use the native SDK implementation (upstreamed from Osmosis) |\n\nEliminating the fork removes the highest-risk item in the upgrade plan and dramatically simplifies future maintenance.\n\n---\n\n## Space-Pussy Network Unification\n\n### Current State of Divergence\n\nSpace-pussy was forked from go-cyber circa 2022 and has not been updated since. The codebases have diverged massively:\n\n| | **go-cyber (bostrom)** | **space-pussy** |\n|---|---|---|\n| Cosmos SDK | v0.47.16 | v0.45.5 |\n| Consensus | CometBFT v0.37.18 | Tendermint v0.34.19 |\n| IBC-Go | v7.10.0 | v3.0.0 |\n| CosmWasm/wasmd | v0.46.0 | v0.28.0 |\n| wasmvm | v1.5.9 | v1.0.0 |\n| Go | 1.22.7 | 1.17 |\n| Module path | `github.com/cybercongress/go-cyber/v7` | `github.com/joinresistance/space-pussy` |\n| Custom modules | bandwidth, clock, cyberbank, dmn, graph, grid, ~~liquidity~~ *(removed in 1.0)*, rank, resources, staking, **tokenfactory** | bandwidth, cyberbank, dmn, graph, grid, rank, resources, staking |\n| Bech32 prefix | `bostrom` | `pussy` |\n| Bond denom | `boot` | `pussy` |\n| Staking denom | `hydrogen` | `liquidpussy` |\n\n### The Problem: Hardcoded Chain Identity\n\nThe go-cyber binary currently **hardcodes** chain-specific values that prevent it from running space-pussy:\n\n- `app/app.go`: `Bech32Prefix = \"bostrom\"`, `appName = \"BostromHub\"`\n- `app/params/const.go`: `DefaultDenom = \"boot\"`, `BondDenom = \"boot\"`\n- `types/coins.go`: `CYB = \"boot\"`, `SCYB = \"hydrogen\"`, `VOLT = \"millivolt\"`, `AMPERE = \"milliampere\"`\n- `app/prefix.go`: bech32 prefix sealed at init with `config.Seal()`\n\nThese constants are referenced across 13+ source files in 6+ modules. A single go-cyber binary cannot currently serve both networks.\n\n### Solution: Configurable Chain Identity + In-Place Upgrade\n\nThe approach is two-phase: first make go-cyber multi-chain capable, then upgrade space-pussy to use the unified binary.\n\n#### Phase A: Make go-cyber Multi-Chain (prerequisite, do during Step 1)\n\nRefactor hardcoded chain identity into runtime configuration driven by genesis.json or app config:\n\n1. **Replace hardcoded denoms with genesis-derived values.** Read `bond_denom` from staking params at init. Replace all references to `\"boot\"`, `\"hydrogen\"` etc. with configuration read from genesis or module params.\n\n2. **Make bech32 prefix configurable.** Read prefix from app config or derive from chain-id. Set before `config.Seal()`. Osmosis and other chains already do this — the prefix is set based on configuration, not hardcoded.\n\n3. **Use `ctx.ChainID()` in upgrade handlers** for chain-specific migration logic (Osmosis v25 pattern):\n   ```go\n   func CreateUpgradeHandler(...) {\n       return func(ctx sdk.Context, ...) {\n           switch ctx.ChainID() {\n           case \"bostrom\":\n               // bostrom-specific migrations\n           case \"space-pussy\":\n               // space-pussy-specific migrations\n           }\n       }\n   }\n   ```\n\n4. **Remaining modules (tokenfactory, clock) stay included** for both chains. Modules that space-pussy doesn't use are simply empty (no state, no genesis entries). They become available for space-pussy to use in the future. Note: `x/liquidity` is removed in 1.0 before the SDK migration, so it is not present in the unified binary.\n\nAfter this refactor, one `cyber` binary serves any chain with the appropriate genesis.json and config.\n\n#### Phase B: Upgrade Space-Pussy to Unified Binary\n\nThis is an **in-place chain upgrade** submitted via governance on space-pussy. The new binary is the multi-chain go-cyber binary with a massive upgrade handler.\n\nThe upgrade handler must perform these migrations in order:\n\n1. **Cosmos SDK v0.45 -> v0.47 state migrations**\n   - Migrate all module stores to v0.47 format\n   - Migrate x/params to per-module param storage\n   - Add store keys for new modules (crisis, feegrant, authz changes)\n\n2. **Tendermint v0.34 -> CometBFT v0.37 compatibility**\n   - CometBFT v0.37 can read Tendermint v0.34 state (backward compatible at data level)\n   - ABCI changes are handled by the new binary, not by state migration\n\n3. **IBC-Go v3 -> v7 sequential migrations**\n   - v3 -> v4: ICS-29 fee middleware state\n   - v4 -> v5: ICS-27 interchain accounts controller changes\n   - v5 -> v6: self-managing params migration\n   - v6 -> v7: localhost v2 client migration\n   - Each step has its own SDK migration module that must run in sequence\n\n4. **CosmWasm v0.28 -> v0.46 state migration**\n   - Contract store format changes\n   - Pin/unpin contract code migrations\n\n5. **Add store keys for new modules**\n   - `clock`, `tokenfactory` (empty initial state)\n   - Module stores must be added via `StoreUpgrades.Added`\n\n**Precedent**: Akash Network successfully jumped from SDK v0.45 directly to v0.53 in their Mainnet 14 upgrade. The approach was a single large upgrade handler that performed all intermediate migrations.\n\n#### Execution Order\n\nThe space-pussy upgrade happens **after** Step 1 (bostrom -> SDK v0.50) because:\n1. The multi-chain refactor is done as part of Step 1\n2. Space-pussy can then upgrade directly to the same binary as bostrom\n3. Both chains advance together in Step 2\n\nTimeline:\n```\nStep 1: go-cyber v0.50 + multi-chain refactor\n  │\n  ├── Deploy on bostrom (upgrade proposal)\n  │\n  └── Deploy on space-pussy (upgrade proposal, includes v0.45->v0.50 migration)\n       └── space-pussy now runs same binary as bostrom\n  │\nStep 2: go-cyber v0.53 + CosmWasm 3.0\n  │\n  ├── Deploy on bostrom (upgrade proposal)\n  └── Deploy on space-pussy (upgrade proposal)\n       └── Both chains in sync going forward\n```\n\n### Space-Pussy Upgrade Checklist\n\n- [ ] Refactor `app/app.go`, `app/params/const.go`, `types/coins.go` to read denoms from config/genesis\n- [ ] Make bech32 prefix configurable (read from app config)\n- [ ] Verify all 13+ source files that reference hardcoded denoms are updated\n- [ ] Write space-pussy upgrade handler with chain-id conditional logic\n- [ ] Implement SDK v0.45 -> v0.50 state migrations for space-pussy's state\n- [ ] Implement IBC v3 -> v8 sequential state migrations\n- [ ] Implement CosmWasm v0.28 -> v0.54 state migrations\n- [ ] Add store upgrades for new modules (clock, tokenfactory, circuit, feeibc)\n- [ ] Test upgrade against space-pussy mainnet state export (in-place testnet)\n- [ ] Submit upgrade proposal on space-pussy governance\n- [ ] Coordinate validator binary swap\n- [ ] Archive `cyberia-to/space-pussy` repo (replaced by go-cyber)\n\n---\n\n## Graph Sync, Topology Export, and Dynamic Rank\n\n### Goal\n\nA client can sync the **full graph topology** (all particles + all cyberlinks) quickly and cheaply, then **pull rank dynamically** only for the subgraph it cares about. Everything through go-cyber natively, no external indexer required.\n\n### Current Architecture and Its Limitations\n\nThe knowledge graph has three layers of state:\n\n1. **Graph store (IAVL):** CID registry, cyberlinks stored as `CompactLink` (24 bytes: `from_cid uint64 + to_cid uint64 + account uint64`), neuron degree counters. IAVL keys: `[0x03][From 8B][Account 8B][To 8B]`, value: `[BlockHeight 8B]`.\n\n2. **In-memory index (`IndexKeeper`):** On startup, full graph loaded from IAVL into RAM as adjacency lists (`outLinks`, `inLinks` maps of `map[CidNumber]map[CidNumber]map[AccNumber]struct{}`). This is what the rank algorithm reads.\n\n3. **Rank values (in-memory only):** `uint64[]` array holding PageRank for every CID. Computed by GPU/CPU every `CalculationPeriod` blocks (default: 5). Only the merkle tree root is stored on-chain — **rank values are never persisted to disk**.\n\n**Current bottlenecks:**\n\n| Problem | Details |\n|---|---|\n| **No graph streaming** | No gRPC endpoint to get all links or particles in bulk. Only `GraphStats()` (counts) and per-particle `Search`/`Backlinks` exist. |\n| **No incremental sync** | Block height stored in IAVL value, not key — cannot efficiently query \"links after height X\" without full scan. |\n| **Snapshot is empty** | Both `GraphSnapshotter.SnapshotExtension()` and `RankSnapshotter.SnapshotExtension()` return `nil` — state-sync snapshots contain no graph or rank data. |\n| **No index by neuron** | IAVL key is `[From][Account][To]` — can prefix-scan by From, but finding all links by a specific Account requires full scan. |\n| **No index by particle (To)** | Finding all backlinks to a particle in IAVL requires full scan — the in-memory index does this, but there's no query endpoint for it from IAVL. |\n| **Rank requires full recalc** | After state-sync restore, node must load entire graph + run full PageRank before serving queries. Requires GPU or hours of CPU time. |\n\n### Target Architecture: Graph Topology Sync + Lazy Rank\n\n```\nLight client / indexer / UI:\n  1. Initial sync: call GraphSnapshot stream → receive full topology (particles + links)\n  2. Incremental sync: call CyberlinksAfter(height) → receive new links since last sync\n  3. Rank on demand: call Rank(particle), Search(particle), Backlinks(particle)\n     → node returns pre-computed rank for requested particles\n  4. Bulk rank: call TopParticles(limit) → top N ranked particles with scores\n```\n\nThe client builds a local graph representation, and lazily fetches rank values for the subgraph it's exploring. No need to sync all rank values — only what the user is looking at.\n\n### Implementation: Three Levels\n\n#### Level 1: Graph Streaming gRPC (Now, No Consensus Change)\n\nNew gRPC endpoints in `x/graph`, using existing IAVL data:\n\n```protobuf\nservice Query {\n  // Existing\n  rpc GraphStats(QueryGraphStatsRequest) returns (QueryGraphStatsResponse);\n\n  // NEW: Stream full graph topology in chunks\n  // Server-side streaming: sends batches of 1000 links until complete.\n  // Under the hood: IterateLinks() prefix scan on 0x03.\n  rpc GraphSnapshot(QueryGraphSnapshotRequest)\n      returns (stream QueryGraphSnapshotResponse);\n\n  // NEW: Incremental sync — links created after a given height.\n  // Implementation: full IAVL scan + filter by height value.\n  // Slow (O(n)) but correct. Secondary index added in Level 2.\n  rpc CyberlinksAfter(QueryCyberlinksAfterRequest)\n      returns (QueryCyberlinksAfterResponse);\n\n  // NEW: All links from/to a specific particle (paginated).\n  // Uses in-memory index (inLinks/outLinks) — fast, O(degree).\n  rpc CyberlinksByParticle(QueryCyberlinksByParticleRequest)\n      returns (QueryCyberlinksByParticleResponse);\n}\n```\n\nSize estimate for full graph sync (1M links):\n- Particles: ~34 MB (CID strings + numbers)\n- Links: ~24 MB (24 bytes × 1M)\n- Total: ~58 MB uncompressed, ~15 MB with gRPC compression\n\nThis is the **minimum viable product** for graph sync — can be implemented immediately on SDK v0.47.\n\n#### Level 2: Snapshot Extensions + Height Index (Consensus Change, with SDK Upgrade)\n\n**A. Fill the empty snapshotters:**\n\n```go\n// x/graph/keeper/snapshotter.go\nfunc (gs *GraphSnapshotter) SnapshotExtension(height uint64, pw snapshot.ExtensionPayloadWriter) error {\n    // Binary format already exists: WriteCids() + WriteLinks()\n    // 1. Write all CIDs (variable-length binary)\n    // 2. Write all CompactLinks (24 bytes each)\n    return gs.graphKeeper.WriteGenesis(pw)\n}\n\n// x/rank/keeper/snapshotter.go\nfunc (rs *RankSnapshotter) SnapshotExtension(height uint64, pw snapshot.ExtensionPayloadWriter) error {\n    // 1. Write cidCount (uint64)\n    // 2. Write rankValues[] (cidCount × 8 bytes)\n    return rs.WriteRankValues(pw)\n}\n\nfunc (rs *RankSnapshotter) RestoreExtension(...) error {\n    // 1. Read rank values from payload\n    // 2. Build merkle tree from values\n    // 3. Verify merkle root matches on-chain LatestMerkleTree\n    // 4. Load into networkCidRank — node is immediately ready, NO GPU needed\n    return rs.LoadRankValues(pr)\n}\n```\n\nSnapshot payload sizes (estimated):\n- 1M links: ~58 MB graph + ~8 MB rank = ~66 MB (→ ~15-20 MB compressed)\n- 10M links: ~580 MB graph + ~80 MB rank = ~660 MB (→ ~150-200 MB compressed)\n\n**B. Secondary index by height** (for efficient `CyberlinksAfter`):\n\nNew IAVL key prefix: `[0x07][Height 8B][LinkSeq 8B]` → enables O(k) incremental sync where k = new links only.\n\nThis is a consensus change (new store key) and must ship with a chain upgrade.\n\n#### Level 3: Light Client with Rank Proofs\n\nThe codebase already has the foundation: `merkle/tree.go` implements RFC-6962 merkle tree with `GetIndexProofs()` and `ValidateIndexByProofs()`.\n\n**A. Rank Inclusion Proofs:**\n\nTwo merkle tree modes:\n- `full=false` — stores only subtree roots (used for consensus, 40 hashes for 1T links)\n- `full=true` — stores all nodes (enables proof generation for any leaf)\n\nNew node flag `--rank-proofs=true` enables full mode on nodes that serve light clients.\n\nNew gRPC endpoint:\n```\nQueryRankWithProof(particle) → { rank, cid_number, proofs[], merkle_root }\n```\n\n**B. Graph Inclusion Proofs (already available):**\n\nIAVL natively supports merkle proofs. Any gRPC query with `prove=true` returns an IAVL proof verifiable against app_hash.\n\n**C. Full verification path:**\n```\nCometBFT light client → verified block header → app_hash\n  → IAVL proof for graph queries (cyberlink existence)\n  → RFC-6962 proof for rank queries (rank value for a CID)\n```\n\nA trustless light client can verify any cyberlink exists and verify the rank of any particle — without downloading full chain state or running PageRank.\n\n### Dynamic Rank: How It Works for Clients\n\nThe client does NOT need all rank values. The workflow:\n\n```\nClient:\n  1. Sync full graph topology via GraphSnapshot (one-time, ~15-60 MB compressed)\n  2. Keep up via CyberlinksAfter(lastHeight) every N blocks\n  3. User navigates to particle \"QmFoo\":\n     a. Client knows local topology: QmFoo has 47 outlinks, 312 backlinks\n     b. Client calls Search(\"QmFoo\", page=0, limit=10) → top 10 outlinks with rank\n     c. Client calls Backlinks(\"QmFoo\", page=0, limit=10) → top 10 backlinks with rank\n     d. Client calls Rank(\"QmFoo\") → rank value of QmFoo itself\n  4. User drills into \"QmBar\" (linked from QmFoo):\n     a. Repeat step 3 for QmBar — lazy load rank for this subgraph\n  5. Client caches rank values locally, invalidates every CalculationPeriod blocks\n```\n\nThis is already possible with existing `Rank`, `Search`, `Backlinks`, `Top` gRPC endpoints. The missing piece is only Level 1 (graph topology streaming).\n\n### Graph Store Separation (Future, SDK v0.53)\n\nSDK v0.53 introduces pluggable storage backends and IAVL v2. This opens the possibility of:\n\n- **Current:** Cyberlinks stored as individual IAVL KV pairs. Each write goes through full IAVL tree path (O(log n) with proof generation).\n- **Future:** Flat append-only store for cyberlinks (no per-link proof needed), with only the graph merkle root in IAVL for consensus. Dramatically reduces storage overhead and speeds up full graph iteration.\n\n### Checklist\n\n**Level 1 (Now, no consensus change):**\n- [ ] Add `GraphSnapshot` server-side streaming gRPC endpoint (prefix scan on `0x03`)\n- [ ] Add `CyberlinksAfter` gRPC endpoint (full scan + height filter, O(n))\n- [ ] Add `CyberlinksByParticle` gRPC endpoint (from in-memory index, O(degree))\n- [ ] Benchmark: full graph stream time for production graph size\n- [ ] Test: client syncs full topology, then lazy-loads rank via existing Search/Backlinks\n\n**Level 2 (Consensus change, with SDK upgrade):**\n- [ ] Implement graph data in `GraphSnapshotter.SnapshotExtension()` using existing `WriteGenesis()` format\n- [ ] Implement rank values in `RankSnapshotter.SnapshotExtension()`\n- [ ] Implement rank values restore + merkle verification in `RankSnapshotter.RestoreExtension()`\n- [ ] Add secondary index `[0x07][Height][Seq]` for efficient incremental sync\n- [ ] Benchmark snapshot size with rank values for production graph\n- [ ] Test state-sync restore without GPU (rank loaded from snapshot)\n\n**Level 3 (Light client):**\n- [ ] Add `--rank-proofs` node flag to control `full=true` merkle tree mode\n- [ ] Add `QueryRankWithProof` gRPC endpoint to `x/rank` module\n- [ ] Document light client verification protocol\n- [ ] Evaluate graph store separation feasibility after SDK v0.53 migration\n\n---\n\n## Native Graph Indexing (Replace Cyberindex)\n\n### Problem\n\nThe current indexing architecture requires three external services (cyberindex, PostgreSQL, Hasura) running alongside the node. This adds operational complexity, deployment overhead, and introduces latency (block polling). For the knowledge graph use case, the node itself should be the primary data source.\n\n### Current State\n\n- **cyberindex** (separate Go service) polls RPC, parses blocks/events, writes to PostgreSQL\n- **Hasura** auto-generates GraphQL API over PostgreSQL\n- **go-cyber already loads** `streaming.LoadStreamingServices()` in `app/keepers/keepers.go` — the ADR-038 infrastructure is wired but unused\n- CometBFT `tx_index = \"kv\"` with `index-events = []` already indexes ALL events natively\n- Transaction queries by address work out of the box: `query txs --events 'message.sender=<addr>'`\n\n### What Cyberindex Captures (SQL Schema)\n\n| Table | Source | Can Node Do This Natively? |\n|---|---|---|\n| `block`, `transaction`, `message` | Block/TX parsing | Yes — CometBFT tx_index already provides this |\n| `cyberlinks`, `particles` | `EventTypeCyberlink` events | Yes — events indexed, but no structured query API |\n| `account_balance` | Bank module state | Yes — gRPC query already exists |\n| `routes` | Grid module events | Yes — events indexed |\n| `investmints` | Resources module events | Yes — events indexed |\n| `contracts` | Wasm module state | Yes — gRPC query already exists |\n| `validator`, `pre_commit` | CometBFT consensus | Yes — CometBFT RPC provides this |\n\n### Architecture: Embedded ABCIListener Plugin\n\nReplace cyberindex with a native streaming plugin that writes to an embedded database (SQLite or embedded PostgreSQL):\n\n```\ngo-cyber node\n   BaseApp\n     ├── FinalizeBlock → ABCIListener\n     │     ├── cyberlink events → embedded DB (cyberlinks, particles)\n     │     ├── investmint events → embedded DB\n     │     ├── grid events → embedded DB\n     │     └── wasm events → embedded DB\n     └── Commit → flush batch\n                    ↓\n              Embedded SQLite/DuckDB\n                    ↓\n              Native gRPC query endpoints (graph by address, history, analytics)\n                    ↓\n              Optional: Hasura over embedded DB (for GraphQL compatibility)\n```\n\n### Implementation Plan\n\n#### Step 0: Native Graph Query Endpoints (No Consensus Change)\n\nAdd gRPC query endpoints to the graph module for data that currently requires cyberindex:\n\n```protobuf\nservice Query {\n  // Existing\n  rpc GraphStats(QueryGraphStatsRequest) returns (QueryGraphStatsResponse);\n\n  // New: paginated cyberlinks by neuron address\n  rpc CyberlinksByNeuron(QueryCyberlinksByNeuronRequest)\n      returns (QueryCyberlinksByNeuronResponse);\n\n  // New: paginated cyberlinks by particle (all links from/to a CID)\n  rpc CyberlinksByParticle(QueryCyberlinksByParticleRequest)\n      returns (QueryCyberlinksByParticleResponse);\n\n  // New: all particles created by a neuron\n  rpc ParticlesByNeuron(QueryParticlesByNeuronRequest)\n      returns (QueryParticlesByNeuronResponse);\n\n  // New: incremental graph export (for external indexers and light clients)\n  rpc CyberlinksAfter(CyberlinksAfterRequest)\n      returns (CyberlinksAfterResponse);\n}\n```\n\nThese queries can be implemented by iterating the existing IAVL store with prefix scans — no new state needed.\n\n#### Step 1: ABCIListener Streaming Plugin (With SDK v0.50)\n\nSDK v0.50 fixes the `ListenFinalizeBlock` bug and provides proper event grouping. Implement a streaming plugin that:\n\n1. Receives all state changes and events via `ABCIListener`\n2. Writes structured data to an embedded database (SQLite for simplicity, DuckDB for analytics)\n3. Exposes additional gRPC endpoints for historical queries (link history, balance history)\n4. Configuration via `app.toml`:\n   ```toml\n   [indexer]\n   enabled = true\n   backend = \"sqlite\"    # or \"duckdb\", \"postgres\"\n   path = \"data/index.db\"\n   ```\n\n#### Step 2: Schema/Indexer Framework (With SDK v0.53)\n\nSDK v0.53 introduces `cosmossdk.io/schema/indexer` with automatic table generation from module schemas. Implement `HasModuleCodec` for custom modules (graph, rank, resources, grid) so the native indexer framework can auto-generate SQL tables.\n\n### What This Eliminates\n\n| Component | Status |\n|---|---|\n| cyberindex Docker service | **Eliminated** — node indexes natively |\n| PostgreSQL for indexing | **Replaced** by embedded DB (or optional external Postgres) |\n| Hasura | **Optional** — can still point at embedded DB for GraphQL, or use native gRPC |\n| Block polling latency | **Eliminated** — data available at commit time |\n| Separate deployment/monitoring | **Eliminated** — single binary |\n\n### Checklist\n\n- [ ] Add `CyberlinksByNeuron` gRPC endpoint (IAVL prefix scan, no new state)\n- [ ] Add `CyberlinksByParticle` gRPC endpoint (IAVL prefix scan)\n- [ ] Add `ParticlesByNeuron` gRPC endpoint (IAVL prefix scan)\n- [ ] Add `CyberlinksAfter` gRPC endpoint (incremental export by height)\n- [ ] Implement ABCIListener plugin with SQLite backend (SDK v0.50)\n- [ ] Implement `HasModuleCodec` for graph, rank, resources, grid modules (SDK v0.53)\n- [ ] Add `[indexer]` configuration section to `app.toml`\n- [ ] Benchmark embedded DB vs external PostgreSQL for query performance\n- [ ] Migration guide: cyberindex users → native indexing\n\n---\n\n## IPFS Sidecar: Kubo as Managed Subprocess\n\n### Problem\n\ngo-cyber stores CID references but cannot resolve them to content. Users must install, configure, and maintain a separate Kubo (IPFS) node — a process that has historically been painful and error-prone (port conflicts, CORS configuration, bootstrap peers, garbage collection tuning).\n\nWithout a working IPFS node, the knowledge graph is just a graph of opaque hashes. Content resolution is essential for search, discovery, and any meaningful interaction with the graph.\n\n### Why Not Embed IPFS in the Binary\n\nThree approaches were evaluated:\n\n| Approach | Verdict | Why |\n|---|---|---|\n| **Embed full Kubo** | Rejected | +50MB binary, 68 direct deps, go-cid v0.0.7→v0.5.0 breaking upgrade, monthly Kubo releases break integration. Textile tried this, deprecated it. |\n| **Embed libp2p + Bitswap** | Rejected | Bitswap without DHT is useless (can't find content providers). Adding DHT = 80% of Kubo without the useful 20% (gateway, pinning, GC). Still massive dep conflicts. |\n| **Kubo as managed sidecar** | **Selected** | Zero dep conflicts, full IPFS functionality, process isolation, independent updates, battle-tested. IPFS Cluster uses this pattern. |\n\n### Architecture: Managed Kubo Sidecar\n\n```\ncyber init\n  ├── Initialize blockchain node (as before)\n  └── Initialize IPFS repo with pre-configured config\n        ├── Ports: API 5001, Gateway 8080, Swarm 4001 (no conflicts with CometBFT)\n        ├── Bootstrap: cyber network peers + default IPFS bootstrap\n        ├── CORS: configured for cyber.page and localhost\n        ├── Gateway: writable=false, localhost only\n        ├── Peering: known cyber full nodes pre-configured\n        └── GC: automatic, watermark-based\n\ncyber start\n  ├── Start CometBFT + go-cyber (blockchain)\n  └── Start Kubo daemon (managed subprocess)\n        ├── Lifecycle tied to cyber process (start/stop together)\n        ├── Health monitoring (restart on crash)\n        └── HTTP API on localhost:5001 (not exposed externally)\n\ngo-cyber ←→ Kubo communication: HTTP API (localhost:5001)\n```\n\n### What This Gives\n\n- **\"Install once, everything works\"** — `cyber init` sets up IPFS with sane defaults, no manual configuration\n- **Full IPFS** — DHT, Bitswap, DAG resolution, gateway, pinning, GC — everything works because it's real Kubo\n- **Process isolation** — Kubo crash doesn't affect consensus; blockchain crash doesn't lose pinned content\n- **Independent updates** — upgrade Kubo without touching the blockchain binary, and vice versa\n- **Zero dependency conflicts** — go-cyber binary unchanged, Kubo runs as separate process\n\n### go-cyber Integration (Minimal Code)\n\nThe blockchain side needs only an HTTP client to Kubo's RPC API:\n\n```go\n// x/content/keeper/ipfs.go\ntype IPFSClient struct {\n    apiURL string  // default: http://localhost:5001\n}\n\nfunc (c *IPFSClient) Resolve(cid string) ([]byte, error) {\n    resp, err := http.Post(c.apiURL+\"/api/v0/cat?arg=\"+cid, \"\", nil)\n    // ...\n}\n\nfunc (c *IPFSClient) Pin(cid string) error {\n    resp, err := http.Post(c.apiURL+\"/api/v0/pin/add?arg=\"+cid, \"\", nil)\n    // ...\n}\n\nfunc (c *IPFSClient) Add(data []byte) (string, error) {\n    // multipart upload to /api/v0/add\n    // returns CID\n}\n```\n\nNew gRPC endpoints exposed by go-cyber (proxying to Kubo):\n\n```protobuf\nservice Query {\n  // Resolve particle CID to content bytes (proxied to Kubo)\n  rpc ResolveParticle(QueryResolveParticleRequest)\n      returns (QueryResolveParticleResponse);\n}\n```\n\n### Pre-configured Kubo Config\n\nThe `cyber init` command generates `~/.cyber/ipfs/config` with:\n\n```json\n{\n  \"Addresses\": {\n    \"API\": \"/ip4/127.0.0.1/tcp/5001\",\n    \"Gateway\": \"/ip4/127.0.0.1/tcp/8080\",\n    \"Swarm\": [\"/ip4/0.0.0.0/tcp/4001\", \"/ip6/::/tcp/4001\"]\n  },\n  \"Bootstrap\": [\n    \"/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7...\",\n    \"/dns4/hub.bostrom.cybernode.ai/tcp/4001/p2p/...\"\n  ],\n  \"Peering\": {\n    \"Peers\": [\n      {\"ID\": \"...\", \"Addrs\": [\"/dns4/earth.bostrom.cybernode.ai/tcp/4001\"]}\n    ]\n  },\n  \"Datastore\": {\n    \"StorageMax\": \"50GB\",\n    \"GCPeriod\": \"1h\"\n  },\n  \"Gateway\": {\n    \"HTTPHeaders\": {\n      \"Access-Control-Allow-Origin\": [\"http://localhost:3000\", \"https://cyber.page\"]\n    }\n  },\n  \"API\": {\n    \"HTTPHeaders\": {\n      \"Access-Control-Allow-Origin\": [\"http://localhost:3000\", \"https://cyber.page\"]\n    }\n  },\n  \"Swarm\": {\n    \"ConnMgr\": {\"LowWater\": 50, \"HighWater\": 200, \"GracePeriod\": \"60s\"}\n  }\n}\n```\n\n### Implementation Plan\n\n#### Phase 1: Managed Lifecycle\n- `cyber init` generates IPFS repo with pre-configured config\n- `cyber start` launches Kubo as subprocess, manages lifecycle (restart on crash)\n- `cyber stop` cleanly shuts down both processes\n- `[ipfs]` section in `app.toml` for enabling/disabling and config path\n- Kubo binary location: bundled in release tarball or auto-downloaded on first init\n\n#### Phase 2: Content Integration\n- `ResolveParticle` gRPC endpoint (proxy to Kubo API)\n- Auto-pin particles from new cyberlinks (configurable)\n- Pin top-ranked particles from search index (configurable)\n\n#### Phase 3: Cyber-Aware IPFS\n- Custom Kubo plugin or peering config that preferentially connects to other cyber nodes\n- Content availability metrics per particle (how many cyber nodes pin it)\n- Integration with rank: content availability as a signal\n\n### Configuration\n\n```toml\n[ipfs]\nenabled = true\nbinary = \"/usr/local/bin/ipfs\"   # or bundled path\nrepo_path = \"ipfs\"               # relative to cyber home\nauto_pin = true                  # pin particles from new cyberlinks\npin_top = 1000                   # pin top N ranked particles\n```\n\n### Checklist\n\n- [ ] Add IPFS repo initialization to `cyber init` with pre-configured config\n- [ ] Implement Kubo subprocess management in `cyber start` (launch, health check, restart)\n- [ ] Add `[ipfs]` configuration section to `app.toml`\n- [ ] Implement `IPFSClient` HTTP wrapper for Kubo API\n- [ ] Add `ResolveParticle` gRPC endpoint\n- [ ] Bundle Kubo binary in release artifacts (or auto-download script)\n- [ ] Pre-configure bootstrap peers and peering for cyber network\n- [ ] Pre-configure CORS for cyber.page and localhost\n- [ ] Implement auto-pin for new cyberlinks (Phase 2)\n- [ ] Implement top-ranked particle pinning (Phase 2)\n- [ ] Test: `cyber init && cyber start` on clean machine gives working IPFS + blockchain\n- [ ] Document: how to use existing Kubo installation instead of managed sidecar\n\n---\n\n## Cross-Platform GPU Compute (wgpu, Replace CUDA)\n\n### Problem\n\nCybeRank computation currently requires NVIDIA CUDA — only Linux + NVIDIA GPU can run rank calculation on GPU. macOS, AMD, Intel Arc, and any non-NVIDIA setup falls back to CPU, which is orders of magnitude slower for large graphs. This limits who can run a full node with fast rank computation.\n\n### Current CUDA Architecture\n\nAfter removing karma/entropy/luminosity, **4 CUDA kernels remain** in `x/rank/cuda/rank.cu`:\n\n| Kernel | Purpose | Complexity |\n|---|---|---|\n| `get_particle_stake_by_links` | Weighted stake per neuron's links | Simple: divide stake by neudeg |\n| `get_compressed_in_links_count` | Count incoming links per particle | Simple: parallel count |\n| `get_compressed_in_links` | Build compressed in-links array with weights | Medium: prefix sum + scatter |\n| `run_rank_iteration` | One PageRank iteration (core algorithm) | Medium: weighted sum + normalize |\n\nSupporting operations:\n- `find_max_ranks_diff` — Thrust-based reduction (convergence check)\n- `get_links_start_index` — CPU prefix sum (link offsets)\n\nBuild: `//go:build cuda` tag, `-fmad=false` flag for **consensus determinism** (disables fused multiply-add to ensure all nodes compute identical float64 results).\n\nData types: **float64 (double precision)** throughout — `CompressedInLink` = `{uint64_t fromIndex, double weight}` (16 bytes).\n\n### wgpu/WebGPU as Cross-Platform Alternative\n\nWebGPU (via wgpu-native, written in Rust) provides a cross-platform GPU compute API over:\n- **Vulkan** (Linux, Windows, Android)\n- **Metal** (macOS, iOS)\n- **DX12** (Windows)\n\nBest Go binding: **`go-webgpu/webgpu`** (v0.3.1, zero-CGO, active project). Uses wgpu-native under the hood.\n\nPerformance: **85-100% of CUDA** for optimized compute shaders on Vulkan.\n\n### Critical Blockers\n\n#### 1. f64 Not Supported on Apple Silicon / Metal\n\n**This is the biggest blocker for the Mac use case.** Metal (and therefore wgpu on macOS) does **not support 64-bit floating point** in compute shaders. WGSL's `f64` type requires the `shader-f64` extension, which is only available on:\n- Vulkan devices with `shaderFloat64` feature (most discrete NVIDIA/AMD GPUs)\n- DX12 devices (most desktop GPUs)\n- **NOT Metal** — Apple has never shipped f64 in Metal shaders\n\nThis means the exact same algorithm (using float64) **cannot run on Mac GPU**.\n\nWorkarounds:\n- **f32 (single precision):** Works on all GPUs including Apple Silicon. But reduces precision from ~15 decimal digits to ~7. Must prove that PageRank convergence and final values are identical (or acceptably close) to the f64 version for consensus.\n- **Emulated f64:** Use double-single (ds) arithmetic — represent each f64 as a pair of f32. ~4x slower than native f64, but still much faster than CPU. Determinism is hard to guarantee.\n\n#### 2. Consensus Determinism (no `-fmad=false` equivalent)\n\nCUDA's `-fmad=false` disables fused multiply-add to ensure `a*b+c` is computed as two separate operations, producing identical results across all NVIDIA GPUs. WGSL has **no equivalent flag**:\n- Metal: no FMA control\n- Vulkan/SPIR-V: can annotate `NoContraction` on individual operations\n- WGSL: no standard annotation yet (proposal exists but not adopted)\n\nThis means: ensuring bit-exact results across different GPU vendors (NVIDIA vs AMD vs Intel vs Apple) requires manual effort — either hand-written SPIR-V with `NoContraction`, or proving that FMA differences don't affect final convergence.\n\n### Recommended Approach: Three Phases\n\n#### Phase 1: Optimize CPU Path (Now, No Risk)\n\nThe CPU fallback (`calculate_cpu.go`) is unoptimized. Before adding wgpu complexity, make CPU viable for medium-sized graphs:\n\n- [ ] SIMD (AVX2/NEON) for the rank iteration inner loop\n- [ ] `sync.Pool` + goroutine parallelism for multi-core utilization\n- [ ] Precompute `getOverallOutLinksStake` per CID (currently recomputed O(|V| × avg_degree²))\n- [ ] Cache-friendly memory layout for compressed links (struct-of-arrays vs array-of-structs)\n\nTarget: **10x CPU speedup** — viable for graphs up to ~1M links without GPU.\n\n#### Phase 2: wgpu Prototype with f32 (Medium Term)\n\nBuild a wgpu compute shader implementation of the 4 kernels using f32:\n\n- [ ] Port `run_rank_iteration` to WGSL compute shader (f32)\n- [ ] Port `get_compressed_in_links` to WGSL\n- [ ] Port `get_particle_stake_by_links` to WGSL\n- [ ] Implement max_diff reduction in WGSL\n- [ ] Benchmark: compare f32 wgpu vs f64 CUDA rank values on mainnet graph\n- [ ] Quantify precision loss: max absolute and relative error in rank values\n- [ ] Test consensus: run f32 and f64 on same graph, verify convergence to same ordering (top-N agreement)\n\nIf f32 precision is **sufficient for consensus** (same merkle root), this becomes the cross-platform default:\n- Works on Mac (Apple Silicon Metal)\n- Works on Linux (Vulkan, any GPU vendor)\n- Works on Windows (DX12/Vulkan)\n- Build tag: `//go:build wgpu`\n\nIf f32 precision is **not sufficient**, fall back to Phase 3.\n\n#### Phase 3: Full f64 wgpu (Long Term)\n\nFor validators and full nodes that need consensus-grade f64:\n\n- [ ] wgpu with f64 on Vulkan/DX12 (NVIDIA, AMD, Intel Arc on Linux/Windows)\n- [ ] Emulated f64 (double-single) on Metal for Mac — slower but correct\n- [ ] Cross-vendor determinism testing: NVIDIA vs AMD vs Intel GPU producing identical rank values\n- [ ] `NoContraction` annotation in SPIR-V backend for Vulkan determinism\n- [ ] Build tag: `//go:build wgpu_f64`\n\n### Decision Matrix\n\n| Platform | CUDA (current) | wgpu f32 (Phase 2) | wgpu f64 (Phase 3) | CPU optimized (Phase 1) |\n|---|---|---|---|---|\n| Linux + NVIDIA | **Yes** | Yes | Yes (Vulkan) | Yes |\n| Linux + AMD | No | Yes (Vulkan) | Yes (Vulkan) | Yes |\n| macOS + Apple Silicon | No | **Yes (Metal)** | Emulated only | Yes |\n| Windows + any GPU | No | Yes (DX12/Vulkan) | Yes (DX12/Vulkan) | Yes |\n| ARM server (no GPU) | No | No | No | **Yes** |\n\n### Migration Path\n\n```\nCurrent:  [CUDA (NVIDIA only)] ←OR→ [CPU (slow, unoptimized)]\n                                        ↓\nPhase 1:  [CUDA (NVIDIA only)] ←OR→ [CPU optimized (10x faster)]\n                                        ↓\nPhase 2:  [CUDA] ←OR→ [wgpu f32 (cross-platform)] ←OR→ [CPU optimized]\n                                        ↓\nPhase 3:  [wgpu f64 (Vulkan/DX12)] ←OR→ [wgpu f32 (Metal)] ←OR→ [CPU]\n          └── CUDA becomes optional/deprecated\n```\n\n### Checklist\n\n**Phase 1 (CPU optimization, now):**\n- [ ] Profile CPU rank calculation on mainnet-sized graph, identify hotspots\n- [ ] Parallelize rank iteration across goroutines\n- [ ] Add SIMD intrinsics for inner loop (AVX2 on x86, NEON on ARM)\n- [ ] Precompute per-CID outgoing stake totals\n- [ ] Benchmark: CPU optimized vs CUDA on same hardware\n\n**Phase 2 (wgpu f32 prototype):**\n- [ ] Evaluate `go-webgpu/webgpu` v0.3.1: build, run compute shader example\n- [ ] Port 4 CUDA kernels to WGSL compute shaders (f32)\n- [ ] Integrate with go-cyber via `//go:build wgpu` tag\n- [ ] Precision analysis: f32 vs f64 rank values on mainnet state export\n- [ ] Consensus test: can f32 produce identical merkle roots as f64?\n- [ ] Cross-platform test: same rank output on Mac Metal vs Linux Vulkan\n\n**Phase 3 (wgpu f64, long term):**\n- [ ] f64 WGSL shaders with `shader-f64` extension\n- [ ] Emulated f64 on Metal (double-single arithmetic)\n- [ ] Cross-vendor determinism test (NVIDIA Vulkan vs AMD Vulkan vs Intel Vulkan)\n- [ ] `NoContraction` SPIR-V annotation for FMA determinism\n- [ ] Deprecation path for CUDA: runtime detection of best available backend\n\n---\n\n## Node Distribution: cyb Desktop App (Tray + Dashboard)\n\n### Problem\n\ngo-cyber is currently distributed as a bare CLI binary. Running a node requires manual configuration (config.toml, app.toml, genesis), separate IPFS installation, no visual status feedback, no auto-start, no OS integration. This is a barrier for anyone who isn't a devops specialist.\n\nGoal: **\"Download → double-click → it works.\"** Like Docker Desktop — a daemon with a tray icon and a web dashboard.\n\n### Current State\n\n| What | Status |\n|---|---|\n| Binary build | `make build` → `build/cyber` CLI |\n| Installation | Manual or `scripts/install_cyber.sh` (outdated, references v0.2.0) |\n| OS service | None (no systemd/launchd files) |\n| Dashboard/UI | None (only Swagger at `:1317/swagger`) |\n| IPFS | Separate manual install |\n| Desktop app | None |\n| GoReleaser | Outdated (references `cyberdcli`) |\n\n### Target Architecture: Three Binaries, One App\n\nThe distribution consists of three binaries. The user interacts only with **cyb** (`go-cyb`) — the desktop app that orchestrates the other two.\n\n```\nBinaries:\n  cyber  (~50MB)  ← blockchain node (Cosmos SDK + CosmWasm + rank)\n  ipfs   (~50MB)  ← Kubo IPFS node (separate project, cannot embed due to dep conflicts)\n  cyb    (~5MB)   ← desktop app: tray, orchestrator, the only thing user launches\n                     (separate repo: go-cyb)\n\nWhy three binaries:\n  - cyber + ipfs cannot be one binary: massive Go dependency conflicts\n    (go-cid v0.0.7 vs v0.5.0, libp2p versions, etc.)\n  - cyb is lightweight: no blockchain deps, no IPFS deps, just HTTP + systray\n  - Each has its own release cycle: update IPFS or node without touching the others\n\nProcess tree (when running):\n  cyb (always running, started at login)\n    ├── manages → cyber start --home ~/.cyber\n    │               ├── CometBFT consensus\n    │               ├── Cosmos SDK app\n    │               ├── gRPC/REST/RPC servers\n    │               └── embedded dashboard (port 26660)\n    └── manages → ipfs daemon --repo-dir ~/.cyber/ipfs\n                    ├── DHT\n                    ├── Bitswap\n                    ├── Gateway (port 8080)\n                    └── API (port 5001)\n```\n\n**cyb is the orchestrator:**\n- Launches `cyber` and `ipfs` as child processes\n- Monitors health of both (restart on crash)\n- Shows combined status in tray icon\n- Provides Start/Stop for the whole stack\n- On quit: gracefully stops both daemons\n\n**CLI still works independently:**\n- `cyber start` works without cyb (for servers, Docker, CI)\n- `ipfs daemon` works without cyb (for advanced users)\n- cyb is the desktop UX layer, not a requirement\n\n### Port Map (all services from one install)\n\n| Port | Service | Binding |\n|---|---|---|\n| 26656 | P2P (CometBFT peers) | 0.0.0.0 |\n| 26657 | CometBFT RPC | 0.0.0.0 |\n| 9090 | gRPC | 0.0.0.0 |\n| 9091 | gRPC-Web (browser) | 0.0.0.0 |\n| 1317 | REST API + Swagger | 0.0.0.0 |\n| **26660** | **Dashboard (web UI)** | localhost |\n| 5001 | IPFS API (Kubo) | localhost |\n| 4001 | IPFS Swarm (Kubo) | 0.0.0.0 |\n| 8080 | IPFS Gateway (Kubo) | localhost |\n\n### Component 1: cyb (go-cyb) — Desktop App & Orchestrator\n\nThe **only thing the user launches**. Manages both `cyber` and `ipfs` processes. Separate repository: `go-cyb`.\n\n**Technology:** Go + `getlantern/systray` (cross-platform: macOS, Linux, Windows). No blockchain or IPFS dependencies — only `net/http`, `os/exec`, and `systray`.\n\n**Process Management:**\n```\ncyb start sequence:\n  1. Check if cyber and ipfs are already running (poll health endpoints)\n  2. If not: find binaries (PATH or configured location)\n  3. Launch ipfs daemon --repo-dir ~/.cyber/ipfs (background)\n  4. Wait for IPFS API ready (poll localhost:5001/api/v0/id)\n  5. Launch cyber start --home ~/.cyber (background)\n  6. Wait for node ready (poll localhost:26657/health)\n  7. Show tray icon: 🟡 syncing\n\ncyb health loop (every 5s):\n  - GET localhost:26657/status → height, catching_up, voting_power\n  - GET localhost:5001/api/v0/id → IPFS peer ID, connected peers\n  - If cyber crashed → restart (up to 3 retries, then show error)\n  - If ipfs crashed → restart\n  - Update icon: 🟢 both synced, 🟡 syncing, 🟠 IPFS down, 🔴 node down\n\ncyb stop sequence:\n  1. Send SIGTERM to cyber process → wait for graceful shutdown\n  2. Send SIGTERM to ipfs process → wait for graceful shutdown\n  3. Icon → 🔴 stopped\n```\n\n**Tray Menu:**\n```\n  ┌─────────────────────────────────┐\n  │ 🟢 Cyber Node                   │\n  │    Height: 22,451,003           │\n  │    Peers: 47  |  Block: 5.2s   │\n  │ 🟢 IPFS                         │\n  │    Peers: 156  |  Repo: 12 GB  │\n  ├─────────────────────────────────┤\n  │ Open Dashboard                  │  → open http://localhost:26660\n  │ Open IPFS Gateway               │  → open http://localhost:8080\n  │ Open IPFS WebUI                 │  → open http://localhost:5001/webui\n  ├─────────────────────────────────┤\n  │ Start All                       │  → start ipfs + cyber\n  │ Stop All                        │  → stop cyber + ipfs\n  │ Restart All                     │  → stop all, start all\n  ├─────────────────────────────────┤\n  │ View Logs                       │  → open ~/.cyber/logs/\n  │ Open Config                     │  → open ~/.cyber/\n  ├─────────────────────────────────┤\n  │ Quit                            │  → stop all + exit tray\n  └─────────────────────────────────┘\n```\n\n**macOS specifics:**\n- Tray lives in menu bar (standard macOS pattern)\n- `Cyb.app` bundle in `/Applications/` (contains cyb binary + references to cyber and ipfs binaries)\n- Login item via launchd plist or `SMAppService`\n- First launch: if binaries not found, offer to download\n\n**Linux specifics:**\n- Tray via AppIndicator (GNOME) or SNI (KDE)\n- `.desktop` file for autostart: `~/.config/autostart/cyb.desktop`\n\n**Key design:** cyb never touches chain state. Communication is purely HTTP polling. Start/stop is `os/exec.Command`. cyb is a thin orchestrator + status display.\n\n### Component 2: Embedded Dashboard (port 26660)\n\nSingle HTML page embedded in the `cyber` binary via Go `embed`. Served by a goroutine alongside the node.\n\n**Content:**\n```\n┌──────────────────────────────────────────────────────────┐\n│  CYBER NODE DASHBOARD                    chain: bostrom  │\n├──────────────────────────────────────────────────────────┤\n│                                                          │\n│  STATUS         NETWORK           GRAPH                  │\n│  ● Synced       Peers: 47/50      Particles: 8.2M       │\n│  Height: 22.4M  In: 32  Out: 15   Cyberlinks: 12.1M     │\n│  Block time: 5s Bandwidth: 42%    Neurons: 340K          │\n│                                                          │\n│  RANK                    IPFS                            │\n│  Method: GPU (CUDA)      ● Connected                     │\n│  Last calc: block 22.4M  Peers: 156                      │\n│  Iterations: 23          Pinned: 45.2K objects           │\n│  Tolerance: 0.001        Repo size: 12.3 GB              │\n│                                                          │\n│  RESOURCES                                               │\n│  CPU: 34%  RAM: 8.2 GB  Disk: 124 GB  GPU: 67%         │\n│                                                          │\n│  LOGS (last 50 lines, auto-scroll)                       │\n│  ┌────────────────────────────────────────────────────┐  │\n│  │ 14:23:01 INF committed state height=22451003 ...   │  │\n│  │ 14:23:06 INF committed state height=22451004 ...   │  │\n│  │ ...                                                │  │\n│  └────────────────────────────────────────────────────┘  │\n└──────────────────────────────────────────────────────────┘\n```\n\n**Implementation:**\n- One `index.html` + vanilla JS (~500 lines total)\n- Polls every 3-5 seconds:\n  - `localhost:26657/status` — height, sync, validator info\n  - `localhost:26657/net_info` — peers\n  - `localhost:1317/cyber/graph/v1beta1/graph_stats` — graph metrics\n  - `localhost:5001/api/v0/id` — IPFS status\n  - `localhost:5001/api/v0/repo/stat` — IPFS storage\n- Embedded via `//go:embed dashboard/*`\n- Served on `localhost:26660` by `net/http` goroutine in the node process\n- No frameworks, no npm, no build step — just static files\n- Dark theme, monospace, minimal\n\n### Component 3: OS Service Management (`cyber service`)\n\n```bash\ncyber service install     # Create systemd unit / launchd plist\ncyber service uninstall   # Remove service\ncyber service start       # Start via OS service manager\ncyber service stop        # Stop via OS service manager\ncyber service restart     # Restart\ncyber service status      # Show service status\ncyber service logs        # Tail service logs (journalctl / log show)\n```\n\n**Linux (systemd):**\n```ini\n[Unit]\nDescription=Cyber Node — Knowledge Graph Computer\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nType=simple\nUser=%u\nExecStart=/usr/local/bin/cyber start --home %h/.cyber\nExecStop=/usr/local/bin/cyber stop\nRestart=always\nRestartSec=5\nLimitNOFILE=65535\nEnvironment=DAEMON_HOME=%h/.cyber\n\n[Install]\nWantedBy=default.target\n```\n\n**macOS (launchd):**\n```xml\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"...\">\n<plist version=\"1.0\">\n<dict>\n    <key>Label</key><string>ai.cyber.node</string>\n    <key>ProgramArguments</key>\n    <array>\n        <string>/usr/local/bin/cyber</string>\n        <string>start</string>\n        <string>--home</string>\n        <string>~/.cyber</string>\n    </array>\n    <key>KeepAlive</key><true/>\n    <key>RunAtLoad</key><true/>\n    <key>StandardOutPath</key><string>~/.cyber/logs/node.log</string>\n    <key>StandardErrorPath</key><string>~/.cyber/logs/node.err</string>\n    <key>SoftResourceLimits</key>\n    <dict>\n        <key>NumberOfFiles</key><integer>65535</integer>\n    </dict>\n</dict>\n</plist>\n```\n\n### Component 4: Installer\n\n**One-liner (Linux/macOS):**\n```bash\ncurl -sL https://get.cyber.page | bash\n```\n\nScript does:\n1. Detect OS/arch (darwin-arm64, linux-amd64, linux-arm64)\n2. Download `cyber` + `cyb` binaries from GitHub Releases (go-cyber + go-cyb)\n3. Download Kubo binary (or detect existing installation)\n4. Install to `/usr/local/bin/`\n5. Install `libwasmvm` shared library\n6. Run `cyber init` (if first install)\n7. Register `cyb` as login item\n8. Launch `cyb` (which starts everything)\n9. Print: \"Dashboard: http://localhost:26660\"\n\n**Homebrew (macOS):**\n```bash\nbrew install cybercongress/tap/cyb\n# Installs: cyb, cyber, kubo (dependencies)\n# Post-install: cyber init, register cyb as login item\n```\n\n**Desktop packages:**\n- macOS: `Cyb.dmg` containing `Cyb.app` + `cyber` + `ipfs` + `libwasmvm.dylib`\n- Linux: `.deb` / `.rpm` / AppImage — all three binaries + libwasmvm.so\n- Snap/Flatpak: future option\n\n### User Experience Flow\n\n```\nFirst time (macOS):\n  1. User downloads Cyb.dmg\n  2. Drags Cyb.app to Applications\n  3. Launches Cyb.app → tray icon appears (red — nothing running)\n  4. cyb detects first run → runs cyber init + ipfs init\n  5. cyb starts ipfs daemon + cyber start\n  6. Icon turns yellow (syncing), dashboard opens in browser\n  7. User watches sync progress on dashboard\n  8. Icon turns green when both synced\n  9. On reboot: cyb auto-launches → starts both daemons\n\nFirst time (Linux, curl):\n  1. curl -sL https://get.cyber.page | bash\n  2. Script installs cyber + ipfs + cyb + libwasmvm\n  3. Runs cyber init + ipfs init\n  4. Registers cyb as login item\n  5. Starts everything\n  6. Prints: \"Dashboard: http://localhost:26660\"\n\nDaily use:\n  - Tray icon always visible — one glance: green = all running\n  - Click \"Open Dashboard\" for details\n  - Click \"Stop All\" before closing laptop\n  - cyb auto-restarts crashed processes\n  - Updates: cyb checks GitHub Releases for all components, shows notification\n```\n\n### Implementation Priority\n\n| Step | Component | Effort | Impact |\n|---|---|---|---|\n| **1** | **cyb** (go-cyb tray app) | 3-5 days | Critical — primary UX touchpoint |\n| **2** | **Dashboard** (embedded web page) | 2-3 days | High — visual status |\n| **3** | **`cyber service`** (systemd + launchd) | 1-2 days | High — auto-start/restart |\n| **4** | **Kubo sidecar** in `cyber start` | 3-5 days | High — IPFS out of box |\n| **5** | **Installer script** (`get.cyber.page`) | 1 day | Medium — easy onboarding |\n| **6** | **GoReleaser** update + multi-platform | 1 day | Medium — automated releases |\n| **7** | **macOS .dmg / Linux .deb** packages | 2-3 days | Medium — native install |\n\n### Checklist\n\n**cyb (go-cyb — orchestrator + tray UI):**\n- [ ] Create `go-cyb` repository, implement with `getlantern/systray` (macOS + Linux)\n- [ ] Process management: launch/monitor/restart `cyber` and `ipfs` as child processes\n- [ ] Health polling loop: node status + IPFS status → tray icon update\n- [ ] Tray menu: Start All / Stop All / Restart / Dashboard / IPFS WebUI / Logs / Config / Quit\n- [ ] First-run detection: run `cyber init` + `ipfs init` with preconfigured settings\n- [ ] macOS: `Cyb.app` bundle, login item registration (launchd plist or SMAppService)\n- [ ] Linux: `.desktop` file for autostart\n- [ ] Graceful shutdown: SIGTERM to both processes on Quit\n\n**Dashboard (embedded in cyber):**\n- [ ] Embed dashboard HTML/JS in `cyber` binary via `//go:embed`\n- [ ] Dashboard: node status, peers, graph stats, rank info, IPFS stats, logs\n- [ ] Serve dashboard on `localhost:26660` from node process\n\n**OS service (headless/server use without tray):**\n- [ ] `cyber service install/uninstall/start/stop` for systemd\n- [ ] `cyber service install/uninstall/start/stop` for launchd\n\n**Packaging:**\n- [ ] Update `.goreleaser.yml` in go-cyber: build `cyber` for darwin-arm64, linux-amd64, linux-arm64\n- [ ] GoReleaser in go-cyb: build `cyb` for darwin-arm64, linux-amd64, linux-arm64\n- [ ] Release tarball: `cyber` + `cyb` + `ipfs` (Kubo) + `libwasmvm` per platform\n- [ ] macOS `.dmg`: `Cyb.app` bundle containing cyb + bundled `cyber` + `ipfs` binaries\n- [ ] Linux `.deb` / `.rpm`: all three binaries + libwasmvm + systemd unit + .desktop file\n- [ ] Installer script (`get.cyber.page`): detect OS, download all binaries, init, launch cyb\n- [ ] Homebrew formula: `brew install cybercongress/tap/cyb` (cyb + cyber + ipfs as deps)\n- [ ] Auto-update notification in cyb (check GitHub Releases for all three components)\n- [ ] Documentation: first-time setup guide with screenshots\n\n---\n\n## Graph Inference: LLM Trained on Knowledge Graph\n\n### Problem\n\nCybeRank gives each particle a single number (PageRank). You can find \"what's important\" but you can't ask a question and get a human-readable answer. The knowledge graph has 3M particles linked to real content on IPFS — text, markdown, documents. With an IPFS sidecar resolving content, we can train an actual LLM on the graph's content and make it answer questions.\n\nGoal: **periodically train a small LLM from the knowledge graph content, distribute the model as a downloadable binary, enable generative text inference on the node and on clients. Ask a question → get a coherent text answer grounded in the graph's knowledge.**\n\n### Two-Layer Architecture\n\nThe inference system has two complementary layers:\n\n| Layer | What | Size | Speed | Purpose |\n|-------|------|------|-------|---------|\n| **Embeddings** (cid2vec) | Vector per particle from graph topology | ~200 MB | microseconds | Retrieval: find relevant particles |\n| **LLM** (cyber-LLM) | Fine-tuned language model on resolved content | ~2 GB | seconds | Generation: answer questions in text |\n\nBoth are needed. Embeddings find what's relevant. LLM generates the answer. Together: **RAG (Retrieval-Augmented Generation) grounded in the knowledge graph.**\n\n### Inference Costs a Cyberlink — The Full Loop\n\n**Every inference request requires a cyberlink transaction.** This is the core design: asking the LLM is not free — it costs a link, and that link feeds the graph, and the graph feeds the next model.\n\n```\nUser wants to ask: \"What is the relationship between entropy and consensus?\"\n\n  1. PREPARE (client-side)\n     - User's question text → ipfs add → question_CID\n     - question_CID is now a particle in IPFS\n\n  2. CYBERLINK (on-chain transaction)\n     - User submits: MsgCyberlink { from: question_CID, to: INFERENCE_PARTICLE }\n       (INFERENCE_PARTICLE is a well-known CID, e.g. \"QmInference...\")\n     - This costs bandwidth (anti-spam), requires stake (Sybil resistance)\n     - The cyberlink is now ON-CHAIN — question is part of the graph\n\n  3. INFERENCE (triggered by the link, node-side)\n     - Node sees cyberlink to INFERENCE_PARTICLE → triggers inference pipeline\n     - RETRIEVE: embed question → HNSW search → top-K relevant particles\n     - RESOLVE: top-K CIDs → text content via IPFS\n     - GENERATE: llama-server produces answer text\n     - answer text → ipfs add → answer_CID\n\n  4. RESPONSE LINK (node creates the return link)\n     - Node (or user's client) creates: MsgCyberlink { from: question_CID, to: answer_CID }\n     - Answer is now a particle, linked to the question, IN THE GRAPH\n\n  5. THE GRAPH GROWS\n     - question_CID and answer_CID are new particles\n     - Both are linked (question → inference, question → answer)\n     - Next rank recalculation includes these new particles\n     - Next model training includes this new content\n     - Model gets better → more people ask → more links → better model\n\n         ┌──────────────────────────────────────────┐\n         │           THE FULL LOOP                   │\n         │                                           │\n         │  Ask question ──→ cyberlink (pays)        │\n         │       │                                   │\n         │       ▼                                   │\n         │  LLM generates answer                     │\n         │       │                                   │\n         │       ▼                                   │\n         │  Answer → graph (new particle + link)     │\n         │       │                                   │\n         │       ▼                                   │\n         │  Graph grows → rank recalculates          │\n         │       │                                   │\n         │       ▼                                   │\n         │  Model retrains on bigger graph           │\n         │       │                                   │\n         │       ▼                                   │\n         │  Better model → more questions → ───┐     │\n         │       ▲                             │     │\n         │       └─────────────────────────────┘     │\n         └──────────────────────────────────────────┘\n```\n\n**Why this matters:**\n\n| Property | Mechanism |\n|----------|-----------|\n| **Spam control** | Cyberlink costs bandwidth + requires stake. No stake = no questions. |\n| **Demand signal** | Each question is a real on-chain signal of what users want to know. This feeds PageRank — popular questions/answers rank higher. |\n| **Self-improving** | Every Q&A pair enriches the graph. The model trains on the graph. More questions → richer graph → better model. |\n| **Censorship resistance** | Questions and answers are CIDs on IPFS, linked on-chain. No one can delete them. |\n| **Economic alignment** | Neurons who ask good questions (that get linked to by others) earn rank. Neurons who create cyberlinks to inference create demand. |\n\n### Inference Request Flow (Technical)\n\n```\nClient:\n  1. ipfs add \"What is entropy?\" → QmQuestion123\n  2. sign & broadcast MsgCyberlink(from=QmQuestion123, to=QmInference)\n     └── requires: bandwidth, stake (existing anti-spam)\n  3. wait for block inclusion\n\nNode (inference trigger):\n  4. EndBlocker or event listener sees link to QmInference\n  5. Resolve QmQuestion123 via IPFS → \"What is entropy?\"\n  6. RAG pipeline:\n     a. Embed question → HNSW → top-5 relevant particles\n     b. Resolve top-5 CIDs → context text\n     c. llama-server: generate answer with context\n  7. ipfs add answer_text → QmAnswer456\n  8. Create link: QmQuestion123 → QmAnswer456\n     (node signs with module account or user pre-authorizes)\n\nClient:\n  9. Query: Search(QmQuestion123) → finds QmAnswer456\n  10. Resolve QmAnswer456 → read answer text\n\nAlternative (client-side inference):\n  4. Client has local cyber-llm.gguf + embedding.bin\n  5. Client runs RAG locally (no node needed for inference)\n  6. Client creates answer link: MsgCyberlink(from=QmQuestion123, to=QmAnswer456)\n  7. Both question and answer are in the graph either way\n```\n\n**Two modes:**\n\n| Mode | Where inference runs | Cyberlink | Graph grows |\n|------|---------------------|-----------|-------------|\n| **Node-side** | Node runs llama-server, generates answer | User pays link to trigger | Yes — node creates answer link |\n| **Client-side** | Client has local model, generates locally | User pays link to record Q&A | Yes — client creates answer link |\n\nBoth modes require a cyberlink. Both modes grow the graph. The model itself doesn't care who runs it — the graph is the source of truth.\n\n### Base Model Selection\n\nTarget: small enough for consumer hardware (Mac M1 8GB, Linux no GPU), good enough for domain Q&A after fine-tuning.\n\n| Model | Params | Q4_K_M Size | RAM for Inference | Mac M1 Speed | Quality |\n|-------|--------|-------------|-------------------|-------------|---------|\n| Qwen2.5-1.5B | 1.5B | ~1.0 GB | ~2 GB | ~70 tok/s | Good for simple Q&A |\n| **Llama 3.2 3B** | 3.2B | **~1.8 GB** | **~3.5 GB** | **~35 tok/s** | **Best quality/size** |\n| Phi-3.5 mini | 3.8B | ~2.2 GB | ~4 GB | ~30 tok/s | Strong reasoning |\n| Mistral 7B | 7.2B | ~4.1 GB | ~6.5 GB | ~20 tok/s | Best quality |\n\n**Recommendation: Llama 3.2 3B at Q4_K_M quantization.** 1.8 GB on disk, runs on any Mac M1+, 35 tokens/sec. A fine-tuned 3B matches general-purpose 7B on domain-specific questions.\n\n### Training Pipeline\n\n```\n                    PERIODIC TRAINING (daily or per-epoch)\n                    ══════════════════════════════════════\n\n  ┌──────────────────────────────────────────────────────────────┐\n  │ Step 1: CONTENT RESOLUTION                                   │\n  │                                                               │\n  │   GraphSnapshot gRPC → all particles (CID list)              │\n  │   Rank values → sort by PageRank                             │\n  │   For top-N particles (by rank):                             │\n  │     IPFS resolve CID → raw content (text, markdown)          │\n  │     Filter: keep text, skip binary/images                    │\n  │     Cache locally: ~/.cyber/data/content_cache/              │\n  │                                                               │\n  │   Result: corpus of resolved text documents                   │\n  │   Size estimate: 3M particles, ~50% text, ~1KB avg           │\n  │          = ~1.5M documents, ~1.5 GB text                     │\n  └──────────────────────────────────────────────────────────────┘\n                              │\n                              ▼\n  ┌──────────────────────────────────────────────────────────────┐\n  │ Step 2: TRAINING DATA CONSTRUCTION                           │\n  │                                                               │\n  │  A) Continued Pre-Training (CPT) corpus:                     │\n  │     - All resolved text, PageRank-weighted sampling           │\n  │     - High-rank particles repeated more often                 │\n  │     - Graph walks: follow cyberlinks to create                │\n  │       \"document sequences\" (linked content concatenated)      │\n  │                                                               │\n  │  B) Instruction Fine-Tuning (IFT) pairs:                     │\n  │     - Graph-structure Q&A: \"What links from X?\" \"What is Y?\" │\n  │     - Synthetic Q&A: use larger model to generate             │\n  │       question-answer pairs from content                      │\n  │     - Link-based pairs: \"How does [content A] relate          │\n  │       to [content B]?\" for linked particles                   │\n  │     - Target: ~50K-100K Q&A pairs                            │\n  │                                                               │\n  │  C) Graph walk sequences (teaches link structure):            │\n  │     - Random walks following cyberlinks, weighted by stake    │\n  │     - Concatenate resolved content along the walk             │\n  │     - Model learns that linked content is related             │\n  └──────────────────────────────────────────────────────────────┘\n                              │\n                              ▼\n  ┌──────────────────────────────────────────────────────────────┐\n  │ Step 3: FINE-TUNING                                          │\n  │                                                               │\n  │   Base model: Llama 3.2 3B (frozen)                          │\n  │   Method: LoRA (r=32, alpha=64)                              │\n  │                                                               │\n  │   Phase 1 (weekly): CPT on full corpus                       │\n  │     - 1 epoch over all resolved content                      │\n  │     - GPU: 12-24 hours on RTX 4090 / 8-15 hours on A100     │\n  │     - CPU: feasible but slow (~2-3 days)                     │\n  │                                                               │\n  │   Phase 2 (daily): IFT on Q&A pairs                          │\n  │     - LoRA fine-tune on 50K-100K Q&A pairs                   │\n  │     - GPU: 30-60 min on RTX 4090                             │\n  │     - CPU: 3-6 hours                                         │\n  │                                                               │\n  │   Determinism: fixed seeds, pinned library versions           │\n  │   CPU training is bit-exact on x86_64                        │\n  │                                                               │\n  │   Output: LoRA adapter (~30-80 MB)                           │\n  └──────────────────────────────────────────────────────────────┘\n                              │\n                              ▼\n  ┌──────────────────────────────────────────────────────────────┐\n  │ Step 4: MERGE, QUANTIZE, PUBLISH                             │\n  │                                                               │\n  │   Merge LoRA adapter into base weights                       │\n  │   Quantize to GGUF Q4_K_M → cyber-llm.gguf (~1.8 GB)       │\n  │   ipfs add cyber-llm.gguf → model CID                       │\n  │   On-chain: commit {epoch, height, model_cid, hash}         │\n  └──────────────────────────────────────────────────────────────┘\n```\n\n### Inference Architecture\n\n```\ncyber node or client\n  │\n  ├── llama-server (subprocess, bundled binary)\n  │     └── loads cyber-llm.gguf (~1.8 GB)\n  │     └── serves OpenAI-compatible HTTP API on localhost:8091\n  │\n  ├── embedding index (in-process, Go)\n  │     └── loads embedding.bin (~200 MB) + HNSW index\n  │     └── retrieval: query → top-K relevant particles\n  │\n  └── IPFS sidecar (subprocess)\n        └── resolves CIDs to content for RAG context\n\nQuery flow:\n  1. User sends question via gRPC/REST\n  2. Node embeds query → HNSW retrieval → top-K particles\n  3. Node resolves top-K CIDs via IPFS cache → text chunks\n  4. Node builds prompt: system + retrieved context + question\n  5. Node sends prompt to llama-server → streaming text response\n  6. Return generated answer to user\n```\n\n### Four Managed Processes\n\nWith LLM inference, cyb now orchestrates four processes:\n\n```\ncyb (tray app)\n  ├── cyber    (blockchain node, ~50 MB)\n  ├── ipfs     (Kubo IPFS node, ~50 MB)\n  └── llama-server (LLM inference, ~5 MB binary + ~2 GB model)\n```\n\nPort map:\n\n| Port | Service |\n|------|---------|\n| 26656 | P2P (CometBFT) |\n| 26657 | CometBFT RPC |\n| 9090 | gRPC |\n| 1317 | REST API |\n| 26660 | Dashboard |\n| 5001 | IPFS API |\n| 8080 | IPFS Gateway |\n| **8091** | **llama-server (LLM inference)** |\n\n### Embeddings Layer (cid2vec) — Retrieval\n\nSame as before but serves as the retrieval component for RAG:\n\n**Training:** TransE/RotatE from graph topology (minutes on CPU, 3M edges).\n\n**Model:** `embedding.bin` — flat `[3M × 64] float32` + HNSW index. ~200 MB after quantization.\n\n**gRPC endpoints (pure Go, no Python):**\n\n```protobuf\nservice Query {\n  // Find particles with similar embeddings (retrieval for RAG)\n  rpc Similar(QuerySimilarRequest) returns (QuerySimilarResponse);\n\n  // Predict likely outgoing links\n  rpc Predict(QueryPredictRequest) returns (QueryPredictResponse);\n\n  // Raw embedding vector for a particle\n  rpc Embedding(QueryEmbeddingRequest) returns (QueryEmbeddingResponse);\n\n  // Current embedding model info\n  rpc EmbeddingModel(QueryEmbeddingModelRequest) returns (QueryEmbeddingModelResponse);\n}\n```\n\n### LLM Layer (cyber-LLM) — Generation\n\n**Runtime:** `llama-server` (from llama.cpp project) as subprocess. Bundled binary, ~5 MB. Supports:\n- Apple Silicon (Metal acceleration, native)\n- Linux (CUDA for NVIDIA, Vulkan for AMD/Intel)\n- CPU fallback everywhere\n\n**Integration from Go:**\n\n```go\n// x/inference/keeper/llm.go\ntype LLMClient struct {\n    serverURL string  // default: http://localhost:8091\n}\n\nfunc (c *LLMClient) Generate(ctx context.Context, question string, context []string) (string, error) {\n    // Build prompt with retrieved context\n    systemPrompt := \"You are a knowledge assistant. Answer based on the provided context from the cyber knowledge graph.\"\n    contextText := strings.Join(context, \"\\n\\n---\\n\\n\")\n\n    prompt := fmt.Sprintf(\"Context:\\n%s\\n\\nQuestion: %s\", contextText, question)\n\n    resp, err := http.Post(c.serverURL+\"/v1/chat/completions\", \"application/json\",\n        // OpenAI-compatible request\n    )\n    return parseResponse(resp)\n}\n```\n\n**gRPC endpoints:**\n\n```protobuf\nservice Query {\n  // Inference triggered by cyberlink: resolve question, generate answer, return answer CID\n  // Caller must have already submitted MsgCyberlink(question_cid → INFERENCE_PARTICLE)\n  rpc Infer(QueryInferRequest) returns (QueryInferResponse);\n  // Request: { question_particle: string }  (the CID that was linked to INFERENCE_PARTICLE)\n  // Response: { answer_particle: string, answer_text: string,\n  //             sources: [{ particle: string, rank: uint64 }], model_epoch: uint64 }\n\n  // Stream the answer token by token (same requirement: cyberlink must exist)\n  rpc InferStream(QueryInferRequest) returns (stream QueryInferStreamResponse);\n\n  // Current LLM model info (no link required)\n  rpc LLMModel(QueryLLMModelRequest) returns (QueryLLMModelResponse);\n  // Response: { epoch, height, model_cid, base_model, params_count, quantization }\n}\n```\n\n**Link validation:** The `Infer` endpoint checks that a cyberlink `(question_particle → INFERENCE_PARTICLE)` exists on-chain before running inference. No link = no inference. This is enforced at the gRPC handler level — not consensus, but node-side policy.\n\n**INFERENCE_PARTICLE:** A well-known CID registered at genesis (e.g. content \"inference\" → `QmInference...`). Linking to it signals \"I want inference for this question\". Different inference types could use different target particles (e.g. `QmSummary...` for summarization, `QmTranslate...` for translation).\n\n### Model Distribution\n\nTwo distributable artifacts per epoch:\n\n| Artifact | Size | Format | Purpose |\n|----------|------|--------|---------|\n| `embedding.bin` | ~200 MB | flat binary + HNSW | Retrieval (cid2vec) |\n| `cyber-llm.gguf` | ~1.8 GB | GGUF Q4_K_M | Generation (LLM) |\n| **Total** | **~2 GB** | | |\n\nDistribution via IPFS (content-addressed, verifiable):\n```\nOn-chain commitment per epoch:\n  {\n    epoch: 42,\n    height: 22451000,\n    embedding_cid: \"QmEmb...\",     // ~200 MB\n    llm_cid: \"QmLLM...\",           // ~1.8 GB\n    embedding_hash: \"sha256:...\",\n    llm_hash: \"sha256:...\",\n    base_model: \"llama-3.2-3b\",\n    lora_rank: 32,\n    training_seed: 42\n  }\n```\n\n**Update strategy:**\n- Full model: download `cyber-llm.gguf` (~1.8 GB) — for first sync\n- LoRA adapter only: download `adapter.safetensors` (~30-80 MB) — for daily updates (clients already have base model)\n- llama.cpp supports runtime `--lora` adapter loading\n\n### Determinism and Verification\n\n**LoRA adapter** (the trainable part) is deterministic on CPU with fixed seeds:\n\n```python\ntorch.manual_seed(42)\ntorch.use_deterministic_algorithms(True)\n# CPU: bit-for-bit reproducible on x86_64 with pinned PyTorch version\n```\n\n**Verification protocol:**\n1. Training config published on-chain: `{base_model_hash, training_data_cid, seed, hyperparams}`\n2. Anyone can reproduce: download same base model + same training data + same config → same adapter hash\n3. Merged GGUF hash committed on-chain\n4. Validators with GPU can verify daily; light clients trust the commitment\n\n**Caveat:** Full determinism requires pinning: PyTorch version, Python version, OS (x86_64 Linux). Provide a Docker image or Nix flake as canonical training environment.\n\n### Training Data from Graph Structure\n\nThe knowledge graph provides unique training signals that generic LLMs don't have:\n\n**1. PageRank-weighted corpus (most important content seen more)**\n```python\nfor particle in sorted(particles, key=lambda p: p.rank, reverse=True):\n    content = ipfs_resolve(particle.cid)\n    repetitions = max(1, int(log(particle.rank * 1000)))  # 1-7x\n    for _ in range(repetitions):\n        corpus.append(content)\n```\n\n**2. Graph walk sequences (linked content concatenated)**\n```python\ndef walk_sequence(start_cid, graph, max_tokens=2048):\n    \"\"\"Follow cyberlinks, concatenate resolved content\"\"\"\n    seq = ipfs_resolve(start_cid)\n    current = start_cid\n    while len(tokenize(seq)) < max_tokens:\n        neighbors = graph.outlinks(current)  # weighted by stake\n        next_cid = weighted_sample(neighbors)\n        seq += \"\\n\\n---\\n\\n\" + ipfs_resolve(next_cid)\n        current = next_cid\n    return seq\n```\n\n**3. Link-based Q&A pairs**\n```\nQ: \"How does [summary of content A] relate to [summary of content B]?\"\nA: \"These are linked in the knowledge graph: [content A] connects to [content B] through...\"\n```\n\n**4. Graph structure Q&A**\n```\nQ: \"What are the most important topics about X?\"\nA: \"Based on the knowledge graph, the top-ranked particles about X are: ...\"\n  (generated from Search(X) results + resolved content)\n```\n\n### Configuration\n\n```toml\n[inference]\nenabled = true\n\n[inference.embeddings]\nmodel_path = \"data/embedding.bin\"\nauto_update = true\n\n[inference.llm]\nenabled = true\nbinary = \"llama-server\"                  # bundled or PATH\nmodel_path = \"data/cyber-llm.gguf\"       # ~1.8 GB\nport = 8091\ncontext_size = 4096\ngpu_layers = 99                          # auto: use GPU if available\nauto_update = true                       # download new model each epoch\n\n[inference.rag]\ntop_k = 5                               # retrieve top-K particles for context\nresolve_content = true                   # resolve CIDs via IPFS for context\n```\n\n### Implementation Plan\n\n#### Phase A: Embeddings + Retrieval (Now, no consensus change)\n\nThe retrieval layer can ship immediately with graph streaming (item 0.1).\n\n- [ ] Python script `scripts/train_embeddings.py`: TransE/RotatE on graph topology\n- [ ] Go embedding index in `x/inference`: load flat binary, HNSW search\n- [ ] gRPC: `Similar`, `Predict`, `Embedding`, `EmbeddingModel`\n- [ ] Benchmark: training time, retrieval quality (MRR, hits@10)\n\n#### Phase B: Content Resolution + Training Data (With IPFS sidecar)\n\n- [ ] Content resolver: bulk IPFS resolution of top-ranked particles\n- [ ] Content cache: `~/.cyber/data/content_cache/` with CID→text mapping\n- [ ] Corpus builder: PageRank-weighted + graph walk sequences\n- [ ] Synthetic Q&A generator: script using existing LLM to create training pairs\n- [ ] Training script `scripts/train_llm.py`: LoRA fine-tuning with deterministic config\n- [ ] Merge + quantize script: output GGUF Q4_K_M\n\n#### Phase C: Native LLM Inference in Node (Inference-via-Link)\n\n- [ ] Register `INFERENCE_PARTICLE` at genesis (well-known CID for inference requests)\n- [ ] Bundle `llama-server` binary in release artifacts\n- [ ] Process management: launch/monitor/restart llama-server from cyber node\n- [ ] LLM HTTP client in Go: query llama-server for generation\n- [ ] RAG pipeline: embed query → retrieve → resolve → generate\n- [ ] **Link validation:** `Infer` gRPC checks that cyberlink `(question → INFERENCE_PARTICLE)` exists on-chain before running\n- [ ] **Answer publishing:** node creates answer CID via IPFS, creates answer link `(question → answer)`\n- [ ] gRPC: `Infer`, `InferStream`, `LLMModel`\n- [ ] `[inference.llm]` section in `app.toml`\n- [ ] Dashboard integration: show LLM model info, inference stats, recent Q&A pairs\n- [ ] Support multiple inference types via different target particles (e.g. `QmSummary`, `QmTranslate`)\n\n#### Phase D: On-Chain Model Commitment (Consensus integration)\n\n- [ ] `MsgCommitModel` message type: `{epoch, embedding_cid, llm_cid, training_config_cid}`\n- [ ] Validator verification: re-run training from same data, compare hashes\n- [ ] Auto-download: node fetches new model from IPFS when new epoch committed\n- [ ] Governance: `inference_epoch_period` param (blocks between retraining)\n- [ ] Q&A feedback loop: track which answer particles get linked to by other neurons (quality signal)\n\n#### Phase E: Incremental Training + Optimization\n\n- [ ] Incremental LoRA: daily fine-tune on new content only (~30 min GPU)\n- [ ] **Include inference Q&A pairs in training data:** previous epoch's questions + answers feed next model\n- [ ] Weekly full retrain to prevent drift\n- [ ] LoRA adapter distribution (base model + small daily adapter, ~30-80 MB updates)\n- [ ] Evaluate 7B model for validators with more resources\n- [ ] Explore Rust training (burn/candle) to eliminate Python dependency\n\n### Checklist Summary\n\n- [ ] **Phase A:** Embeddings pipeline + retrieval gRPC (pure Go)\n- [ ] **Phase B:** Content resolution, corpus building, LLM fine-tuning scripts\n- [ ] **Phase C:** llama-server sidecar, inference-via-link, RAG pipeline, Infer/InferStream gRPC\n- [ ] **Phase D:** On-chain model commitment, validator verification\n- [ ] **Phase E:** Incremental training with feedback loop, LoRA adapters\n\n---\n\n## Personal Networks: Private Knowledge Graphs with Sync\n\n### Problem\n\nLaunching a personal knowledge graph on go-cyber today requires understanding Cosmos SDK internals: genesis construction, gentx ceremony, validator setup, bech32 prefixes. The binary is hardcoded to bostrom. There is no path from \"I want my own graph\" to \"it's running and syncing across my machines\" without significant manual work.\n\nGoal: **`cyber network create my-graph` on one machine, `cyber network join` on another, graphs sync via consensus.** A personal or team knowledge graph that runs on your own machines with the same rank, inference, and IPFS infrastructure as bostrom.\n\n### Why Not Solo Mode\n\nA single-node graph without consensus is just a database. The value is in **sync** — the same graph state replicated across laptop, server, phone. This requires consensus (even with 1 validator), because consensus gives you:\n\n- **Deterministic state** — every machine has the exact same graph after sync\n- **State-sync / snapshot** — new machine catches up fast\n- **Rank agreement** — all machines compute identical PageRank\n- **Model agreement** — inference model trained from identical graph\n- **IBC bridge** — personal graph can exchange links with bostrom or other personal graphs\n\nSolo mode without consensus is just SQLite. With consensus, it's a distributed knowledge computer.\n\n### Current Blockers\n\n| Blocker | Details |\n|---------|---------|\n| **Hardcoded bostrom** | `Bech32Prefix = \"bostrom\"`, `appName = \"BostromHub\"`, denoms `\"boot\"/\"hydrogen\"` in 5+ files. Cannot change without recompiling. |\n| **No `--bech32-prefix` flag** | Prefix sealed at init-time from hardcoded constant. |\n| **Hardcoded valoper encoding** | `app.go:589`: `bech32.ConvertAndEncode(\"bostromvaloper\", bz)` — crashes for non-bostrom prefixes. |\n| **Complex genesis ceremony** | Standard Cosmos flow: `init` → edit genesis → `add-genesis-account` → `gentx` → `collect-gentxs` → distribute genesis → `start`. 6+ manual steps for single-validator. |\n| **No peer discovery** | Peers are empty by default. Second machine needs manual `persistent_peers` configuration with node ID + IP + port. |\n| **No quick join** | New machine must get genesis.json + correct config + peer address manually. |\n\n### Target UX\n\n```\nMachine A (creator):\n  $ cyber network create my-graph\n    → generates genesis with single validator (this machine)\n    → picks random denom name or uses default\n    → starts the chain\n    → prints join token: \"cyber network join <token>\"\n    → token = base64(genesis_hash + peer_addr + chain_id)\n\nMachine B (joiner):\n  $ cyber network join eyJjaGFp...\n    → decodes token → gets genesis + peer address\n    → initializes node with matching genesis\n    → connects to Machine A as persistent peer\n    → state-syncs (with graph + rank snapshots from item 1.3)\n    → running — same graph, same rank, same state\n\nMachine C (another join):\n  $ cyber network join eyJjaGFp...\n    → same flow, now 3 nodes in the network\n    → all three have identical graph state\n```\n\n### Architecture\n\n```\ncyber network create my-graph\n  │\n  ├── 1. Generate keypair (validator key)\n  ├── 2. Build genesis.json:\n  │       chain_id: \"my-graph-1\"\n  │       bech32_prefix: \"cyber\" (default, configurable)\n  │       denom: \"stake\" (default, configurable)\n  │       single validator with all initial tokens\n  │       all cyber modules enabled (graph, rank, bandwidth, etc.)\n  │       sane defaults for personal use:\n  │         - bandwidth: relaxed (high base, low price)\n  │         - rank: CalculationPeriod=5 (keep frequent)\n  │         - block time: 1s (low-latency for personal use)\n  │\n  ├── 3. Write config.toml:\n  │       listen on 0.0.0.0 (accessible from LAN)\n  │       fast block times (timeout_commit = 1s)\n  │\n  ├── 4. Start chain\n  │\n  └── 5. Print join token:\n          cyber network join eyJjaGFpbklkIjoibXktZ3Jh...\n\ncyber network join <token>\n  │\n  ├── 1. Decode token:\n  │       { chain_id, genesis_hash, peer_addrs, rpc_addr }\n  │\n  ├── 2. Fetch genesis from peer:\n  │       GET http://<peer>:26657/genesis → verify hash\n  │\n  ├── 3. Initialize node:\n  │       cyber init <chain_id> --home ~/.cyber-<chain_id>\n  │       replace genesis.json with fetched one\n  │       set persistent_peers in config.toml\n  │\n  ├── 4. State-sync or full sync:\n  │       if snapshots available (item 1.3): fast state-sync\n  │       includes graph + rank data → instant graph access\n  │\n  └── 5. Start chain\n          connected to creator's node, syncing\n```\n\n### Join Token\n\nThe join token encodes everything a new node needs to connect:\n\n```json\n{\n  \"chain_id\": \"my-graph-1\",\n  \"genesis_hash\": \"sha256:abc123...\",\n  \"peers\": [\"node_id@192.168.1.10:26656\"],\n  \"rpc\": \"http://192.168.1.10:26657\"\n}\n```\n\nBase64-encoded → single copyable string. Similar to how WireGuard or Tailscale share connection configs.\n\nFor LAN discovery: optionally, nodes could broadcast mDNS/Bonjour so `cyber network join` auto-discovers peers on the same network without a token.\n\n### Validator Topology for Personal Networks\n\nSingle-validator is the common case (your laptop = the validator). But the system supports adding more:\n\n```\nScenario A: One person, multiple machines\n  - Laptop creates network, is the validator\n  - Server joins as full node (syncs graph, not a validator)\n  - Phone joins as light client (graph streaming from item 0.1)\n\nScenario B: Team / small group\n  - Machine A creates network, is validator\n  - Machine B joins, becomes validator via staking TX\n  - Now 2 validators — network survives if one goes offline\n  - Machine C joins as full node\n```\n\nFor single-validator personal use: if the validator goes offline, the chain pauses. When it comes back — resumes. This is fine for personal graphs.\n\n### Multi-Network Support\n\nA single cyb (tray app) can manage multiple networks:\n\n```\ncyb tray menu:\n  ┌─────────────────────────────┐\n  │ 🟢 bostrom (main network)   │\n  │    Height: 22.4M            │\n  │ 🟢 my-graph (personal)      │\n  │    Height: 1,234            │\n  │ 🟡 team-wiki (team)         │\n  │    Height: 567, syncing     │\n  ├─────────────────────────────┤\n  │ Create New Network...       │\n  │ Join Network...             │\n  └─────────────────────────────┘\n```\n\nEach network runs in its own home directory (`~/.cyber-<chain_id>/`) with its own data, config, and ports. Port allocation is automatic (26656, 26756, 26856, ...).\n\n### IBC Between Personal Graphs and Bostrom\n\nOnce both personal network and bostrom run IBC (already available in go-cyber v7), personal graphs can bridge to the global network:\n\n```\nPersonal graph ←──IBC──→ Bostrom\n\nUse cases:\n  - Publish selected links from personal graph to bostrom (selective sharing)\n  - Pull high-rank content from bostrom into personal graph\n  - Cross-reference: personal notes linked to public knowledge\n  - Team graph publishes research to bostrom when ready\n```\n\nThis is standard IBC relaying — no new code needed, just configuration. The personal chain and bostrom are both Cosmos SDK chains with IBC modules.\n\n### Relation to Multi-Chain Binary (Item 1.6)\n\nThe multi-chain binary work (planned for space-pussy unification) is the **prerequisite** for personal networks:\n\n| Multi-chain binary gives | Personal networks use it for |\n|--------------------------|------------------------------|\n| Configurable bech32 prefix | Each network has its own prefix (or shares \"cyber\") |\n| Denoms from genesis | Each network names its own tokens |\n| Chain-id switch in upgrade handlers | Not needed for personal (no upgrades from mainnet state) |\n| Single binary serves any genesis | `cyber network create` just generates a new genesis |\n\nOnce the binary is chain-agnostic, `cyber network create` is mostly genesis generation + config templating + a join token printer. The hard part (making the binary multi-chain) is already scoped in item 1.6.\n\n### Personal Network Defaults (Tuned for Personal Use)\n\n| Parameter | Bostrom Default | Personal Default | Why |\n|-----------|----------------|-----------------|-----|\n| Block time | ~5s | **1s** | Low latency, single validator |\n| Bandwidth BasePrice | 0.25 | **0.01** | Relaxed — it's your own network |\n| Bandwidth RecoveryPeriod | 100 | **10** | Fast recovery |\n| Rank CalculationPeriod | 5 | **5** | Keep same — rank is fast on small graphs |\n| Max validators | 150 | **10** | Personal networks are small |\n| Min gas price | varies | **0** | No fees on personal network |\n| Staking unbonding | 21 days | **1 hour** | Personal use, no adversarial setting |\n\n### Checklist\n\n**Prerequisites (from other items):**\n- [ ] Multi-chain binary (item 1.6): configurable bech32, denoms from genesis\n- [ ] Snapshot extensions (item 1.3): graph + rank in state-sync for fast join\n\n**`cyber network create`:**\n- [ ] Subcommand: generates genesis, validator key, starts chain — all in one step\n- [ ] Genesis template with personal-network defaults (relaxed bandwidth, fast blocks, zero gas)\n- [ ] Configurable: `--denom`, `--bech32-prefix`, `--chain-id` flags\n- [ ] Join token generation: base64 encoded `{chain_id, genesis_hash, peers, rpc}`\n- [ ] Print join command to stdout after start\n\n**`cyber network join`:**\n- [ ] Decode join token → fetch genesis from RPC → verify hash\n- [ ] Auto-configure: persistent_peers, chain-id, home directory\n- [ ] State-sync by default (if snapshots available)\n- [ ] Fallback to full sync from genesis\n\n**`cyber network list`:**\n- [ ] List all local networks (scan `~/.cyber-*/config/genesis.json`)\n- [ ] Show: chain_id, height, peers, running status\n\n**Multi-network support:**\n- [ ] Separate home directories per chain-id (`~/.cyber-<chain_id>/`)\n- [ ] Automatic port allocation (avoid conflicts between networks)\n- [ ] cyb tray: manage multiple networks from one menu\n\n**Optional / Future:**\n- [ ] LAN auto-discovery (mDNS/Bonjour): `cyber network join --auto` finds peers on local network\n- [ ] IBC relayer setup between personal graph and bostrom\n- [ ] `cyber network invite` — generate a new join token for an existing network\n- [ ] `cyber network export` — export graph as flat file for offline sharing\n\n---\n\n## Inter-Knowledge Protocol (IKP): Graph Sync Over IBC\n\n### Problem\n\nIBC moves tokens and messages between chains. But knowledge graphs need to sync **particles, cyberlinks, and rank** — not tokens. When a personal graph wants to publish selected links to bostrom, or pull high-rank content from bostrom into a team graph, raw IBC transfer doesn't help. There is no protocol that understands the semantic structure of a knowledge graph.\n\nGoal: **a protocol layer over IBC that enables selective, bidirectional sync of knowledge graph data between any two go-cyber chains.** Personal ↔ bostrom, team ↔ bostrom, personal ↔ personal.\n\n### What IBC Gives Us (Transport Layer)\n\ngo-cyber already has a full IBC stack:\n- IBC Transfer (token moves)\n- IBC Hooks (wasm contract triggers on packet receive)\n- Packet Forward Middleware (multi-hop routing)\n- ICA (interchain accounts)\n- ICQ (interchain queries)\n- Wasm IBC handler (contracts can send/receive IBC packets)\n\nIBC provides: reliable packet delivery, channel management, timeout handling, light client verification. IKP builds on top.\n\n### What IKP Adds (Knowledge Layer)\n\n| IBC (transport) | IKP (knowledge) |\n|-----------------|------------------|\n| Sends bytes between chains | Sends particles + cyberlinks + rank signals |\n| Channels between ports | Knowledge channels between graphs |\n| Token denomination tracking | Particle origin tracking (which chain created this CID) |\n| Fungible transfer | Non-fungible graph structure sync |\n\n### Protocol Design\n\n#### Packet Types\n\nIKP defines 3 packet types carried over an IBC channel:\n\n```\n1. SyncCyberlinks   — create cyberlinks on the receiving chain\n2. ShareRankSignal  — share rank values as advisory weights\n3. RequestSubgraph  — pull a subgraph from the remote chain\n```\n\nNo separate \"SyncParticles\" — particles in go-cyber auto-register on first use via `GetOrPutCidNumber()`. Sending cyberlinks is sufficient; CIDs register themselves on arrival.\n\n#### Packet 1: SyncCyberlinks (Core)\n\n```protobuf\nmessage IKPSyncCyberlinksPacket {\n  repeated IKPCyberlink links = 1;\n  string source_chain_id = 2;\n  uint64 source_height = 3;\n}\n\nmessage IKPCyberlink {\n  string from_cid = 1;               // CID string (not number — portable)\n  string to_cid = 2;                 // CID string\n  string source_neuron = 3;          // original author address on source chain\n  uint64 source_weight = 4;          // normalized stake on source chain (advisory)\n}\n```\n\n**Key design decisions:**\n\n**Who is the neuron on the receiving chain?**\n\nLinks on the receiving chain need an `Account` (neuron). Three options:\n\n| Approach | How | Pros | Cons |\n|----------|-----|------|------|\n| **Bridge neuron** (module account) | All IBC links attributed to `ikp-bridge` module account | Simple, no auth complexity | Loses original authorship. One account = all imported links have equal weight |\n| **Derived address** | `neuron = hash(source_chain_id + source_neuron)` → deterministic address per-source-author | Preserves per-author distinction | Derived accounts have no stake → zero weight in rank. Need \"virtual stake\" |\n| **Mapped address** | Source neuron registers a local account on dest chain, links mapped to it | Full authorship preservation | Requires pre-registration, complex UX |\n\n**Recommended: Derived address + virtual stake.**\n\nEach source chain gets a \"trust weight\" set by governance or channel config. Links from that chain's neurons get virtual stake proportional to:\n```\nvirtual_stake(link) = channel_trust_weight × source_weight(link)\n```\n\nThis means: bostrom can assign high trust to links from a known team's graph, and low trust to random unknown personal graphs. The receiving chain controls how much influence imported links have on its rank.\n\n**Bandwidth cost:**\n\nImported links should cost bandwidth on the receiving chain — otherwise they're a spam vector. Two options:\n- Relayer pays bandwidth (like IBC relayer pays gas)\n- Channel has a \"bandwidth budget\" per epoch (governance-set)\n\n**Deduplication:**\n\nSame `(from_cid, to_cid, derived_neuron)` on the receiving chain = link already exists → no-op. IAVL key structure already handles this naturally.\n\n#### Packet 2: ShareRankSignal (Advisory)\n\n```protobuf\nmessage IKPShareRankSignalPacket {\n  repeated IKPRankEntry ranks = 1;\n  string source_chain_id = 2;\n  uint64 source_height = 3;\n  uint64 source_cid_count = 4;       // total particles on source for normalization\n}\n\nmessage IKPRankEntry {\n  string cid = 1;\n  uint64 rank_value = 2;             // PageRank × 10^15 on source chain\n}\n```\n\n**This is NOT consensus-binding.** Rank signals from other chains are advisory data. The receiving chain can:\n- Store them in a separate index (not in consensus state)\n- Use them as **boost signals** in local rank display (UI re-ranking, not PageRank modification)\n- Use them as **training signals** for the inference model (external rank as node feature)\n- Ignore them entirely\n\nRank cannot be directly \"imported\" because PageRank depends on the entire topology. But knowing that a particle is highly ranked on bostrom is useful information for a personal graph's UI and inference.\n\n#### Packet 3: RequestSubgraph (Pull)\n\n```protobuf\nmessage IKPRequestSubgraphPacket {\n  oneof request {\n    string particle_cid = 1;          // \"give me all links to/from this CID\"\n    string neuron_address = 2;        // \"give me all links by this neuron\"\n    uint64 min_rank = 3;              // \"give me all particles with rank > X\"\n    uint64 since_height = 4;          // \"give me all links since height H\"\n  }\n  uint32 max_links = 5;              // pagination\n}\n```\n\nResponse comes as a `SyncCyberlinks` packet. This enables **pull-based sync**: personal graph asks bostrom \"what are the top 1000 particles about topic X?\" and bostrom responds with the relevant subgraph.\n\n### Sync Modes\n\n| Mode | Direction | Trigger | Use Case |\n|------|-----------|---------|----------|\n| **Push** | Source → Dest | Source decides what to export | Publish personal notes to bostrom |\n| **Pull** | Dest ← Source | Dest requests specific subgraph | Import bostrom knowledge into personal graph |\n| **Mirror** | Bidirectional, continuous | Auto-sync all new links | Two machines syncing the same personal graph (but this is already handled by consensus within the same chain) |\n| **Selective push** | Source → Dest, filtered | Source filters by neuron, topic, or rank | Team publishes only their reviewed research |\n\n### Channel Configuration\n\nEach IKP channel has parameters set at channel opening:\n\n```protobuf\nmessage IKPChannelConfig {\n  uint64 trust_weight = 1;           // how much rank influence imported links get (0-10000 basis points)\n  uint64 bandwidth_budget = 2;       // max links per epoch via this channel\n  bool   allow_pull = 3;             // whether remote can request subgraphs\n  bool   auto_sync = 4;             // continuously forward new links\n  repeated string neuron_filter = 5; // only sync links from these neurons (empty = all)\n  uint64 min_rank_filter = 6;        // only sync particles with rank above this\n}\n```\n\n### Architecture\n\n```\nChain A (e.g., personal graph)          Chain B (e.g., bostrom)\n┌──────────────────────────┐           ┌──────────────────────────┐\n│  x/graph (local graph)   │           │  x/graph (local graph)   │\n│  x/rank  (local rank)    │           │  x/rank  (local rank)    │\n│                          │           │                          │\n│  x/ikp                   │           │  x/ikp                   │\n│   ├── IKP Keeper         │           │   ├── IKP Keeper         │\n│   ├── Link Filter        │           │   ├── Link Filter        │\n│   ├── Trust Weight Mgr   │           │   ├── Trust Weight Mgr   │\n│   └── IBC Module impl    │           │   └── IBC Module impl    │\n│         │                │           │         │                │\n│         └──── IBC ───────┼───────────┼─────────┘                │\n│              Channel     │           │              Channel     │\n└──────────────────────────┘           └──────────────────────────┘\n\nData flow (push):\n  1. Neuron on Chain A creates cyberlinks normally\n  2. IKP module sees new links (EndBlocker hook or event listener)\n  3. If auto_sync on channel: build SyncCyberlinks packet\n  4. Apply neuron_filter + min_rank_filter\n  5. Send packet over IBC\n  6. Chain B receives packet\n  7. Chain B creates links with derived neuron address + virtual stake\n  8. Chain B's graph grows, rank recalculates\n  9. Chain B acknowledges packet\n\nData flow (pull):\n  1. Chain A sends RequestSubgraph(particle_cid=\"QmFoo\")\n  2. Chain B receives, queries local graph for QmFoo subgraph\n  3. Chain B responds with SyncCyberlinks packet\n  4. Chain A receives, creates links locally\n```\n\n### Trust and Rank Interaction\n\nThis is the most subtle part. How do imported links affect the receiving chain's PageRank?\n\n```\nLocal PageRank computation:\n  - Local links:    neuron has real stake → real weight in rank\n  - Imported links: derived neuron has virtual_stake = channel_trust × source_weight\n\n  virtual_stake is NOT real staking tokens. It's a parameter set per-channel.\n\n  Example:\n    Channel bostrom↔personal has trust_weight = 5000 (50%)\n    Link from bostrom neuron with source_weight 1000\n    → virtual_stake on personal chain = 500\n\n    This means: imported links from bostrom have 50% the influence\n    of equivalent local links. Tunable per-channel.\n```\n\n**Why not import rank directly?**\n\nPageRank is a global property of the entire graph topology. You can't meaningfully \"add\" rank from one graph to another — the matrices are different sizes, the damping factors mix differently, the topology is different. What you CAN do:\n1. Import links → they participate in local rank computation naturally\n2. Use remote rank as a UI boost (display, not consensus)\n3. Use remote rank as inference model feature\n\n### Relation to Existing Modules\n\n| Existing | IKP Uses |\n|----------|----------|\n| `x/graph` GraphKeeper | `GetOrPutCidNumber()`, `SaveLink()` — creating particles and links on receive |\n| `x/graph` IndexKeeper | `PutLink()` — update in-memory index after import |\n| `x/bandwidth` | Cost accounting for imported links |\n| `x/cyberbank` | Virtual stake accounting for derived neurons |\n| `x/rank` | Imported links participate in rank computation via virtual stake |\n| IBC Keeper | Channel management, packet routing |\n| Capability Keeper | Scoped capability for IKP port |\n\n### Implementation Plan\n\n#### Phase A: Basic Link Sync (With SDK v0.50 + IBC v8)\n\nMinimum viable IKP: push cyberlinks from one chain to another.\n\n- [ ] New module `x/ikp` implementing `porttypes.IBCModule`\n- [ ] `SyncCyberlinks` packet type: send links, receive and create on dest\n- [ ] Derived neuron address: `hash(source_chain + source_neuron)` → deterministic account\n- [ ] Fixed trust weight per channel (set at channel open)\n- [ ] Bandwidth cost: relayer pays, or fixed budget per channel\n- [ ] CLI: `cyber ikp push --channel <ch> --neuron <addr>` (push all links from a neuron)\n- [ ] CLI: `cyber ikp push --channel <ch> --particle <cid>` (push all links to/from a CID)\n\n#### Phase B: Pull + Selective Sync\n\n- [ ] `RequestSubgraph` packet: request links by particle, neuron, rank threshold, or height\n- [ ] Channel configuration: neuron filter, rank filter, bandwidth budget\n- [ ] Auto-sync mode: EndBlocker hook forwards new links matching filter criteria\n- [ ] CLI: `cyber ikp pull --channel <ch> --particle <cid>` (pull subgraph from remote)\n\n#### Phase C: Rank Signals + Trust Tuning\n\n- [ ] `ShareRankSignal` packet: share rank values as advisory data\n- [ ] Rank signal storage (separate from consensus rank — off-chain index)\n- [ ] Governance: update `trust_weight` per channel via `MsgUpdateChannelTrust`\n- [ ] Dashboard: show imported links, their source chains, trust weights\n- [ ] Use imported rank signals as node features in inference model training\n\n#### Phase D: Multi-Chain Knowledge Network\n\n- [ ] Relayer config templates for IKP channels (Hermes / Go relayer)\n- [ ] Auto-channel setup in `cyber network create` (IKP channel to bostrom by default)\n- [ ] Graph federation: personal graph ↔ team graph ↔ bostrom — multi-hop knowledge routing\n- [ ] Reputation system: channels that import high-quality links (as judged by local rank over time) get trust_weight increased automatically\n\n### Checklist Summary\n\n- [ ] **Phase A:** `x/ikp` module, SyncCyberlinks, derived neurons, basic push\n- [ ] **Phase B:** Pull requests, selective sync, channel filters, auto-sync\n- [ ] **Phase C:** Rank signals, trust governance, inference integration\n- [ ] **Phase D:** Multi-chain federation, auto-channels, reputation\n\n---\n\n## CybeRank Computation Fixes (Consensus-Breaking)\n\nThese issues were found during a code audit of the rank computation (`x/rank/keeper/calculate_cpu.go`, `x/rank/cuda/rank.cu`). They require a coordinated chain upgrade since they affect consensus state (rank values feed into the on-chain merkle tree commitment).\n\n### Issue 1: CRITICAL — Divide by Zero in `getNormalizedStake()` (CPU only)\n\n**File:** `x/rank/keeper/calculate_cpu.go:94-96`\n\n```go\nfunc getNormalizedStake(ctx *types.CalculationContext, agent uint64) uint64 {\n    return ctx.GetStakes()[agent] / ctx.GetNeudegs()[agent]\n}\n```\n\nIf `neudeg == 0` for any account appearing in links, this **panics** with integer divide by zero. The GPU code guards against this (`calculate_gpu.go:48-53`):\n\n```go\nif neudeg != 0 {\n    stakes[neuron] = stake / neudeg\n} else {\n    stakes[neuron] = 0\n}\n```\n\nThe CPU code does not have this guard. This is a **CPU/GPU divergence** — if the same edge case is hit, GPU returns 0 while CPU crashes.\n\n**Fix:**\n```go\nfunc getNormalizedStake(ctx *types.CalculationContext, agent uint64) uint64 {\n    neudeg := ctx.GetNeudegs()[agent]\n    if neudeg == 0 {\n        return 0\n    }\n    return ctx.GetStakes()[agent] / neudeg\n}\n```\n\n### Issue 2: MEDIUM — Dangling Node Detection Uses Wrong Direction\n\n**File:** `x/rank/keeper/calculate_cpu.go:26`\n\n```go\nif len(inLinks[graphtypes.CidNumber(i)]) == 0 {\n    danglingNodesSize++\n}\n```\n\nStandard PageRank defines **dangling nodes** as nodes with **no outgoing links** (sinks). This code counts nodes with **no incoming links** instead. Both CPU and GPU implementations have this same behavior — it's consistent but deviates from textbook PageRank.\n\nAdditionally, `defaultRankWithCorrection` is computed **once** before iteration and frozen. In standard PageRank, dangling mass must be recomputed each iteration as rank values change.\n\n**Impact:** The algorithm converges to a well-defined fixed point, but it is not the textbook PageRank fixed point. Whether to fix this is a design decision — changing it would alter all rank values.\n\n### Issue 3: MEDIUM — Potential Integer Overflow in Stake Accumulation\n\n**Files:** `calculate_cpu.go:78-83`, `calculate_cpu.go:86-92`\n\n`getOverallLinkStake()` and `getOverallOutLinksStake()` accumulate `uint64` sums without overflow checks. With high stakes (e.g., 10^18 per account) and many contributors per link, the sum could exceed `uint64` max (~1.84 × 10^19), silently wrapping around and producing incorrect weights.\n\n**Fix:** Add overflow-safe arithmetic or assert bounds on individual normalized stakes.\n\n### Issue 4: LOW — Nodes Without In-Links Miss Correction Term\n\n**File:** `calculate_cpu.go:54`\n\n`step()` only iterates `ctx.GetInLinks()`, so nodes without incoming links retain `defaultRank = (1-d)/N` instead of `defaultRankWithCorrection = d*(danglingMass/N) + (1-d)/N`. They miss the redistribution correction. Both CPU and GPU have this same behavior.\n\n### Issue 5: PERFORMANCE — `getOverallOutLinksStake()` Redundant Recomputation\n\n**File:** `calculate_cpu.go:86-92`\n\nThe total outgoing stake for a CID is recomputed every time it appears as a source in some other CID's in-links. This is O(|V| × avg_degree²). The GPU precomputes this once. Could be memoized in the CPU path for significant speedup.\n\n### Rank Fix Checklist\n\nThese fixes must ship as part of a chain upgrade (Step 1 or a dedicated rank-fix upgrade):\n\n- [ ] Fix `getNormalizedStake` divide by zero guard (CPU parity with GPU)\n- [ ] Decide on dangling node direction: keep as-is (document) or fix to standard PageRank (consensus-breaking)\n- [ ] Add overflow protection to stake accumulation\n- [ ] Document the intentional deviations from textbook PageRank\n- [ ] If any rank computation changes are made: compute expected rank delta on mainnet state export to assess migration impact\n- [ ] Precompute `getOverallOutLinksStake` per CID in the CPU path (performance, not consensus)\n\n---\n\n## Execution Checklist\n\n### Pre-work\n\n- [ ] Verify in-place testnet command exists natively in SDK v0.50\n- [ ] Confirm fork can be fully eliminated — switch `go.mod` replace to upstream `github.com/cosmos/cosmos-sdk v0.50.15`\n- [ ] Audit all custom modules for `x/params` usage, `BeginBlock`/`EndBlock` implementations, and `sdk.Context` in keeper methods\n- [ ] Set up a testnet environment for migration testing\n\n### Step 0: Remove x/liquidity (before SDK migration)\n\n- [ ] Add new upgrade version (e.g. `v8`) with `StoreUpgrades.Deleted` for `liquidity` store key\n- [ ] Remove `x/liquidity` module code and all references from `app/app.go`\n- [ ] Remove `liquiditytypes.ParamKeyTable()` case from v4 upgrade handler params migration\n- [ ] Remove liquidity-related `RegisterCustomTypeURL` calls from codec registration\n- [ ] Remove liquidity keeper, message server, and gRPC query server wiring\n- [ ] Clean up any remaining references in genesis, params, and module registrations\n- [ ] Verify the `RegisterCustomTypeURL` SDK fork change is no longer needed (sole consumer was `x/liquidity`)\n- [ ] Test upgrade against bostrom mainnet state export (in-place testnet)\n- [ ] Mainnet upgrade proposal and execution\n\n### Step 1: SDK v0.50\n\n- [ ] **Eliminate the cosmos-sdk fork** — remove the `go.mod` replace directive and use upstream SDK v0.50.15 (the `RegisterCustomTypeURL` fork change is no longer needed after liquidity removal in Step 0)\n- [ ] Switch to native in-place testnet command from SDK v0.50\n- [ ] Migrate all custom modules:\n  - [ ] Replace `sdk.Context` with `context.Context` in keeper methods\n  - [ ] Replace `BeginBlock`/`EndBlock` with the new signatures returning `error`\n  - [ ] Remove `ValidateBasic()` and `GetSignBytes()` from messages\n  - [ ] Add `cosmos.msg.v1.signer` protobuf annotations\n  - [ ] Migrate parameters out of `x/params` into direct module storage\n- [ ] Rewrite `app.go`:\n  - [ ] Replace `ModuleBasics` with `module.NewBasicManagerFromManager()`\n  - [ ] Add `PreBlocker` with upgrade module\n  - [ ] Add store upgrades for `circuit` and `feeibc`\n  - [ ] Migrate to `KVStoreService` from `StoreKey`\n- [ ] Update CometBFT v0.37 -> v0.38 package references\n- [ ] Update IBC-Go v7 -> v8\n- [ ] Update ibc-apps: PFM v8, async-icq v8, ibc-hooks v8\n- [ ] Update wasmd v0.46 -> v0.54.6 and wasmvm v1.5 -> v2.2\n- [ ] Update protobuf code generation if needed\n- [ ] Write and test state migration handler\n- [ ] Full testnet deployment and validation\n- [ ] Mainnet upgrade proposal and execution\n\n### Step 2: SDK v0.53 + CosmWasm 3.0\n\n- [ ] Update Cosmos SDK v0.50 -> v0.53.6\n- [ ] Add `x/auth` PreBlocker to `SetOrderPreBlockers`\n- [ ] Update module imports to `cosmossdk.io/x/{moduleName}` where applicable\n- [ ] Update IBC-Go v8 -> v10:\n  - [ ] Remove capabilities module and all scoped keepers\n  - [ ] Remove IBC fee middleware (ICS-29)\n  - [ ] Wire IBC v2 stack alongside classic stack\n  - [ ] Wire light client modules explicitly\n- [ ] Update wasmd v0.54 -> v0.61.8 and wasmvm v2.2 -> v3.0\n- [ ] Update PFM v8 -> v10\n- [ ] Assess async-icq and ibc-hooks (v10 releases may not be available)\n- [ ] Update Go version to 1.23.2+\n- [ ] Testnet deployment and validation\n- [ ] Mainnet upgrade proposal and execution\n\n---\n\n## Risk Assessment\n\n| Risk | Severity | Mitigation |\n|---|---|---|\n| Cosmos SDK fork elimination | **Medium** (downgraded from High) | Fork has only 4 commits. `RegisterCustomTypeURL` solvable via type assertion; in-place testnet is upstreamed. Plan is to eliminate the fork entirely, not rebase it |\n| State migration failure | **High** | Extensive testnet testing with mainnet state export |\n| ibc-hooks / async-icq lacking v10 releases | **Medium** | Can stay on Step 1 (IBC v8) until releases appear. Or use unreleased branches |\n| Gas parameter recalibration (wasmvm 1000x change) | **Medium** | Benchmark contract gas usage on testnet before mainnet |\n| Breaking changes in custom modules | **Medium** | Systematic migration of each module with unit tests |\n| Database backend incompatibility | **Low** | go-cyber uses goleveldb/rocksdb which remain supported |\n| Space-pussy v0.45->v0.50 state migration | **High** | Largest version jump (3 SDK majors, 4 IBC majors). Test extensively with mainnet state. Akash successfully did v0.45->v0.53 as precedent |\n| Hardcoded denom/prefix refactor | **Medium** | Systematic search-and-replace across 13+ files. Must not break bostrom compatibility. Test both chains |\n| Space-pussy validator coordination | **Medium** | Space-pussy has its own validator set that must coordinate the binary swap. Adequate notice and testing required |\n| wgpu f32 precision for consensus | **High** | f32 may not produce identical merkle roots as f64. Requires empirical testing on mainnet state. Fallback: CPU or emulated f64 |\n| wgpu cross-vendor determinism | **Medium** | Different GPU vendors may produce different float results. Requires NoContraction annotations and extensive testing |\n| Apple Silicon f64 absence | **Low** (design constraint) | Accept f32 on Metal or use CPU. Not a risk — a known platform limitation to design around |\n| LLM training determinism | **Medium** | LoRA fine-tuning on CPU with fixed seeds is bit-exact on x86_64. Different architectures (ARM) may differ. Mitigation: canonical Docker/Nix training environment on x86_64 Linux |\n| LLM quality on graph corpus (~1.5 GB text) | **Low** | 1.5 GB of domain text is sufficient for LoRA fine-tuning. Fine-tuned 3B matches general 7B on domain tasks. Synthetic Q&A pairs critical for instruction-following quality |\n| Python dependency for training | **Medium** | Training requires PyTorch — acceptable as offline process (cron/script), never in consensus path. Inference uses llama-server (C++ binary). Future: Rust training (burn/candle) to eliminate Python |\n| LLM + embeddings distribution size | **Medium** | ~2 GB total (1.8 GB GGUF + 200 MB embeddings). Comparable to state-sync snapshot. Distribute via IPFS. Daily updates via LoRA adapter only (~30-80 MB) |\n| Content resolution for training | **Medium** | Requires IPFS sidecar + time to resolve 3M CIDs. Many CIDs may be unavailable. Mitigation: train on available content, weighted by PageRank (high-rank content more likely pinned) |\n| llama-server as fourth managed process | **Low** | Same pattern as IPFS sidecar — subprocess managed by cyb. Separate lifecycle, crash doesn't affect consensus. ~5 MB binary + ~2 GB model |\n| Personal networks: port conflicts | **Low** | Automatic port allocation per chain-id. Each network gets its own port range (26656+N*100). cyb manages this |\n| Personal networks: single-validator liveness | **Low** (design constraint) | If validator goes offline — chain pauses, resumes when back. Acceptable for personal use. For teams: add second validator |\n| IKP: spam via imported links | **Medium** | Imported links cost bandwidth (relayer pays or channel budget). Trust weight controls rank influence. Governance can close abusive channels |\n| IKP: derived neuron stake | **Medium** | Derived neurons have no real stake — need virtual stake mechanism. Must be carefully designed to prevent rank manipulation via cheap personal chains |\n\n## Reference Chains\n\nThese chains have completed similar migrations and their repositories can serve as reference implementations:\n\n| Chain | Migration | Repository |\n|---|---|---|\n| Cosmos Hub (Gaia) | SDK v0.47 -> v0.53 | github.com/cosmos/gaia |\n| Akash Network | SDK v0.45 -> v0.53 (skipped v0.47/v0.50) | github.com/akash-network/node |\n| Osmosis | SDK v0.47 -> v0.50 | github.com/osmosis-labs/osmosis |\n| Neutron | SDK v0.47 -> v0.50 (CosmWasm chain) | github.com/neutron-org/neutron |\n\n## Sources\n\n- [Cosmos SDK Releases](https://github.com/cosmos/cosmos-sdk/releases)\n- [Cosmos SDK v0.50 UPGRADING.md](https://github.com/cosmos/cosmos-sdk/blob/release/v0.50.x/UPGRADING.md)\n- [CometBFT Releases](https://github.com/cometbft/cometbft/releases)\n- [IBC-Go Releases](https://github.com/cosmos/ibc-go/releases)\n- [IBC-Go v7 to v8 Migration](https://ibc.cosmos.network/main/migrations/v7-to-v8/)\n- [IBC-Go v8.1 to v10 Migration](https://ibc.cosmos.network/main/migrations/v8_1-to-v10/)\n- [CosmWasm/wasmd Releases](https://github.com/CosmWasm/wasmd/releases)\n- [CosmWasm 3.0 Announcement](https://medium.com/cosmwasm/cosmwasm-3-0-fd84d72c2d35)\n- [CosmWasm 2.1 / 2.2 Announcements](https://medium.com/cosmwasm)\n- [The Cosmos Stack Roadmap for 2026](https://www.cosmoslabs.io/blog/the-cosmos-stack-roadmap-2026)\n- [IAVL v1.0 Performance](https://medium.com/the-interchain-foundation/iavl-v1-0-optimizing-storage-in-the-cosmos-sdk-41e871e4ec1c)\n- [Optimistic Execution in SDK](https://medium.com/the-interchain-foundation/optimistic-execution-landing-in-the-cosmos-sdk-a28fc72af650)\n- [cosmos/ibc-apps Repository](https://github.com/cosmos/ibc-apps)\n"
  },
  {
    "path": "entrypoint.sh",
    "content": "#!/bin/sh\n\nln -s /root/.cyber/cosmovisor/current/bin/cyber /usr/bin/cyber\n\nif [ ! -d \"/root/.cyber/\" ]\nthen\n  mkdir /root/.cyber/\n  mkdir /root/.cyber/config/\n  /cyber/cosmovisor/genesis/bin/cyber init ${NODE_MONIKER}\n  cp -r /cyber/cosmovisor/  /root/.cyber\nfi\n\nif [ ! -f \"/root/.cyber/config/node_key.json\" ]\nthen\n  /cyber/cosmovisor/genesis/bin/cyber init ${NODE_MONIKER}\n  cp /genesis.json /root/.cyber/config/\n  cp -r /cyber/cosmovisor/  /root/.cyber\nfi\n\nif [ ! -d \"/root/.cyber/cosmovisor\" ]\nthen\n  cp -r /cyber/cosmovisor/  /root/.cyber/\nfi\n\nif [ ! -d \"/root/.cyber/cosmovisor/updgrades\" ]\nthen\n  cp -r /cyber/cosmovisor/upgrades  /root/.cyber/cosmovisor/\nfi\n\nif [  -d \"/root/.cyber/cosmovisor/upgrades/v4/\" ]\nthen\n  cp -r /cyber/cosmovisor/upgrades/v4  /root/.cyber/cosmovisor/upgrades/v4\nfi\n\nif [  -d \"/root/.cyber/cosmovisor/upgrades/v6/\" ]\nthen\n  cp -r /cyber/cosmovisor/upgrades/v6  /root/.cyber/cosmovisor/upgrades/v6\nfi\n\nif [  -d \"/root/.cyber/cosmovisor/upgrades/v7/\" ]\nthen\n  cp -r /cyber/cosmovisor/upgrades/v7  /root/.cyber/cosmovisor/upgrades/v7\nfi\n\nif [ ! -f \"/root/.cyber/config/genesis.json\" ]\nthen\n  cp /genesis.json /root/.cyber/config/\nfi\n\nif [ \"$2\" = 'init' ]\nthen\n  return 0\nelse\n  exec \"$@\"\nfi\n"
  },
  {
    "path": "go.mod",
    "content": "module github.com/cybercongress/go-cyber/v7\n\ngo 1.22.7\n\nrequire (\n\tcosmossdk.io/api v0.3.1\n\tcosmossdk.io/errors v1.0.1\n\tcosmossdk.io/math v1.4.0\n\tcosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff\n\tcosmossdk.io/tools/rosetta v0.2.1\n\tgithub.com/CosmWasm/wasmd v0.46.0\n\tgithub.com/CosmWasm/wasmvm v1.5.9\n\tgithub.com/armon/go-metrics v0.4.1\n\tgithub.com/cometbft/cometbft v0.37.18\n\tgithub.com/cometbft/cometbft-db v0.12.0\n\tgithub.com/cosmos/cosmos-proto v1.0.0-beta.5\n\tgithub.com/cosmos/cosmos-sdk v0.47.16\n\tgithub.com/cosmos/gogoproto v1.7.0\n\tgithub.com/cosmos/iavl v0.20.1\n\tgithub.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.3.0\n\tgithub.com/cosmos/ibc-apps/modules/async-icq/v7 v7.1.1\n\tgithub.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0\n\tgithub.com/cosmos/ibc-go/v7 v7.10.0\n\tgithub.com/golang/protobuf v1.5.4\n\tgithub.com/gorilla/mux v1.8.0\n\tgithub.com/grpc-ecosystem/grpc-gateway v1.16.0\n\tgithub.com/ipfs/go-cid v0.0.7\n\tgithub.com/prometheus/client_golang v1.20.5\n\tgithub.com/rakyll/statik v0.1.7 // indirect\n\tgithub.com/spf13/cast v1.6.0\n\tgithub.com/spf13/cobra v1.8.1\n\tgithub.com/spf13/pflag v1.0.5\n\tgithub.com/spf13/viper v1.19.0\n\tgithub.com/stretchr/testify v1.10.0\n\tgithub.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d\n\tgoogle.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1\n\tgoogle.golang.org/grpc v1.68.0\n\tgopkg.in/yaml.v2 v2.4.0\n)\n\nrequire (\n\tcloud.google.com/go v0.112.1 // indirect\n\tcloud.google.com/go/compute/metadata v0.5.0 // indirect\n\tcloud.google.com/go/iam v1.1.6 // indirect\n\tcloud.google.com/go/storage v1.38.0 // indirect\n\tcosmossdk.io/core v0.6.1 // indirect\n\tcosmossdk.io/depinject v1.0.0-alpha.4 // indirect\n\tcosmossdk.io/log v1.4.1 // indirect\n\tfilippo.io/edwards25519 v1.0.0 // indirect\n\tgithub.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect\n\tgithub.com/99designs/keyring v1.2.2 // indirect\n\tgithub.com/ChainSafe/go-schnorrkel v1.1.0 // indirect\n\tgithub.com/DataDog/zstd v1.5.2 // indirect\n\tgithub.com/aws/aws-sdk-go v1.44.203 // indirect\n\tgithub.com/beorn7/perks v1.0.1 // indirect\n\tgithub.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect\n\tgithub.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect\n\tgithub.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect\n\tgithub.com/cenkalti/backoff/v4 v4.2.1 // indirect\n\tgithub.com/cespare/xxhash/v2 v2.3.0 // indirect\n\tgithub.com/chzyer/readline v1.5.1 // indirect\n\tgithub.com/cockroachdb/apd/v2 v2.0.2 // indirect\n\tgithub.com/cockroachdb/errors v1.11.1 // indirect\n\tgithub.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect\n\tgithub.com/cockroachdb/pebble v1.1.0 // indirect\n\tgithub.com/cockroachdb/redact v1.1.5 // indirect\n\tgithub.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect\n\tgithub.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect\n\tgithub.com/confio/ics23/go v0.9.0 // indirect\n\tgithub.com/cosmos/btcutil v1.0.5 // indirect\n\tgithub.com/cosmos/go-bip39 v1.0.0 // indirect\n\tgithub.com/cosmos/gogogateway v1.2.0 // indirect\n\tgithub.com/cosmos/ics23/go v0.10.0 // indirect\n\tgithub.com/cosmos/ledger-cosmos-go v0.12.4 // indirect\n\tgithub.com/cosmos/rosetta-sdk-go v0.10.0 // indirect\n\tgithub.com/creachadair/taskgroup v0.13.0 // indirect\n\tgithub.com/danieljoos/wincred v1.1.2 // indirect\n\tgithub.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect\n\tgithub.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect\n\tgithub.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect\n\tgithub.com/dgraph-io/badger/v4 v4.2.0 // indirect\n\tgithub.com/dgraph-io/ristretto v0.1.1 // indirect\n\tgithub.com/docker/distribution v2.8.2+incompatible // indirect\n\tgithub.com/dustin/go-humanize v1.0.1 // indirect\n\tgithub.com/dvsekhvalnov/jose2go v1.6.0 // indirect\n\tgithub.com/felixge/httpsnoop v1.0.4 // indirect\n\tgithub.com/fsnotify/fsnotify v1.7.0 // indirect\n\tgithub.com/getsentry/sentry-go v0.23.0 // indirect\n\tgithub.com/go-kit/kit v0.13.0 // indirect\n\tgithub.com/go-kit/log v0.2.1 // indirect\n\tgithub.com/go-logfmt/logfmt v0.6.0 // indirect\n\tgithub.com/go-logr/logr v1.4.1 // indirect\n\tgithub.com/go-logr/stdr v1.2.2 // indirect\n\tgithub.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect\n\tgithub.com/gogo/googleapis v1.4.1 // indirect\n\tgithub.com/gogo/protobuf v1.3.2 // indirect\n\tgithub.com/golang/glog v1.2.2 // indirect\n\tgithub.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect\n\tgithub.com/golang/mock v1.6.0 // indirect\n\tgithub.com/golang/snappy v0.0.4 // indirect\n\tgithub.com/google/btree v1.1.3 // indirect\n\tgithub.com/google/flatbuffers v1.12.1 // indirect\n\tgithub.com/google/go-cmp v0.6.0 // indirect\n\tgithub.com/google/gofuzz v1.2.0 // indirect\n\tgithub.com/google/orderedcode v0.0.1 // indirect\n\tgithub.com/google/s2a-go v0.1.7 // indirect\n\tgithub.com/google/uuid v1.6.0 // indirect\n\tgithub.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect\n\tgithub.com/googleapis/gax-go/v2 v2.12.3 // indirect\n\tgithub.com/gorilla/handlers v1.5.1 // indirect\n\tgithub.com/gorilla/websocket v1.5.3 // indirect\n\tgithub.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect\n\tgithub.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect\n\tgithub.com/gtank/merlin v0.1.1 // indirect\n\tgithub.com/gtank/ristretto255 v0.1.2 // indirect\n\tgithub.com/hashicorp/go-cleanhttp v0.5.2 // indirect\n\tgithub.com/hashicorp/go-getter v1.7.5 // indirect\n\tgithub.com/hashicorp/go-immutable-radix v1.3.1 // indirect\n\tgithub.com/hashicorp/go-safetemp v1.0.0 // indirect\n\tgithub.com/hashicorp/go-version v1.6.0 // indirect\n\tgithub.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect\n\tgithub.com/hashicorp/golang-lru/v2 v2.0.7 // indirect\n\tgithub.com/hashicorp/hcl v1.0.0 // indirect\n\tgithub.com/hdevalence/ed25519consensus v0.1.0 // indirect\n\tgithub.com/huandu/skiplist v1.2.0 // indirect\n\tgithub.com/iancoleman/orderedmap v0.3.0 // indirect\n\tgithub.com/improbable-eng/grpc-web v0.15.0 // indirect\n\tgithub.com/inconshreveable/mousetrap v1.1.0 // indirect\n\tgithub.com/jmespath/go-jmespath v0.4.0 // indirect\n\tgithub.com/jmhodges/levigo v1.0.0 // indirect\n\tgithub.com/klauspost/compress v1.17.9 // indirect\n\tgithub.com/kr/pretty v0.3.1 // indirect\n\tgithub.com/kr/text v0.2.0 // indirect\n\tgithub.com/lib/pq v1.10.9 // indirect\n\tgithub.com/linxGnu/grocksdb v1.9.3 // indirect\n\tgithub.com/magiconair/properties v1.8.7 // indirect\n\tgithub.com/manifoldco/promptui v0.9.0 // indirect\n\tgithub.com/mattn/go-colorable v0.1.13 // indirect\n\tgithub.com/mattn/go-isatty v0.0.20 // indirect\n\tgithub.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect\n\tgithub.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 // indirect\n\tgithub.com/minio/highwayhash v1.0.3 // indirect\n\tgithub.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771 // indirect\n\tgithub.com/mitchellh/go-homedir v1.1.0 // indirect\n\tgithub.com/mitchellh/go-testing-interface v1.14.1 // indirect\n\tgithub.com/mitchellh/mapstructure v1.5.0 // indirect\n\tgithub.com/mr-tron/base58 v1.1.3 // indirect\n\tgithub.com/mtibben/percent v0.2.1 // indirect\n\tgithub.com/multiformats/go-base32 v0.0.3 // indirect\n\tgithub.com/multiformats/go-base36 v0.1.0 // indirect\n\tgithub.com/multiformats/go-multibase v0.0.3 // indirect\n\tgithub.com/multiformats/go-multihash v0.0.13 // indirect\n\tgithub.com/multiformats/go-varint v0.0.5 // indirect\n\tgithub.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect\n\tgithub.com/opencontainers/go-digest v1.0.0 // indirect\n\tgithub.com/pelletier/go-toml/v2 v2.2.2 // indirect\n\tgithub.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect\n\tgithub.com/pkg/errors v0.9.1 // indirect\n\tgithub.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect\n\tgithub.com/prometheus/client_model v0.6.1 // indirect\n\tgithub.com/prometheus/common v0.60.1 // indirect\n\tgithub.com/prometheus/procfs v0.15.1 // indirect\n\tgithub.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect\n\tgithub.com/rogpeppe/go-internal v1.11.0 // indirect\n\tgithub.com/rs/cors v1.11.1 // indirect\n\tgithub.com/rs/zerolog v1.33.0 // indirect\n\tgithub.com/sagikazarmark/locafero v0.4.0 // indirect\n\tgithub.com/sagikazarmark/slog-shim v0.1.0 // indirect\n\tgithub.com/sasha-s/go-deadlock v0.3.5 // indirect\n\tgithub.com/sourcegraph/conc v0.3.0 // indirect\n\tgithub.com/spaolacci/murmur3 v1.1.0 // indirect\n\tgithub.com/spf13/afero v1.11.0 // indirect\n\tgithub.com/subosito/gotenv v1.6.0 // indirect\n\tgithub.com/tendermint/go-amino v0.16.0 // indirect\n\tgithub.com/tidwall/btree v1.6.0 // indirect\n\tgithub.com/ulikunitz/xz v0.5.11 // indirect\n\tgithub.com/zondax/hid v0.9.2 // indirect\n\tgithub.com/zondax/ledger-go v0.14.3 // indirect\n\tgo.etcd.io/bbolt v1.4.0-alpha.0.0.20240404170359-43604f3112c5 // indirect\n\tgo.opencensus.io v0.24.0 // indirect\n\tgo.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect\n\tgo.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect\n\tgo.opentelemetry.io/otel v1.24.0 // indirect\n\tgo.opentelemetry.io/otel/metric v1.24.0 // indirect\n\tgo.opentelemetry.io/otel/trace v1.24.0 // indirect\n\tgo.uber.org/multierr v1.10.0 // indirect\n\tgolang.org/x/crypto v0.31.0 // indirect\n\tgolang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect\n\tgolang.org/x/net v0.33.0 // indirect\n\tgolang.org/x/oauth2 v0.23.0 // indirect\n\tgolang.org/x/sync v0.10.0 // indirect\n\tgolang.org/x/sys v0.28.0 // indirect\n\tgolang.org/x/term v0.27.0 // indirect\n\tgolang.org/x/text v0.21.0 // indirect\n\tgolang.org/x/time v0.5.0 // indirect\n\tgoogle.golang.org/api v0.171.0 // indirect\n\tgoogle.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 // indirect\n\tgoogle.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect\n\tgoogle.golang.org/protobuf v1.36.1 // indirect\n\tgopkg.in/ini.v1 v1.67.0 // indirect\n\tgopkg.in/yaml.v3 v3.0.1 // indirect\n\tnhooyr.io/websocket v1.8.7 // indirect\n\tpgregory.net/rapid v1.1.0 // indirect\n\tsigs.k8s.io/yaml v1.4.0 // indirect\n)\n\nreplace (\n\t// use cosmos fork of keyring\n\tgithub.com/99designs/keyring => github.com/cosmos/keyring v1.2.0\n\n\tgithub.com/cosmos/cosmos-sdk => github.com/cybercongress/cosmos-sdk v0.47.15-0.20250911123242-45d67c430be3\n\n\t// support concurrency for iavl\n\tgithub.com/cosmos/iavl => github.com/cosmos/iavl v0.20.1\n\n\t// dgrijalva/jwt-go is deprecated and doesn't receive security updates.\n\t// See: https://github.com/cosmos/cosmos-sdk/issues/13134\n\tgithub.com/dgrijalva/jwt-go => github.com/golang-jwt/jwt/v4 v4.4.2\n\n\tgithub.com/gin-gonic/gin => github.com/gin-gonic/gin v1.9.0\n\n\t// pin the version of goleveldb to v1.0.1-0.20210819022825-2ae1ddf74ef7 required by SDK v47 upgrade guide.\n\tgithub.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7\n\n\t// lock exp\n\tgolang.org/x/exp => golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb\n)\n"
  },
  {
    "path": "go.sum",
    "content": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=\ncloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=\ncloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=\ncloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=\ncloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=\ncloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=\ncloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=\ncloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=\ncloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=\ncloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=\ncloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=\ncloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=\ncloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=\ncloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=\ncloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=\ncloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=\ncloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=\ncloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=\ncloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY=\ncloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM=\ncloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY=\ncloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ=\ncloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI=\ncloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4=\ncloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc=\ncloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA=\ncloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A=\ncloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc=\ncloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU=\ncloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA=\ncloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM=\ncloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4=\ncloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw=\ncloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY=\ncloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI=\ncloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4=\ncloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4=\ncloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0=\ncloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ=\ncloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk=\ncloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o=\ncloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s=\ncloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0=\ncloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY=\ncloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw=\ncloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI=\ncloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0=\ncloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8=\ncloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=\ncloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=\ncloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=\ncloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=\ncloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=\ncloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=\ncloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA=\ncloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY=\ncloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s=\ncloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM=\ncloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI=\ncloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY=\ncloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI=\ncloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow=\ncloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM=\ncloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M=\ncloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s=\ncloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU=\ncloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U=\ncloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU=\ncloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY=\ncloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY=\ncloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I=\ncloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4=\ncloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0=\ncloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs=\ncloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc=\ncloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM=\ncloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ=\ncloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo=\ncloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE=\ncloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I=\ncloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ=\ncloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo=\ncloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA=\ncloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=\ncloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=\ncloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo=\ncloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ=\ncloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4=\ncloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0=\ncloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8=\ncloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU=\ncloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU=\ncloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y=\ncloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg=\ncloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk=\ncloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w=\ncloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk=\ncloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg=\ncloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM=\ncloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA=\ncloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o=\ncloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A=\ncloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0=\ncloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0=\ncloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc=\ncloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY=\ncloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc=\ncloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc=\ncloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI=\ncloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic=\ncloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI=\ncloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8=\ncloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08=\ncloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4=\ncloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w=\ncloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE=\ncloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM=\ncloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY=\ncloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s=\ncloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA=\ncloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o=\ncloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ=\ncloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU=\ncloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY=\ncloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34=\ncloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs=\ncloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg=\ncloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E=\ncloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU=\ncloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0=\ncloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA=\ncloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0=\ncloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI=\ncloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=\ncloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=\ncloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=\ncloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=\ncloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4=\ncloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o=\ncloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk=\ncloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo=\ncloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg=\ncloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4=\ncloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg=\ncloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c=\ncloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y=\ncloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A=\ncloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4=\ncloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY=\ncloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s=\ncloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI=\ncloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA=\ncloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4=\ncloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0=\ncloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU=\ncloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU=\ncloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc=\ncloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs=\ncloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg=\ncloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM=\ncloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ=\ncloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=\ncloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=\ncloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=\ncloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=\ncloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=\ncloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y=\ncloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc=\ncloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s=\ncloud.google.com/go/storage v1.38.0 h1:Az68ZRGlnNTpIBbLjSMIV2BDcwwXYlRlQzis0llkpJg=\ncloud.google.com/go/storage v1.38.0/go.mod h1:tlUADB0mAb9BgYls9lq+8MGkfzOXuLrnHXlpHmvFJoY=\ncloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw=\ncloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g=\ncloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU=\ncloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4=\ncloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0=\ncloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo=\ncloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo=\ncloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE=\ncloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg=\ncloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0=\ncloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M=\ncosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE=\ncosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw=\ncosmossdk.io/core v0.6.1 h1:OBy7TI2W+/gyn2z40vVvruK3di+cAluinA6cybFbE7s=\ncosmossdk.io/core v0.6.1/go.mod h1:g3MMBCBXtxbDWBURDVnJE7XML4BG5qENhs0gzkcpuFA=\ncosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc=\ncosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU=\ncosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0=\ncosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U=\ncosmossdk.io/log v1.4.1 h1:wKdjfDRbDyZRuWa8M+9nuvpVYxrEOwbD/CA8hvhU8QM=\ncosmossdk.io/log v1.4.1/go.mod h1:k08v0Pyq+gCP6phvdI6RCGhLf/r425UT6Rk/m+o74rU=\ncosmossdk.io/math v1.4.0 h1:XbgExXFnXmF/CccPPEto40gOO7FpWu9yWNAZPN3nkNQ=\ncosmossdk.io/math v1.4.0/go.mod h1:O5PkD4apz2jZs4zqFdTr16e1dcaQCc5z6lkEnrrppuk=\ncosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff h1:P1ialzTepD1oxdNPYc5N8Eggq3RdejZq3cJs8YYMs9Y=\ncosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff/go.mod h1:AKzx6Mb544LjJ9RHmGFHjY9rEOLiUAi8I0F727TR0dY=\ncosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw=\ncosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw=\nfilippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek=\nfilippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns=\ngithub.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs=\ngithub.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4=\ngithub.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=\ngithub.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=\ngithub.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=\ngithub.com/ChainSafe/go-schnorrkel v1.1.0 h1:rZ6EU+CZFCjB4sHUE1jIu8VDoB/wRKZxoe1tkcO71Wk=\ngithub.com/ChainSafe/go-schnorrkel v1.1.0/go.mod h1:ABkENxiP+cvjFiByMIZ9LYbRoNNLeBLiakC1XeTFxfE=\ngithub.com/CosmWasm/wasmd v0.46.0 h1:78kmiobbVE8JWBcM+ssxiFV2cS+4l9lmZQqPAQ0mA04=\ngithub.com/CosmWasm/wasmd v0.46.0/go.mod h1:BZFz+CFGdLNGomshb3IeccFyD4R+XbnS/mXpytOUyTA=\ngithub.com/CosmWasm/wasmvm v1.5.9 h1:EMSIsG4eAhgIZ6SQQs+ZWFT0ONnUjbH9FSdeBUnItoQ=\ngithub.com/CosmWasm/wasmvm v1.5.9/go.mod h1:2qaMB5ISmYXtpkJR2jy8xxx5Ti8sntOEf1cUgolb4QI=\ngithub.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=\ngithub.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8=\ngithub.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw=\ngithub.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=\ngithub.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=\ngithub.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=\ngithub.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw=\ngithub.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk=\ngithub.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=\ngithub.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=\ngithub.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=\ngithub.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE=\ngithub.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=\ngithub.com/adlio/schema v1.3.6 h1:k1/zc2jNfeiZBA5aFTRy37jlBIuCkXCm0XmvpzCKI9I=\ngithub.com/adlio/schema v1.3.6/go.mod h1:qkxwLgPBd1FgLRHYVCmQT/rrBr3JH38J9LjmVzWNudg=\ngithub.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=\ngithub.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=\ngithub.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=\ngithub.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=\ngithub.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=\ngithub.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=\ngithub.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=\ngithub.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=\ngithub.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=\ngithub.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=\ngithub.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=\ngithub.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA=\ngithub.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4=\ngithub.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=\ngithub.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=\ngithub.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=\ngithub.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=\ngithub.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=\ngithub.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F+U=\ngithub.com/aws/aws-sdk-go v1.44.203/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=\ngithub.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=\ngithub.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=\ngithub.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=\ngithub.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=\ngithub.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=\ngithub.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas=\ngithub.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4=\ngithub.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=\ngithub.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s=\ngithub.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=\ngithub.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U=\ngithub.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04=\ngithub.com/btcsuite/btcd/btcutil v1.1.6 h1:zFL2+c3Lb9gEgqKNzowKUPQNb8jV7v5Oaodi/AYFd6c=\ngithub.com/btcsuite/btcd/btcutil v1.1.6/go.mod h1:9dFymx8HpuLqBnsPELrImQeTQfKBQqzqGbbV3jK55aE=\ngithub.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U=\ngithub.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=\ngithub.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA=\ngithub.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8=\ngithub.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=\ngithub.com/bytedance/sonic v1.8.0 h1:ea0Xadu+sHlu7x5O3gKhRpQ1IKiMrSiHttPF0ybECuA=\ngithub.com/bytedance/sonic v1.8.0/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=\ngithub.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=\ngithub.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=\ngithub.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=\ngithub.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=\ngithub.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=\ngithub.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=\ngithub.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=\ngithub.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=\ngithub.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=\ngithub.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=\ngithub.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=\ngithub.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s=\ngithub.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=\ngithub.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=\ngithub.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=\ngithub.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=\ngithub.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM=\ngithub.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ=\ngithub.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=\ngithub.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI=\ngithub.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk=\ngithub.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=\ngithub.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04=\ngithub.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8=\ngithub.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=\ngithub.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=\ngithub.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=\ngithub.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=\ngithub.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=\ngithub.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=\ngithub.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=\ngithub.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=\ngithub.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=\ngithub.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=\ngithub.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=\ngithub.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=\ngithub.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=\ngithub.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E=\ngithub.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw=\ngithub.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=\ngithub.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4=\ngithub.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU=\ngithub.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8=\ngithub.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw=\ngithub.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE=\ngithub.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs=\ngithub.com/cockroachdb/pebble v1.1.0 h1:pcFh8CdCIt2kmEpK0OIatq67Ln9uGDYY3d5XnE0LJG4=\ngithub.com/cockroachdb/pebble v1.1.0/go.mod h1:sEHm5NOXxyiAoKWhoFxT8xMgd/f3RA6qUqQ1BXKrh2E=\ngithub.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30=\ngithub.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg=\ngithub.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo=\ngithub.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ=\ngithub.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=\ngithub.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA=\ngithub.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c=\ngithub.com/cometbft/cometbft v0.37.18 h1:JIjGMHxPqnuoGcCn3gRnmFSCBP6bCIeJWWWILwiDwUk=\ngithub.com/cometbft/cometbft v0.37.18/go.mod h1:t/BvwfSJKt2HUHX01L6y1+uw+LOoxU6hFj447wOB5IA=\ngithub.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0=\ngithub.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw=\ngithub.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4=\ngithub.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak=\ngithub.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg=\ngithub.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM=\ngithub.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=\ngithub.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=\ngithub.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=\ngithub.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=\ngithub.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk=\ngithub.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis=\ngithub.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA=\ngithub.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec=\ngithub.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY=\ngithub.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw=\ngithub.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE=\ngithub.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI=\ngithub.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU=\ngithub.com/cosmos/gogoproto v1.7.0 h1:79USr0oyXAbxg3rspGh/m4SWNyoz/GLaAh0QlCe2fro=\ngithub.com/cosmos/gogoproto v1.7.0/go.mod h1:yWChEv5IUEYURQasfyBW5ffkMHR/90hiHgbNgrtp4j0=\ngithub.com/cosmos/iavl v0.20.1 h1:rM1kqeG3/HBT85vsZdoSNsehciqUQPWrR4BYmqE2+zg=\ngithub.com/cosmos/iavl v0.20.1/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A=\ngithub.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.3.0 h1:hYsyOQ94H5uYPuVZ7siye+4iDzMDqhQHgsa9x/XqJzI=\ngithub.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.3.0/go.mod h1:tLfRg+cJc0Dzx/jtF0Lo4n9Pa/NqobagOMrB+BVjCrk=\ngithub.com/cosmos/ibc-apps/modules/async-icq/v7 v7.1.1 h1:02RCbih5lQ8aGdDMSvxhTnk5JDLEDitn17ytEE1Qhko=\ngithub.com/cosmos/ibc-apps/modules/async-icq/v7 v7.1.1/go.mod h1:LvVkEXTORVgd87W2Yu7ZY3acKKeTMq/txdTworn8EZI=\ngithub.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0 h1:XtxqFntyBDqPFF4ayhzN6/HYoXPifRzt1url/afbx1U=\ngithub.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0/go.mod h1:md+Y3uUV5K7B3ddGYULcuU9excvr9mCXZjP8S0m7hTE=\ngithub.com/cosmos/ibc-go/v7 v7.10.0 h1:/IUJ6wilNnGcpP5XMb7p74JnctKDrFSv30i7aoJRnVI=\ngithub.com/cosmos/ibc-go/v7 v7.10.0/go.mod h1:PiVSJhIPBq/rI+6UOfKPy4RKDCvQ2vR+Vdb6SaowETQ=\ngithub.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM=\ngithub.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0=\ngithub.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo=\ngithub.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA=\ngithub.com/cosmos/ledger-cosmos-go v0.12.4 h1:drvWt+GJP7Aiw550yeb3ON/zsrgW0jgh5saFCr7pDnw=\ngithub.com/cosmos/ledger-cosmos-go v0.12.4/go.mod h1:fjfVWRf++Xkygt9wzCsjEBdjcf7wiiY35fv3ctT+k4M=\ngithub.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM=\ngithub.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4=\ngithub.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=\ngithub.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=\ngithub.com/creachadair/taskgroup v0.13.0 h1:VKaW1fi1/Erkkrvx4NvaddzHCGA+hh5QPc5Veiq+joI=\ngithub.com/creachadair/taskgroup v0.13.0/go.mod h1:9oDDPt/5QPS4iylvPMC81GRlj+1je8AFDbjUh4zaQWo=\ngithub.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=\ngithub.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=\ngithub.com/cybercongress/cosmos-sdk v0.47.15-0.20250911123242-45d67c430be3 h1:VEdumhHrqaMW3he9R3dBYTRZAGDdop/125iUXd2tSDc=\ngithub.com/cybercongress/cosmos-sdk v0.47.15-0.20250911123242-45d67c430be3/go.mod h1:GrDj/zd9Tiuy8ZpG9PbUbhghCVU7lwyH0GS7CpxHpyM=\ngithub.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0=\ngithub.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0=\ngithub.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=\ngithub.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y=\ngithub.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo=\ngithub.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg=\ngithub.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0=\ngithub.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I=\ngithub.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE=\ngithub.com/dgraph-io/badger/v4 v4.2.0 h1:kJrlajbXXL9DFTNuhhu9yCx7JJa4qpYWxtE8BzuWsEs=\ngithub.com/dgraph-io/badger/v4 v4.2.0/go.mod h1:qfCqhPoWDFJRx1gp5QwwyGo8xk1lbHUxvK9nK0OGAak=\ngithub.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8=\ngithub.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA=\ngithub.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=\ngithub.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y=\ngithub.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=\ngithub.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8=\ngithub.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=\ngithub.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=\ngithub.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=\ngithub.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=\ngithub.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=\ngithub.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=\ngithub.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=\ngithub.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=\ngithub.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=\ngithub.com/dvsekhvalnov/jose2go v1.6.0 h1:Y9gnSnP4qEI0+/uQkHvFXeD2PLPJeXEL+ySMEA2EjTY=\ngithub.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU=\ngithub.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=\ngithub.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=\ngithub.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=\ngithub.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=\ngithub.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=\ngithub.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=\ngithub.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=\ngithub.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=\ngithub.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=\ngithub.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=\ngithub.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=\ngithub.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=\ngithub.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=\ngithub.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=\ngithub.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=\ngithub.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=\ngithub.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=\ngithub.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=\ngithub.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=\ngithub.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=\ngithub.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=\ngithub.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=\ngithub.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=\ngithub.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=\ngithub.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=\ngithub.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=\ngithub.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=\ngithub.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=\ngithub.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=\ngithub.com/getsentry/sentry-go v0.23.0 h1:dn+QRCeJv4pPt9OjVXiMcGIBIefaTJPw/h0bZWO05nE=\ngithub.com/getsentry/sentry-go v0.23.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=\ngithub.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=\ngithub.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=\ngithub.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=\ngithub.com/gin-gonic/gin v1.9.0 h1:OjyFBKICoexlu99ctXNR2gg+c5pKrKMuyjgARg9qeY8=\ngithub.com/gin-gonic/gin v1.9.0/go.mod h1:W1Me9+hsUSyj3CePGrd1/QrKJMSJ1Tu/0hFEH89961k=\ngithub.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=\ngithub.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=\ngithub.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=\ngithub.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=\ngithub.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=\ngithub.com/go-kit/kit v0.13.0 h1:OoneCcHKHQ03LfBpoQCUfCluwd2Vt3ohz+kvbJneZAU=\ngithub.com/go-kit/kit v0.13.0/go.mod h1:phqEHMMUbyrCFCTgH48JueqrM3md2HcAZ8N3XE4FKDg=\ngithub.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=\ngithub.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=\ngithub.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=\ngithub.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=\ngithub.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=\ngithub.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=\ngithub.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=\ngithub.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=\ngithub.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=\ngithub.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=\ngithub.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=\ngithub.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=\ngithub.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=\ngithub.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=\ngithub.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=\ngithub.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=\ngithub.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=\ngithub.com/go-playground/validator/v10 v10.11.2 h1:q3SHpufmypg+erIExEKUmsgmhDTyhcJ38oeKGACXohU=\ngithub.com/go-playground/validator/v10 v10.11.2/go.mod h1:NieE624vt4SCTJtD87arVLvdmjPAeV8BQlHtMnw9D7s=\ngithub.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=\ngithub.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=\ngithub.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0=\ngithub.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo=\ngithub.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8=\ngithub.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=\ngithub.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo=\ngithub.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=\ngithub.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA=\ngithub.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=\ngithub.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0=\ngithub.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=\ngithub.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=\ngithub.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=\ngithub.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c=\ngithub.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0=\ngithub.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4=\ngithub.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=\ngithub.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=\ngithub.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=\ngithub.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=\ngithub.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=\ngithub.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=\ngithub.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=\ngithub.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=\ngithub.com/golang/glog v1.2.2 h1:1+mZ9upx1Dh6FmUTFR1naJ77miKiXgALjWOZ3NVFPmY=\ngithub.com/golang/glog v1.2.2/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=\ngithub.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=\ngithub.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=\ngithub.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=\ngithub.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=\ngithub.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=\ngithub.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=\ngithub.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=\ngithub.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=\ngithub.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=\ngithub.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=\ngithub.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=\ngithub.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=\ngithub.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=\ngithub.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8=\ngithub.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=\ngithub.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=\ngithub.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\ngithub.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0=\ngithub.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\ngithub.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\ngithub.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=\ngithub.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=\ngithub.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=\ngithub.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=\ngithub.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=\ngithub.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=\ngithub.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=\ngithub.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=\ngithub.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=\ngithub.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=\ngithub.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=\ngithub.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=\ngithub.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=\ngithub.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=\ngithub.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=\ngithub.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=\ngithub.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=\ngithub.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=\ngithub.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=\ngithub.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=\ngithub.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=\ngithub.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=\ngithub.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=\ngithub.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=\ngithub.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw=\ngithub.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=\ngithub.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=\ngithub.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=\ngithub.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=\ngithub.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=\ngithub.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=\ngithub.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=\ngithub.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=\ngithub.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=\ngithub.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=\ngithub.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=\ngithub.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=\ngithub.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=\ngithub.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no=\ngithub.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=\ngithub.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=\ngithub.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=\ngithub.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=\ngithub.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw=\ngithub.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=\ngithub.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us=\ngithub.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20=\ngithub.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=\ngithub.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=\ngithub.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\ngithub.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\ngithub.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\ngithub.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\ngithub.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\ngithub.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=\ngithub.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=\ngithub.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=\ngithub.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=\ngithub.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=\ngithub.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=\ngithub.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=\ngithub.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=\ngithub.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=\ngithub.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=\ngithub.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=\ngithub.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8=\ngithub.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8=\ngithub.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg=\ngithub.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=\ngithub.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=\ngithub.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=\ngithub.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=\ngithub.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0=\ngithub.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM=\ngithub.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM=\ngithub.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM=\ngithub.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c=\ngithub.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo=\ngithub.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY=\ngithub.com/googleapis/gax-go/v2 v2.12.3 h1:5/zPPDvw8Q1SuXjrqrZslrqT7dL/uJT2CQii/cLCKqA=\ngithub.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBHwWRvkNFJUQcS4=\ngithub.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4=\ngithub.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=\ngithub.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=\ngithub.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4=\ngithub.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q=\ngithub.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=\ngithub.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=\ngithub.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=\ngithub.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=\ngithub.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=\ngithub.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=\ngithub.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=\ngithub.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=\ngithub.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=\ngithub.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI=\ngithub.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw=\ngithub.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y=\ngithub.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=\ngithub.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=\ngithub.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=\ngithub.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=\ngithub.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU=\ngithub.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0=\ngithub.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is=\ngithub.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s=\ngithub.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc=\ngithub.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o=\ngithub.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=\ngithub.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=\ngithub.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=\ngithub.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=\ngithub.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=\ngithub.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=\ngithub.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=\ngithub.com/hashicorp/go-getter v1.7.5 h1:dT58k9hQ/vbxNMwoI5+xFYAJuv6152UNvdHokfI5wE4=\ngithub.com/hashicorp/go-getter v1.7.5/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744=\ngithub.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=\ngithub.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc=\ngithub.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=\ngithub.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=\ngithub.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=\ngithub.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=\ngithub.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=\ngithub.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo=\ngithub.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I=\ngithub.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=\ngithub.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=\ngithub.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=\ngithub.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE=\ngithub.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=\ngithub.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=\ngithub.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=\ngithub.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=\ngithub.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=\ngithub.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=\ngithub.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=\ngithub.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs=\ngithub.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=\ngithub.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=\ngithub.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=\ngithub.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=\ngithub.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=\ngithub.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=\ngithub.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=\ngithub.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=\ngithub.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=\ngithub.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU=\ngithub.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo=\ngithub.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=\ngithub.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c=\ngithub.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U=\ngithub.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw=\ngithub.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w=\ngithub.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=\ngithub.com/iancoleman/orderedmap v0.3.0 h1:5cbR2grmZR/DiVt+VJopEhtVs9YGInGIxAoMJn+Ichc=\ngithub.com/iancoleman/orderedmap v0.3.0/go.mod h1:XuLcCUkdL5owUCQeF2Ue9uuw1EptkJDkXXS7VoV7XGE=\ngithub.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=\ngithub.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=\ngithub.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ=\ngithub.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8=\ngithub.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=\ngithub.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=\ngithub.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=\ngithub.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=\ngithub.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY=\ngithub.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I=\ngithub.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c=\ngithub.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo=\ngithub.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=\ngithub.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=\ngithub.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=\ngithub.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=\ngithub.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=\ngithub.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U=\ngithub.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ=\ngithub.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=\ngithub.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=\ngithub.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=\ngithub.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=\ngithub.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=\ngithub.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=\ngithub.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=\ngithub.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=\ngithub.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=\ngithub.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=\ngithub.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=\ngithub.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=\ngithub.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=\ngithub.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=\ngithub.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=\ngithub.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=\ngithub.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=\ngithub.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=\ngithub.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=\ngithub.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=\ngithub.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM=\ngithub.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=\ngithub.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=\ngithub.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4=\ngithub.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=\ngithub.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=\ngithub.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=\ngithub.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=\ngithub.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=\ngithub.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=\ngithub.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=\ngithub.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=\ngithub.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=\ngithub.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=\ngithub.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=\ngithub.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=\ngithub.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=\ngithub.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=\ngithub.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=\ngithub.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=\ngithub.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=\ngithub.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=\ngithub.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=\ngithub.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=\ngithub.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=\ngithub.com/linxGnu/grocksdb v1.9.3 h1:s1cbPcOd0cU2SKXRG1nEqCOWYAELQjdqg3RVI2MH9ik=\ngithub.com/linxGnu/grocksdb v1.9.3/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA=\ngithub.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=\ngithub.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=\ngithub.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=\ngithub.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA=\ngithub.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg=\ngithub.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=\ngithub.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=\ngithub.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=\ngithub.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=\ngithub.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=\ngithub.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=\ngithub.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=\ngithub.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=\ngithub.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=\ngithub.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=\ngithub.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=\ngithub.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=\ngithub.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=\ngithub.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=\ngithub.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM=\ngithub.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94=\ngithub.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM=\ngithub.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g=\ngithub.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ=\ngithub.com/minio/highwayhash v1.0.3 h1:kbnuUMoHYyVl7szWjSxJnxw11k2U709jqFPPmIUyD6Q=\ngithub.com/minio/highwayhash v1.0.3/go.mod h1:GGYsuwP/fPD6Y9hMiXuapVvlIUEhFhMTh0rxU3ik1LQ=\ngithub.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771 h1:MHkK1uRtFbVqvAgvWxafZe54+5uBxLluGylDiKgdhwo=\ngithub.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=\ngithub.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=\ngithub.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=\ngithub.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=\ngithub.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=\ngithub.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=\ngithub.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU=\ngithub.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8=\ngithub.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=\ngithub.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=\ngithub.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=\ngithub.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=\ngithub.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=\ngithub.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=\ngithub.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=\ngithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=\ngithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=\ngithub.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=\ngithub.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=\ngithub.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=\ngithub.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=\ngithub.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8=\ngithub.com/mr-tron/base58 v1.1.3 h1:v+sk57XuaCKGXpWtVBX8YJzO7hMGx4Aajh4TQbdEFdc=\ngithub.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=\ngithub.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs=\ngithub.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns=\ngithub.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI=\ngithub.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA=\ngithub.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4=\ngithub.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM=\ngithub.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk=\ngithub.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc=\ngithub.com/multiformats/go-multihash v0.0.13 h1:06x+mk/zj1FoMsgNejLpy6QTvJqlSt/BhLEy87zidlc=\ngithub.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc=\ngithub.com/multiformats/go-varint v0.0.5 h1:XVZwSo04Cs3j/jS0uAEPpT3JY6DzMcVLLoWOSnCxOjg=\ngithub.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE=\ngithub.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=\ngithub.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=\ngithub.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=\ngithub.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU=\ngithub.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=\ngithub.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo=\ngithub.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg=\ngithub.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU=\ngithub.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k=\ngithub.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w=\ngithub.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=\ngithub.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=\ngithub.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=\ngithub.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=\ngithub.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=\ngithub.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=\ngithub.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=\ngithub.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=\ngithub.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=\ngithub.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=\ngithub.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=\ngithub.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=\ngithub.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=\ngithub.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA=\ngithub.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=\ngithub.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=\ngithub.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=\ngithub.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=\ngithub.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q=\ngithub.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo=\ngithub.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=\ngithub.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=\ngithub.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=\ngithub.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM=\ngithub.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=\ngithub.com/opencontainers/runc v1.1.12 h1:BOIssBaW1La0/qbNZHXOOa71dZfZEQOzW7dqQf3phss=\ngithub.com/opencontainers/runc v1.1.12/go.mod h1:S+lQwSfncpBha7XTy/5lBwWgm5+y5Ma/O44Ekby9FK8=\ngithub.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis=\ngithub.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=\ngithub.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=\ngithub.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=\ngithub.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA=\ngithub.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=\ngithub.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=\ngithub.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=\ngithub.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA=\ngithub.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs=\ngithub.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=\ngithub.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=\ngithub.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY=\ngithub.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=\ngithub.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=\ngithub.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek=\ngithub.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=\ngithub.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=\ngithub.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=\ngithub.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw=\ngithub.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=\ngithub.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=\ngithub.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=\ngithub.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=\ngithub.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=\ngithub.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=\ngithub.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=\ngithub.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=\ngithub.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=\ngithub.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=\ngithub.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=\ngithub.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\ngithub.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=\ngithub.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\ngithub.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=\ngithub.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=\ngithub.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=\ngithub.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=\ngithub.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=\ngithub.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=\ngithub.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=\ngithub.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y=\ngithub.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=\ngithub.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=\ngithub.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=\ngithub.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=\ngithub.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=\ngithub.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=\ngithub.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=\ngithub.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=\ngithub.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=\ngithub.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=\ngithub.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=\ngithub.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=\ngithub.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=\ngithub.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=\ngithub.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=\ngithub.com/prometheus/common v0.60.1 h1:FUas6GcOw66yB/73KC+BOZoFJmbo/1pojoILArPAaSc=\ngithub.com/prometheus/common v0.60.1/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw=\ngithub.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=\ngithub.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=\ngithub.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=\ngithub.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=\ngithub.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=\ngithub.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=\ngithub.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=\ngithub.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=\ngithub.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ=\ngithub.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc=\ngithub.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=\ngithub.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM=\ngithub.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=\ngithub.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=\ngithub.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=\ngithub.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=\ngithub.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=\ngithub.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=\ngithub.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=\ngithub.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=\ngithub.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=\ngithub.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=\ngithub.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA=\ngithub.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=\ngithub.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=\ngithub.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8=\ngithub.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=\ngithub.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=\ngithub.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=\ngithub.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=\ngithub.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=\ngithub.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=\ngithub.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=\ngithub.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=\ngithub.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=\ngithub.com/sasha-s/go-deadlock v0.3.5 h1:tNCOEEDG6tBqrNDOX35j/7hL5FcFViG6awUGROb2NsU=\ngithub.com/sasha-s/go-deadlock v0.3.5/go.mod h1:bugP6EGbdGYObIlx7pUZtWqlvo8k9H6vCBBsiChJQ5U=\ngithub.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=\ngithub.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=\ngithub.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=\ngithub.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=\ngithub.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=\ngithub.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=\ngithub.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=\ngithub.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=\ngithub.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=\ngithub.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=\ngithub.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=\ngithub.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=\ngithub.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=\ngithub.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=\ngithub.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=\ngithub.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=\ngithub.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=\ngithub.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=\ngithub.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=\ngithub.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=\ngithub.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=\ngithub.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=\ngithub.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=\ngithub.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=\ngithub.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=\ngithub.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=\ngithub.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=\ngithub.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI=\ngithub.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg=\ngithub.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=\ngithub.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=\ngithub.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=\ngithub.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=\ngithub.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=\ngithub.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=\ngithub.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=\ngithub.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=\ngithub.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=\ngithub.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=\ngithub.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=\ngithub.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=\ngithub.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=\ngithub.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=\ngithub.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=\ngithub.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=\ngithub.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=\ngithub.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=\ngithub.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=\ngithub.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=\ngithub.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=\ngithub.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=\ngithub.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=\ngithub.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=\ngithub.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY=\ngithub.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc=\ngithub.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E=\ngithub.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME=\ngithub.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg=\ngithub.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY=\ngithub.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=\ngithub.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=\ngithub.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=\ngithub.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=\ngithub.com/ugorji/go/codec v1.2.9 h1:rmenucSohSTiyL09Y+l2OCk+FrMxGMzho2+tjr5ticU=\ngithub.com/ugorji/go/codec v1.2.9/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=\ngithub.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=\ngithub.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8=\ngithub.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=\ngithub.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=\ngithub.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=\ngithub.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=\ngithub.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\ngithub.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\ngithub.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\ngithub.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\ngithub.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=\ngithub.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=\ngithub.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U=\ngithub.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM=\ngithub.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw=\ngithub.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI=\ngo.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=\ngo.etcd.io/bbolt v1.4.0-alpha.0.0.20240404170359-43604f3112c5 h1:qxen9oVGzDdIRP6ejyAJc760RwW4SnVDiTYTzwnXuxo=\ngo.etcd.io/bbolt v1.4.0-alpha.0.0.20240404170359-43604f3112c5/go.mod h1:eW0HG9/oHQhvRCvb1/pIXW4cOvtDqeQK+XSi3TnwaXY=\ngo.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=\ngo.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=\ngo.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=\ngo.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=\ngo.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=\ngo.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=\ngo.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=\ngo.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=\ngo.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=\ngo.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=\ngo.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=\ngo.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=\ngo.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg=\ngo.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=\ngo.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=\ngo.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=\ngo.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=\ngo.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=\ngo.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI=\ngo.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco=\ngo.opentelemetry.io/otel/sdk v1.22.0 h1:6coWHw9xw7EfClIC/+O31R8IY3/+EiRFHevmHafB2Gw=\ngo.opentelemetry.io/otel/sdk v1.22.0/go.mod h1:iu7luyVGYovrRpe2fmj3CVKouQNdTOkxtLzPvPz1DOc=\ngo.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI=\ngo.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=\ngo.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=\ngo.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=\ngo.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=\ngo.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=\ngo.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU=\ngo.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc=\ngo.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=\ngo.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=\ngo.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=\ngo.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=\ngo.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=\ngo.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=\ngo.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=\ngolang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU=\ngolang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=\ngolang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=\ngolang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=\ngolang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=\ngolang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\ngolang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\ngolang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\ngolang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\ngolang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\ngolang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\ngolang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\ngolang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=\ngolang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=\ngolang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=\ngolang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=\ngolang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=\ngolang.org/x/exp v0.0.0-20230711153332-06a737ee72cb h1:xIApU0ow1zwMa2uL1VDNeQlNVFTWMQxZUZCMDy0Q4Us=\ngolang.org/x/exp v0.0.0-20230711153332-06a737ee72cb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=\ngolang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=\ngolang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=\ngolang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=\ngolang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\ngolang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\ngolang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\ngolang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\ngolang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=\ngolang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=\ngolang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=\ngolang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=\ngolang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=\ngolang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=\ngolang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=\ngolang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\ngolang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\ngolang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\ngolang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\ngolang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\ngolang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=\ngolang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=\ngolang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=\ngolang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8=\ngolang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=\ngolang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=\ngolang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\ngolang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\ngolang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\ngolang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\ngolang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\ngolang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\ngolang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\ngolang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=\ngolang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=\ngolang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=\ngolang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=\ngolang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=\ngolang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=\ngolang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=\ngolang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=\ngolang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=\ngolang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=\ngolang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=\ngolang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=\ngolang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=\ngolang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=\ngolang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=\ngolang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=\ngolang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=\ngolang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=\ngolang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=\ngolang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=\ngolang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=\ngolang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=\ngolang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=\ngolang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=\ngolang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=\ngolang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=\ngolang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=\ngolang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=\ngolang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=\ngolang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=\ngolang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=\ngolang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=\ngolang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=\ngolang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=\ngolang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=\ngolang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=\ngolang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=\ngolang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=\ngolang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE=\ngolang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE=\ngolang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=\ngolang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=\ngolang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=\ngolang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A=\ngolang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=\ngolang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=\ngolang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=\ngolang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=\ngolang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=\ngolang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=\ngolang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=\ngolang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=\ngolang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=\ngolang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=\ngolang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ=\ngolang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=\ngolang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=\ngolang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=\ngolang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\ngolang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\ngolang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\ngolang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=\ngolang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\ngolang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\ngolang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\ngolang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\ngolang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=\ngolang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=\ngolang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=\ngolang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=\ngolang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=\ngolang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=\ngolang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=\ngolang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=\ngolang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=\ngolang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=\ngolang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=\ngolang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=\ngolang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=\ngolang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=\ngolang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=\ngolang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=\ngolang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=\ngolang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=\ngolang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=\ngolang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=\ngolang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=\ngolang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=\ngolang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=\ngolang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\ngolang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\ngolang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\ngolang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\ngolang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\ngolang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\ngolang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\ngolang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\ngolang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\ngolang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\ngolang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=\ngolang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=\ngolang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=\ngolang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\ngolang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\ngolang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\ngolang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\ngolang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\ngolang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=\ngolang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=\ngolang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=\ngolang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=\ngolang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=\ngolang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=\ngolang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=\ngolang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=\ngolang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=\ngolang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=\ngolang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=\ngolang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=\ngolang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=\ngolang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=\ngolang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=\ngolang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=\ngolang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=\ngolang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg=\ngolang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI=\ngolang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=\ngolang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=\ngolang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=\ngolang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=\ngolang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=\ngoogle.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=\ngoogle.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=\ngoogle.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=\ngoogle.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=\ngoogle.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=\ngoogle.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=\ngoogle.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=\ngoogle.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=\ngoogle.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=\ngoogle.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=\ngoogle.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=\ngoogle.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=\ngoogle.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=\ngoogle.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=\ngoogle.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=\ngoogle.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=\ngoogle.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=\ngoogle.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=\ngoogle.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=\ngoogle.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=\ngoogle.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU=\ngoogle.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94=\ngoogle.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo=\ngoogle.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4=\ngoogle.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw=\ngoogle.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU=\ngoogle.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k=\ngoogle.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE=\ngoogle.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE=\ngoogle.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI=\ngoogle.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I=\ngoogle.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo=\ngoogle.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g=\ngoogle.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA=\ngoogle.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8=\ngoogle.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs=\ngoogle.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA=\ngoogle.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA=\ngoogle.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw=\ngoogle.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg=\ngoogle.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o=\ngoogle.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g=\ngoogle.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw=\ngoogle.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw=\ngoogle.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI=\ngoogle.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=\ngoogle.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=\ngoogle.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=\ngoogle.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70=\ngoogle.golang.org/api v0.171.0 h1:w174hnBPqut76FzW5Qaupt7zY8Kql6fiVjgys4f58sU=\ngoogle.golang.org/api v0.171.0/go.mod h1:Hnq5AHm4OTMt2BUVjael2CWZFD6vksJdWCWiUAmjC9o=\ngoogle.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=\ngoogle.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=\ngoogle.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=\ngoogle.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=\ngoogle.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=\ngoogle.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=\ngoogle.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=\ngoogle.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=\ngoogle.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=\ngoogle.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=\ngoogle.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=\ngoogle.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=\ngoogle.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=\ngoogle.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=\ngoogle.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=\ngoogle.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=\ngoogle.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=\ngoogle.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=\ngoogle.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\ngoogle.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\ngoogle.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\ngoogle.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\ngoogle.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\ngoogle.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\ngoogle.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=\ngoogle.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\ngoogle.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\ngoogle.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\ngoogle.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\ngoogle.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\ngoogle.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\ngoogle.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\ngoogle.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\ngoogle.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\ngoogle.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\ngoogle.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=\ngoogle.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=\ngoogle.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=\ngoogle.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=\ngoogle.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=\ngoogle.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A=\ngoogle.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=\ngoogle.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=\ngoogle.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=\ngoogle.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24=\ngoogle.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k=\ngoogle.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k=\ngoogle.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48=\ngoogle.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48=\ngoogle.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w=\ngoogle.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=\ngoogle.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=\ngoogle.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=\ngoogle.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=\ngoogle.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=\ngoogle.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=\ngoogle.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=\ngoogle.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=\ngoogle.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=\ngoogle.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=\ngoogle.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=\ngoogle.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=\ngoogle.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=\ngoogle.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=\ngoogle.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=\ngoogle.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=\ngoogle.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E=\ngoogle.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E=\ngoogle.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=\ngoogle.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=\ngoogle.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=\ngoogle.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=\ngoogle.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=\ngoogle.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=\ngoogle.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=\ngoogle.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=\ngoogle.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=\ngoogle.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA=\ngoogle.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA=\ngoogle.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA=\ngoogle.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA=\ngoogle.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA=\ngoogle.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE=\ngoogle.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc=\ngoogle.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk=\ngoogle.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk=\ngoogle.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk=\ngoogle.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk=\ngoogle.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk=\ngoogle.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo=\ngoogle.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo=\ngoogle.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo=\ngoogle.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo=\ngoogle.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo=\ngoogle.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw=\ngoogle.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI=\ngoogle.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI=\ngoogle.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U=\ngoogle.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM=\ngoogle.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM=\ngoogle.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s=\ngoogle.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 h1:9+tzLLstTlPTRyJTh+ah5wIMsBW5c4tQwGTN3thOW9Y=\ngoogle.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s=\ngoogle.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc=\ngoogle.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I=\ngoogle.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ=\ngoogle.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=\ngoogle.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=\ngoogle.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=\ngoogle.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=\ngoogle.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=\ngoogle.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=\ngoogle.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=\ngoogle.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=\ngoogle.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=\ngoogle.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=\ngoogle.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=\ngoogle.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=\ngoogle.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=\ngoogle.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=\ngoogle.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=\ngoogle.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=\ngoogle.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=\ngoogle.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=\ngoogle.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=\ngoogle.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=\ngoogle.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=\ngoogle.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=\ngoogle.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=\ngoogle.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=\ngoogle.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=\ngoogle.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=\ngoogle.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=\ngoogle.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=\ngoogle.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=\ngoogle.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE=\ngoogle.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE=\ngoogle.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=\ngoogle.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=\ngoogle.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=\ngoogle.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ=\ngoogle.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=\ngoogle.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=\ngoogle.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=\ngoogle.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=\ngoogle.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=\ngoogle.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=\ngoogle.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=\ngoogle.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0=\ngoogle.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA=\ngoogle.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=\ngoogle.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=\ngoogle.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=\ngoogle.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=\ngoogle.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=\ngoogle.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=\ngoogle.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\ngoogle.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\ngoogle.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\ngoogle.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=\ngoogle.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=\ngoogle.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=\ngoogle.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=\ngoogle.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=\ngoogle.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=\ngoogle.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=\ngoogle.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk=\ngoogle.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=\ngopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=\ngopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=\ngopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=\ngopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=\ngopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=\ngopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=\ngopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=\ngopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=\ngopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=\ngopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=\ngopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=\ngopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=\ngopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=\ngopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=\ngopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=\ngopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\ngopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\ngopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=\ngopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\ngotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=\ngotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=\ngotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=\nhonnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\nhonnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\nhonnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\nhonnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\nhonnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\nhonnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=\nhonnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=\nhonnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=\nnhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0=\nnhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g=\nnhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0=\npgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw=\npgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=\nrsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=\nrsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=\nrsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=\nrsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=\nsigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=\nsigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=\nsigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=\nsourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=\n"
  },
  {
    "path": "merkle/node.go",
    "content": "package merkle\n\ntype Node struct {\n\thash []byte\n\n\tparent *Node\n\tleft   *Node\n\tright  *Node\n\n\t// first index of elements in this node subnodes (inclusive)\n\tfirstIndex int\n\t// last index of elements in this node subnodes (inclusive)\n\tlastIndex int\n}\n\nfunc (n *Node) GetIndexProofs(i int) []Proof {\n\tproofs := make([]Proof, 0)\n\n\tif n.left != nil && i >= n.left.firstIndex && i <= n.left.lastIndex {\n\t\tproofs = n.left.GetIndexProofs(i)\n\t\tproofs = append(proofs, Proof{Hash: n.right.hash, LeftSide: false})\n\t}\n\n\tif n.right != nil && i >= n.right.firstIndex && i <= n.right.lastIndex {\n\t\tproofs = n.right.GetIndexProofs(i)\n\t\tproofs = append(proofs, Proof{Hash: n.left.hash, LeftSide: true})\n\t}\n\n\treturn proofs\n}\n"
  },
  {
    "path": "merkle/proof.go",
    "content": "package merkle\n\nimport (\n\t\"hash\"\n)\n\ntype Proof struct {\n\tLeftSide bool   `json:\"leftSide\"` // where proof should be placed to sum with hash (left or right side)\n\tHash     []byte `json:\"hash\"`\n}\n\n// calculate sum hash\nfunc (p *Proof) SumWith(hashF hash.Hash, hash []byte) []byte {\n\tif p.LeftSide {\n\t\treturn sum(hashF, p.Hash, hash)\n\t}\n\treturn sum(hashF, hash, p.Hash)\n}\n"
  },
  {
    "path": "merkle/subtree.go",
    "content": "package merkle\n\nimport \"hash\"\n\n// subtrees always should have power of 2 number of elements.\n// tree could contain few of subtrees.\n// root hash calculates from right to left by summing subtree roots hashes.\ntype Subtree struct {\n\troot *Node // root node\n\n\tleft  *Subtree // left subtree from this one\n\tright *Subtree // right  subtree from this one\n\n\theight int // height of subtree\n\t// hash function to hash sum nodes and hash data\n\thashF hash.Hash\n}\n\n// get proofs for root of this subtree\nfunc (t *Subtree) GetRootProofs() []Proof {\n\tproofs := make([]Proof, 0)\n\n\tproofs = append(proofs, t.getRightSubtreesProof()...)\n\tproofs = append(proofs, t.getLeftSubtreesProof()...)\n\n\treturn proofs\n}\n\nfunc (t *Subtree) getLeftSubtreesProof() []Proof {\n\tproofs := make([]Proof, 0)\n\tcurrent := t.left\n\tfor current != nil {\n\t\tproofs = append(proofs, Proof{Hash: current.root.hash, LeftSide: false})\n\t\tcurrent = current.left\n\t}\n\treturn proofs\n}\n\n// right proof is only one cause we have to sum all right subtrees\n// we have to sum hashes from right to left\nfunc (t *Subtree) getRightSubtreesProof() []Proof {\n\tif t.right == nil {\n\t\treturn make([]Proof, 0)\n\t}\n\n\thashesToSum := make([][]byte, 0)\n\n\trightTree := t.right\n\tfor rightTree != nil {\n\t\thashesToSum = append(hashesToSum, rightTree.root.hash)\n\t\trightTree = rightTree.right\n\t}\n\n\tn := len(hashesToSum) - 1\n\tproofHash := hashesToSum[n]\n\tfor i := n - 1; i >= 0; i-- {\n\t\tproofHash = sum(t.hashF, proofHash, hashesToSum[i])\n\t}\n\n\treturn []Proof{{Hash: proofHash, LeftSide: true}}\n}\n"
  },
  {
    "path": "merkle/tree.go",
    "content": "package merkle\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"hash\"\n\t\"math\"\n)\n\n// Merkle tree data structure based on RFC-6962 standard (https://tools.ietf.org/html/rfc6962#section-2.1)\n// we separate whole tree to subtrees where nodes count equal power of 2\n// root hash calculates from right to left by summing subtree roots hashes.\ntype Tree struct {\n\t// this tree subtrees start from lowest height (extreme right subtree)\n\tsubTree *Subtree\n\t// subtrees total count (for convenience)\n\tsubTreesCount int\n\n\t// last index of elements in this tree (exclusive)\n\tlastIndex int\n\n\t// DON'T USE IT FOR PARALLEL CALCULATION (results in errors)\n\thashF hash.Hash\n\n\t// if false then store only roots of subtrees (no proofs available => suitable for consensus only)\n\t// for 1,099,511,627,775 links tree would contain only 40 root hashes.\n\tfull bool\n}\n\nfunc NewTree(hashF hash.Hash, full bool) *Tree {\n\treturn &Tree{hashF: hashF, full: full}\n}\n\nfunc (t *Tree) joinAllSubtrees() {\n\tfor t.subTree.left != nil && t.subTree.height == t.subTree.left.height {\n\n\t\tnewSubtreeRoot := &Node{\n\t\t\thash:       sum(t.hashF, t.subTree.left.root.hash, t.subTree.root.hash),\n\t\t\tfirstIndex: t.subTree.left.root.firstIndex,\n\t\t\tlastIndex:  t.subTree.root.lastIndex,\n\t\t}\n\n\t\t// for full tree we should keep all nodes\n\t\tif t.full {\n\t\t\tnewSubtreeRoot.left = t.subTree.left.root\n\t\t\tnewSubtreeRoot.right = t.subTree.root\n\t\t\tnewSubtreeRoot.left.parent = newSubtreeRoot\n\t\t\tnewSubtreeRoot.right.parent = newSubtreeRoot\n\t\t}\n\n\t\tt.subTree = &Subtree{\n\t\t\troot:   newSubtreeRoot,\n\t\t\tright:  nil,\n\t\t\tleft:   t.subTree.left.left,\n\t\t\theight: t.subTree.height + 1,\n\t\t\thashF:  t.hashF,\n\t\t}\n\n\t\tif t.subTree.left != nil {\n\t\t\tt.subTree.left.right = t.subTree\n\t\t}\n\n\t\tt.subTreesCount--\n\t}\n}\n\nfunc (t *Tree) Reset() {\n\tt.lastIndex = 0\n\tt.subTree = nil\n\tt.subTreesCount = 0\n}\n\n// build completely new tree with data\n// works the same (by time) as using Push method one by one\nfunc (t *Tree) BuildNew(data [][]byte) {\n\tt.Reset()\n\titemsLeft := int64(len(data))\n\n\tnextSubtreeLen := int64(math.Pow(2, float64(int64(math.Log2(float64(itemsLeft))))))\n\tstartIndex := int64(0)\n\tendIndex := startIndex + nextSubtreeLen\n\n\tfor nextSubtreeLen != 0 {\n\n\t\tnextSubtree := buildSubTree(t.hashF, t.full, int(startIndex), data[startIndex:endIndex])\n\n\t\tif t.subTree != nil {\n\t\t\tt.subTree.right = nextSubtree\n\t\t\tnextSubtree.left = t.subTree\n\t\t\tt.subTree = nextSubtree\n\t\t} else {\n\t\t\tt.subTree = nextSubtree\n\t\t}\n\n\t\tt.subTreesCount++\n\n\t\titemsLeft -= nextSubtreeLen\n\t\tnextSubtreeLen = int64(math.Pow(2, float64(int64(math.Log2(float64(itemsLeft))))))\n\t\tstartIndex = endIndex\n\t\tendIndex = startIndex + nextSubtreeLen\n\t}\n\n\tt.lastIndex = int(endIndex)\n}\n\n// n*log(n)\nfunc (t *Tree) Push(data []byte) {\n\tnewSubtreeRoot := &Node{\n\t\thash:       sum(t.hashF, data),\n\t\tparent:     nil,\n\t\tleft:       nil,\n\t\tright:      nil,\n\t\tfirstIndex: t.lastIndex,\n\t\tlastIndex:  t.lastIndex,\n\t}\n\n\tt.lastIndex++\n\n\tt.subTree = &Subtree{\n\t\troot:   newSubtreeRoot,\n\t\tright:  nil,\n\t\tleft:   t.subTree,\n\t\theight: 0,\n\t\thashF:  t.hashF,\n\t}\n\n\tif t.subTree.left != nil {\n\t\tt.subTree.left.right = t.subTree\n\t}\n\n\tt.subTreesCount++\n\tt.joinAllSubtrees()\n}\n\n// going from right trees to left\nfunc (t *Tree) GetIndexProofs(i int) []Proof {\n\t// we cannot build proofs with not full tree\n\tif !t.full {\n\t\treturn nil\n\t}\n\n\tproofs := make([]Proof, 0, int64(math.Log2(float64(t.lastIndex))))\n\n\tfor current := t.subTree; current != nil; {\n\n\t\tif i >= current.root.firstIndex && i <= current.root.lastIndex {\n\t\t\tproofs = append(proofs, current.root.GetIndexProofs(i)...)\n\t\t\tproofs = append(proofs, current.GetRootProofs()...)\n\t\t\treturn proofs\n\t\t}\n\n\t\tcurrent = current.left\n\t}\n\n\treturn proofs\n}\n\nfunc (t *Tree) ValidateIndex(i int, data []byte) bool {\n\tif !t.full {\n\t\treturn false\n\t}\n\treturn t.ValidateIndexByProofs(i, data, t.GetIndexProofs(i))\n}\n\nfunc (t *Tree) ValidateIndexByProofs(i int, data []byte, proofs []Proof) bool {\n\trootHash := sum(t.hashF, data)\n\tfor _, proof := range proofs {\n\t\trootHash = proof.SumWith(t.hashF, rootHash)\n\t}\n\n\treturn bytes.Equal(rootHash, t.RootHash())\n}\n\n// root hash calculates from right to left by summing subtrees root hashes.\nfunc (t *Tree) RootHash() []byte {\n\tif t.subTree == nil {\n\t\treturn sum(t.hashF) // zero hash\n\t}\n\n\trootHash := t.subTree.root.hash\n\tcurrent := t.subTree.left\n\n\tfor current != nil {\n\t\trootHash = sum(t.hashF, rootHash, current.root.hash)\n\t\tcurrent = current.left\n\t}\n\n\treturn rootHash\n}\n\n// from right to left\n// we need to export root hash and height of tree\n// from those bytes we could restore it later and use for consensus\nfunc (t *Tree) ExportSubtreesRoots() []byte {\n\tif t.subTree == nil {\n\t\treturn make([]byte, 0)\n\t}\n\n\thashSize := t.hashF.Size()\n\theightSize := 8 // using 8 byte integer\n\tresult := make([]byte, 0, (hashSize+heightSize)*t.subTreesCount)\n\tcurrent := t.subTree\n\n\tfor current != nil {\n\t\theightBytes := make([]byte, 8)\n\t\tbinary.LittleEndian.PutUint64(heightBytes, uint64(current.height))\n\n\t\tresult = append(result, current.root.hash...)\n\t\tresult = append(result, heightBytes...)\n\t\tcurrent = current.left\n\t}\n\n\treturn result\n}\n\n// from right to left\n// after import we loosing indices (actually they don't need for consensus and pushing)\nfunc (t *Tree) ImportSubtreesRoots(subTreesRoots []byte) {\n\tt.Reset()\n\tt.full = false\n\n\thashSize := t.hashF.Size()\n\theightSize := 8\n\n\tt.subTreesCount = len(subTreesRoots) / (hashSize + heightSize)\n\n\tstart := 0\n\tvar first *Subtree\n\tvar current *Subtree\n\tfor i := 0; i < t.subTreesCount; i++ {\n\t\tend := start + hashSize\n\t\trootHash := subTreesRoots[start:end]\n\t\theight := binary.LittleEndian.Uint64(subTreesRoots[end : end+heightSize])\n\t\tnextSubtree := &Subtree{\n\t\t\troot: &Node{\n\t\t\t\thash: rootHash,\n\t\t\t},\n\t\t\theight: int(height),\n\t\t}\n\n\t\tif current != nil {\n\t\t\tnextSubtree.right = current\n\t\t\tcurrent.left = nextSubtree\n\t\t\tcurrent = nextSubtree\n\t\t} else {\n\t\t\tcurrent = nextSubtree\n\t\t\tfirst = nextSubtree\n\t\t}\n\n\t\tstart = end + heightSize\n\t}\n\n\tt.subTree = first\n}\n"
  },
  {
    "path": "merkle/tree_test.go",
    "content": "package merkle\n\nimport (\n\t\"crypto/sha256\"\n\t\"encoding/binary\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/require\"\n)\n\nfunc TestPushAndProofs(t *testing.T) {\n\ttree := NewTree(sha256.New(), true)\n\n\tdata := make([]byte, 8)\n\n\tfor i := 0; i < 31; i++ {\n\t\tbinary.LittleEndian.PutUint64(data, uint64(i))\n\t\ttree.Push(data)\n\t}\n\n\t// Check all proofs\n\tfor i := 0; i < 31; i++ {\n\t\tproofs := tree.GetIndexProofs(i)\n\t\tbinary.LittleEndian.PutUint64(data, uint64(i))\n\t\trequire.Equal(t, true, tree.ValidateIndexByProofs(i, data, proofs))\n\t}\n}\n\nfunc TestBuildNewAndProofs(t *testing.T) {\n\ttree := NewTree(sha256.New(), true)\n\n\tallData := make([][]byte, 0, 31)\n\n\tfor i := 0; i < 31; i++ {\n\t\tdata := make([]byte, 8)\n\t\tbinary.LittleEndian.PutUint64(data, uint64(i))\n\t\tallData = append(allData, data)\n\t}\n\n\ttree.BuildNew(allData)\n\n\t// Check all proofs\n\tfor i := 0; i < 31; i++ {\n\t\tproofs := tree.GetIndexProofs(i)\n\t\tdata := make([]byte, 8)\n\t\tbinary.LittleEndian.PutUint64(data, uint64(i))\n\t\trequire.Equal(t, true, tree.ValidateIndexByProofs(i, data, proofs))\n\t}\n}\n\nfunc TestEqualityOfBuildNewAndPush(t *testing.T) {\n\ttree1 := NewTree(sha256.New(), true)\n\n\tdata := make([]byte, 8)\n\n\tfor i := 0; i < 31; i++ {\n\t\tbinary.LittleEndian.PutUint64(data, uint64(i))\n\t\ttree1.Push(data)\n\t}\n\n\ttree2 := NewTree(sha256.New(), true)\n\n\tallData := make([][]byte, 0, 31)\n\n\tfor i := 0; i < 31; i++ {\n\t\tdata := make([]byte, 8)\n\t\tbinary.LittleEndian.PutUint64(data, uint64(i))\n\t\tallData = append(allData, data)\n\t}\n\n\ttree2.BuildNew(allData)\n\n\trequire.Equal(t, tree1.RootHash(), tree2.RootHash())\n}\n\nfunc TestNotFull(t *testing.T) {\n\ttree1 := NewTree(sha256.New(), true)\n\n\tdata := make([]byte, 8)\n\n\tfor i := 0; i < 31; i++ {\n\t\tbinary.LittleEndian.PutUint64(data, uint64(i))\n\t\ttree1.Push(data)\n\t}\n\n\ttree2 := NewTree(sha256.New(), false)\n\n\tfor i := 0; i < 31; i++ {\n\t\tbinary.LittleEndian.PutUint64(data, uint64(i))\n\t\ttree2.Push(data)\n\t}\n\n\ttree3 := NewTree(sha256.New(), false)\n\n\tallData := make([][]byte, 0, 31)\n\n\tfor i := 0; i < 31; i++ {\n\t\tdata := make([]byte, 8)\n\t\tbinary.LittleEndian.PutUint64(data, uint64(i))\n\t\tallData = append(allData, data)\n\t}\n\n\ttree3.BuildNew(allData)\n\n\trequire.Equal(t, tree1.RootHash(), tree2.RootHash())\n\trequire.Equal(t, tree1.RootHash(), tree3.RootHash())\n}\n\nfunc TestExportImport(t *testing.T) {\n\ttree1 := NewTree(sha256.New(), true)\n\n\tdata := make([]byte, 8)\n\n\tfor i := 0; i < 31; i++ {\n\t\tbinary.LittleEndian.PutUint64(data, uint64(i))\n\t\ttree1.Push(data)\n\t}\n\n\tsubtreeRoots := tree1.ExportSubtreesRoots()\n\n\ttree2 := NewTree(sha256.New(), false)\n\ttree2.ImportSubtreesRoots(subtreeRoots)\n\n\trequire.Equal(t, tree1.RootHash(), tree2.RootHash())\n\n\tbinary.LittleEndian.PutUint64(data, uint64(31))\n\ttree1.Push(data)\n\ttree2.Push(data)\n\trequire.Equal(t, tree1.RootHash(), tree2.RootHash())\n}\n"
  },
  {
    "path": "merkle/util.go",
    "content": "package merkle\n\nimport (\n\t\"hash\"\n\t\"math\"\n)\n\nfunc sum(h hash.Hash, data ...[]byte) []byte {\n\th.Reset()\n\tfor _, d := range data {\n\t\t// the Hash interface specifies that Write never returns an error\n\t\t_, _ = h.Write(d)\n\t}\n\treturn h.Sum(nil)\n}\n\n// number of data elements should be power of 2\n// not suitable for parallel calculations cause using same hash.Hash\nfunc buildSubTree(h hash.Hash, full bool, startIndex int, data [][]byte) *Subtree {\n\tnodes := make([]*Node, len(data))\n\tfor i := 0; i < len(data); i++ {\n\t\tnodes[i] = &Node{\n\t\t\thash:       sum(h, data[i]),\n\t\t\tfirstIndex: startIndex + i,\n\t\t\tlastIndex:  startIndex + i,\n\t\t}\n\t}\n\n\troot := sumNodes(h, full, nodes)[0]\n\n\treturn &Subtree{\n\t\troot:   root,\n\t\tleft:   nil,\n\t\tright:  nil,\n\t\theight: int(math.Log2(float64(len(data)))),\n\t\thashF:  h,\n\t}\n}\n\nfunc sumNodes(h hash.Hash, full bool, nodes []*Node) []*Node {\n\tif len(nodes) == 1 {\n\t\treturn nodes\n\t}\n\n\tnewNodes := make([]*Node, len(nodes)/2)\n\tfor i := 0; i < len(nodes); i += 2 {\n\t\tnewNodes[i/2] = joinNodes(h, full, nodes[i], nodes[i+1])\n\t}\n\n\treturn sumNodes(h, full, newNodes)\n}\n\nfunc joinNodes(h hash.Hash, full bool, left *Node, right *Node) *Node {\n\tnewNode := &Node{\n\t\tfirstIndex: left.firstIndex,\n\t\tlastIndex:  right.lastIndex,\n\t\thash:       sum(h, left.hash, right.hash),\n\t}\n\n\tif full {\n\t\tnewNode.left = left\n\t\tnewNode.right = right\n\t\tleft.parent = newNode\n\t\tright.parent = newNode\n\t}\n\treturn newNode\n}\n"
  },
  {
    "path": "networks/bostrom/cyberfrey-upgrade-guide.md",
    "content": "# How to prepare your node for Cyberfrey upgrade\n\nThis guide includes all the steps you need to get ready for the `Cyberfrey` upgrade in Bostrom.\n\nHereby we assume that you run your node in docker with the cyber [\"official\"](https://hub.docker.com/layers/cyber/cyberd/cyber/bostrom-1/images/sha256-6383de3e4562690907b0dbb99b752f53ef2d41f44a7d452a903d24397e49911b?context=explore) image, otherwise this guide will not suit your node. \n\n## Step 1: Pull new docker image\n\nThe new cyber binary is wrapped in the new docker image, so we have to pull it first: \n\n```js\ndocker pull cyberd/cyber:bostrom-2\n```\nIt may take few minutes to pull the new image. When complete, check that you have it with: \n\n```js\ndocker images\n```\n\n## Step 2: Replace docker image for Bostrom container\n\n*At this stage you will have to operate quickly in order to reduce your node downtime, so please read all the sub-steps first!*\n\nStop your current docker container with Bostrom: \n\n```js\ndocker stop bostrom\n```\n\nRemove Bostrom container (do not worry, files will stay untouched):\n\n```js\ndocker rm bostrom\n```\n\nCreate Bostrom container from new image (note: if you have custom ports set, please adjust accordingly): \n\n```sh\ndocker run -d --gpus all --name=bostrom --restart always -p 26656:26656 -p 26657:26657 -p 1317:1317 -e ALLOW_SEARCH=true -v $HOME/.cyber:/root/.cyber  cyberd/cyber:bostrom-2\n```\n\nCheck logs. Block production should restore after startup:\n\n```sh\ndocker logs bostrom -f --tail 20 \n```\n\n## Step 3: Verify that everything is OK\n\nAfter the container lauch, the new cyber binary should appear inside the `$HOME/.cyber/cosmovisor/` folder. Check that you have a similar folder layout: \n\n```sh\ncd $HOME/.cyber/cosmovisor/\ntree\n```\n\nYou should have a similar layout of files and folders:\n\n```sh\nroot@node:~/.cyber/cosmovisor# tree\n.\n├── current -> /root/.cyber/cosmovisor/genesis/bin\n├── genesis\n│   └── bin\n│       └── cyber\n└── upgrades\n    └── cyberfrey\n        └── bin\n            └── cyber\n\n\n6 directories, 2 files\n```\n\n## You are done! What's next? \n\nNow is a good time to go and vote for prop #7. If you havent done this yet, report that you have completed preparation for the upgrade in our [Hall of Fame](https://t.me/fameofcyber) and chill until the upgrade block 3098000, which should come around 9:00am UTC Friday 03.06.2022 (proposal says 04.06.2022 but that's incorrect). \nYou may also track the countdown to upgrade at `cybernode.ai`, actual block time is used there so the estimate is more or less correct.\n\nWhat will happen at the block 3098000: \n\n- chain will halt with message `CONSENSUS FAILURE!!! err=\"UPGRADE \\\"cyberfrey\\\" NEEDED at height: 3098000:`\n- Cosmovisor inside the container will catch this event and change symlink inside `.cyber/cosmovisor/` folder\n- node will start and as soon as 66%+ of voting power is online, blocks will resume\n\n## Crisis protocol \n\nThe process of upgrading should go pretty smoothly and should not require any direct action, but in case something goes wrong, cyber devs may consider certain ways to recover. Simply check your node at the time of the upgrade and consult the [Hall of Fame](https://t.me/fameofcyber) chat for possible coordination. \n"
  },
  {
    "path": "networks/bostrom/deploy_node_from_snapshot.md",
    "content": "# Deploy bostrom node from snapshot\n\n## Download snapshot\nFirst, go to [Cyber Snapshot Robot](https://cyb.ai/network/bostrom/contract/bostrom137p3ll78yrlw3gtfltgwhdkz0qxke4z6mt9qe6)  page\n\nLatest post will show you available snapsot:\n![](https://ipfs.io/ipfs/QmWjcgseTj5GmGSC8z1X6wzD5Eh1wQv1RfBfChmafqcwvm)\n\n\nСlick on the link with the block and you will see two results:\n![](https://ipfs.io/ipfs/QmQvZegg39JnQ5EESgA3t9seCYSAF7nZyDZGRo1iUXLemi)\n\nWe typicaly store only latest snashot, older might be available only in IPFS if someone stored them.\n\nThe first one is a hash of the current snapshot that can be downloaded directly from ipfs (to use this way, you need an ipfs [client](https://docs.ipfs.tech/install/command-line/) installed)\n\n```\nipfs get <insert the hash here> --output bostrom_pruned.tar.gz\n```\nThe second hash contains url that can be downloaded directly:\n\n```\nwget https://<link_from_above>\n```\n\n## Unpack snapshot\n\nSingle thread:\n\n```\ntar -xvzf bostrom_pruned_<snap_block>.tar.gz\n```\n\nMultiple threads (much faster and require pigz installation):\n\n```\napt install pigz  \n```\n```\ntar -I pigz -xf bostrom_pruned_<snap_block>.tar.gz -C ./\n```\n\n## Stop Cyber\n\n```\ndocker stop bostrom\n```\n\n## Remove old data from home directory\n\n**Dont forget to use correct path if your node is not in $HOME of your user.**\n\n```\nrm -rf ~/.cyber/data ~/.cyber/wasm\n```\n\n## Move unpacked folders into home directory\n\n```\ncd bostrom_pruned_<snap_block>  \n```\n```\nmv data/ ~/.cyber/  \n```\n```\nmv wasm/ ~/.cyber/\n```\n\n## Set up your pruning strategy to everything\n\nTo save the space ont the disk consumed by the node set pruning to everything (lightest one) and set snapshot-interval to 0 in `.cyber/config/app.toml`:\n\n```\npruning = \"everything\"  \n```\n```\nsnapshot-interval = 0\n```\n\n## Start Cyber container and check logs\n\n```\ndocker start bostrom  \n```\n```\ndocker logs bostrom -f --tail 10\n```\nYou will see node started sync from the snapshot block.\n\n## When done dont forget to remove folder and archive to save some space\n\n```\nrm -rf bostrom_pruned_<snap_block> bostrom_pruned_<snap_block>.tar.gz\n```\n"
  },
  {
    "path": "networks/bostrom/genesis-validator.md",
    "content": "# Setting up cyber Genesis Validator\n\nThis guide will provide detailed instructions on how to submit gentx for the bostrom chain!\n\nThe primary point of communication for the whole gentx and lauch ceremonies will be our [Cyber Hall of Fame](https://t.me/fameofcyber) telegram chat.\n\nSome important notices about joining the genesis validator set: \n\n1. **GenTx must be submited by 0:00 UTC 1st November**\n2. We recommend only highly experienced validators who have run on past Cosmos SDK chains and have participated in a genesis ceremony before become genesis validators on Cyber.\n3. Being a Genesis validator for a Supercomputer is an honor, so we expect all participants to treat this opportunity accordingly. We want our validators to be pro-active, maintain good uptime, communicate and act professionally during chain upgrades, and respectfully participate in governance.\n4. To become a Genesis validator, you must have boot tokens on your account in Genesis. That might've happened if you participated in one of our previous testnets or Game of Links, or some other kind of incentivized activity. \n\n\n## Hardware setup\n\nRecommended hardware setup stays the same as it was for the last Bostrom-testnets:\n\n```js\nCPU: 6 cores\nRAM: 32 GB\nSSD: 1 TB\nConnection: 50+Mbps, Stable and low-latency connection\nGPU: Nvidia GeForce (or Tesla/Titan/Quadro) with CUDA-cores; 4+ Gb of video memory*\nSoftware: Ubuntu 18.04 LTS / 20.04 LTS\n```\n\nThe blockchain is always growing. Therefore, in the future, hardware requirements might increase.\nAlso, the specs above are not mandatory and may differ, but it always implies that the node might be powerful and reliable.\n\n## Instructions\n\nAll instructions provided are for the Ubuntu 20.04 system and may vary for other versions\\OS.\n\n### Install GO 1.17+\n\nCyber is written in `go`, and we'll need the version 1.17+ to compile it. \n\nCheck which version you currently have with \n\n```bash\ngo version\n``` \n\nIf you need to update or install 'go' we'd recommend to use the handy go version manager called [g](https://github.com/stefanmaric/g). To install 'go' with it use: \n\n```bash\ncurl -sSL https://git.io/g-install | sh -s\nsource ~/.bashrc\n```\n\nAgree to install latest version, or manually install specific version: \n\n```bash\ng install 1.17.2\ng set 1.17.2\ngo version\n```\nYou might see something like that: \n\n```bash\ngo version go1.17.2 linux/amd64\n```\n\n### Install cyber \n\nDownload source files from github: \n\n```bash\ngit clone https://github.com/cybercongress/go-cyber.git\ncd go-cyber\ngit checkout bostrom-dev\n```\n\nThen install `cyber` daemon.  Running the following command will install the executable cyber to your GOPATH: \n\n```bash\nmake install\n```\n\nVerify your installation by running:\n\n```bash\ncyber version --long\n```\n\nResult must look like this: \n\n```bash\nname: cyber\nserver_name: cyber\nversion: 0.2.0-rc2\ncommit: .......\nbuild_tags: netgo ledger,\ngo: go version go1.17.2 linux/amd64\nbuild_deps:\n- filippo.io/edwards25519@v1.0.0-beta.2\n- github.com/99designs/keyring@v1.1.6\n...\n- gopkg.in/yaml.v3@v3.0.0-20210107192922-496545a6307b\n- nhooyr.io/websocket@v1.8.6\ncosmos_sdk_version: v0.44.2\n```\n\nIf your `cyber` version does not match - please verify that you dont have any other daemons laying somewhere else in `/usr/local/bin`.\n\n### Initialize your node\n\nBefore you proceed verify that you don't have any old\\test nodes initialized in that machine, check and remove folders inside `~/.cyber/`. If you have the testnet node running, stop it and remove `~/.cyber/` folder (do not forget to backup your seeds before you remove anything):\n\n```bash\nls -la ~/\nrm -rf .cyber/\n```\n\nThen run the following to init fresh one(replace <your_node_moniker> with something, for example `web2_destroyer`): \n\n```bash\ncyber init <your_node_moniker>\n```\n\nThis will create a new `.cyber` folder in your HOME directory.\n\n### Download Pregenesis File\n\nYou can now download the \"pregenesis\" file for the chain.  This is a genesis file with the chain-id and all balances.\n\n```sh\ncd $HOME/.cyber/config/\nwget -O $HOME/.cyber/config/genesis.json  https://gateway.ipfs.cybernode.ai/ipfs/QmQAd2SBwypsz5ZqkYgeSTFLq3peGV9xGE3i1gW5oPjcYT\n```\n\n### Import Validator Key\n\nTo create a gentx, you will need the private key to an address that has some tokens in Genesis.\n\nThere are a couple options for how to import a key into `cyber`.\n\nYou can import such a key into via a mnemonic or add one from the Ledger.\n\n```bash\ncyber keys add <your_key_name> --recover\n```\n\nYou could use your **ledger** device with the Cosmos app installed on it to sign transactions. Add address from Ledger:\n\n```bash\ncyber keys add <your_key_name> --ledger\n```\n\n**<your_key_name>** is any name you pick to represent this key pair.\nYou have to refer to that name later when you use cli to sign transactions.\n\n*Note* \n\nIf you got an error saying \n\n```js\nError: No such interface “org.freedesktop.DBus.Properties” on object at path /\n```\n during key import, please use file keyring with all cli key commands:\n\n ```bash\n cyber keys add <your_key_name> --recover --keyring-backend file\n ```\n\n### Create GenTx\n\nNow that you have your key imported you are able to use it to create your gentx.\n\nTo create the Genesis transaction, you will have to choose the following parameters for your validator:\n\n- moniker\n- commission-rate\n- commission-max-rate\n- commission-max-change-rate\n- min-self-delegation (must be >10000boot)\n- website (optional)\n- details (optional)\n- identity (keybase key hash, this is used to get validator logos in block explorers. optional)\n- pubkey (will be pulled automatically)\n\nNote that your gentx will be rejected if you use an amount greater than what you have on you balance in Genesis.\n\nAn example Genesis command would look like this:\n\n```bash\ncyber gentx <your_key_name> 10000000000boot \\\\\n  --min-self-delegation \"1000000000\" \\\n  --pubkey=$(cyber tendermint show-validator) \\\n  --moniker=<your_validator_nickname> \\\n  --commission-rate=\"0.05\" \\\n  --commission-max-rate=\"0.10\" \\\n  --commission-max-change-rate=\"0.01\" \\\n  --chain-id=bostrom \n```\n\n*add `--keyring-backend file` if you used it during key import.*\n\n\nOutput will look similar to this:\n\n```sh\nGenesis transaction written to \"/root/.cyber/config/gentx/gentx-445e04520cef1116faab9900e2edadcb8164477c.json\"\n```\nFile content must look similar to this [sample-gentx](https://github.com/cybercongress/networks/blob/main/bostrom/gentxs/gentx-SAMPLE.json)\n\n### Submit Your GenTx\n\nTo submit your GenTx for inclusion in the chain, please upload it to the [github.com/cybercongress/networks](https://github.com/cybercongress/networks/tree/main/bostrom) repo by `0:00 UTC 1st November`.\n\nTo upload the your Genesis file, please follow these steps:\n\n1. Rename the gentx file located in your `$HOME/.cyber/config/gentx/` to gentx-{your-moniker}.json (please do not have any spaces or special characters in the file name)\n2. Fork this repo by going to https://github.com/cybercongress/networks, clicking on fork, and choose your account (if multiple).\n3. Clone your copy of the fork to your local machine\n```sh\ngit clone https://github.com/<your_github_username>/networks\n```\n4. Copy the gentx to the networks repo (ensure that it is in the correct folder)\n\n```sh\ncp ~/.cyber/config/gentx/gentx-<your-moniker>.json networks/bostrom/gentxs/\n```\n\n5. Commit and push to your repo.\n \n```sh\ncd networks\ngit add bostrom/gentxs/*\ngit commit -m \"<your validator moniker> gentx\"\ngit push origin master\n```\n\n6. Create a pull request from your fork to master on this repo.\n7. Let us know in [Cyber Hall of Fame](https://t.me/fameofcyber) when you've completed this process!\n8. Stay tuned, further steps will be provided soon! \n\n### Back-up validator keys (!)\n\nYour identity as validator consists of two things: \n\n- your account (to sign transactions)\n- your validator private key (to sign stuff on the chain consensus layer)\n\nPlease back up `$HOME/.cyber/config/priv_validator_key.json` along with your seed phrase. In case of occasional folder loss you would be able to restore you validator.\n\nThose things should not be changed, otherwise, your validator won't start on Genesis. \n\n\n## Prepare node for chain start\n\nOk, so here is it, the final genesis for the bostrom network - [QmYubyVNfghD4xCrTFj26zBwrF9s5GJhi1TmxvrwmJCipr](https://gateway.ipfs.cybernode.ai/ipfs/QmYubyVNfghD4xCrTFj26zBwrF9s5GJhi1TmxvrwmJCipr). We have 33 valid genesis transactions submitted! Now only a few steps left to finalize the validator node setup for bostrom launch:\n\n- Clear out old containers\n- Download final genesis, and place it to working directory `$HOME/.cyber`\n- Pull and deploy new Docker container\n- Configure persistent peers, seeds, and some other stuff from `config.toml`\n- Verify the correctness of the keys and files on the node\n\n\n### Cleaning up\n\nIf you somehow still have old containers like `bostrom-testnet-6` or `bostrom-testnet-7` sitting on your node - it is a good time to remove them now.\n\nCheck which docker containers you have:\n\n```bash\ndocker ps -a\n```\n\nAnd stop\\delete all unnecessary:\n\n```bash\ndocker stop old-container-name\ndocker rm old-container-name\n```\n\nCheck and remove older images to save some space\n\n```bash\ndocker images\ndocker rmi image_name\n```\n\nIf you have older nodes on your server, **please remove the `cosmovisor`**\n directory from .cyber, so it will be updated with the latest version of binaries during docker startup:\n\n ```bash\n rm -rf  $HOME/.cyber/cosmovisor/\n ```\n\n\n### Obtain signed genesis file\n\nHereby we mean that you already have your cyber node initialized in $HOME directory.\n\nRemove pre-genesis from .cyber:\n\n```bash\nrm $HOME/.cyber/config/genesis.json\n```\n\nDownload genesis file for bostrom:\n\n```bash\nwget -O $HOME/.cyber/config/genesis.json https://gateway.ipfs.cybernode.ai/ipfs/QmYubyVNfghD4xCrTFj26zBwrF9s5GJhi1TmxvrwmJCipr\n```\n\nAlso, it is **required** to remove old chain data and reset the home directory to state of signed genesis:\n\n```bash\ncyber unsafe-reset-all --home $HOME/.cyber/\n```\n\n### Deploy docker container\n\nTo pull and deploy docker container for the `bostrom` chain use the following command:\n\n```bash\ndocker run -d --gpus all --name=bostrom --restart always -p 26656:26656 -p 26657:26657 -p 1317:1317 -e ALLOW_SEARCH=false -v $HOME/.cyber:/root/.cyber  cyberd/cyber:bostrom-1\n```\n\n\n### Setup config.toml\n\nAdd correct seeds and persistent peers nodes. You may find some [here](https://github.com/cybercongress/networks/blob/main/bostrom/peers.md)\nInsert them into lines 185 and 188 of $HOME/.cyber/config/config.toml:\n\n```bash\nnano $HOME/.cyber/config/config.toml\n```\n\n```bash\n# Comma separated list of seed nodes to connect to\nseeds = \"\"\n\n# Comma separated list of nodes to keep persistent connections to\npersistent_peers = \"\"\n```\n\nFor better network stability please update your `.cyber/config/config.toml` lines as follows: \n\n```\naddr_book_strict = false\n\nmax_num_inbound_peers = 60\n\nmax_num_outbound_peers = 30\n\npersistent_peers_max_dial_period = \"500s\"\n\n```\n\n### Verify validator keys\n\nVerify that your `priv_validator_key.json` from $HOME/.cyber/config/ directory matches the one you used to create gentx.\n\nCheck that `pub key value` section is similar to the one corresponding your validator name below:\n\n```bash\ncat $HOME/.cyber/config/priv_validator_key.json\n```\n```bash\nsta                 FVs7R89ToDtCaYNZHrRF8MWCQ4d3uxytQSMg4OMleW8=\nblue                110HUJd7XFqWhXbE/nF1D4pFcM/vQ8D9yOJbyQF6gsc=\nNode_masters        hkaRWuE3BNBVmeqv70qJ++iyYs7THerZyOhNa7E2gVM=\nCitizen Cosmos      hzZZ1s5Q2R0Qhbax0Hf7xS9m+kMxbc6FVUihIIoa35c=\n0base.vc            9EtOO5q/eUiQ1VtdFegl46fyhJ2tkzm2TDLkdm+zRm0=\nSpace               0O20CW17q7chWZGHayK+SlEzCXfJaqTlshkE1xujQCg=\nCitadel.one         96vbjWw9jbyO8Krl9Rjbt8SU9tVuBiPhtVAxx28arcU=\nDeveloper           KdT8GK9d81xvkDzuNjM3nwi3mijxRfq2YWnM++SAIw4=\nqwertys318          r3NIqDgCKwxfTIdvsUYruUSv+ExKI/dyL9UxRt3uuHQ=\nweb34ever           Kry59s/u3vENIsWu+4ssFqsnECWTxA8iOFSXPbIQmsU=\nPOSTHUMAN           lWEU7pJSRroGTFMa5O6JKRC1JnGsupKTC88i3uAtxu0=\npapsan              YV4dJbW6TrErmwcs0VxFiAJUio+6Yh5shQ+hwlMveN8=\nP2P.ORG             4KsAoQUaZNVyA0Tc02Gw3GYxkuMdgtf+aXTOqKDNbgE=\nNett                ChguMkmpTQCnekerrNnAnyFePLY3C1jacudM3SYOrdg=\nGodzilla            BncD9wiS2MKpBJw1t9PLoIeqQ9pTccPoGBx9cRNoZak=\nKerman              0nAyxxNGDv3s2miDdJWibOEoWVre8jadmJiA7BSEugk=\ncyberG              uMw2XjXqICe1CvEbYCwN3GEXm5r1CBhc0TacHucheyw=\nAdorid              AK7c305pBQkAz05OE8rw5JkwSx+nhcvna6Tz9RXhE+Q=\nDemonKing           XXul+cFAn6BK4S/aZlMABb9h+jsqFi7/GgZ01JTfhnE=\nDragonBall          SmngMSNxQ7TnildgcI5OzZYJxWbwAH2C0UJj3M+J+Fw=\nStakeAngle          qOE+qVo9giTu6cypXg6zN3ZT9MitNBHfTYfLL2ADVGo=\nspectrum            ZxG1y2GSwb/HuBi8BFZLoYYUMyuvboplTa1DDuMGnG0=\nkiwi                823dliApVbj5vUsXFYViaOB6hI8/P7ul0zmZpHmW+80=\nPLap                2VHfckjdelAwGj8b3gw+kq7U0ni9aB9S3rNQx054iVU=\ndobry               ZxYmxQPGdPYaBJA8IY4Jg3h/Cs0wVRmPIippypxPrsU=\ngoto5k              TVfJZnq2vaHv1XI49n7nPn1wVQxurVL3JDVVUUo/Ijo=\nalinode             JKHQ2Gg/+wWDMcvLwHoEHFccRVZYuGCBSTD/fnIi2vg=\nHailbiafra          triXPhJGBlAduyzF6oF0PKHM9H2sXz9+TWY5gb9lkNI=\ncsaxial             lB5R6K7wY2G4a3Aus+NWAwYiFga5Cc2WxvwZG3Ga3yk=\nNodeMarsel          fIbK0sEsisgCoXnWmrfApLX7SdvuhltzU1llq+jiV8k=\nMindPool            RPBRQHcurf6ZOoar9DWoncHbcEGmaceT0zdalDYsobo=\nBro_n_Bro           SEiFL2BSD9TOUsPIaBKx5xZU+ijry95DdZ44u9mwd3Y=\nbloqhub             aIG2z/l2N3K6WslUGA8u5kZnqcvqyKEXQpoiiICLKa4=\n```\n\n## Launch\n\nWhen all above are checked and completed please go ahead and restart the container:\n\n```bash\ndocker restart bostrom\n```\n\nCheck the logs. \n\n```bash\ndocker logs bostrom\n```\n\nThey have to contain the following:\n\n```bash\n1:42AM INF Starting Node service impl=Node\n1:42AM INF Genesis time is in the future. Sleeping until then... genTime=2021-11-05T13:22:42Z\n```\n\nIf you got that message - congrats, you set everything up!\n\nThe chain will start at `5th November 13:22UTC`. Please track [Cyber Hall of Fame](https://t.me/fameofcyber) telegram chat, all coordination will be done there. \nAlso, watch the bostrom genesis at `https://cyb.ai/genesis`, you can find something beautiful and interesting there! \nSee you in the Cyber Era! \n"
  },
  {
    "path": "networks/bostrom/genesis.json",
    "content": "{\n  \"genesis_time\": \"2021-11-05T13:22:42Z\",\n  \"chain_id\": \"bostrom\",\n  \"initial_height\": \"1\",\n  \"consensus_params\": {\n    \"block\": {\n      \"max_bytes\": \"4194304\",\n      \"max_gas\": \"25000000\",\n      \"time_iota_ms\": \"1000\"\n    },\n    \"evidence\": {\n      \"max_age_num_blocks\": \"100000\",\n      \"max_age_duration\": \"172800000000000\",\n      \"max_bytes\": \"1048576\"\n    },\n    \"validator\": {\n      \"pub_key_types\": [\n        \"ed25519\"\n      ]\n    },\n    \"version\": {}\n  },\n  \"app_hash\": \"\",\n  \"app_state\": {\n    \"auth\": {\n      \"params\": {\n        \"max_memo_characters\": \"1024\",\n        \"tx_sig_limit\": \"7\",\n        \"tx_size_cost_per_byte\": \"20\",\n        \"sig_verify_cost_ed25519\": \"590\",\n        \"sig_verify_cost_secp256k1\": \"1000\"\n      },\n      \"accounts\": [\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"0\",\n          \"address\": \"bostrom1xszmhkfjs3s00z2nvtn7evqxw3dtus6yr8e4pw\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"1\",\n          \"address\": \"bostrom16230lc9r27vrxlzd4wlvcz2l66quzj84vlkxc5\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"2\",\n          \"address\": \"bostrom1gxhs5wzam5rlgf6cs0lkme400ut64d4ncpfs2h\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"3\",\n          \"address\": \"bostrom1qs9w7ry45axfxjgxa4jmuhjthzfvj78sxh5p6e\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"4\",\n          \"address\": \"bostrom1ha4pw9w2qgc2ce9jwfrwrmaft5fneus58nqwev\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"5\",\n          \"address\": \"bostrom1qn8sr2hzmktlecusdtxj9hwj0upnm0jft9snar\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"6\",\n          \"address\": \"bostrom1d8754xqa9245pctlfcyv8eah468neqzn3a0y0t\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"7\",\n          \"address\": \"bostrom1ttd4h585vgy29gj0xe0p338drvw9w4m4hzwj9p\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"8\",\n          \"address\": \"bostrom1ngd5w7j4u5ar5xh7vzuwqqznnhhcjmnz0s6kpu\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"9\",\n          \"address\": \"bostrom10c8znaj94y900syues06dz50hw6y9qpkhunn25\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.ModuleAccount\",\n          \"base_account\": {\n            \"account_number\": \"10\",\n            \"address\": \"bostrom1jv65s3grqf6v6jl3dp4t6c9t9rk99cd8yvs0hc\",\n            \"pub_key\": null,\n            \"sequence\": \"0\"\n          },\n          \"name\": \"distribution\",\n          \"permissions\": []\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"11\",\n          \"address\": \"bostrom1pntx8ql2v7cqxu05etg8c4v0r2vz7qnq9uqmpy\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"12\",\n          \"address\": \"bostrom17a7xxqa4drnalvv7pkxrkxqer953fdke3ulwx4\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"13\",\n          \"address\": \"bostrom1s4czxghmh29aw2ldynk8r9lnkfccw5ph8rjpxa\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"14\",\n          \"address\": \"bostrom1s4wntr9selfaznc2ezjkwnwt2y0terx9tqpda3\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"15\",\n          \"address\": \"bostrom1qwzsnnuk2u6avvh059c9p50gqqquvcu5svvwrs\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"16\",\n          \"address\": \"bostrom1g07gj9ph0r2hjx6ffqn8vl38u4agd5mpqx9m7f\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"17\",\n          \"address\": \"bostrom10e3rqclgjz4m4fnx2c23jupcjpyuvyx3x4k7qj\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"18\",\n          \"address\": \"bostrom1t3222ju7ssu58xsm3m2xw445p94cqn2qrex3vy\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"19\",\n          \"address\": \"bostrom1edlrze5f48jjaw0wxcve4asqqf2tcjdl59ln8q\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"20\",\n          \"address\": \"bostrom1m8yf3g2m9p7danjvt4ga6vzewy380pk52kcu9z\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"21\",\n          \"address\": \"bostrom1fe5mspz9jsq6p9hqqet86dwp276635l6gacspa\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"22\",\n          \"address\": \"bostrom14nzyt8wmx4g6zkeluelukamgsh5v4xgnc25k6j\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"23\",\n          \"address\": \"bostrom1mcslqq8ghtuf6xu987qtk64shy6rd86a2xtwu8\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"24\",\n          \"address\": \"bostrom1sng0f47cuvx6edxaujh24wc3dvk94q0w6r6smh\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"25\",\n          \"address\": \"bostrom194pp2whvqynxnfyw5tqy8fzy2kxsugyrwsaynk\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"26\",\n          \"address\": \"bostrom14d92r4svhl4qa3g6q48tjekarw2kt67ngqn4lr\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"27\",\n          \"address\": \"bostrom1hmkqhy8ygl6tnl5g8tc503rwrmmrkjcq3lduwj\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"28\",\n          \"address\": \"bostrom12psudf4rpaw4jwhuyx3y8sejhsynae7gv53hn6\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"29\",\n          \"address\": \"bostrom178q202gz0093uke0jy96psyya452rt8apl4has\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"30\",\n          \"address\": \"bostrom1kr6udadsvdjymq6m75un4khg27t25st2jn8sag\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"31\",\n          \"address\": \"bostrom1ymprf45c44rp9k0g2r84w2tjhsq7kalv98rgpt\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"32\",\n          \"address\": \"bostrom1w8ap0ns4d5fagjfwvph6t99uet0cwv6y6r03un\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"33\",\n          \"address\": \"bostrom1svm5wl5jf4p7dwemj7wh0p4egr3js6rqtlnefu\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"34\",\n          \"address\": \"bostrom1gnnd2eaeqpp6lsd34tnp6j0m85h6r9qg0wh3vr\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"35\",\n          \"address\": \"bostrom1t0hmc79ht0qja92p6qgxn3ee3a3rzqutv7thqn\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"36\",\n          \"address\": \"bostrom12q68xfj4r00nxnjrqk742rf0z2w6jmwaeppvr0\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"37\",\n          \"address\": \"bostrom1ggc9sqvj0uhnzwxu5dyzcr05shwd2vv2guqmas\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"38\",\n          \"address\": \"bostrom177y7sqkxmvl22j632haf8y9gv0j3wedssq5m50\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"39\",\n          \"address\": \"bostrom1zhy7l8phhpsm2c6xl9c5arcu0z90clynluwrw5\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"40\",\n          \"address\": \"bostrom1k60sfzh3ecyqfv36f7zav0089077e4zk4g6mxa\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"41\",\n          \"address\": \"bostrom1kpep8dl93ud4wgpws3tcew6as2s36c9v3csw89\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"42\",\n          \"address\": \"bostrom16lvsv3w7rnhcm079v6j9eah3xd0p3pd37hl48j\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"43\",\n          \"address\": \"bostrom1mnrwpdlnglhtqwa55fa66va0j3fv72nvkz4e2x\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"44\",\n          \"address\": \"bostrom1dt9lwmuq8rkngm5gajxchqhpcnavgp7md9v929\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"45\",\n          \"address\": \"bostrom12xsg4qm4k5z48s79zdsz84jlhv56kmta3vyfvl\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"46\",\n          \"address\": \"bostrom1dxpm2ne0jflzr2hy9j5has6u2dvfv68calunqy\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"47\",\n          \"address\": \"bostrom1my32szlwazg9x56xqvsvtp0hqvpzm0r4u3k4ae\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"48\",\n          \"address\": \"bostrom1g0ap9fvex93yzzj69uzl74942vjvq8e4f8xtyr\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"49\",\n          \"address\": \"bostrom16zms8r32vad3z8hl2vc6wrcnanwmxf0dgh25yp\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"50\",\n          \"address\": \"bostrom1d3zlsrjyl3tzp3aly7vjduhrtrtvkvkeaqpdku\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"51\",\n          \"address\": \"bostrom18jwk949jqgq3j2du2dgscqxqkkqw5rsjfuucf3\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"52\",\n          \"address\": \"bostrom13fwhvawke6867s6raqux25fd24t89j5h8wf2v0\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"53\",\n          \"address\": \"bostrom18z9vsjffvggluxcxfqwsmrz02v37hx2e3auyn2\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"54\",\n          \"address\": \"bostrom1lnkg57t7mvg5mcl7kdkevtgr9wlf6f9qtp86sk\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"55\",\n          \"address\": \"bostrom1dl5df5g2xwj02e93k547etw2ergvc3a20v5ekz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"56\",\n          \"address\": \"bostrom13ume6mqte5h9ngx2hh6ngc8aham7x0k6stuvkm\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"57\",\n          \"address\": \"bostrom1ldjugf3uj2gwkmmsf5japfknf96zv6hw7xw7v4\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"58\",\n          \"address\": \"bostrom1y9zkl7uqjev899swng4eqfuurwaxpchwppewyc\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"59\",\n          \"address\": \"bostrom16lf2hvzy4n4gvtx37pgkkdw2e2psfjjdpej53p\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"60\",\n          \"address\": \"bostrom15zs0cjct43xs4z4sesxcrynar5mxm82f0ykhl3\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"61\",\n          \"address\": \"bostrom1v5jqg6k7mszmchhz8kyfml5h4e2txct9jz3am4\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"62\",\n          \"address\": \"bostrom19ys53t55r725j882gjcrnf7s449gdrds3h2hu4\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"63\",\n          \"address\": \"bostrom1en69twaxmv7xupy8lq7y539dpecx7yz8g0k8ft\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"64\",\n          \"address\": \"bostrom1kgq82m6z2jttytv7fvwy2rklhq5k03gc2h9sej\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"65\",\n          \"address\": \"bostrom1hvk6s053m6qdlz9kwllgldwf4qp2c3mrlh9s2q\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"66\",\n          \"address\": \"bostrom1ch6nukdgj55c9sk4h5t8spzhahuuvn86gqvarm\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"67\",\n          \"address\": \"bostrom1rqudjcrdwqedffxufmqgsleuguhm7pkaq0alce\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"68\",\n          \"address\": \"bostrom1qgqkc9t3pfsp6yxjwds70e4r9y0p6resmfnymc\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"69\",\n          \"address\": \"bostrom12kd8w45rqxuwpwqvpmdyvvdey9ezeqhav4nn85\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"70\",\n          \"address\": \"bostrom152kqs8p7d3jy6kn4uk87ve3alkuqjgewt3cmvz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"71\",\n          \"address\": \"bostrom1dn09uyhwmv3ratntc7c603vczgrec32c2fylpj\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"72\",\n          \"address\": \"bostrom1qezgmksavgdvcvf9ckhazfy3jfw8whhzfrvtlz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"73\",\n          \"address\": \"bostrom1d552nfgekkugdgxw3zl242qpxapl67jfkz76tp\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"74\",\n          \"address\": \"bostrom10vpygn9ftv85ra7j7qpewuq5jdgvpjmehlds0g\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"75\",\n          \"address\": \"bostrom18naxcfp2s397a2ucav2m53f003uylk3qz9fvr7\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"76\",\n          \"address\": \"bostrom18t3kx877vyvstcvn50cgn5w6hppe8ce0pq72m2\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"77\",\n          \"address\": \"bostrom1kfqv2fzzu6dgwnf6snql2jslwdws07fl2gz37u\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"78\",\n          \"address\": \"bostrom1ggayl03vvv763az6eez66jzwuunyqkcusk8fwj\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"79\",\n          \"address\": \"bostrom1fjeq0urgk4x0s6pl2p2fes8c95426amp7lv4dv\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"80\",\n          \"address\": \"bostrom1jgh7ghrcr47tuahawzvg3svv2hxkxfx5u9lzr2\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"81\",\n          \"address\": \"bostrom19y467lyhqlpa52y6snq9cxw47xhwq0th3p05r0\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"82\",\n          \"address\": \"bostrom16ge9uqpqf78jdt0uz58ycalhtg59w77qm9t7d2\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"83\",\n          \"address\": \"bostrom1463la66ac89tmlwgvx20c4d2jv84ekzs8kzh87\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"84\",\n          \"address\": \"bostrom164k2s2s2td6a30d3rvnv93scy3v29psw4j3ndm\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"85\",\n          \"address\": \"bostrom1rya5547x4lrwc2npd63s89ny2dvhamv9dfx9x9\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"86\",\n          \"address\": \"bostrom18wn5kyxewwk6qh97493xtj9gufpmqserfahc37\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"87\",\n          \"address\": \"bostrom1lljcf37yxh24l3v4kwqsyghwz4ywlg6urg4kte\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"88\",\n          \"address\": \"bostrom1d7n8znqg635yxnzlsycnt6kut8z5du5yftutrf\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"89\",\n          \"address\": \"bostrom16pdckvu70ufzvm8avd9anga6k35nu7axym02wp\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"90\",\n          \"address\": \"bostrom18txzlmkqf264a2awhey6lmeq0dtv5ex69d2fcy\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"91\",\n          \"address\": \"bostrom1mmtt0cnsgwx3t90vs4tn9k08kw8xn4v3pggfu7\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"92\",\n          \"address\": \"bostrom1mryr27k3h8kqr5ahj82v0ym2xexdewfc9rmng8\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"93\",\n          \"address\": \"bostrom1gg73t0eyrkqf953waqxh6uqah62p46jyg82ulr\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"94\",\n          \"address\": \"bostrom1jx0az02ccnt4mgj2r9vhvycsdjsztrrgdkwzr3\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"95\",\n          \"address\": \"bostrom1r90j4656xsug2hkj57a3knqcs9huh3ea88ykhp\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"96\",\n          \"address\": \"bostrom1f7nx65pmayfenpfwzwaamwas4ygmvalq2q2ayq\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"97\",\n          \"address\": \"bostrom1zl0t5703q42qx7drxsgl9thjwlul5x6unjhwgn\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"98\",\n          \"address\": \"bostrom13q0m4hw6pmajqdqn4g464vzmst78sf55ktrp05\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"99\",\n          \"address\": \"bostrom1cjyv02cja896rr5y5lks79enk2nretn3mqyc69\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"100\",\n          \"address\": \"bostrom16qu2ymnzzjn05xc6yszjy50caaahcahdvmex5e\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"101\",\n          \"address\": \"bostrom1jst67u54vquzvun3dawpmpwyx5ar8mayaak5j7\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"102\",\n          \"address\": \"bostrom16s7gwc944patdynnfnvac0jh5u76wsnflty377\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"103\",\n          \"address\": \"bostrom1s3lgc3mgy4ltwr796qk6j73xmau4njueds0mgu\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"104\",\n          \"address\": \"bostrom10556xtnp39nvx3ec3yjafug662pyt6af84n477\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"105\",\n          \"address\": \"bostrom1ffve0zx389ffl80ae9t8jmghcjuzdlqr5eayfd\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"106\",\n          \"address\": \"bostrom1ftah3e558ww7xutn5w8h7vrqa9v69pntztnr3p\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"107\",\n          \"address\": \"bostrom1wnpak7sfawsfv9c8vqe7naxfa4g99lv77d7c0z\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"108\",\n          \"address\": \"bostrom1sgy27lctdrc5egpvc8f02rgzml6hmmvh5wu6xk\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"109\",\n          \"address\": \"bostrom1cg79pj70mgl8xlum0rw5yy6enk9jszsrzvwysn\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"110\",\n          \"address\": \"bostrom13dpy00jest96g7h5vdgvg9zpxq6xnclh5hzw5l\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"111\",\n          \"address\": \"bostrom1mdq5r6az6z8su68zj6px88j2ukr78ea4ggkzt6\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"112\",\n          \"address\": \"bostrom1lepnu7nt05g79jtmfp2pgrpys3fjc4p74sc0l2\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"113\",\n          \"address\": \"bostrom1d5lu67hu3lhqtw6zyv7uy4gkfpdtfnzxdu6mrq\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"114\",\n          \"address\": \"bostrom16jttzjgks48kqrhk5e68yv0gv6dt0rpw2f5pwn\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"115\",\n          \"address\": \"bostrom1e20hw2pqcgxvumkwn2qeeavcrswzskzjhr2aq0\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"116\",\n          \"address\": \"bostrom17z2fywzrdld7qmwzpsq0atxfwcns8rp833rgxy\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"117\",\n          \"address\": \"bostrom1tu0e0ggvjtv4gvzcranjnrykac0umnf8y8fm0r\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"118\",\n          \"address\": \"bostrom1sltcfypwms38jjj3g38rg7ldx3e6uqrzrnkf9y\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"119\",\n          \"address\": \"bostrom1zy553za8nenzukmv65240323jhuvxzym4pl6w9\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"120\",\n          \"address\": \"bostrom1lpfs6xv765u4yxr8rlyn5ux0g2a8tyt90hsnas\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"121\",\n          \"address\": \"bostrom1smqr5tp684g07aekcn0w852wqlme5mn6dmsny3\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"122\",\n          \"address\": \"bostrom1eqkdzfcjnu20ywju35rf3nutxzjxjaqnxqfyyz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"123\",\n          \"address\": \"bostrom1waac73cpffx7suhpkvnn8w0a8s2cgzn66x2aka\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"124\",\n          \"address\": \"bostrom16macu2qtc0jmqc7txvf0wkz84cycsx728ah0xc\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"125\",\n          \"address\": \"bostrom1fapqgamx3c8za8d3z56sydjtjygyu0ly752j8g\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"126\",\n          \"address\": \"bostrom1w4548vrnvc7t9j2ly55nvkjvhwqt9thnfcvuw6\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"127\",\n          \"address\": \"bostrom133t8m00w7llsslnf05zdhehharntly8dqzpfs8\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"128\",\n          \"address\": \"bostrom1smtmk8fe3qhlwj3h7nynl6p42946qydzvgj9va\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"129\",\n          \"address\": \"bostrom1csf3up94qheqz88fvvlwjl7vc5sdymarktrvpw\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"130\",\n          \"address\": \"bostrom1tr3eyy9l480pxjk0ygudwpfus7j8pgdljn09jm\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"131\",\n          \"address\": \"bostrom16ahkkv0jzhtp73z83qlhqrypss6jpjm8eekpwv\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"132\",\n          \"address\": \"bostrom1htq7u8gy9muv4fk6st04524tdzy8rv04528gys\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"133\",\n          \"address\": \"bostrom1kk9clwd4eva7ww95gn4rw3xzuwfs0983sl5cwt\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"134\",\n          \"address\": \"bostrom1k7cl9ya9qq30c7m4rvg3823hrc8k80eetqvhj8\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"135\",\n          \"address\": \"bostrom16d69u47km5vqdvf6fr8qyhktlacgka7fdvazr8\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"136\",\n          \"address\": \"bostrom1njsr8tngxtygsc73mrtn5738ztkzqy7c7y7h3t\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"137\",\n          \"address\": \"bostrom1kf0d64nuwsf2zeul5wkx78fsznplnlpsfh7fqw\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"138\",\n          \"address\": \"bostrom18ghjkwygsvjcsh20tc5zzhfttxxuex7a9lq8ps\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"139\",\n          \"address\": \"bostrom1s2a7rckcky6jmhncxwy0xtwf2ymg87puk6jpzz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"140\",\n          \"address\": \"bostrom1679yrs8dmska7wcsawgy2m25kwucm3z0hwr74y\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"141\",\n          \"address\": \"bostrom15gk8edxtvvp372flljk884fav55y8ehwru4u8w\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"142\",\n          \"address\": \"bostrom1jz57cgfr248y9w6sn76l7pugjkr6e7zh6y2grp\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"143\",\n          \"address\": \"bostrom1gw5kdey7fs9wdh05w66s0h4s24tjdvtc9v6vpe\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"144\",\n          \"address\": \"bostrom1kajt7sxfpnfujm7ptj90654lmwz4sftpc9mp9a\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"145\",\n          \"address\": \"bostrom1t575qeee3qgshuf964qal057z77vljqef9tlck\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"146\",\n          \"address\": \"bostrom105zy26ze9gean4qukqlvhkv4mtcndc9t2xaydz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"147\",\n          \"address\": \"bostrom1a30w6j4m6g3s2c6zt02z56xynnuaqmn3ahwxuq\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"148\",\n          \"address\": \"bostrom1pmaltcu0x97x8j5klc8xluaapkzcvztcn2vkmw\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"149\",\n          \"address\": \"bostrom1n3mhyp9fvcmuu8l0q8qvjy07x0rql8q4uwev5z\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"150\",\n          \"address\": \"bostrom1u3ap2d4ytcqrr6jlsjf380g3lvgldq4m64s7dg\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"151\",\n          \"address\": \"bostrom1keny4peq77drtcdj6fscd9eknqcqyjmxqcr8t8\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"152\",\n          \"address\": \"bostrom1kk79xcsuah7ckvunku78094gyh7900ehkllkur\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"153\",\n          \"address\": \"bostrom137eezcxcyqgt6kshfdfuvnsdgwpujyje2l8qdz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"154\",\n          \"address\": \"bostrom1uz39kh64w8p5df034fh6g5hwpdq8m0h5rx58he\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"155\",\n          \"address\": \"bostrom1kz6s2mp4rg7plj8p4qqe2wkegn4ldw3ak2a7qc\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"156\",\n          \"address\": \"bostrom1quchyywzdxp62dq3rwan8fg35v6j58sjwnfpuu\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"157\",\n          \"address\": \"bostrom1x95keq9l9y9p7hjdt6xd8wnknrpnjsqrqhpwc9\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"158\",\n          \"address\": \"bostrom1z98eg2ztdp2glyla62629nrlvczg8s7fvc0znp\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"159\",\n          \"address\": \"bostrom1xvssufw8ke03halg8wgu8m994ktxz0y9vm6tqn\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"160\",\n          \"address\": \"bostrom1vxxfhd8txmrq76jx3gj7sdrvg0vvqret6kxpgd\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"161\",\n          \"address\": \"bostrom1vtu55cc7m6yz9zfg5vqdk80f2g68petgzj9fv4\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"162\",\n          \"address\": \"bostrom16yf94eecl6h44l5w7zp75skh3rg0k4veavx762\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"163\",\n          \"address\": \"bostrom1gxyf6tsjamnavmkfk43mwfzwscn4tgfkz8k85n\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"164\",\n          \"address\": \"bostrom1w4tvyvf3hhpcwv9d4axa8n0mmj5d6ypvpq5mj6\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"165\",\n          \"address\": \"bostrom1xk4a2u2rjt7mqu5eg8xtxk37l28r3cugkqk9lp\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"166\",\n          \"address\": \"bostrom143x4d5wx50204zyreqg8ekgq3n3fcaxucacztp\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"167\",\n          \"address\": \"bostrom1y83nga220nfjt9zz0mmqc90cd705az95n5cfwj\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"168\",\n          \"address\": \"bostrom1hyjhy0tp6geral2g9vj9nyteglf8t5q42gfq3j\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"169\",\n          \"address\": \"bostrom1d8mq46wt2yxsgwrmh6hhfgycl0537w8gggn47f\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"170\",\n          \"address\": \"bostrom1p0r7uxstcw8ehrwuj4kn8qzzs0yypsjwxgd445\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"171\",\n          \"address\": \"bostrom1duc9gthaeg82lx9pdf642g043xqhgxgxmfvwsz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"172\",\n          \"address\": \"bostrom1a4mzr2y2g0cc9f0uhyeh3ftmsfxzqwxfdqtd7c\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"173\",\n          \"address\": \"bostrom1xpl2sx64ra5san4su0r0hj8z9eh5cf5dcv48qa\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"174\",\n          \"address\": \"bostrom1hem3076xmat8ttr0cg0nnn2lghtc2p7xtzpj8s\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"175\",\n          \"address\": \"bostrom1402rpwdquxxkgvl740f6w69l65eau5vkqcvrax\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"176\",\n          \"address\": \"bostrom1z8mlsd42eaguaqf5gexy5a7jxgpwpgvz99qzft\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"177\",\n          \"address\": \"bostrom1v2n3hg6s4resacgpemfyrd5hul2ntk7tftnk6u\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"178\",\n          \"address\": \"bostrom1ufpz4dlnfawg0pr5dcq4hkrf9gs30mu0272p9w\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"179\",\n          \"address\": \"bostrom1mkhugmqg9c0qe27stz3m4my9xq7e9pct0jyr3p\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"180\",\n          \"address\": \"bostrom1argjwgcplguenq4l92ggn06wadnfrz0ecqrmqs\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"181\",\n          \"address\": \"bostrom1ke7kxdn29w2lrxt9dzusa6shvmwd8xm9gxm2zf\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"182\",\n          \"address\": \"bostrom1fpl40sref5vp8kfm7xkqlq5qc0v4xrjvk89kwa\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"183\",\n          \"address\": \"bostrom1g2d9xyuf7ddgaj4llxvg50pfhlsr9ehf2r8dr6\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"184\",\n          \"address\": \"bostrom152m9xcx0ht7yxr5834ju7qjcyvetw8amd04apw\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"185\",\n          \"address\": \"bostrom15n3t80p7eseld809f7fu3s9tlcezlymkfeu59n\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"186\",\n          \"address\": \"bostrom1ke6pp2kq2wx74tlh5fxqgp7af6jtsna3kktuh6\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"187\",\n          \"address\": \"bostrom1daxxqs56f6j5qxxtjrjkexghsmnaj66tejshc8\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"188\",\n          \"address\": \"bostrom1nywu6z26tpcrr2kcqe8z7t235wrfkhfcfhlzmk\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"189\",\n          \"address\": \"bostrom1mnqlcc7mslzxcf798acp80u2fxudsuzdn0px6s\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"190\",\n          \"address\": \"bostrom1ccvpcq9ffy0qd2ca8nmmpzfamtyjfc9znwak8m\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"191\",\n          \"address\": \"bostrom1w4tk9lj8qtx2x4xf4emgrnq950hnlajsxlnl3u\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"192\",\n          \"address\": \"bostrom1s8l0akn79kk74g32kf86stfsa08ck9qmm4v6ws\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"193\",\n          \"address\": \"bostrom10aqelwndkz9k8uawp26elxep64ayc5rgn24h7p\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"194\",\n          \"address\": \"bostrom1ap7zhu5gxlk7n3g97dqehm9nnt3mje3nr5jecs\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"195\",\n          \"address\": \"bostrom1j6he98h8xwnt2yp9eczhhuff3k3hvk98gr27ee\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"196\",\n          \"address\": \"bostrom1mskldfjlnup46adzss7lukfh3emm6z4lmqhk7z\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"197\",\n          \"address\": \"bostrom12ysvrknuwdr6737fnc06v875whfh52xj3ewaf2\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"198\",\n          \"address\": \"bostrom10trdf5eyfcmc9graltx4hmpgznhrm7hdz82k2n\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"199\",\n          \"address\": \"bostrom1nvr4qa7szsd3e7xfysn946gcqv5wyemlcxmxpw\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"200\",\n          \"address\": \"bostrom1wm4026rxqcrkh09k806m6y4lys942etx5cjz9z\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"201\",\n          \"address\": \"bostrom1zeg2k7kd8qadmwd3kslwmag3erq7hqxt5aajjz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"202\",\n          \"address\": \"bostrom16h7tyj5p69t3r7qasunf938cx2elp38fhqc7zr\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"203\",\n          \"address\": \"bostrom1jdmfxzpnqqlhjsju3mz7qsgvvdparw5acx7t62\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"204\",\n          \"address\": \"bostrom1smsn8u0h5tlvt3jazf78nnrv54aspged9h2nl9\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"205\",\n          \"address\": \"bostrom15kl5tv0smz5h8eewu5hs9mtnusz4dereyqxxtw\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"206\",\n          \"address\": \"bostrom1uew6fawa3ahu60tj5kspmr4u0zvljj69q4s3ps\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"207\",\n          \"address\": \"bostrom1ezpth4mp3eeqdt49kgqd5ctr69xev6v2gykpur\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"208\",\n          \"address\": \"bostrom1avvkajdvmj9d8jpl0ga4scftjykeuhjpsa9kf5\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"209\",\n          \"address\": \"bostrom1gd9r9uhd8a5k2naudq4hua3vf3lkwhfrm63qhq\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"210\",\n          \"address\": \"bostrom1vrym7t34gs9t2dkd8z849zcymkj54kgq7pdf8z\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"211\",\n          \"address\": \"bostrom1lk3yjcn0lvwj9f2dj75m8y3smpq5s5zsnnj3nz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"212\",\n          \"address\": \"bostrom1hk49ws6ded79xmwehv7yrw3q6mfj7kulafxqhr\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"213\",\n          \"address\": \"bostrom1vx9qctuxswd6ydcv4z5pcuuvct7y9l0nqq799x\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"214\",\n          \"address\": \"bostrom1ydc5fy9fjdygvgw36u49yj39fr67pd9mv67ety\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"215\",\n          \"address\": \"bostrom1wkjn2nc4v5g3tpjj043wxtmeda90ql3yqqddav\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"216\",\n          \"address\": \"bostrom1gh09lmm8flkuu3w38mr4axvunnu6qqlapuwzrv\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"217\",\n          \"address\": \"bostrom1m0tjgkrh4td9fcp8nnssu3rfdahzfgdshsall9\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"218\",\n          \"address\": \"bostrom1mnfalar08dsvtwutmh43lnhx2zzmq7xhdulemj\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"219\",\n          \"address\": \"bostrom1g36u05ehktgw5h5udj8hyudd9057d9tx9r6zef\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"220\",\n          \"address\": \"bostrom175tm6fucmk0e29cfgzaud6kqgksy25p884kjx0\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"221\",\n          \"address\": \"bostrom1v46pz6ddetfc3tnvdr28ss0l48jhazgynvp3c7\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"222\",\n          \"address\": \"bostrom1stfw0z5nf2ncxxtrk7zndpf2dla3nh379egwcy\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"223\",\n          \"address\": \"bostrom147rnn0rxqkythj4j9ccq0kytmh7f005rn0a3zj\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"224\",\n          \"address\": \"bostrom1pswgrf5ap0kld3lpun5z4x08wh7nmgamd8mgex\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"225\",\n          \"address\": \"bostrom1wt9h9wm3zf7yzsy68x7v8p973w02kw8yyurh55\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"226\",\n          \"address\": \"bostrom1ucl2c39dpwqm9pp6cvmlazn2tkwavszhs27j96\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"227\",\n          \"address\": \"bostrom16w2xwdzf6tzucpwcjjqtg9656a4kkv7g2f6vk9\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"228\",\n          \"address\": \"bostrom1hmrxmc27fu4ggdpvpxqtahn6uvtj38vuu77a02\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"229\",\n          \"address\": \"bostrom1uwfk6h06w8vnhmyp48vwcpgwncsec8yv3z0xyg\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"230\",\n          \"address\": \"bostrom1nuc82t22xgp09rs2tdnlxxgm95pjg5matjwwye\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"231\",\n          \"address\": \"bostrom15kdrahda8qcyfa9xe8kt2f737m22x2sleslj5l\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"232\",\n          \"address\": \"bostrom1n89a8avc4j7cv75lfsyynx5kazlk80ar5qcdx6\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"233\",\n          \"address\": \"bostrom19vgwu99fdawejnedgsfx8dmxuc0z4emjf7a044\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"234\",\n          \"address\": \"bostrom1s6v5ragv9gg3sq7j3aeqtyy82uaxv3y05hzhh8\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"235\",\n          \"address\": \"bostrom1y6huw3naar38u4rtgqmlh9smfu93gszst9tawp\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"236\",\n          \"address\": \"bostrom1hqeqy4s039q0qcpayqcyaq5hyyvmph97t79m9n\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"237\",\n          \"address\": \"bostrom14h099ukgvp4fm9qs0xnmljzhevrmneq6m6cltv\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"238\",\n          \"address\": \"bostrom1xhk0s2ynz2sq3ak3lr4u5gg0da4vyaxkfjhg7l\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"239\",\n          \"address\": \"bostrom14z6glatrayal5j53632kcefskyge6ujmgshqfv\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"240\",\n          \"address\": \"bostrom14n625exc6ftee3t6tez3hj47lv49amjzan5pkr\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"241\",\n          \"address\": \"bostrom1fhj7pkuvwflr7z7ngp2v9tj7g58aq2tjgvqfaj\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"242\",\n          \"address\": \"bostrom1l4krahjfp87exsmumzpnrfeaer2gsghpuwhfp6\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"243\",\n          \"address\": \"bostrom1udal5nr3lz7mg7j7k79se4rz0tsjj8lur45q99\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"244\",\n          \"address\": \"bostrom1n55zyf6wlvh8jp4wxqgx4ta283jx0e2n2tutgm\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"245\",\n          \"address\": \"bostrom1glgevt43557u6s7a2q9q40kzt8myw4ngcv6wr6\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"246\",\n          \"address\": \"bostrom1mj0sj4eaar5qnjn3l05ep5wgq3l6agtvvqwvyk\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"247\",\n          \"address\": \"bostrom1sm9sq4wnn62tk5yz0x3fvvx2ea9efguqwvdu64\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"248\",\n          \"address\": \"bostrom190y8vwhmyjdnk7cfutcm7u8haw80xyejdwxsql\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"249\",\n          \"address\": \"bostrom1rfh303jsl5297sxgs5txpt97lvxpjt4he3yy5r\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"250\",\n          \"address\": \"bostrom12u6qgyrdsy4xmw04vfkkkh9a9tqzw66g59hudt\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"251\",\n          \"address\": \"bostrom1pjvkddp4fmx8ym5j7s7su8kn3zuqj255djzpja\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"252\",\n          \"address\": \"bostrom13nrdf490fsuv4rwjp02hlyvalqjkn5u6xxqvqz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"253\",\n          \"address\": \"bostrom1fp9q2t9zn9gr5qjh9wljxuavtcsc4h8uqgnm2e\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"254\",\n          \"address\": \"bostrom1u2s32xsws9y2sskz6zvn7lawepdqxad5dcsyy6\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"255\",\n          \"address\": \"bostrom158mysantvvk7x65tfhhuu8q2va4ls34r54hk78\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"256\",\n          \"address\": \"bostrom1clalfxmsrqdgnqq5uxlx0mc983pyp3wq4xl03c\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"257\",\n          \"address\": \"bostrom1wf8alywyvlxy2dqfe38efdpdmuscfpf4jxvg6r\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"258\",\n          \"address\": \"bostrom13zf8kghx7h5fyttk6xdnjqn9c87z0rd36sfqjw\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"259\",\n          \"address\": \"bostrom1cc43k76udpd3xvpn6md76zz3ru6nvcnreeg2eq\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"260\",\n          \"address\": \"bostrom1l5x6kerswths5xl0d6672y9yyn9mg2vw8yz59q\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"261\",\n          \"address\": \"bostrom1qe4sguqg8ztlyy7psf7lzwr4ahph9j36k5hltz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"262\",\n          \"address\": \"bostrom1mn8ev805fde2xswght0snwfayfj9tn54dt24zg\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"263\",\n          \"address\": \"bostrom16vc2mjjfxx2h5m6jpdp4nqfu5095qaeeq27qxj\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"264\",\n          \"address\": \"bostrom1jmhqgld7luvuhh42wac24z6nlggjvkc7fzgs62\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"265\",\n          \"address\": \"bostrom1qjknpllzp6w6qsxxjx52zxald29wpyzljznzdv\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"266\",\n          \"address\": \"bostrom1eq2h9enjxsg5s08scr69lzwde8fl79snw20dc8\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"267\",\n          \"address\": \"bostrom1dx8mvxfu6mpfnjehvdkp9lsvu78ek2gjr7r766\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"268\",\n          \"address\": \"bostrom19uryr2zuxcfdevfq429jng9a2evxwadlsky04c\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"269\",\n          \"address\": \"bostrom16862syzdtc6h0sxz92jhnjjas5yhhjgzvyewwd\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"270\",\n          \"address\": \"bostrom1teuan269feyw4ax94jfp4pcgrhqnn28gxxz8mw\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"271\",\n          \"address\": \"bostrom1yvlp9gzqaufwz02swp5wqsqhlmfcrcl8m22gzm\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"272\",\n          \"address\": \"bostrom1latzme6xf6s8tsrymuu6laf2ks2humqvfcz7m6\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"273\",\n          \"address\": \"bostrom1ec9da8avgv7tnvsx3v8g8veqrhlqq26lnncg5t\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"274\",\n          \"address\": \"bostrom1c7pv6zyza76f3yhv0zvjc042e8m7w796qmvkse\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"275\",\n          \"address\": \"bostrom1yslufs9kq762qty0wh62c8qtlpm2202ejmw4ef\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"276\",\n          \"address\": \"bostrom1y935ede6znmcvqdmn6mnl2aa5zxcqvvracsczu\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"277\",\n          \"address\": \"bostrom1y675phjdvw576ahlcmlamrzr28rjht9mx709lg\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"278\",\n          \"address\": \"bostrom1kjhdx3nkh6krdhryvjzkq33xwh6wsyy7y8ark6\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"279\",\n          \"address\": \"bostrom1jxpe7neu764uasz5y5u4lrr5jtltv430gjm9dw\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"280\",\n          \"address\": \"bostrom1hq8d6pu2l6wkrwu9jxcqjcu55g8l43zxmrd6dk\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"281\",\n          \"address\": \"bostrom1c4h647a9rj8n9zye5ttmh9chpg66f3ffdvdds0\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"282\",\n          \"address\": \"bostrom14ysuwg6p4fzfaa6tg4s3hazu86pfevsw4cegce\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"283\",\n          \"address\": \"bostrom1x7wp0u877dkw7m84jv54c9g6zpd5r8t2nm47gn\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"284\",\n          \"address\": \"bostrom1gss7y04dky2fykck4dyp0pe39wxawlxm2l0yj2\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"285\",\n          \"address\": \"bostrom1cerh237zd5rdexptjw8ryhwdf2tc9eupz7sfn0\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"286\",\n          \"address\": \"bostrom1fz799u9jc0umceng3nkjt0njxy6y3550uq06jn\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"287\",\n          \"address\": \"bostrom1wzqyjejz5px38vgqsegafrcexl3963q9dsgqh9\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"288\",\n          \"address\": \"bostrom1evz2xfd6sam0kzz5qc5lje4s90vcgyyrzz47pm\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"289\",\n          \"address\": \"bostrom1mzmzlzk4xpm6zy68c43e6hen98w07yhfedumgg\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"290\",\n          \"address\": \"bostrom184dur4s6pldvhvcyputu6yshsm09s6wmvylt8k\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"291\",\n          \"address\": \"bostrom1gyhwacrpqwues05pkavw7xwehcqsmgruy34zps\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"292\",\n          \"address\": \"bostrom19wtkh935tx2ut2n4m6tjvkfvew4shaeezfl7em\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"293\",\n          \"address\": \"bostrom1a2kn43nquua6gmr4n42htmjpceqj7fzushe28h\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"294\",\n          \"address\": \"bostrom1u74s0z4ft63c6zz7g8xs62esdtdjkzuk4zf0rt\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"295\",\n          \"address\": \"bostrom1d9en5u0cfaucavx848qeq4k6ywqd3z5d5a778h\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"296\",\n          \"address\": \"bostrom1edwwsevuywe3sx82sustvyx3f3cvjt44ugccgy\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"297\",\n          \"address\": \"bostrom1gcy4f6f2sc73aegd9r68rt2q6teekl6swjva3p\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"298\",\n          \"address\": \"bostrom1d6nkeqxmme3564wd889kr6cjed3asxqzjve0wl\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"299\",\n          \"address\": \"bostrom1djdfq5mn3dzm9whpznczxz77s8ep2qggc5w5xn\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"300\",\n          \"address\": \"bostrom1z8fyzv3mjfccvrxhckr2u3lnc0hrgrlm4zkf8c\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"301\",\n          \"address\": \"bostrom1tcnlvf6qhlc3x7ax2vk3vzhxhf8wy8xrnjl72d\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"302\",\n          \"address\": \"bostrom17ud38eyfkd800kvw3c9kl3zpvgvj296nfszelr\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"303\",\n          \"address\": \"bostrom19rtverjn8kw7dzwzch2elktxgcmak6dlqugxfw\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"304\",\n          \"address\": \"bostrom1mlqakhlxplhlezk80lph99wcy377j9dk2qx3gg\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"305\",\n          \"address\": \"bostrom1ssu4wqtzvvmwcukcv7l8zxny647mdx03e0t57j\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"306\",\n          \"address\": \"bostrom12reh000lje8y20wshqmgl8tg70qggt2ac7qz45\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"307\",\n          \"address\": \"bostrom150svyax8m8dwljwenc8xxtsg0avud07m5frlrz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"308\",\n          \"address\": \"bostrom14tjwqqyha0c9r0s29dm0n0zdpdc4hfrvn7jqsq\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"309\",\n          \"address\": \"bostrom1x8r0ktn36dsxsadnp3863txyd9pksrp6awcuaa\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"310\",\n          \"address\": \"bostrom19lsruwa85k93ahzkdwaydyrl6ehz9dmmkava0y\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"311\",\n          \"address\": \"bostrom1tyzmkpn0axquu4jlht3lllsmq03um8kn5cu5pt\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"312\",\n          \"address\": \"bostrom10a9mqy8cu04nyz3nj934ck39p6u9ddjt9y5fve\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"313\",\n          \"address\": \"bostrom1f2uslv6udnjwyqkdngc7rswp5vkmgavzgy952g\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"314\",\n          \"address\": \"bostrom1t7gw3d2jz4qc6k6umgkazvfyeydjv7l6nym265\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"315\",\n          \"address\": \"bostrom1rc2647d9nftgwwh9n5vaw26lnjdrewc4dum68g\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"316\",\n          \"address\": \"bostrom1zejjt25xw9gwvhave95ykkvgqjtk7j56fe9cwh\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"317\",\n          \"address\": \"bostrom1vesdfkzd36m08clhvkpusq4gv0dnqm28rm2hey\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"318\",\n          \"address\": \"bostrom1ypvt8rf8md7qedvnk0p8cvd6mnffepst8f05p7\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"319\",\n          \"address\": \"bostrom167hs9ma63wd02xym0vjw80uqlekt0cs54ass6v\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"320\",\n          \"address\": \"bostrom17tksas9e4nkp25vgwcsd7z6y83pa6u7sddyyez\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"321\",\n          \"address\": \"bostrom14thj9udwenk5q8c5ey2urude2j54xud2a26rp3\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"322\",\n          \"address\": \"bostrom1y7ku6vf9vq53pv4y6lw2zjn4d5ul3javm92whz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"323\",\n          \"address\": \"bostrom1mzn966mlprxgkvayrqu209069px0qwz7gzn799\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"324\",\n          \"address\": \"bostrom1cjeg60652ueyu5222l3atmm8vrhlq4tfusnswk\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"325\",\n          \"address\": \"bostrom13855g4d5pfhtnqemgp700qs36qpjdnaz0dx2m5\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"326\",\n          \"address\": \"bostrom1ueywgan39tj27pdysq0d54cqvcwyggf6eves07\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"327\",\n          \"address\": \"bostrom197h938dvw52kzf2l7gke2u5tcz3grvlexeaq0y\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"328\",\n          \"address\": \"bostrom1pkxtd9xwmqwg08kjgz9xqyee3aw7j8upd89ah6\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"329\",\n          \"address\": \"bostrom12arnsa069zhad0e40mlgy034n7aq77e2nxdven\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"330\",\n          \"address\": \"bostrom1m3yh7j0jefp9dl26cz8fqexfg8tds39lh957jw\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"331\",\n          \"address\": \"bostrom1ysn8jyjv464fv4wpt40vezh7d5tw05tc9v858t\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"332\",\n          \"address\": \"bostrom1gh8tenvx2sf9kj2c359ey6s5k0vzlrl7z4t59z\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"333\",\n          \"address\": \"bostrom1svwchckmrrkfl7py7l2fz3esla7lwmalld4yr2\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"334\",\n          \"address\": \"bostrom1hmdjgtv3yq4qzyuk3ynyt42sjntma8hqarepjd\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"335\",\n          \"address\": \"bostrom1wr0mqeyea45u9av63srtvgr553nyg6l9p57ezr\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"336\",\n          \"address\": \"bostrom1e20dl8se4v2ev79qcay3ag7uf5t98gampz0d48\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"337\",\n          \"address\": \"bostrom12c8kh7aaz2gg0l4nkd73t58nhurdaren55atua\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"338\",\n          \"address\": \"bostrom1ftyx5guwf39fz4nc5n5nc9fua36cq344rm2d43\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"339\",\n          \"address\": \"bostrom17jq8ev7n4e3zv8zdek5mccvxcgxxtkwva5vwtx\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"340\",\n          \"address\": \"bostrom123wttw3lu62m7lcg23rkwr88cvv8apjmvkuj9f\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"341\",\n          \"address\": \"bostrom1j5wpswepyxva5vupvg05pq6jzqh7ttdvepkhp3\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"342\",\n          \"address\": \"bostrom1wh5gfxyz8x95qyjlc2s24h3czr60vfehwt49xa\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"343\",\n          \"address\": \"bostrom1z3u9w3vyq6sw7ndxcdpjkgvlj0qaqm6spc3jmp\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"344\",\n          \"address\": \"bostrom1pzyt3y68zcnvl7hkvuffqfedccaptf6nt2x8ya\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"345\",\n          \"address\": \"bostrom1pzxnpyvxr6x9z64y6w3ctv0cvcx9sp90ehj960\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"346\",\n          \"address\": \"bostrom1pvu65ccqw3fmgq88j2j485wc6qm96nx7h7ln4f\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"347\",\n          \"address\": \"bostrom1nqxwnut0hdgsn3l9zaladaft5xt9c6ex9qquza\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"348\",\n          \"address\": \"bostrom1njpfrygstn6r5awzp77keyhkl3wfhzmvdz2pug\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"349\",\n          \"address\": \"bostrom1ke9xxd3d6y0ttduac062zvv3r0jtakvhkvqcjz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"350\",\n          \"address\": \"bostrom15ak23s0usm36hv2e4kajhe0yx592hw474p3gkq\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"351\",\n          \"address\": \"bostrom1gffprg0nuvj9ve39s9rjhjp04u7k8xwan2tzff\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"352\",\n          \"address\": \"bostrom1yq5h0gjxuup83hdz53utukwhkkz684mk3lx7cr\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"353\",\n          \"address\": \"bostrom19rfaqnnz5fy3qct8qxzany94t2p7h0rrc75lmz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"354\",\n          \"address\": \"bostrom15y8g5ggq2lslncdnlcscqygyesefmjy0t4cae3\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"355\",\n          \"address\": \"bostrom1gfkztltd789py02jcd79dnkl252uej7x8pnx4p\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"356\",\n          \"address\": \"bostrom1h9k38zr5a532jzl0hsker9qz785m822zmqw974\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"357\",\n          \"address\": \"bostrom18ghdg8y5hx6esxm6ndw3ywgtalvkmz48zeyc6z\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"358\",\n          \"address\": \"bostrom1zy3nxgwtw9hr99tzfaxasgwklm9ev843fju9zl\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"359\",\n          \"address\": \"bostrom1vmfs06hv80gc8jcpzu93ld4494azendxfalh2g\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"360\",\n          \"address\": \"bostrom1d66wegxpllcsnrzv9saqugpk2dausa836qlqaz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"361\",\n          \"address\": \"bostrom15njl9exppdfms5fg4zz9wafn4a95lfj30ftx58\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"362\",\n          \"address\": \"bostrom1v2fzs3a8mvm4nhsfcpk85gt3d8rdacv6zggl9r\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"363\",\n          \"address\": \"bostrom1fm842pq6zxaqs86fm30xv459gx7hm7f0ufujvz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"364\",\n          \"address\": \"bostrom1rzr7gnkm3kdqmzqya7ky98m8tnnmtet58deav0\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"365\",\n          \"address\": \"bostrom16gtt4cmrvg2us2rgecym9zt65zet7qq2euzvdf\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"366\",\n          \"address\": \"bostrom1jsdfjw0pjjj5thg7z2tpm30njusrlsagtac7rs\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"367\",\n          \"address\": \"bostrom1z33aen2znsmgy7wwzavwh2q0u7cu4e9xhky379\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"368\",\n          \"address\": \"bostrom10r2sn7sasanc0tuw5wzupxvlpht5uv267her62\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"369\",\n          \"address\": \"bostrom1gtma98yjsx43zc30j99t7t0tmdjt2gyp9e7g0r\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"370\",\n          \"address\": \"bostrom185y3kgv3e6t4sue0a55jyq88hv76th3urnca4c\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"371\",\n          \"address\": \"bostrom1xc6jdlqd8gd9e6p73xdc2yw7ad3tnl8w7j4wsl\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"372\",\n          \"address\": \"bostrom1wdk6rndatlj8dpxq799vmu50zft7xk5768ej2v\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"373\",\n          \"address\": \"bostrom1uz3xp4au0rxawmct6ffj0u3le7uglyza43appc\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"374\",\n          \"address\": \"bostrom1uym8hd4pum4zz2mpkf93y8435u725k97e2c38p\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"375\",\n          \"address\": \"bostrom1u8yt9tvnwvvvlm36w97nyg27ue797hrvkz6eux\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"376\",\n          \"address\": \"bostrom1u4427txgc9pulkuu0wk4v9cjxqa0dxee5az972\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"377\",\n          \"address\": \"bostrom1epcd5upewwa7s20u6kgf9uywa2f7c3yj6zaeg0\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"378\",\n          \"address\": \"bostrom1tx6dnqh0nnj05uuell7rhnwhennscehlnjylxv\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"379\",\n          \"address\": \"bostrom1ypzhtfsyuejekw0w0z207wyedqm3xqafc8nu7g\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"380\",\n          \"address\": \"bostrom1s4ytylknecgkp7sp3jgf2f5lj7mm2xxz0f9rl3\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"381\",\n          \"address\": \"bostrom1s05hsv6fxhkpclwxzgnlfjjk7qdm78nmpchj08\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"382\",\n          \"address\": \"bostrom176q2gvutyk63dzknylcvdhp6lyjwu5w9fdmmev\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"383\",\n          \"address\": \"bostrom1e08w7wrjn05gl06xkwnlfmud5f6trdkrf0drg5\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"384\",\n          \"address\": \"bostrom1pzp9nadejsjzfkpfl9k7ktu2cfhprw4r7qvd5p\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"385\",\n          \"address\": \"bostrom1pt3a6xk432vs8lp0z6ya3qhqhxks99xe4sxxqq\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"386\",\n          \"address\": \"bostrom1damlfdlp8yynjvrmv6pd3t33f4currrhe4cm4z\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"387\",\n          \"address\": \"bostrom1cmhrs08sqv0823mj057svp8jerp6avne6xmtrc\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"388\",\n          \"address\": \"bostrom19wlc6vms3qkuy48wgg2dl06veahgxl47s8859j\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"389\",\n          \"address\": \"bostrom1h9zrqgwcjtul3s9qxf0hk0ym9alm44ztywkfyj\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"390\",\n          \"address\": \"bostrom18fudz7p6ah9yvdr4p9aflp8pgzngx84cem5lra\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"391\",\n          \"address\": \"bostrom1e8dsx8yx9mjn8v8egz2n5vafkymqw98wy4z6re\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"392\",\n          \"address\": \"bostrom189tpr8vg4qvwn7fgs6szkqr25yrammvvlzx0zr\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"393\",\n          \"address\": \"bostrom1xvsukg4tltfzduw0lsvgqyrhe6rzrlp472ln92\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"394\",\n          \"address\": \"bostrom1w7f07762zelhx4spzkndmygh2dz58g3nn58v7q\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"395\",\n          \"address\": \"bostrom1808q4nv5qafkk8ec9h56wwth6sl5a5yd0elve6\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"396\",\n          \"address\": \"bostrom15a8z9l8ufw8v8zdddfhesnmfzwwhua7axrmfxl\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"397\",\n          \"address\": \"bostrom1undz2328av9agfhaguqs8zxzejv5zqcc9grdmv\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"398\",\n          \"address\": \"bostrom17vw0qcu9j8t6jhh83sjrzj07nwg9nndfcpw9g0\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"399\",\n          \"address\": \"bostrom1evnwfeuqsgkjwe5qwe5acyy6m4w5ch03m3e7a6\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"400\",\n          \"address\": \"bostrom1t5r4uhu0tscqw380t6hqmvrgyhlrj3u43vsm43\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"401\",\n          \"address\": \"bostrom17kwvcuvar02ldacltr48373rm74z8lfkcq80vj\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"402\",\n          \"address\": \"bostrom1r7grd2sazgzsy8y0c8wlsnjyhdc0sq4npr0v4q\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"403\",\n          \"address\": \"bostrom1pfwja2fu2qcqvdws6rcdr9y6za46dklaxc83fh\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"404\",\n          \"address\": \"bostrom1p4uyyk8sc2arl4n9egw3xrn9g7rpkzlerf4nlc\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"405\",\n          \"address\": \"bostrom16gxdwa79rsvkjaawpcpswthgahm56p4mpu8fe9\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"406\",\n          \"address\": \"bostrom13nef2p2g48kmj83m7f0ey76q6p9cdyrn03x4tz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"407\",\n          \"address\": \"bostrom1m9x4gg6frezyeqldxdz4dvegxpcytxnapgykwu\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"408\",\n          \"address\": \"bostrom1kfz37afuxfyajrzk7xv6937xc0jsq4zd0ce7dz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"409\",\n          \"address\": \"bostrom1kae5k3nnzs3q7tar4ec3w29w4avd8saqujpjk5\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"410\",\n          \"address\": \"bostrom1hjjsjgv7sx88mxfq9y44ql24xs76jj3w7y9ff8\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"411\",\n          \"address\": \"bostrom130avjyegx7glgnqvraetqj6ztacrqv9kdwawkj\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"412\",\n          \"address\": \"bostrom104rtaftr9xmx6dcakempk590tfxx4ytddqcj97\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"413\",\n          \"address\": \"bostrom1f6tmyjffs0p7f6xeh25esjhawxu2kll9j00a47\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"414\",\n          \"address\": \"bostrom105c5jk0xwzlk4pexgaeqkxq0xadtqchc4lmev6\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"415\",\n          \"address\": \"bostrom185tek8r0ptelug0erducctzc4d83q5np3339k5\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"416\",\n          \"address\": \"bostrom1z0m5tcv4jde5acv0w4dms537wvntgj7x47zmeu\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"417\",\n          \"address\": \"bostrom1fzkp5pux48ux72wsgls9lhxp5cq2tqsy32hfec\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"418\",\n          \"address\": \"bostrom1nsffk0nt927vn7pdsk8epzjeqch3yfzkzq57pl\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"419\",\n          \"address\": \"bostrom1e4cnw86pl73k2sfv7uwauflfl42qzncn4akyv7\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"420\",\n          \"address\": \"bostrom1jlu5u2sj0afddmcj7lxfy0ng466s8l2qdjz24v\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"421\",\n          \"address\": \"bostrom1y9tvvunr7uaqjjw8u6xn5muypq6pheyz5gygm3\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"422\",\n          \"address\": \"bostrom1qsm0ujra4vdwymc5vrtey2rvalyq8392h75nr4\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"423\",\n          \"address\": \"bostrom1jgvy2vr96auye3er6n3tkhlu9hnxs6h3a38rpp\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"424\",\n          \"address\": \"bostrom1jcj0w0e2khy0asm7dz8883xnepzmaxylwez7j2\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"425\",\n          \"address\": \"bostrom1q22fvnhna2zg2g2xm6s5587w8fvsh2zzfeey68\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"426\",\n          \"address\": \"bostrom1amletsu7926696dpeay8wrewqgww5s7yunjjxr\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"427\",\n          \"address\": \"bostrom1qkltelhy5zsr4kfrefvwsupxyt6y9skwjpd7h4\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"428\",\n          \"address\": \"bostrom1nfdyvvjy5hum8gpgmt29d0m5y4te3ekpfyz7pw\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"429\",\n          \"address\": \"bostrom1hjz37u09vws084cvwjlr5t27wmsrzm9tmfspu5\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"430\",\n          \"address\": \"bostrom16zykdjnfjdy5cy3phuymmcghh8x24eah2cmmpu\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"431\",\n          \"address\": \"bostrom15pax03gsgw84lsygpxyyvtthd8fswrqp7wjs7m\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"432\",\n          \"address\": \"bostrom124ll3q05an955eh26ygn34u5gtm9287arjrgj9\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"433\",\n          \"address\": \"bostrom1teyn0utv6yhnwux44ycfvqh6z888pvjaz9cz6l\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"434\",\n          \"address\": \"bostrom10905rstxf5tzj0w6gguaa76ma7s32v48um4w9z\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"435\",\n          \"address\": \"bostrom1m7y6qezuemqe6n535z7s80ee8zw4zg486vr53u\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"436\",\n          \"address\": \"bostrom1pkhgpslggp3t0nrwskvgczxmavg7yejfullesx\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"437\",\n          \"address\": \"bostrom1zyws7rajm9f3ql6jqqpzvnml0aym9vspd7tjxk\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"438\",\n          \"address\": \"bostrom1pa0rcdua5v9d4vf09ksnnl7t96nfkf3w37k4dc\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"439\",\n          \"address\": \"bostrom1durjade4he9l23rw38azruzfttpmc8223n6r87\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"440\",\n          \"address\": \"bostrom16jvmfza0q60umemx2pv8s5kle2h8g9x6jj9fkq\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"441\",\n          \"address\": \"bostrom1gywad2frusetg26dyh83cfaevacravashyjwg6\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"442\",\n          \"address\": \"bostrom16kqpk5jg9e5ucxv3e003mf48yuamw4ce5ww4la\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"443\",\n          \"address\": \"bostrom1zr9urr3m42w7pu5h5xn7rvghcdk5vtrtmfw7wf\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"444\",\n          \"address\": \"bostrom1jet9jf456dja8vqlhk407l06yvfehwzuvjaynv\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"445\",\n          \"address\": \"bostrom1q8ajen3vu5v5uu4czkvqasqvw827dz2nqq6d0s\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"446\",\n          \"address\": \"bostrom12w56mhf4nsfchquw0sgzwn72qkzvfvquxhg6dn\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"447\",\n          \"address\": \"bostrom10v8qjj6haddx7wmnr65mcsllu8xunkee7zg3z5\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"448\",\n          \"address\": \"bostrom1hy8dexwz6ynlnnaj8ge7jvmzs4c6qmz6yh97lc\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"449\",\n          \"address\": \"bostrom1vpp9vy0fnxxw8yk5t2cctutpfv8pprvyhnjw90\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"450\",\n          \"address\": \"bostrom1w0u83ty3nmflg9846zmh28u0hweccs3fzfpx0f\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"451\",\n          \"address\": \"bostrom1z6lhk6u25fceqylmgv65t5py0c8kclgkszmqyx\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"452\",\n          \"address\": \"bostrom1zcf0ph3k4p2q2pl32zqspy5f7jkgxd5s4kcd66\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"453\",\n          \"address\": \"bostrom13s4egz6pqg6a88dunme3esuee5w7qlkjttcs08\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"454\",\n          \"address\": \"bostrom12w37894jf7rt2ck709rk8xa23lz3lg9tv93tlz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"455\",\n          \"address\": \"bostrom1sntt4y34tghn45vw97az7mz4vkcw8kgregkph7\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"456\",\n          \"address\": \"bostrom1pa0lcssmjkkycdvrhhzey5h94v34wuf9u4ths6\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"457\",\n          \"address\": \"bostrom1l9yx676futn4h28rxupsvk7evl9s68hrufetdw\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"458\",\n          \"address\": \"bostrom1knpgev72f2empt8j8gcn24my8kdasy2lcezjea\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"459\",\n          \"address\": \"bostrom1clr05sms7eklm509ger6jdzhgheafskv4wwxrg\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"460\",\n          \"address\": \"bostrom186tpdptavhzz7fg83vnm4r2y85cfqyg6sntmun\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"461\",\n          \"address\": \"bostrom1qc4t2q45f826cfc7k0y45ma8f5qrrfv2nkly33\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"462\",\n          \"address\": \"bostrom1n0wkta56ktj93nzpe9amkgrzq7rhzt3gy6m8uh\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"463\",\n          \"address\": \"bostrom1exul86z68fzck5jra7jp8xdwvmfz5p9qyuh8um\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"464\",\n          \"address\": \"bostrom1melp9r22clnjzzudd0thvs5zzveqfjyl9xfw54\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"465\",\n          \"address\": \"bostrom1zx70t5xqc8h4kmvrssdc2w82v9ksw0r82a99av\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"466\",\n          \"address\": \"bostrom17ssaukj47urfj6c8cgywyz9xhgqz3tnpy7n5kv\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"467\",\n          \"address\": \"bostrom1znt56em2psvx8ylfpplcmpy5esrea08g2psvxm\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"468\",\n          \"address\": \"bostrom1tz4yrvqlw87e74n783n0da4pttay2ypsfq6668\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"469\",\n          \"address\": \"bostrom1prrtyfgrw2tzj9kua5eu7tnctt474m36eygux2\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"470\",\n          \"address\": \"bostrom1ftkw5j528j94cajk4rvqum3k7mhhmpvyc8k7yg\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"471\",\n          \"address\": \"bostrom1pe42d4gkg7smf9na6dvh5twq9hgczsag4elx84\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"472\",\n          \"address\": \"bostrom1nscf69wvc0wkgqm8ma79qv8cr6j6zq3dt0t898\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"473\",\n          \"address\": \"bostrom1exv982mrkyfd967xv7fam7lq8h3ce3dvcnd4s3\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"474\",\n          \"address\": \"bostrom14q65nd2ft893dagpln4fq39wutv2xmpe3kc4w0\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"475\",\n          \"address\": \"bostrom17llhhwjmglhhqumz72e4jap5cj39r8rwar7zzv\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"476\",\n          \"address\": \"bostrom15k9z24v0thrxffetjp97493ec89zlz7re07pjj\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"477\",\n          \"address\": \"bostrom1y795vkzvczrauey63vmvvcjr84l3fjheqd8f38\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"478\",\n          \"address\": \"bostrom1qf560sekun7kjsu4r0puey5u4fn90025f4q2p2\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"479\",\n          \"address\": \"bostrom1v9p7ukxpw2yjk7eqm8720vkgqq5qlk7w3jqgzu\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"480\",\n          \"address\": \"bostrom1a57rc9cnhdn4l843ca4990aqldh5wmq0uuetzg\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"481\",\n          \"address\": \"bostrom1q2ajajyu0t544tudcnvk7xcznerhylz36p5vtc\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"482\",\n          \"address\": \"bostrom1ayc0pueqve9a3xjpgwh3p4l6hjlyvfpvclvldm\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"483\",\n          \"address\": \"bostrom1jmdtfuxag0deeuyxmj4ge2mqhvc200hlmzyztf\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"484\",\n          \"address\": \"bostrom1k24kf4reet2lstvmkx9a4j0r87xfuqeqh2lprz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"485\",\n          \"address\": \"bostrom1e0c3ehnfzvcxvwh9fgzyfc2vqshy9w53du7hnv\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"486\",\n          \"address\": \"bostrom178nsekn4qcdkqqmv95qlmp68kaqpga3zpsdnf4\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"487\",\n          \"address\": \"bostrom13uz23f4stcg8esqvvc7d2w9psxv0dya5xaq5ne\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"488\",\n          \"address\": \"bostrom19trgcp8uldtc5xtnpf0u7x7dk3t3jcp4y7cusm\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"489\",\n          \"address\": \"bostrom1fn4ep44ud3edyh304ta38f55xd6pxswsw9e23z\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"490\",\n          \"address\": \"bostrom143dfs4ur5gjvwgx8l54jjz27rq57us0zz3hqj0\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"491\",\n          \"address\": \"bostrom1e3je4h3vkxywt2sf7mudelhf6zrx405yfgczkf\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"492\",\n          \"address\": \"bostrom180upuj8yp0326px2uys9r60xrlhpsa6fwryf80\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"493\",\n          \"address\": \"bostrom1jdypscylf6hjlrlva03tx5vqqkcdnllg6rpza7\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"494\",\n          \"address\": \"bostrom1r85972mwrka5w9ct6km58ww9jl9sh46fx559fu\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"495\",\n          \"address\": \"bostrom1xz2dkqrnrvq0ezc0vxtcvhwy39xr63vxzfedsr\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"496\",\n          \"address\": \"bostrom134llrhdus60n7853fn3ulmx6uy7evsx3ltzstt\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"497\",\n          \"address\": \"bostrom1pv5clfxxfpqvuerquue2vgr2ndgh0h50jx898c\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"498\",\n          \"address\": \"bostrom107v45crxqedhmf4yqa9y98v99wm2078fwtklsq\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"499\",\n          \"address\": \"bostrom1959r3zp37k9yuz8kjtc4feayyfkkxpcv43mu0w\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"500\",\n          \"address\": \"bostrom1qh6eavdzp5ffks2rvd5mjt3rdmjxg3qm5l4pw2\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"501\",\n          \"address\": \"bostrom1lk7m28npegzy0sz5s06sy95n27yzrj4d3rytdg\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"502\",\n          \"address\": \"bostrom1clk49u6rvv8c40udn9qgp0s8hv5uvfcgxqptky\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"503\",\n          \"address\": \"bostrom1gws6ulm3u23txc6p8kv6ew6e2zn45udrwjkdqm\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"504\",\n          \"address\": \"bostrom17rg7cldfsqfmv53n6r7qmjmcge7ucxx2hhum0q\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"505\",\n          \"address\": \"bostrom1kkwwsk0v4h7tmccr4sdmpyl2j2gvfah6jzw7n8\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"506\",\n          \"address\": \"bostrom1ggh3zff5paq5c3r2j34mquq9lrcc7s0nvfnuwz\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"507\",\n          \"address\": \"bostrom1gp5s4tetnk7ng49g58uhn2znfpmgs4cfdq4ns3\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"508\",\n          \"address\": \"bostrom1ejkkddkuw63zn557l0lvqq3gmjcra53ealmy2x\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"509\",\n          \"address\": \"bostrom1jrp04lvvpzkyylr4l7e5xp256l9yd4hdhrpmls\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"510\",\n          \"address\": \"bostrom14c8rllqzmgyrkt8aeyanprl7g3adrlc2flq57a\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"511\",\n          \"address\": \"bostrom1j39uxls4clq76ej7mk2tdskvql2tdp2zek8g89\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"512\",\n          \"address\": \"bostrom1qcy673rd8a27t48ry6evmv6as7fuetd8cyhnjn\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"513\",\n          \"address\": \"bostrom12d3klseftxsfs5xmvjju339enk8xcvg5y55qvl\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"514\",\n          \"address\": \"bostrom148g7gmqvw5gfj7dmpjymtsw3j7gvasflqrsyx5\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"515\",\n          \"address\": \"bostrom1eur22ds9gn06lgg9j3raqlzj8j2qzxx6vuje4x\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"516\",\n          \"address\": \"bostrom1809klqrjjrs8ch2gtf5hmmfhysspkrr894rmhm\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"517\",\n          \"address\": \"bostrom1f9nx8jrlx9pvns70edanu37mxtm359k606qyds\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"518\",\n          \"address\": \"bostrom1qgkdm2asr0qey7jafqyqlnarvgndjws23fpkrh\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"519\",\n          \"address\": \"bostrom1r5gvlzt03a0a9rks3s57cppmfqx2lzjrquh3d0\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"520\",\n          \"address\": \"bostrom1yaastlp99jvqta2x5fngdzw6zur7khctd9gk3x\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"521\",\n          \"address\": \"bostrom14jhjmhm2xmx6wyefju30auqvrs35hmnn2m8ewl\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"522\",\n          \"address\": \"bostrom10pqp6py9pqtagyde9tnkkvakg3gqsnq7lgzxnp\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"523\",\n          \"address\": \"bostrom1spndx95pckqnmjss6emff6fyylasg66qzdfv6v\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"524\",\n          \"address\": \"bostrom17qkfq2uwags5pzplrfqg2elhn9s0pfwja4mgeu\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"525\",\n          \"address\": \"bostrom194097avwy9a6h0cvznev232z28h96rp2q3w3uc\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"526\",\n          \"address\": \"bostrom1l8hx9jxul439uyjve4zn45nujtx9gmrw3za3vs\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"527\",\n          \"address\": \"bostrom12zmexhujvw7j82la9uslzfl5g29erpysqt555s\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"528\",\n          \"address\": \"bostrom12vexhfe4m9p9szsqvzsalssf8sxluj6pqx8gr3\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"529\",\n          \"address\": \"bostrom1ukgaegxryydqckt6fgrt60dajxq758x9pntmhh\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"530\",\n          \"address\": \"bostrom1756xr3jtsdve6vuwqgqdtmt6ws3td49gq7vc77\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"531\",\n          \"address\": \"bostrom1fn5cutfgat9s9z6nz5ucnnq9aec82wvqpevsn5\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"532\",\n          \"address\": \"bostrom1e63p9zdn5xks5ge9gj2y9gfkl5u0jgkvfrnhzl\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"533\",\n          \"address\": \"bostrom1zq9f4eczclr5cexrxdusfxxr6eumn2rlg2h4hs\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"534\",\n          \"address\": \"bostrom1sjtl9n7fqszta6p4w5y5yl7d4xqth26d8z2gjj\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"535\",\n          \"address\": \"bostrom1a4krl6m7jg7ckczk94hh0wdlcezvpgwcwkrpcg\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"536\",\n          \"address\": \"bostrom17lzmvgnahdncwnsx3dr7mss65qv6l9md2hy2qq\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"537\",\n          \"address\": \"bostrom1pljwxmmkhfrkzkdpmdjv29t6959sa77mjt0xz4\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"538\",\n          \"address\": \"bostrom1t9xfg2kurjlvnw86repcpte3shpgasdjge6a7t\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"539\",\n          \"address\": \"bostrom1erxn6kmz3xhfrv40m7lyp88v43qahqn8fy2xhn\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"540\",\n          \"address\": \"bostrom1k879z65mwwwu4jause7galz0hlsqqj4rtah7r6\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"541\",\n          \"address\": \"bostrom16dsvdl4jer9jyplelgz4x68hjvg5k647nrnc8z\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"542\",\n          \"address\": \"bostrom12pafl09rqzcw7d77qs63pg2nlsgvc3dsfxyzum\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"543\",\n          \"address\": \"bostrom15cq4l7d6v43rtv493cps3c7tpsf26d83pseqwn\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"544\",\n          \"address\": \"bostrom1wrtzl04mxs2en94ysc5p8mvqc5p0culr9w9m0n\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"545\",\n          \"address\": \"bostrom1a2zr8qx60sl3srh982hjduse0l7pdcnhtl7juy\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"546\",\n          \"address\": \"bostrom1r82whjffalh2hgmrayywc9g53es96n9e9893yv\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"547\",\n          \"address\": \"bostrom15884n6qmrwq8gjuwtqh6q8z7vx500n5s3djcv6\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"548\",\n          \"address\": \"bostrom1nhkl9r84zjucmjswhddwq8zgpun5yks5mjk7xc\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"549\",\n          \"address\": \"bostrom12cq4xxcr6pmjz320aj7j8pn9l8vjeed63slcz5\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"550\",\n          \"address\": \"bostrom1fwx3u5w8qyzp8msv2n9umajgst86dnuqrsft0g\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"551\",\n          \"address\": \"bostrom1zg3xqymyrvlu5fmmyx8htdm84kqt50t7xdfmuj\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"552\",\n          \"address\": \"bostrom152xtf7tvw60tyhls32wwc9ypehqzf366zjkeeg\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"553\",\n          \"address\": \"bostrom1uspnj6pvq0u78d8qux8lz6p24dzm998phldqgv\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"554\",\n          \"address\": \"bostrom1ppzvqc7yf9lfs8cljqu6w992gct6d5h9jx5wsn\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"555\",\n          \"address\": \"bostrom1jn8cp663fl0mv6k55xvy2lr6s0r57zg0v6gzr3\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"556\",\n          \"address\": \"bostrom1fmpuldfmgj0a4dlkn0cdlap4h3qs7nljyph4rj\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"557\",\n          \"address\": \"bostrom10mja0qpcq6ze2nrchhh7w3n7g589sdktfu7p9m\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"account_number\": \"558\",\n          \"address\": \"bostrom1kaaxhzud2ev7v69kwkf8vuvhst9a36wz5l424q\",\n          \"pub_key\": null,\n          \"sequence\": \"0\"\n        }\n      ]\n    },\n    \"authz\": {\n      \"authorization\": []\n    },\n    \"bandwidth\": {\n      \"params\": {\n        \"recovery_period\": \"16000\",\n        \"adjust_price_period\": \"5\",\n        \"base_price\": \"0.250000000000000000\",\n        \"max_block_bandwidth\": \"25000\",\n        \"base_load\": \"0.100000000000000000\"\n      }\n    },\n    \"bank\": {\n      \"params\": {\n        \"send_enabled\": [],\n        \"default_send_enabled\": true\n      },\n      \"balances\": [\n        {\n          \"address\": \"bostrom1xszmhkfjs3s00z2nvtn7evqxw3dtus6yr8e4pw\",\n          \"coins\": [\n            {\n              \"amount\": \"115880796057845\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"115880796057845\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16230lc9r27vrxlzd4wlvcz2l66quzj84vlkxc5\",\n          \"coins\": [\n            {\n              \"amount\": \"10000000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"10000000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1gxhs5wzam5rlgf6cs0lkme400ut64d4ncpfs2h\",\n          \"coins\": [\n            {\n              \"amount\": \"10000000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"10000000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1qs9w7ry45axfxjgxa4jmuhjthzfvj78sxh5p6e\",\n          \"coins\": [\n            {\n              \"amount\": \"700000000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"700000000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ha4pw9w2qgc2ce9jwfrwrmaft5fneus58nqwev\",\n          \"coins\": [\n            {\n              \"amount\": \"50000000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"50000000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1qn8sr2hzmktlecusdtxj9hwj0upnm0jft9snar\",\n          \"coins\": [\n            {\n              \"amount\": \"10152301267211\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"10152301267211\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1d8754xqa9245pctlfcyv8eah468neqzn3a0y0t\",\n          \"coins\": [\n            {\n              \"amount\": \"360239818444\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"360239818444\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ttd4h585vgy29gj0xe0p338drvw9w4m4hzwj9p\",\n          \"coins\": [\n            {\n              \"amount\": \"4000000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"4000000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ngd5w7j4u5ar5xh7vzuwqqznnhhcjmnz0s6kpu\",\n          \"coins\": [\n            {\n              \"amount\": \"1000000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1000000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom10c8znaj94y900syues06dz50hw6y9qpkhunn25\",\n          \"coins\": [\n            {\n              \"amount\": \"1400000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1400000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1jv65s3grqf6v6jl3dp4t6c9t9rk99cd8yvs0hc\",\n          \"coins\": [\n            {\n              \"amount\": \"50726497621325\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"50726497621325\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1pntx8ql2v7cqxu05etg8c4v0r2vz7qnq9uqmpy\",\n          \"coins\": [\n            {\n              \"amount\": \"4000000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"4000000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom17a7xxqa4drnalvv7pkxrkxqer953fdke3ulwx4\",\n          \"coins\": [\n            {\n              \"amount\": \"1000000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1000000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1s4czxghmh29aw2ldynk8r9lnkfccw5ph8rjpxa\",\n          \"coins\": [\n            {\n              \"amount\": \"4000000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"4000000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1s4wntr9selfaznc2ezjkwnwt2y0terx9tqpda3\",\n          \"coins\": [\n            {\n              \"amount\": \"1000000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1000000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1qwzsnnuk2u6avvh059c9p50gqqquvcu5svvwrs\",\n          \"coins\": [\n            {\n              \"amount\": \"4000000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"4000000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1g07gj9ph0r2hjx6ffqn8vl38u4agd5mpqx9m7f\",\n          \"coins\": [\n            {\n              \"amount\": \"4000000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"4000000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom10e3rqclgjz4m4fnx2c23jupcjpyuvyx3x4k7qj\",\n          \"coins\": [\n            {\n              \"amount\": \"1000000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1000000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1t3222ju7ssu58xsm3m2xw445p94cqn2qrex3vy\",\n          \"coins\": [\n            {\n              \"amount\": \"2000000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"2000000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1edlrze5f48jjaw0wxcve4asqqf2tcjdl59ln8q\",\n          \"coins\": [\n            {\n              \"amount\": \"2000000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"2000000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1m8yf3g2m9p7danjvt4ga6vzewy380pk52kcu9z\",\n          \"coins\": [\n            {\n              \"amount\": \"4000000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"4000000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1fe5mspz9jsq6p9hqqet86dwp276635l6gacspa\",\n          \"coins\": [\n            {\n              \"amount\": \"1000200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1000200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom14nzyt8wmx4g6zkeluelukamgsh5v4xgnc25k6j\",\n          \"coins\": [\n            {\n              \"amount\": \"508729659282\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"508729659282\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1mcslqq8ghtuf6xu987qtk64shy6rd86a2xtwu8\",\n          \"coins\": [\n            {\n              \"amount\": \"400000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"400000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1sng0f47cuvx6edxaujh24wc3dvk94q0w6r6smh\",\n          \"coins\": [\n            {\n              \"amount\": \"474221734944\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"474221734944\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom194pp2whvqynxnfyw5tqy8fzy2kxsugyrwsaynk\",\n          \"coins\": [\n            {\n              \"amount\": \"1000000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1000000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom14d92r4svhl4qa3g6q48tjekarw2kt67ngqn4lr\",\n          \"coins\": [\n            {\n              \"amount\": \"40000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"40000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1hmkqhy8ygl6tnl5g8tc503rwrmmrkjcq3lduwj\",\n          \"coins\": [\n            {\n              \"amount\": \"386336649906\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"386336649906\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom12psudf4rpaw4jwhuyx3y8sejhsynae7gv53hn6\",\n          \"coins\": [\n            {\n              \"amount\": \"320106862931\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"320106862931\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom178q202gz0093uke0jy96psyya452rt8apl4has\",\n          \"coins\": [\n            {\n              \"amount\": \"285239999451\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"285239999451\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1kr6udadsvdjymq6m75un4khg27t25st2jn8sag\",\n          \"coins\": [\n            {\n              \"amount\": \"255496772589\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"255496772589\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ymprf45c44rp9k0g2r84w2tjhsq7kalv98rgpt\",\n          \"coins\": [\n            {\n              \"amount\": \"369099401568\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"369099401568\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1w8ap0ns4d5fagjfwvph6t99uet0cwv6y6r03un\",\n          \"coins\": [\n            {\n              \"amount\": \"200997782490\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200997782490\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1svm5wl5jf4p7dwemj7wh0p4egr3js6rqtlnefu\",\n          \"coins\": [\n            {\n              \"amount\": \"197153970492\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"197153970492\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1gnnd2eaeqpp6lsd34tnp6j0m85h6r9qg0wh3vr\",\n          \"coins\": [\n            {\n              \"amount\": \"194917719034\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"194917719034\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1t0hmc79ht0qja92p6qgxn3ee3a3rzqutv7thqn\",\n          \"coins\": [\n            {\n              \"amount\": \"188630461585\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"188630461585\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom12q68xfj4r00nxnjrqk742rf0z2w6jmwaeppvr0\",\n          \"coins\": [\n            {\n              \"amount\": \"183750995527\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"183750995527\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ggc9sqvj0uhnzwxu5dyzcr05shwd2vv2guqmas\",\n          \"coins\": [\n            {\n              \"amount\": \"188148534837\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"188148534837\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom177y7sqkxmvl22j632haf8y9gv0j3wedssq5m50\",\n          \"coins\": [\n            {\n              \"amount\": \"227878425830\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"227878425830\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1zhy7l8phhpsm2c6xl9c5arcu0z90clynluwrw5\",\n          \"coins\": [\n            {\n              \"amount\": \"161481707259\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"161481707259\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1k60sfzh3ecyqfv36f7zav0089077e4zk4g6mxa\",\n          \"coins\": [\n            {\n              \"amount\": \"146840247453\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"146840247453\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1kpep8dl93ud4wgpws3tcew6as2s36c9v3csw89\",\n          \"coins\": [\n            {\n              \"amount\": \"140997260087\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"140997260087\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16lvsv3w7rnhcm079v6j9eah3xd0p3pd37hl48j\",\n          \"coins\": [\n            {\n              \"amount\": \"122742180846\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"122742180846\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1mnrwpdlnglhtqwa55fa66va0j3fv72nvkz4e2x\",\n          \"coins\": [\n            {\n              \"amount\": \"114829832854\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"114829832854\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1dt9lwmuq8rkngm5gajxchqhpcnavgp7md9v929\",\n          \"coins\": [\n            {\n              \"amount\": \"115117293353\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"115117293353\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom12xsg4qm4k5z48s79zdsz84jlhv56kmta3vyfvl\",\n          \"coins\": [\n            {\n              \"amount\": \"74772629353\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"74772629353\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1dxpm2ne0jflzr2hy9j5has6u2dvfv68calunqy\",\n          \"coins\": [\n            {\n              \"amount\": \"99815252312\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"99815252312\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1my32szlwazg9x56xqvsvtp0hqvpzm0r4u3k4ae\",\n          \"coins\": [\n            {\n              \"amount\": \"70271964895\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"70271964895\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1g0ap9fvex93yzzj69uzl74942vjvq8e4f8xtyr\",\n          \"coins\": [\n            {\n              \"amount\": \"67992083477\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"67992083477\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16zms8r32vad3z8hl2vc6wrcnanwmxf0dgh25yp\",\n          \"coins\": [\n            {\n              \"amount\": \"67229160818\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"67229160818\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1d3zlsrjyl3tzp3aly7vjduhrtrtvkvkeaqpdku\",\n          \"coins\": [\n            {\n              \"amount\": \"63422106566\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"63422106566\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom18jwk949jqgq3j2du2dgscqxqkkqw5rsjfuucf3\",\n          \"coins\": [\n            {\n              \"amount\": \"61558395847\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"61558395847\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom13fwhvawke6867s6raqux25fd24t89j5h8wf2v0\",\n          \"coins\": [\n            {\n              \"amount\": \"60883067675\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"60883067675\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom18z9vsjffvggluxcxfqwsmrz02v37hx2e3auyn2\",\n          \"coins\": [\n            {\n              \"amount\": \"63671664821\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"63671664821\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1lnkg57t7mvg5mcl7kdkevtgr9wlf6f9qtp86sk\",\n          \"coins\": [\n            {\n              \"amount\": \"70907190105\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"70907190105\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1dl5df5g2xwj02e93k547etw2ergvc3a20v5ekz\",\n          \"coins\": [\n            {\n              \"amount\": \"46480474242\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"46480474242\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom13ume6mqte5h9ngx2hh6ngc8aham7x0k6stuvkm\",\n          \"coins\": [\n            {\n              \"amount\": \"41813199988\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"41813199988\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ldjugf3uj2gwkmmsf5japfknf96zv6hw7xw7v4\",\n          \"coins\": [\n            {\n              \"amount\": \"43229857071\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"43229857071\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1y9zkl7uqjev899swng4eqfuurwaxpchwppewyc\",\n          \"coins\": [\n            {\n              \"amount\": \"40330418998\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"40330418998\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16lf2hvzy4n4gvtx37pgkkdw2e2psfjjdpej53p\",\n          \"coins\": [\n            {\n              \"amount\": \"37988147654\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"37988147654\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom15zs0cjct43xs4z4sesxcrynar5mxm82f0ykhl3\",\n          \"coins\": [\n            {\n              \"amount\": \"111131994342\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"111131994342\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1v5jqg6k7mszmchhz8kyfml5h4e2txct9jz3am4\",\n          \"coins\": [\n            {\n              \"amount\": \"37418729590\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"37418729590\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom19ys53t55r725j882gjcrnf7s449gdrds3h2hu4\",\n          \"coins\": [\n            {\n              \"amount\": \"38253993813\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"38253993813\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1en69twaxmv7xupy8lq7y539dpecx7yz8g0k8ft\",\n          \"coins\": [\n            {\n              \"amount\": \"88440007493\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"88440007493\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1kgq82m6z2jttytv7fvwy2rklhq5k03gc2h9sej\",\n          \"coins\": [\n            {\n              \"amount\": \"30494554808\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"30494554808\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1hvk6s053m6qdlz9kwllgldwf4qp2c3mrlh9s2q\",\n          \"coins\": [\n            {\n              \"amount\": \"29370149824\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"29370149824\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ch6nukdgj55c9sk4h5t8spzhahuuvn86gqvarm\",\n          \"coins\": [\n            {\n              \"amount\": \"27485323135\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"27485323135\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1rqudjcrdwqedffxufmqgsleuguhm7pkaq0alce\",\n          \"coins\": [\n            {\n              \"amount\": \"27363284437\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"27363284437\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1qgqkc9t3pfsp6yxjwds70e4r9y0p6resmfnymc\",\n          \"coins\": [\n            {\n              \"amount\": \"26376882296\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"26376882296\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom12kd8w45rqxuwpwqvpmdyvvdey9ezeqhav4nn85\",\n          \"coins\": [\n            {\n              \"amount\": \"26208333897\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"26208333897\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom152kqs8p7d3jy6kn4uk87ve3alkuqjgewt3cmvz\",\n          \"coins\": [\n            {\n              \"amount\": \"28921406054\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"28921406054\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1dn09uyhwmv3ratntc7c603vczgrec32c2fylpj\",\n          \"coins\": [\n            {\n              \"amount\": \"24175157388\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"24175157388\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1qezgmksavgdvcvf9ckhazfy3jfw8whhzfrvtlz\",\n          \"coins\": [\n            {\n              \"amount\": \"21979059507\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"21979059507\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1d552nfgekkugdgxw3zl242qpxapl67jfkz76tp\",\n          \"coins\": [\n            {\n              \"amount\": \"21555502893\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"21555502893\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom10vpygn9ftv85ra7j7qpewuq5jdgvpjmehlds0g\",\n          \"coins\": [\n            {\n              \"amount\": \"20335729382\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"20335729382\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom18naxcfp2s397a2ucav2m53f003uylk3qz9fvr7\",\n          \"coins\": [\n            {\n              \"amount\": \"95514429798\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"95514429798\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom18t3kx877vyvstcvn50cgn5w6hppe8ce0pq72m2\",\n          \"coins\": [\n            {\n              \"amount\": \"18546327724\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"18546327724\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1kfqv2fzzu6dgwnf6snql2jslwdws07fl2gz37u\",\n          \"coins\": [\n            {\n              \"amount\": \"17879700159\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"17879700159\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ggayl03vvv763az6eez66jzwuunyqkcusk8fwj\",\n          \"coins\": [\n            {\n              \"amount\": \"17754934798\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"17754934798\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1fjeq0urgk4x0s6pl2p2fes8c95426amp7lv4dv\",\n          \"coins\": [\n            {\n              \"amount\": \"17601345097\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"17601345097\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1jgh7ghrcr47tuahawzvg3svv2hxkxfx5u9lzr2\",\n          \"coins\": [\n            {\n              \"amount\": \"17333444802\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"17333444802\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom19y467lyhqlpa52y6snq9cxw47xhwq0th3p05r0\",\n          \"coins\": [\n            {\n              \"amount\": \"14256149914\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"14256149914\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16ge9uqpqf78jdt0uz58ycalhtg59w77qm9t7d2\",\n          \"coins\": [\n            {\n              \"amount\": \"14222312706\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"14222312706\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1463la66ac89tmlwgvx20c4d2jv84ekzs8kzh87\",\n          \"coins\": [\n            {\n              \"amount\": \"13368713572\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"13368713572\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom164k2s2s2td6a30d3rvnv93scy3v29psw4j3ndm\",\n          \"coins\": [\n            {\n              \"amount\": \"12701785716\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"12701785716\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1rya5547x4lrwc2npd63s89ny2dvhamv9dfx9x9\",\n          \"coins\": [\n            {\n              \"amount\": \"12090950492\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"12090950492\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom18wn5kyxewwk6qh97493xtj9gufpmqserfahc37\",\n          \"coins\": [\n            {\n              \"amount\": \"12063356572\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"12063356572\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1lljcf37yxh24l3v4kwqsyghwz4ywlg6urg4kte\",\n          \"coins\": [\n            {\n              \"amount\": \"13616553392\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"13616553392\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1d7n8znqg635yxnzlsycnt6kut8z5du5yftutrf\",\n          \"coins\": [\n            {\n              \"amount\": \"10958899451\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"10958899451\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16pdckvu70ufzvm8avd9anga6k35nu7axym02wp\",\n          \"coins\": [\n            {\n              \"amount\": \"9792986284\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"9792986284\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom18txzlmkqf264a2awhey6lmeq0dtv5ex69d2fcy\",\n          \"coins\": [\n            {\n              \"amount\": \"9333557553\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"9333557553\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1mmtt0cnsgwx3t90vs4tn9k08kw8xn4v3pggfu7\",\n          \"coins\": [\n            {\n              \"amount\": \"6701991111\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"6701991111\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1mryr27k3h8kqr5ahj82v0ym2xexdewfc9rmng8\",\n          \"coins\": [\n            {\n              \"amount\": \"6310270182\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"6310270182\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1gg73t0eyrkqf953waqxh6uqah62p46jyg82ulr\",\n          \"coins\": [\n            {\n              \"amount\": \"5787292447\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"5787292447\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1jx0az02ccnt4mgj2r9vhvycsdjsztrrgdkwzr3\",\n          \"coins\": [\n            {\n              \"amount\": \"4220671315\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"4220671315\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1r90j4656xsug2hkj57a3knqcs9huh3ea88ykhp\",\n          \"coins\": [\n            {\n              \"amount\": \"3475567070\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"3475567070\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1f7nx65pmayfenpfwzwaamwas4ygmvalq2q2ayq\",\n          \"coins\": [\n            {\n              \"amount\": \"73338027208\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"73338027208\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1zl0t5703q42qx7drxsgl9thjwlul5x6unjhwgn\",\n          \"coins\": [\n            {\n              \"amount\": \"2742969308\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"2742969308\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom13q0m4hw6pmajqdqn4g464vzmst78sf55ktrp05\",\n          \"coins\": [\n            {\n              \"amount\": \"2064986311\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"2064986311\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1cjyv02cja896rr5y5lks79enk2nretn3mqyc69\",\n          \"coins\": [\n            {\n              \"amount\": \"13447758288\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"13447758288\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16qu2ymnzzjn05xc6yszjy50caaahcahdvmex5e\",\n          \"coins\": [\n            {\n              \"amount\": \"1362390306\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1362390306\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1jst67u54vquzvun3dawpmpwyx5ar8mayaak5j7\",\n          \"coins\": [\n            {\n              \"amount\": \"181160067\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"181160067\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16s7gwc944patdynnfnvac0jh5u76wsnflty377\",\n          \"coins\": [\n            {\n              \"amount\": \"77674844\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"77674844\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1s3lgc3mgy4ltwr796qk6j73xmau4njueds0mgu\",\n          \"coins\": [\n            {\n              \"amount\": \"1340337491769\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1340337491769\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom10556xtnp39nvx3ec3yjafug662pyt6af84n477\",\n          \"coins\": [\n            {\n              \"amount\": \"1304153455839\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1304153455839\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ffve0zx389ffl80ae9t8jmghcjuzdlqr5eayfd\",\n          \"coins\": [\n            {\n              \"amount\": \"701778551659\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"701778551659\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ftah3e558ww7xutn5w8h7vrqa9v69pntztnr3p\",\n          \"coins\": [\n            {\n              \"amount\": \"622444466499\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"622444466499\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1wnpak7sfawsfv9c8vqe7naxfa4g99lv77d7c0z\",\n          \"coins\": [\n            {\n              \"amount\": \"517421971282\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"517421971282\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1sgy27lctdrc5egpvc8f02rgzml6hmmvh5wu6xk\",\n          \"coins\": [\n            {\n              \"amount\": \"359172486938\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"359172486938\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1cg79pj70mgl8xlum0rw5yy6enk9jszsrzvwysn\",\n          \"coins\": [\n            {\n              \"amount\": \"279430823965\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"279430823965\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom13dpy00jest96g7h5vdgvg9zpxq6xnclh5hzw5l\",\n          \"coins\": [\n            {\n              \"amount\": \"258229369437\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"258229369437\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1mdq5r6az6z8su68zj6px88j2ukr78ea4ggkzt6\",\n          \"coins\": [\n            {\n              \"amount\": \"237448433882\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"237448433882\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1lepnu7nt05g79jtmfp2pgrpys3fjc4p74sc0l2\",\n          \"coins\": [\n            {\n              \"amount\": \"182911039870\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"182911039870\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1d5lu67hu3lhqtw6zyv7uy4gkfpdtfnzxdu6mrq\",\n          \"coins\": [\n            {\n              \"amount\": \"157995617348\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"157995617348\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16jttzjgks48kqrhk5e68yv0gv6dt0rpw2f5pwn\",\n          \"coins\": [\n            {\n              \"amount\": \"141302079887\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"141302079887\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1e20hw2pqcgxvumkwn2qeeavcrswzskzjhr2aq0\",\n          \"coins\": [\n            {\n              \"amount\": \"119454359990\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"119454359990\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom17z2fywzrdld7qmwzpsq0atxfwcns8rp833rgxy\",\n          \"coins\": [\n            {\n              \"amount\": \"95223358775\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"95223358775\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1tu0e0ggvjtv4gvzcranjnrykac0umnf8y8fm0r\",\n          \"coins\": [\n            {\n              \"amount\": \"92010985676\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"92010985676\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1sltcfypwms38jjj3g38rg7ldx3e6uqrzrnkf9y\",\n          \"coins\": [\n            {\n              \"amount\": \"91965450766\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"91965450766\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1zy553za8nenzukmv65240323jhuvxzym4pl6w9\",\n          \"coins\": [\n            {\n              \"amount\": \"154293211852\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"154293211852\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1lpfs6xv765u4yxr8rlyn5ux0g2a8tyt90hsnas\",\n          \"coins\": [\n            {\n              \"amount\": \"59256843788\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"59256843788\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1smqr5tp684g07aekcn0w852wqlme5mn6dmsny3\",\n          \"coins\": [\n            {\n              \"amount\": \"47098839942\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"47098839942\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1eqkdzfcjnu20ywju35rf3nutxzjxjaqnxqfyyz\",\n          \"coins\": [\n            {\n              \"amount\": \"44081312892\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"44081312892\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1waac73cpffx7suhpkvnn8w0a8s2cgzn66x2aka\",\n          \"coins\": [\n            {\n              \"amount\": \"42415701749\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"42415701749\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16macu2qtc0jmqc7txvf0wkz84cycsx728ah0xc\",\n          \"coins\": [\n            {\n              \"amount\": \"97996176301\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"97996176301\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1fapqgamx3c8za8d3z56sydjtjygyu0ly752j8g\",\n          \"coins\": [\n            {\n              \"amount\": \"37850807372\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"37850807372\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1w4548vrnvc7t9j2ly55nvkjvhwqt9thnfcvuw6\",\n          \"coins\": [\n            {\n              \"amount\": \"33395512349\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"33395512349\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom133t8m00w7llsslnf05zdhehharntly8dqzpfs8\",\n          \"coins\": [\n            {\n              \"amount\": \"31992273571\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"31992273571\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1smtmk8fe3qhlwj3h7nynl6p42946qydzvgj9va\",\n          \"coins\": [\n            {\n              \"amount\": \"29390986364\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"29390986364\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1csf3up94qheqz88fvvlwjl7vc5sdymarktrvpw\",\n          \"coins\": [\n            {\n              \"amount\": \"18442151620\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"18442151620\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1tr3eyy9l480pxjk0ygudwpfus7j8pgdljn09jm\",\n          \"coins\": [\n            {\n              \"amount\": \"17537519175\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"17537519175\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16ahkkv0jzhtp73z83qlhqrypss6jpjm8eekpwv\",\n          \"coins\": [\n            {\n              \"amount\": \"17375703563\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"17375703563\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1htq7u8gy9muv4fk6st04524tdzy8rv04528gys\",\n          \"coins\": [\n            {\n              \"amount\": \"16744189104\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"16744189104\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1kk9clwd4eva7ww95gn4rw3xzuwfs0983sl5cwt\",\n          \"coins\": [\n            {\n              \"amount\": \"16191669541\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"16191669541\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1k7cl9ya9qq30c7m4rvg3823hrc8k80eetqvhj8\",\n          \"coins\": [\n            {\n              \"amount\": \"14797976623\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"14797976623\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16d69u47km5vqdvf6fr8qyhktlacgka7fdvazr8\",\n          \"coins\": [\n            {\n              \"amount\": \"14751375909\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"14751375909\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1njsr8tngxtygsc73mrtn5738ztkzqy7c7y7h3t\",\n          \"coins\": [\n            {\n              \"amount\": \"51066633718\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"51066633718\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1kf0d64nuwsf2zeul5wkx78fsznplnlpsfh7fqw\",\n          \"coins\": [\n            {\n              \"amount\": \"11673069511\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"11673069511\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom18ghjkwygsvjcsh20tc5zzhfttxxuex7a9lq8ps\",\n          \"coins\": [\n            {\n              \"amount\": \"9561458741\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"9561458741\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1s2a7rckcky6jmhncxwy0xtwf2ymg87puk6jpzz\",\n          \"coins\": [\n            {\n              \"amount\": \"14991446142\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"14991446142\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1679yrs8dmska7wcsawgy2m25kwucm3z0hwr74y\",\n          \"coins\": [\n            {\n              \"amount\": \"388969016352\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"388969016352\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom15gk8edxtvvp372flljk884fav55y8ehwru4u8w\",\n          \"coins\": [\n            {\n              \"amount\": \"2279889403\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"2279889403\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1jz57cgfr248y9w6sn76l7pugjkr6e7zh6y2grp\",\n          \"coins\": [\n            {\n              \"amount\": \"2378739020\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"2378739020\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1gw5kdey7fs9wdh05w66s0h4s24tjdvtc9v6vpe\",\n          \"coins\": [\n            {\n              \"amount\": \"1799479675\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1799479675\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1kajt7sxfpnfujm7ptj90654lmwz4sftpc9mp9a\",\n          \"coins\": [\n            {\n              \"amount\": \"1743792737\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1743792737\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1t575qeee3qgshuf964qal057z77vljqef9tlck\",\n          \"coins\": [\n            {\n              \"amount\": \"1099995800\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1099995800\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom105zy26ze9gean4qukqlvhkv4mtcndc9t2xaydz\",\n          \"coins\": [\n            {\n              \"amount\": \"1006206924\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1006206924\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1a30w6j4m6g3s2c6zt02z56xynnuaqmn3ahwxuq\",\n          \"coins\": [\n            {\n              \"amount\": \"974688373\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"974688373\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1pmaltcu0x97x8j5klc8xluaapkzcvztcn2vkmw\",\n          \"coins\": [\n            {\n              \"amount\": \"736741030\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"736741030\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1n3mhyp9fvcmuu8l0q8qvjy07x0rql8q4uwev5z\",\n          \"coins\": [\n            {\n              \"amount\": \"704276829\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"704276829\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1u3ap2d4ytcqrr6jlsjf380g3lvgldq4m64s7dg\",\n          \"coins\": [\n            {\n              \"amount\": \"675487504\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"675487504\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1keny4peq77drtcdj6fscd9eknqcqyjmxqcr8t8\",\n          \"coins\": [\n            {\n              \"amount\": \"647527281\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"647527281\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1kk79xcsuah7ckvunku78094gyh7900ehkllkur\",\n          \"coins\": [\n            {\n              \"amount\": \"173703544\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"173703544\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom137eezcxcyqgt6kshfdfuvnsdgwpujyje2l8qdz\",\n          \"coins\": [\n            {\n              \"amount\": \"73708712\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"73708712\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1uz39kh64w8p5df034fh6g5hwpdq8m0h5rx58he\",\n          \"coins\": [\n            {\n              \"amount\": \"49997750\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"49997750\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1kz6s2mp4rg7plj8p4qqe2wkegn4ldw3ak2a7qc\",\n          \"coins\": [\n            {\n              \"amount\": \"233827\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"233827\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1quchyywzdxp62dq3rwan8fg35v6j58sjwnfpuu\",\n          \"coins\": [\n            {\n              \"amount\": \"432771825520\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"432771825520\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1x95keq9l9y9p7hjdt6xd8wnknrpnjsqrqhpwc9\",\n          \"coins\": [\n            {\n              \"amount\": \"150000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"150000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1z98eg2ztdp2glyla62629nrlvczg8s7fvc0znp\",\n          \"coins\": [\n            {\n              \"amount\": \"100000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"100000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1xvssufw8ke03halg8wgu8m994ktxz0y9vm6tqn\",\n          \"coins\": [\n            {\n              \"amount\": \"100000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"100000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1vxxfhd8txmrq76jx3gj7sdrvg0vvqret6kxpgd\",\n          \"coins\": [\n            {\n              \"amount\": \"100000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"100000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1vtu55cc7m6yz9zfg5vqdk80f2g68petgzj9fv4\",\n          \"coins\": [\n            {\n              \"amount\": \"100000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"100000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16yf94eecl6h44l5w7zp75skh3rg0k4veavx762\",\n          \"coins\": [\n            {\n              \"amount\": \"25185396846\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"25185396846\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1gxyf6tsjamnavmkfk43mwfzwscn4tgfkz8k85n\",\n          \"coins\": [\n            {\n              \"amount\": \"5000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"5000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1w4tvyvf3hhpcwv9d4axa8n0mmj5d6ypvpq5mj6\",\n          \"coins\": [\n            {\n              \"amount\": \"278432605496\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"278432605496\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1xk4a2u2rjt7mqu5eg8xtxk37l28r3cugkqk9lp\",\n          \"coins\": [\n            {\n              \"amount\": \"233157212646\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"233157212646\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom143x4d5wx50204zyreqg8ekgq3n3fcaxucacztp\",\n          \"coins\": [\n            {\n              \"amount\": \"9826875134\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"9826875134\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1y83nga220nfjt9zz0mmqc90cd705az95n5cfwj\",\n          \"coins\": [\n            {\n              \"amount\": \"9608859331\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"9608859331\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1hyjhy0tp6geral2g9vj9nyteglf8t5q42gfq3j\",\n          \"coins\": [\n            {\n              \"amount\": \"2388890839\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"2388890839\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1d8mq46wt2yxsgwrmh6hhfgycl0537w8gggn47f\",\n          \"coins\": [\n            {\n              \"amount\": \"2182283065\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"2182283065\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1p0r7uxstcw8ehrwuj4kn8qzzs0yypsjwxgd445\",\n          \"coins\": [\n            {\n              \"amount\": \"2018839163\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"2018839163\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1duc9gthaeg82lx9pdf642g043xqhgxgxmfvwsz\",\n          \"coins\": [\n            {\n              \"amount\": \"994320008\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"994320008\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1a4mzr2y2g0cc9f0uhyeh3ftmsfxzqwxfdqtd7c\",\n          \"coins\": [\n            {\n              \"amount\": \"7092669793\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"7092669793\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1xpl2sx64ra5san4su0r0hj8z9eh5cf5dcv48qa\",\n          \"coins\": [\n            {\n              \"amount\": \"970654649\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"970654649\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1hem3076xmat8ttr0cg0nnn2lghtc2p7xtzpj8s\",\n          \"coins\": [\n            {\n              \"amount\": \"951329198\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"951329198\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1402rpwdquxxkgvl740f6w69l65eau5vkqcvrax\",\n          \"coins\": [\n            {\n              \"amount\": \"16533932739\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"16533932739\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1z8mlsd42eaguaqf5gexy5a7jxgpwpgvz99qzft\",\n          \"coins\": [\n            {\n              \"amount\": \"218609970\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"218609970\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1v2n3hg6s4resacgpemfyrd5hul2ntk7tftnk6u\",\n          \"coins\": [\n            {\n              \"amount\": \"218382779\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"218382779\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ufpz4dlnfawg0pr5dcq4hkrf9gs30mu0272p9w\",\n          \"coins\": [\n            {\n              \"amount\": \"218341548\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"218341548\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1mkhugmqg9c0qe27stz3m4my9xq7e9pct0jyr3p\",\n          \"coins\": [\n            {\n              \"amount\": \"218115192\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"218115192\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1argjwgcplguenq4l92ggn06wadnfrz0ecqrmqs\",\n          \"coins\": [\n            {\n              \"amount\": \"50591836687\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"50591836687\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ke7kxdn29w2lrxt9dzusa6shvmwd8xm9gxm2zf\",\n          \"coins\": [\n            {\n              \"amount\": \"120588855018\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"120588855018\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1fpl40sref5vp8kfm7xkqlq5qc0v4xrjvk89kwa\",\n          \"coins\": [\n            {\n              \"amount\": \"11118481031\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"11118481031\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1g2d9xyuf7ddgaj4llxvg50pfhlsr9ehf2r8dr6\",\n          \"coins\": [\n            {\n              \"amount\": \"5689509530\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"5689509530\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom152m9xcx0ht7yxr5834ju7qjcyvetw8amd04apw\",\n          \"coins\": [\n            {\n              \"amount\": \"71337787640\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"71337787640\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom15n3t80p7eseld809f7fu3s9tlcezlymkfeu59n\",\n          \"coins\": [\n            {\n              \"amount\": \"4294256393\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"4294256393\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ke6pp2kq2wx74tlh5fxqgp7af6jtsna3kktuh6\",\n          \"coins\": [\n            {\n              \"amount\": \"11975798321\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"11975798321\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1daxxqs56f6j5qxxtjrjkexghsmnaj66tejshc8\",\n          \"coins\": [\n            {\n              \"amount\": \"72921262872\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"72921262872\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1nywu6z26tpcrr2kcqe8z7t235wrfkhfcfhlzmk\",\n          \"coins\": [\n            {\n              \"amount\": \"10932888406\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"10932888406\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1mnqlcc7mslzxcf798acp80u2fxudsuzdn0px6s\",\n          \"coins\": [\n            {\n              \"amount\": \"12677003041\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"12677003041\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ccvpcq9ffy0qd2ca8nmmpzfamtyjfc9znwak8m\",\n          \"coins\": [\n            {\n              \"amount\": \"32639852509\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"32639852509\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1w4tk9lj8qtx2x4xf4emgrnq950hnlajsxlnl3u\",\n          \"coins\": [\n            {\n              \"amount\": \"3420409835\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"3420409835\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1s8l0akn79kk74g32kf86stfsa08ck9qmm4v6ws\",\n          \"coins\": [\n            {\n              \"amount\": \"3409436625\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"3409436625\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom10aqelwndkz9k8uawp26elxep64ayc5rgn24h7p\",\n          \"coins\": [\n            {\n              \"amount\": \"3389782351\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"3389782351\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ap7zhu5gxlk7n3g97dqehm9nnt3mje3nr5jecs\",\n          \"coins\": [\n            {\n              \"amount\": \"3368708754\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"3368708754\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1j6he98h8xwnt2yp9eczhhuff3k3hvk98gr27ee\",\n          \"coins\": [\n            {\n              \"amount\": \"3326309936\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"3326309936\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1mskldfjlnup46adzss7lukfh3emm6z4lmqhk7z\",\n          \"coins\": [\n            {\n              \"amount\": \"3275155354\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"3275155354\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom12ysvrknuwdr6737fnc06v875whfh52xj3ewaf2\",\n          \"coins\": [\n            {\n              \"amount\": \"2961579452\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"2961579452\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom10trdf5eyfcmc9graltx4hmpgznhrm7hdz82k2n\",\n          \"coins\": [\n            {\n              \"amount\": \"2941697143\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"2941697143\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1nvr4qa7szsd3e7xfysn946gcqv5wyemlcxmxpw\",\n          \"coins\": [\n            {\n              \"amount\": \"10653917696\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"10653917696\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1wm4026rxqcrkh09k806m6y4lys942etx5cjz9z\",\n          \"coins\": [\n            {\n              \"amount\": \"2128629825\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"2128629825\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1zeg2k7kd8qadmwd3kslwmag3erq7hqxt5aajjz\",\n          \"coins\": [\n            {\n              \"amount\": \"13163031473\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"13163031473\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16h7tyj5p69t3r7qasunf938cx2elp38fhqc7zr\",\n          \"coins\": [\n            {\n              \"amount\": \"14451060685\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"14451060685\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1jdmfxzpnqqlhjsju3mz7qsgvvdparw5acx7t62\",\n          \"coins\": [\n            {\n              \"amount\": \"1664373777\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1664373777\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1smsn8u0h5tlvt3jazf78nnrv54aspged9h2nl9\",\n          \"coins\": [\n            {\n              \"amount\": \"1654337644\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1654337644\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom15kl5tv0smz5h8eewu5hs9mtnusz4dereyqxxtw\",\n          \"coins\": [\n            {\n              \"amount\": \"1408569410\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1408569410\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1uew6fawa3ahu60tj5kspmr4u0zvljj69q4s3ps\",\n          \"coins\": [\n            {\n              \"amount\": \"1380580057\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1380580057\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ezpth4mp3eeqdt49kgqd5ctr69xev6v2gykpur\",\n          \"coins\": [\n            {\n              \"amount\": \"1351419074\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1351419074\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1avvkajdvmj9d8jpl0ga4scftjykeuhjpsa9kf5\",\n          \"coins\": [\n            {\n              \"amount\": \"1334996609\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1334996609\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1gd9r9uhd8a5k2naudq4hua3vf3lkwhfrm63qhq\",\n          \"coins\": [\n            {\n              \"amount\": \"1301510822\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1301510822\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1vrym7t34gs9t2dkd8z849zcymkj54kgq7pdf8z\",\n          \"coins\": [\n            {\n              \"amount\": \"1231063676\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1231063676\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1lk3yjcn0lvwj9f2dj75m8y3smpq5s5zsnnj3nz\",\n          \"coins\": [\n            {\n              \"amount\": \"1202315516\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1202315516\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1hk49ws6ded79xmwehv7yrw3q6mfj7kulafxqhr\",\n          \"coins\": [\n            {\n              \"amount\": \"1108262797\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1108262797\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1vx9qctuxswd6ydcv4z5pcuuvct7y9l0nqq799x\",\n          \"coins\": [\n            {\n              \"amount\": \"1083041319\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1083041319\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ydc5fy9fjdygvgw36u49yj39fr67pd9mv67ety\",\n          \"coins\": [\n            {\n              \"amount\": \"894267502\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"894267502\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1wkjn2nc4v5g3tpjj043wxtmeda90ql3yqqddav\",\n          \"coins\": [\n            {\n              \"amount\": \"814730401\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"814730401\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1gh09lmm8flkuu3w38mr4axvunnu6qqlapuwzrv\",\n          \"coins\": [\n            {\n              \"amount\": \"760249650\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"760249650\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1m0tjgkrh4td9fcp8nnssu3rfdahzfgdshsall9\",\n          \"coins\": [\n            {\n              \"amount\": \"682238027\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"682238027\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1mnfalar08dsvtwutmh43lnhx2zzmq7xhdulemj\",\n          \"coins\": [\n            {\n              \"amount\": \"15592862337\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"15592862337\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1g36u05ehktgw5h5udj8hyudd9057d9tx9r6zef\",\n          \"coins\": [\n            {\n              \"amount\": \"303617054\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"303617054\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom175tm6fucmk0e29cfgzaud6kqgksy25p884kjx0\",\n          \"coins\": [\n            {\n              \"amount\": \"26259431\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"26259431\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1v46pz6ddetfc3tnvdr28ss0l48jhazgynvp3c7\",\n          \"coins\": [\n            {\n              \"amount\": \"14979552\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"14979552\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1stfw0z5nf2ncxxtrk7zndpf2dla3nh379egwcy\",\n          \"coins\": [\n            {\n              \"amount\": \"61678847673\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"61678847673\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom147rnn0rxqkythj4j9ccq0kytmh7f005rn0a3zj\",\n          \"coins\": [\n            {\n              \"amount\": \"55311848847\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"55311848847\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1pswgrf5ap0kld3lpun5z4x08wh7nmgamd8mgex\",\n          \"coins\": [\n            {\n              \"amount\": \"8641145058\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"8641145058\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1wt9h9wm3zf7yzsy68x7v8p973w02kw8yyurh55\",\n          \"coins\": [\n            {\n              \"amount\": \"10537454450\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"10537454450\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ucl2c39dpwqm9pp6cvmlazn2tkwavszhs27j96\",\n          \"coins\": [\n            {\n              \"amount\": \"9691549420\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"9691549420\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16w2xwdzf6tzucpwcjjqtg9656a4kkv7g2f6vk9\",\n          \"coins\": [\n            {\n              \"amount\": \"458125791\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"458125791\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1hmrxmc27fu4ggdpvpxqtahn6uvtj38vuu77a02\",\n          \"coins\": [\n            {\n              \"amount\": \"1854496759\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1854496759\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1uwfk6h06w8vnhmyp48vwcpgwncsec8yv3z0xyg\",\n          \"coins\": [\n            {\n              \"amount\": \"1502715615\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1502715615\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1nuc82t22xgp09rs2tdnlxxgm95pjg5matjwwye\",\n          \"coins\": [\n            {\n              \"amount\": \"3573424538\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"3573424538\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom15kdrahda8qcyfa9xe8kt2f737m22x2sleslj5l\",\n          \"coins\": [\n            {\n              \"amount\": \"1631606648\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1631606648\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1n89a8avc4j7cv75lfsyynx5kazlk80ar5qcdx6\",\n          \"coins\": [\n            {\n              \"amount\": \"41000576\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"41000576\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom19vgwu99fdawejnedgsfx8dmxuc0z4emjf7a044\",\n          \"coins\": [\n            {\n              \"amount\": \"5014404214\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"5014404214\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1s6v5ragv9gg3sq7j3aeqtyy82uaxv3y05hzhh8\",\n          \"coins\": [\n            {\n              \"amount\": \"4273801138\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"4273801138\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1y6huw3naar38u4rtgqmlh9smfu93gszst9tawp\",\n          \"coins\": [\n            {\n              \"amount\": \"1688512495\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1688512495\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1hqeqy4s039q0qcpayqcyaq5hyyvmph97t79m9n\",\n          \"coins\": [\n            {\n              \"amount\": \"1190379955\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1190379955\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom14h099ukgvp4fm9qs0xnmljzhevrmneq6m6cltv\",\n          \"coins\": [\n            {\n              \"amount\": \"978084362\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"978084362\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1xhk0s2ynz2sq3ak3lr4u5gg0da4vyaxkfjhg7l\",\n          \"coins\": [\n            {\n              \"amount\": \"924447759\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"924447759\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom14z6glatrayal5j53632kcefskyge6ujmgshqfv\",\n          \"coins\": [\n            {\n              \"amount\": \"327466267\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"327466267\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom14n625exc6ftee3t6tez3hj47lv49amjzan5pkr\",\n          \"coins\": [\n            {\n              \"amount\": \"236797768\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"236797768\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1fhj7pkuvwflr7z7ngp2v9tj7g58aq2tjgvqfaj\",\n          \"coins\": [\n            {\n              \"amount\": \"135097195\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"135097195\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1l4krahjfp87exsmumzpnrfeaer2gsghpuwhfp6\",\n          \"coins\": [\n            {\n              \"amount\": \"112519320\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"112519320\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1udal5nr3lz7mg7j7k79se4rz0tsjj8lur45q99\",\n          \"coins\": [\n            {\n              \"amount\": \"9724669100\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"9724669100\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1n55zyf6wlvh8jp4wxqgx4ta283jx0e2n2tutgm\",\n          \"coins\": [\n            {\n              \"amount\": \"1099456389\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1099456389\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1glgevt43557u6s7a2q9q40kzt8myw4ngcv6wr6\",\n          \"coins\": [\n            {\n              \"amount\": \"309112576\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"309112576\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1mj0sj4eaar5qnjn3l05ep5wgq3l6agtvvqwvyk\",\n          \"coins\": [\n            {\n              \"amount\": \"1178234463\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1178234463\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1sm9sq4wnn62tk5yz0x3fvvx2ea9efguqwvdu64\",\n          \"coins\": [\n            {\n              \"amount\": \"722135415\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"722135415\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom190y8vwhmyjdnk7cfutcm7u8haw80xyejdwxsql\",\n          \"coins\": [\n            {\n              \"amount\": \"56952126\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"56952126\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1rfh303jsl5297sxgs5txpt97lvxpjt4he3yy5r\",\n          \"coins\": [\n            {\n              \"amount\": \"54988260\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"54988260\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom12u6qgyrdsy4xmw04vfkkkh9a9tqzw66g59hudt\",\n          \"coins\": [\n            {\n              \"amount\": \"27886903\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"27886903\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1pjvkddp4fmx8ym5j7s7su8kn3zuqj255djzpja\",\n          \"coins\": [\n            {\n              \"amount\": \"4022780851\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"4022780851\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom13nrdf490fsuv4rwjp02hlyvalqjkn5u6xxqvqz\",\n          \"coins\": [\n            {\n              \"amount\": \"14925385\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"14925385\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1fp9q2t9zn9gr5qjh9wljxuavtcsc4h8uqgnm2e\",\n          \"coins\": [\n            {\n              \"amount\": \"12175972\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"12175972\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1u2s32xsws9y2sskz6zvn7lawepdqxad5dcsyy6\",\n          \"coins\": [\n            {\n              \"amount\": \"330695020\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"330695020\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom158mysantvvk7x65tfhhuu8q2va4ls34r54hk78\",\n          \"coins\": [\n            {\n              \"amount\": \"9819332\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"9819332\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1clalfxmsrqdgnqq5uxlx0mc983pyp3wq4xl03c\",\n          \"coins\": [\n            {\n              \"amount\": \"4713279\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"4713279\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1wf8alywyvlxy2dqfe38efdpdmuscfpf4jxvg6r\",\n          \"coins\": [\n            {\n              \"amount\": \"4320506\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"4320506\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom13zf8kghx7h5fyttk6xdnjqn9c87z0rd36sfqjw\",\n          \"coins\": [\n            {\n              \"amount\": \"4320506\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"4320506\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1cc43k76udpd3xvpn6md76zz3ru6nvcnreeg2eq\",\n          \"coins\": [\n            {\n              \"amount\": \"3927733\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"3927733\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1l5x6kerswths5xl0d6672y9yyn9mg2vw8yz59q\",\n          \"coins\": [\n            {\n              \"amount\": \"3142186\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"3142186\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1qe4sguqg8ztlyy7psf7lzwr4ahph9j36k5hltz\",\n          \"coins\": [\n            {\n              \"amount\": \"2749413\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"2749413\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1mn8ev805fde2xswght0snwfayfj9tn54dt24zg\",\n          \"coins\": [\n            {\n              \"amount\": \"2749413\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"2749413\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16vc2mjjfxx2h5m6jpdp4nqfu5095qaeeq27qxj\",\n          \"coins\": [\n            {\n              \"amount\": \"2749413\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"2749413\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1jmhqgld7luvuhh42wac24z6nlggjvkc7fzgs62\",\n          \"coins\": [\n            {\n              \"amount\": \"2356640\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"2356640\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1qjknpllzp6w6qsxxjx52zxald29wpyzljznzdv\",\n          \"coins\": [\n            {\n              \"amount\": \"1571093\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1571093\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1eq2h9enjxsg5s08scr69lzwde8fl79snw20dc8\",\n          \"coins\": [\n            {\n              \"amount\": \"1571093\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1571093\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1dx8mvxfu6mpfnjehvdkp9lsvu78ek2gjr7r766\",\n          \"coins\": [\n            {\n              \"amount\": \"1571093\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1571093\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom19uryr2zuxcfdevfq429jng9a2evxwadlsky04c\",\n          \"coins\": [\n            {\n              \"amount\": \"198757551\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"198757551\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16862syzdtc6h0sxz92jhnjjas5yhhjgzvyewwd\",\n          \"coins\": [\n            {\n              \"amount\": \"1571093\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1571093\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1teuan269feyw4ax94jfp4pcgrhqnn28gxxz8mw\",\n          \"coins\": [\n            {\n              \"amount\": \"20201178320\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"20201178320\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1yvlp9gzqaufwz02swp5wqsqhlmfcrcl8m22gzm\",\n          \"coins\": [\n            {\n              \"amount\": \"200785547\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200785547\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1latzme6xf6s8tsrymuu6laf2ks2humqvfcz7m6\",\n          \"coins\": [\n            {\n              \"amount\": \"785547\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"785547\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ec9da8avgv7tnvsx3v8g8veqrhlqq26lnncg5t\",\n          \"coins\": [\n            {\n              \"amount\": \"785547\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"785547\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1c7pv6zyza76f3yhv0zvjc042e8m7w796qmvkse\",\n          \"coins\": [\n            {\n              \"amount\": \"785547\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"785547\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1yslufs9kq762qty0wh62c8qtlpm2202ejmw4ef\",\n          \"coins\": [\n            {\n              \"amount\": \"392773\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"392773\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1y935ede6znmcvqdmn6mnl2aa5zxcqvvracsczu\",\n          \"coins\": [\n            {\n              \"amount\": \"392773\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"392773\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1y675phjdvw576ahlcmlamrzr28rjht9mx709lg\",\n          \"coins\": [\n            {\n              \"amount\": \"392773\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"392773\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1kjhdx3nkh6krdhryvjzkq33xwh6wsyy7y8ark6\",\n          \"coins\": [\n            {\n              \"amount\": \"392773\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"392773\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1jxpe7neu764uasz5y5u4lrr5jtltv430gjm9dw\",\n          \"coins\": [\n            {\n              \"amount\": \"392773\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"392773\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1hq8d6pu2l6wkrwu9jxcqjcu55g8l43zxmrd6dk\",\n          \"coins\": [\n            {\n              \"amount\": \"392773\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"392773\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1c4h647a9rj8n9zye5ttmh9chpg66f3ffdvdds0\",\n          \"coins\": [\n            {\n              \"amount\": \"392773\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"392773\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom14ysuwg6p4fzfaa6tg4s3hazu86pfevsw4cegce\",\n          \"coins\": [\n            {\n              \"amount\": \"392773\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"392773\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1x7wp0u877dkw7m84jv54c9g6zpd5r8t2nm47gn\",\n          \"coins\": [\n            {\n              \"amount\": \"33812731064\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"33812731064\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1gss7y04dky2fykck4dyp0pe39wxawlxm2l0yj2\",\n          \"coins\": [\n            {\n              \"amount\": \"28704261935\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"28704261935\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1cerh237zd5rdexptjw8ryhwdf2tc9eupz7sfn0\",\n          \"coins\": [\n            {\n              \"amount\": \"20918517127\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"20918517127\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1fz799u9jc0umceng3nkjt0njxy6y3550uq06jn\",\n          \"coins\": [\n            {\n              \"amount\": \"14973655085\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"14973655085\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1wzqyjejz5px38vgqsegafrcexl3963q9dsgqh9\",\n          \"coins\": [\n            {\n              \"amount\": \"13098969682\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"13098969682\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1evz2xfd6sam0kzz5qc5lje4s90vcgyyrzz47pm\",\n          \"coins\": [\n            {\n              \"amount\": \"11323309556\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"11323309556\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1mzmzlzk4xpm6zy68c43e6hen98w07yhfedumgg\",\n          \"coins\": [\n            {\n              \"amount\": \"10780033350\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"10780033350\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom184dur4s6pldvhvcyputu6yshsm09s6wmvylt8k\",\n          \"coins\": [\n            {\n              \"amount\": \"5728639830\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"5728639830\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1gyhwacrpqwues05pkavw7xwehcqsmgruy34zps\",\n          \"coins\": [\n            {\n              \"amount\": \"564067516\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"564067516\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom19wtkh935tx2ut2n4m6tjvkfvew4shaeezfl7em\",\n          \"coins\": [\n            {\n              \"amount\": \"59855356\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"59855356\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1a2kn43nquua6gmr4n42htmjpceqj7fzushe28h\",\n          \"coins\": [\n            {\n              \"amount\": \"52853070\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"52853070\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1u74s0z4ft63c6zz7g8xs62esdtdjkzuk4zf0rt\",\n          \"coins\": [\n            {\n              \"amount\": \"42282456\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"42282456\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1d9en5u0cfaucavx848qeq4k6ywqd3z5d5a778h\",\n          \"coins\": [\n            {\n              \"amount\": \"20000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"20000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1edwwsevuywe3sx82sustvyx3f3cvjt44ugccgy\",\n          \"coins\": [\n            {\n              \"amount\": \"20000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"20000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1gcy4f6f2sc73aegd9r68rt2q6teekl6swjva3p\",\n          \"coins\": [\n            {\n              \"amount\": \"20000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"20000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1d6nkeqxmme3564wd889kr6cjed3asxqzjve0wl\",\n          \"coins\": [\n            {\n              \"amount\": \"20000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"20000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1djdfq5mn3dzm9whpznczxz77s8ep2qggc5w5xn\",\n          \"coins\": [\n            {\n              \"amount\": \"20000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"20000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1z8fyzv3mjfccvrxhckr2u3lnc0hrgrlm4zkf8c\",\n          \"coins\": [\n            {\n              \"amount\": \"20000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"20000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1tcnlvf6qhlc3x7ax2vk3vzhxhf8wy8xrnjl72d\",\n          \"coins\": [\n            {\n              \"amount\": \"20000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"20000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom17ud38eyfkd800kvw3c9kl3zpvgvj296nfszelr\",\n          \"coins\": [\n            {\n              \"amount\": \"20000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"20000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom19rtverjn8kw7dzwzch2elktxgcmak6dlqugxfw\",\n          \"coins\": [\n            {\n              \"amount\": \"20000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"20000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1mlqakhlxplhlezk80lph99wcy377j9dk2qx3gg\",\n          \"coins\": [\n            {\n              \"amount\": \"4000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"4000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ssu4wqtzvvmwcukcv7l8zxny647mdx03e0t57j\",\n          \"coins\": [\n            {\n              \"amount\": \"2001189000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"2001189000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom12reh000lje8y20wshqmgl8tg70qggt2ac7qz45\",\n          \"coins\": [\n            {\n              \"amount\": \"2000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"2000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom150svyax8m8dwljwenc8xxtsg0avud07m5frlrz\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom14tjwqqyha0c9r0s29dm0n0zdpdc4hfrvn7jqsq\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1x8r0ktn36dsxsadnp3863txyd9pksrp6awcuaa\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom19lsruwa85k93ahzkdwaydyrl6ehz9dmmkava0y\",\n          \"coins\": [\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1tyzmkpn0axquu4jlht3lllsmq03um8kn5cu5pt\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom10a9mqy8cu04nyz3nj934ck39p6u9ddjt9y5fve\",\n          \"coins\": [\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1f2uslv6udnjwyqkdngc7rswp5vkmgavzgy952g\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1t7gw3d2jz4qc6k6umgkazvfyeydjv7l6nym265\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1rc2647d9nftgwwh9n5vaw26lnjdrewc4dum68g\",\n          \"coins\": [\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1zejjt25xw9gwvhave95ykkvgqjtk7j56fe9cwh\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1vesdfkzd36m08clhvkpusq4gv0dnqm28rm2hey\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ypvt8rf8md7qedvnk0p8cvd6mnffepst8f05p7\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom167hs9ma63wd02xym0vjw80uqlekt0cs54ass6v\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom17tksas9e4nkp25vgwcsd7z6y83pa6u7sddyyez\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom14thj9udwenk5q8c5ey2urude2j54xud2a26rp3\",\n          \"coins\": [\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1y7ku6vf9vq53pv4y6lw2zjn4d5ul3javm92whz\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1mzn966mlprxgkvayrqu209069px0qwz7gzn799\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1cjeg60652ueyu5222l3atmm8vrhlq4tfusnswk\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom13855g4d5pfhtnqemgp700qs36qpjdnaz0dx2m5\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ueywgan39tj27pdysq0d54cqvcwyggf6eves07\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom197h938dvw52kzf2l7gke2u5tcz3grvlexeaq0y\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1pkxtd9xwmqwg08kjgz9xqyee3aw7j8upd89ah6\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom12arnsa069zhad0e40mlgy034n7aq77e2nxdven\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1m3yh7j0jefp9dl26cz8fqexfg8tds39lh957jw\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ysn8jyjv464fv4wpt40vezh7d5tw05tc9v858t\",\n          \"coins\": [\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1gh8tenvx2sf9kj2c359ey6s5k0vzlrl7z4t59z\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1svwchckmrrkfl7py7l2fz3esla7lwmalld4yr2\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1hmdjgtv3yq4qzyuk3ynyt42sjntma8hqarepjd\",\n          \"coins\": [\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1wr0mqeyea45u9av63srtvgr553nyg6l9p57ezr\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1e20dl8se4v2ev79qcay3ag7uf5t98gampz0d48\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom12c8kh7aaz2gg0l4nkd73t58nhurdaren55atua\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ftyx5guwf39fz4nc5n5nc9fua36cq344rm2d43\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom17jq8ev7n4e3zv8zdek5mccvxcgxxtkwva5vwtx\",\n          \"coins\": [\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom123wttw3lu62m7lcg23rkwr88cvv8apjmvkuj9f\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1j5wpswepyxva5vupvg05pq6jzqh7ttdvepkhp3\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1wh5gfxyz8x95qyjlc2s24h3czr60vfehwt49xa\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1z3u9w3vyq6sw7ndxcdpjkgvlj0qaqm6spc3jmp\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1pzyt3y68zcnvl7hkvuffqfedccaptf6nt2x8ya\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1pzxnpyvxr6x9z64y6w3ctv0cvcx9sp90ehj960\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1pvu65ccqw3fmgq88j2j485wc6qm96nx7h7ln4f\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1nqxwnut0hdgsn3l9zaladaft5xt9c6ex9qquza\",\n          \"coins\": [\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1njpfrygstn6r5awzp77keyhkl3wfhzmvdz2pug\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ke9xxd3d6y0ttduac062zvv3r0jtakvhkvqcjz\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom15ak23s0usm36hv2e4kajhe0yx592hw474p3gkq\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1gffprg0nuvj9ve39s9rjhjp04u7k8xwan2tzff\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1yq5h0gjxuup83hdz53utukwhkkz684mk3lx7cr\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom19rfaqnnz5fy3qct8qxzany94t2p7h0rrc75lmz\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom15y8g5ggq2lslncdnlcscqygyesefmjy0t4cae3\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1gfkztltd789py02jcd79dnkl252uej7x8pnx4p\",\n          \"coins\": [\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1h9k38zr5a532jzl0hsker9qz785m822zmqw974\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom18ghdg8y5hx6esxm6ndw3ywgtalvkmz48zeyc6z\",\n          \"coins\": [\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1zy3nxgwtw9hr99tzfaxasgwklm9ev843fju9zl\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1vmfs06hv80gc8jcpzu93ld4494azendxfalh2g\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1d66wegxpllcsnrzv9saqugpk2dausa836qlqaz\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom15njl9exppdfms5fg4zz9wafn4a95lfj30ftx58\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1v2fzs3a8mvm4nhsfcpk85gt3d8rdacv6zggl9r\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1fm842pq6zxaqs86fm30xv459gx7hm7f0ufujvz\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1rzr7gnkm3kdqmzqya7ky98m8tnnmtet58deav0\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16gtt4cmrvg2us2rgecym9zt65zet7qq2euzvdf\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1jsdfjw0pjjj5thg7z2tpm30njusrlsagtac7rs\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1z33aen2znsmgy7wwzavwh2q0u7cu4e9xhky379\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom10r2sn7sasanc0tuw5wzupxvlpht5uv267her62\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1gtma98yjsx43zc30j99t7t0tmdjt2gyp9e7g0r\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom185y3kgv3e6t4sue0a55jyq88hv76th3urnca4c\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1xc6jdlqd8gd9e6p73xdc2yw7ad3tnl8w7j4wsl\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1wdk6rndatlj8dpxq799vmu50zft7xk5768ej2v\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1uz3xp4au0rxawmct6ffj0u3le7uglyza43appc\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1uym8hd4pum4zz2mpkf93y8435u725k97e2c38p\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1u8yt9tvnwvvvlm36w97nyg27ue797hrvkz6eux\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1u4427txgc9pulkuu0wk4v9cjxqa0dxee5az972\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1epcd5upewwa7s20u6kgf9uywa2f7c3yj6zaeg0\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1tx6dnqh0nnj05uuell7rhnwhennscehlnjylxv\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ypzhtfsyuejekw0w0z207wyedqm3xqafc8nu7g\",\n          \"coins\": [\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1s4ytylknecgkp7sp3jgf2f5lj7mm2xxz0f9rl3\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1s05hsv6fxhkpclwxzgnlfjjk7qdm78nmpchj08\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom176q2gvutyk63dzknylcvdhp6lyjwu5w9fdmmev\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1e08w7wrjn05gl06xkwnlfmud5f6trdkrf0drg5\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1pzp9nadejsjzfkpfl9k7ktu2cfhprw4r7qvd5p\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1pt3a6xk432vs8lp0z6ya3qhqhxks99xe4sxxqq\",\n          \"coins\": [\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1damlfdlp8yynjvrmv6pd3t33f4currrhe4cm4z\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1cmhrs08sqv0823mj057svp8jerp6avne6xmtrc\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom19wlc6vms3qkuy48wgg2dl06veahgxl47s8859j\",\n          \"coins\": [\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1h9zrqgwcjtul3s9qxf0hk0ym9alm44ztywkfyj\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom18fudz7p6ah9yvdr4p9aflp8pgzngx84cem5lra\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1e8dsx8yx9mjn8v8egz2n5vafkymqw98wy4z6re\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom189tpr8vg4qvwn7fgs6szkqr25yrammvvlzx0zr\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1xvsukg4tltfzduw0lsvgqyrhe6rzrlp472ln92\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1w7f07762zelhx4spzkndmygh2dz58g3nn58v7q\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1808q4nv5qafkk8ec9h56wwth6sl5a5yd0elve6\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom15a8z9l8ufw8v8zdddfhesnmfzwwhua7axrmfxl\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1undz2328av9agfhaguqs8zxzejv5zqcc9grdmv\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom17vw0qcu9j8t6jhh83sjrzj07nwg9nndfcpw9g0\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1evnwfeuqsgkjwe5qwe5acyy6m4w5ch03m3e7a6\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1t5r4uhu0tscqw380t6hqmvrgyhlrj3u43vsm43\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom17kwvcuvar02ldacltr48373rm74z8lfkcq80vj\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1r7grd2sazgzsy8y0c8wlsnjyhdc0sq4npr0v4q\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1pfwja2fu2qcqvdws6rcdr9y6za46dklaxc83fh\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1p4uyyk8sc2arl4n9egw3xrn9g7rpkzlerf4nlc\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16gxdwa79rsvkjaawpcpswthgahm56p4mpu8fe9\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom13nef2p2g48kmj83m7f0ey76q6p9cdyrn03x4tz\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1m9x4gg6frezyeqldxdz4dvegxpcytxnapgykwu\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1kfz37afuxfyajrzk7xv6937xc0jsq4zd0ce7dz\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1kae5k3nnzs3q7tar4ec3w29w4avd8saqujpjk5\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1hjjsjgv7sx88mxfq9y44ql24xs76jj3w7y9ff8\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom130avjyegx7glgnqvraetqj6ztacrqv9kdwawkj\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom104rtaftr9xmx6dcakempk590tfxx4ytddqcj97\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1f6tmyjffs0p7f6xeh25esjhawxu2kll9j00a47\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom105c5jk0xwzlk4pexgaeqkxq0xadtqchc4lmev6\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom185tek8r0ptelug0erducctzc4d83q5np3339k5\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1z0m5tcv4jde5acv0w4dms537wvntgj7x47zmeu\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1fzkp5pux48ux72wsgls9lhxp5cq2tqsy32hfec\",\n          \"coins\": [\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1nsffk0nt927vn7pdsk8epzjeqch3yfzkzq57pl\",\n          \"coins\": [\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1e4cnw86pl73k2sfv7uwauflfl42qzncn4akyv7\",\n          \"coins\": [\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"400000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1jlu5u2sj0afddmcj7lxfy0ng466s8l2qdjz24v\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1y9tvvunr7uaqjjw8u6xn5muypq6pheyz5gygm3\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1qsm0ujra4vdwymc5vrtey2rvalyq8392h75nr4\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1jgvy2vr96auye3er6n3tkhlu9hnxs6h3a38rpp\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1jcj0w0e2khy0asm7dz8883xnepzmaxylwez7j2\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1q22fvnhna2zg2g2xm6s5587w8fvsh2zzfeey68\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1amletsu7926696dpeay8wrewqgww5s7yunjjxr\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1qkltelhy5zsr4kfrefvwsupxyt6y9skwjpd7h4\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1nfdyvvjy5hum8gpgmt29d0m5y4te3ekpfyz7pw\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1hjz37u09vws084cvwjlr5t27wmsrzm9tmfspu5\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16zykdjnfjdy5cy3phuymmcghh8x24eah2cmmpu\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom15pax03gsgw84lsygpxyyvtthd8fswrqp7wjs7m\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom124ll3q05an955eh26ygn34u5gtm9287arjrgj9\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1teyn0utv6yhnwux44ycfvqh6z888pvjaz9cz6l\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom10905rstxf5tzj0w6gguaa76ma7s32v48um4w9z\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1m7y6qezuemqe6n535z7s80ee8zw4zg486vr53u\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1pkhgpslggp3t0nrwskvgczxmavg7yejfullesx\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1zyws7rajm9f3ql6jqqpzvnml0aym9vspd7tjxk\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1pa0rcdua5v9d4vf09ksnnl7t96nfkf3w37k4dc\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1durjade4he9l23rw38azruzfttpmc8223n6r87\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16jvmfza0q60umemx2pv8s5kle2h8g9x6jj9fkq\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1gywad2frusetg26dyh83cfaevacravashyjwg6\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16kqpk5jg9e5ucxv3e003mf48yuamw4ce5ww4la\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1zr9urr3m42w7pu5h5xn7rvghcdk5vtrtmfw7wf\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1jet9jf456dja8vqlhk407l06yvfehwzuvjaynv\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1q8ajen3vu5v5uu4czkvqasqvw827dz2nqq6d0s\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom12w56mhf4nsfchquw0sgzwn72qkzvfvquxhg6dn\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom10v8qjj6haddx7wmnr65mcsllu8xunkee7zg3z5\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1hy8dexwz6ynlnnaj8ge7jvmzs4c6qmz6yh97lc\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1vpp9vy0fnxxw8yk5t2cctutpfv8pprvyhnjw90\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1w0u83ty3nmflg9846zmh28u0hweccs3fzfpx0f\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1z6lhk6u25fceqylmgv65t5py0c8kclgkszmqyx\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1zcf0ph3k4p2q2pl32zqspy5f7jkgxd5s4kcd66\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom13s4egz6pqg6a88dunme3esuee5w7qlkjttcs08\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom12w37894jf7rt2ck709rk8xa23lz3lg9tv93tlz\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1sntt4y34tghn45vw97az7mz4vkcw8kgregkph7\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1pa0lcssmjkkycdvrhhzey5h94v34wuf9u4ths6\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1l9yx676futn4h28rxupsvk7evl9s68hrufetdw\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1knpgev72f2empt8j8gcn24my8kdasy2lcezjea\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1clr05sms7eklm509ger6jdzhgheafskv4wwxrg\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom186tpdptavhzz7fg83vnm4r2y85cfqyg6sntmun\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1qc4t2q45f826cfc7k0y45ma8f5qrrfv2nkly33\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1n0wkta56ktj93nzpe9amkgrzq7rhzt3gy6m8uh\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1exul86z68fzck5jra7jp8xdwvmfz5p9qyuh8um\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1melp9r22clnjzzudd0thvs5zzveqfjyl9xfw54\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1zx70t5xqc8h4kmvrssdc2w82v9ksw0r82a99av\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom17ssaukj47urfj6c8cgywyz9xhgqz3tnpy7n5kv\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1znt56em2psvx8ylfpplcmpy5esrea08g2psvxm\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1tz4yrvqlw87e74n783n0da4pttay2ypsfq6668\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1prrtyfgrw2tzj9kua5eu7tnctt474m36eygux2\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ftkw5j528j94cajk4rvqum3k7mhhmpvyc8k7yg\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1pe42d4gkg7smf9na6dvh5twq9hgczsag4elx84\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1nscf69wvc0wkgqm8ma79qv8cr6j6zq3dt0t898\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1exv982mrkyfd967xv7fam7lq8h3ce3dvcnd4s3\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom14q65nd2ft893dagpln4fq39wutv2xmpe3kc4w0\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom17llhhwjmglhhqumz72e4jap5cj39r8rwar7zzv\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom15k9z24v0thrxffetjp97493ec89zlz7re07pjj\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1y795vkzvczrauey63vmvvcjr84l3fjheqd8f38\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1qf560sekun7kjsu4r0puey5u4fn90025f4q2p2\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1v9p7ukxpw2yjk7eqm8720vkgqq5qlk7w3jqgzu\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1a57rc9cnhdn4l843ca4990aqldh5wmq0uuetzg\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1q2ajajyu0t544tudcnvk7xcznerhylz36p5vtc\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ayc0pueqve9a3xjpgwh3p4l6hjlyvfpvclvldm\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1jmdtfuxag0deeuyxmj4ge2mqhvc200hlmzyztf\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1k24kf4reet2lstvmkx9a4j0r87xfuqeqh2lprz\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1e0c3ehnfzvcxvwh9fgzyfc2vqshy9w53du7hnv\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom178nsekn4qcdkqqmv95qlmp68kaqpga3zpsdnf4\",\n          \"coins\": [\n            {\n              \"amount\": \"1000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom13uz23f4stcg8esqvvc7d2w9psxv0dya5xaq5ne\",\n          \"coins\": [\n            {\n              \"amount\": \"1000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom19trgcp8uldtc5xtnpf0u7x7dk3t3jcp4y7cusm\",\n          \"coins\": [\n            {\n              \"amount\": \"1000000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"1000000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1fn4ep44ud3edyh304ta38f55xd6pxswsw9e23z\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom143dfs4ur5gjvwgx8l54jjz27rq57us0zz3hqj0\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1e3je4h3vkxywt2sf7mudelhf6zrx405yfgczkf\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom180upuj8yp0326px2uys9r60xrlhpsa6fwryf80\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1jdypscylf6hjlrlva03tx5vqqkcdnllg6rpza7\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1r85972mwrka5w9ct6km58ww9jl9sh46fx559fu\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1xz2dkqrnrvq0ezc0vxtcvhwy39xr63vxzfedsr\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom134llrhdus60n7853fn3ulmx6uy7evsx3ltzstt\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1pv5clfxxfpqvuerquue2vgr2ndgh0h50jx898c\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom107v45crxqedhmf4yqa9y98v99wm2078fwtklsq\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1959r3zp37k9yuz8kjtc4feayyfkkxpcv43mu0w\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1qh6eavdzp5ffks2rvd5mjt3rdmjxg3qm5l4pw2\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1lk7m28npegzy0sz5s06sy95n27yzrj4d3rytdg\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1clk49u6rvv8c40udn9qgp0s8hv5uvfcgxqptky\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1gws6ulm3u23txc6p8kv6ew6e2zn45udrwjkdqm\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom17rg7cldfsqfmv53n6r7qmjmcge7ucxx2hhum0q\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1kkwwsk0v4h7tmccr4sdmpyl2j2gvfah6jzw7n8\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ggh3zff5paq5c3r2j34mquq9lrcc7s0nvfnuwz\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1gp5s4tetnk7ng49g58uhn2znfpmgs4cfdq4ns3\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ejkkddkuw63zn557l0lvqq3gmjcra53ealmy2x\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1jrp04lvvpzkyylr4l7e5xp256l9yd4hdhrpmls\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom14c8rllqzmgyrkt8aeyanprl7g3adrlc2flq57a\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1j39uxls4clq76ej7mk2tdskvql2tdp2zek8g89\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1qcy673rd8a27t48ry6evmv6as7fuetd8cyhnjn\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom12d3klseftxsfs5xmvjju339enk8xcvg5y55qvl\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom148g7gmqvw5gfj7dmpjymtsw3j7gvasflqrsyx5\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1eur22ds9gn06lgg9j3raqlzj8j2qzxx6vuje4x\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1809klqrjjrs8ch2gtf5hmmfhysspkrr894rmhm\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1f9nx8jrlx9pvns70edanu37mxtm359k606qyds\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1qgkdm2asr0qey7jafqyqlnarvgndjws23fpkrh\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1r5gvlzt03a0a9rks3s57cppmfqx2lzjrquh3d0\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1yaastlp99jvqta2x5fngdzw6zur7khctd9gk3x\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom14jhjmhm2xmx6wyefju30auqvrs35hmnn2m8ewl\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom10pqp6py9pqtagyde9tnkkvakg3gqsnq7lgzxnp\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1spndx95pckqnmjss6emff6fyylasg66qzdfv6v\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom17qkfq2uwags5pzplrfqg2elhn9s0pfwja4mgeu\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom194097avwy9a6h0cvznev232z28h96rp2q3w3uc\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1l8hx9jxul439uyjve4zn45nujtx9gmrw3za3vs\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom12zmexhujvw7j82la9uslzfl5g29erpysqt555s\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom12vexhfe4m9p9szsqvzsalssf8sxluj6pqx8gr3\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ukgaegxryydqckt6fgrt60dajxq758x9pntmhh\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1756xr3jtsdve6vuwqgqdtmt6ws3td49gq7vc77\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1fn5cutfgat9s9z6nz5ucnnq9aec82wvqpevsn5\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1e63p9zdn5xks5ge9gj2y9gfkl5u0jgkvfrnhzl\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1zq9f4eczclr5cexrxdusfxxr6eumn2rlg2h4hs\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1sjtl9n7fqszta6p4w5y5yl7d4xqth26d8z2gjj\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1a4krl6m7jg7ckczk94hh0wdlcezvpgwcwkrpcg\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom17lzmvgnahdncwnsx3dr7mss65qv6l9md2hy2qq\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1pljwxmmkhfrkzkdpmdjv29t6959sa77mjt0xz4\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1t9xfg2kurjlvnw86repcpte3shpgasdjge6a7t\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1erxn6kmz3xhfrv40m7lyp88v43qahqn8fy2xhn\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1k879z65mwwwu4jause7galz0hlsqqj4rtah7r6\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom16dsvdl4jer9jyplelgz4x68hjvg5k647nrnc8z\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom12pafl09rqzcw7d77qs63pg2nlsgvc3dsfxyzum\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom15cq4l7d6v43rtv493cps3c7tpsf26d83pseqwn\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1wrtzl04mxs2en94ysc5p8mvqc5p0culr9w9m0n\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1a2zr8qx60sl3srh982hjduse0l7pdcnhtl7juy\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1r82whjffalh2hgmrayywc9g53es96n9e9893yv\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom15884n6qmrwq8gjuwtqh6q8z7vx500n5s3djcv6\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1nhkl9r84zjucmjswhddwq8zgpun5yks5mjk7xc\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom12cq4xxcr6pmjz320aj7j8pn9l8vjeed63slcz5\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1fwx3u5w8qyzp8msv2n9umajgst86dnuqrsft0g\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1zg3xqymyrvlu5fmmyx8htdm84kqt50t7xdfmuj\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom152xtf7tvw60tyhls32wwc9ypehqzf366zjkeeg\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1uspnj6pvq0u78d8qux8lz6p24dzm998phldqgv\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1ppzvqc7yf9lfs8cljqu6w992gct6d5h9jx5wsn\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1jn8cp663fl0mv6k55xvy2lr6s0r57zg0v6gzr3\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1fmpuldfmgj0a4dlkn0cdlap4h3qs7nljyph4rj\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom10mja0qpcq6ze2nrchhh7w3n7g589sdktfu7p9m\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        },\n        {\n          \"address\": \"bostrom1kaaxhzud2ev7v69kwkf8vuvhst9a36wz5l424q\",\n          \"coins\": [\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"boot\"\n            },\n            {\n              \"amount\": \"200000000\",\n              \"denom\": \"tocyb\"\n            }\n          ]\n        }\n      ],\n      \"supply\": [\n        {\n          \"amount\": \"1000000000000000\",\n          \"denom\": \"boot\"\n        },\n        {\n          \"amount\": \"1000000000000000\",\n          \"denom\": \"tocyb\"\n        }\n      ],\n      \"denom_metadata\": [\n        {\n          \"description\": \"The staking token of Bostrom\",\n          \"base\": \"boot\",\n          \"display\": \"boot\",\n          \"name\": \"Bostrom Boot\",\n          \"symbol\": \"BOOT\",\n          \"denom_units\": [\n            {\n              \"denom\": \"boot\",\n              \"exponent\": 0,\n              \"aliases\": [\n                \"BOOT\"\n              ]\n            }\n          ]\n        },\n        {\n          \"description\": \"The liquid staking token of Bostrom\",\n          \"base\": \"hydrogen\",\n          \"display\": \"hydrogen\",\n          \"name\": \"Bostrom Hydrogen\",\n          \"symbol\": \"HYDROGEN\",\n          \"denom_units\": [\n            {\n              \"denom\": \"hydrogen\",\n              \"exponent\": 0,\n              \"aliases\": [\n                \"HYDROGEN\"\n              ]\n            }\n          ]\n        },\n        {\n          \"description\": \"The power token of Bostrom\",\n          \"base\": \"milliampere\",\n          \"display\": \"ampere\",\n          \"name\": \"Bostrom Ampere\",\n          \"symbol\": \"AMPERE\",\n          \"denom_units\": [\n            {\n              \"denom\": \"milliampere\",\n              \"exponent\": 0,\n              \"aliases\": []\n            },\n            {\n              \"denom\": \"ampere\",\n              \"exponent\": 3,\n              \"aliases\": [\n                \"AMPERE\"\n              ]\n            }\n          ]\n        },\n        {\n          \"description\": \"The bandwidth token of Bostrom\",\n          \"base\": \"millivolt\",\n          \"display\": \"volt\",\n          \"name\": \"Bostrom Volt\",\n          \"symbol\": \"VOLT\",\n          \"denom_units\": [\n            {\n              \"denom\": \"millivolt\",\n              \"exponent\": 0,\n              \"aliases\": []\n            },\n            {\n              \"denom\": \"volt\",\n              \"exponent\": 3,\n              \"aliases\": [\n                \"VOLT\"\n              ]\n            }\n          ]\n        }\n      ]\n    },\n    \"capability\": {\n      \"index\": \"1\",\n      \"owners\": []\n    },\n    \"crisis\": {\n      \"constant_fee\": {\n        \"denom\": \"boot\",\n        \"amount\": \"10000000\"\n      }\n    },\n    \"cyberbank\": null,\n    \"distribution\": {\n      \"params\": {\n        \"community_tax\": \"0.000000000000000000\",\n        \"base_proposer_reward\": \"0.010000000000000000\",\n        \"bonus_proposer_reward\": \"0.030000000000000000\",\n        \"withdraw_addr_enabled\": true\n      },\n      \"fee_pool\": {\n        \"community_pool\": [\n          {\n            \"amount\": \"50726497621325\",\n            \"denom\": \"boot\"\n          },\n          {\n            \"amount\": \"50726497621325\",\n            \"denom\": \"tocyb\"\n          }\n        ]\n      },\n      \"delegator_withdraw_infos\": [],\n      \"previous_proposer\": \"\",\n      \"outstanding_rewards\": [],\n      \"validator_accumulated_commissions\": [],\n      \"validator_historical_rewards\": [],\n      \"validator_current_rewards\": [],\n      \"delegator_starting_infos\": [],\n      \"validator_slash_events\": []\n    },\n    \"dmn\": {\n      \"params\": {\n        \"max_slots\": 4,\n        \"max_gas\": 2500000,\n        \"fee_ttl\": 50\n      }\n    },\n    \"evidence\": {\n      \"evidence\": []\n    },\n    \"feegrant\": {\n      \"allowances\": []\n    },\n    \"genutil\": {\n      \"gen_txs\": [\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"bloqhub\",\n                  \"identity\": \"\",\n                  \"website\": \"https://bloqhub.io\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"600000000\",\n                \"delegator_address\": \"bostrom1gh09lmm8flkuu3w38mr4axvunnu6qqlapuwzrv\",\n                \"validator_address\": \"bostromvaloper1gh09lmm8flkuu3w38mr4axvunnu6qqlaexfan0\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"aIG2z/l2N3K6WslUGA8u5kZnqcvqyKEXQpoiiICLKa4=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"700000000\"\n                }\n              }\n            ],\n            \"memo\": \"dd22cffccafaece970cfa9e7eb3c8468f6fa1c84@46.166.165.14:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"AjOqctJGZMZLaRwwrzZyuaTuXp1UL3End4PQVB7vC2J+\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"rNmSw3X53arQwmmH/n1QdrsedZ6DQFKmZL2cN2wmKZ8C9WeXRdYRo2pWtMukcHUSk4dzZGOkhaewxN2I794tqw==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"0base.vc\",\n                  \"identity\": \"67A577430DBBCEE0\",\n                  \"website\": \"https://0base.vc\",\n                  \"security_contact\": \"0@0base.vc\",\n                  \"details\": \"0base.vc is a validator who doesn't trust any blockchain; we validate it ourselves.\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.000000000000000000\",\n                  \"max_rate\": \"0.250000000000000000\",\n                  \"max_change_rate\": \"0.100000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom152m9xcx0ht7yxr5834ju7qjcyvetw8amd04apw\",\n                \"validator_address\": \"bostromvaloper152m9xcx0ht7yxr5834ju7qjcyvetw8am44jz3d\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"9EtOO5q/eUiQ1VtdFegl46fyhJ2tkzm2TDLkdm+zRm0=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"71000000000\"\n                }\n              }\n            ],\n            \"memo\": \"d669803c3234f0a5f9db9883bd0a51fba90f9421@192.168.2.238:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"Alq7kX/SxB3TsTDBtPfiQYcDZmnt/JA1ND7bYbR601xM\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"PrHcAs1tDMNC081gnzm+4Pka/X3Xut6JJKuOIq9olYZU41MpEjt/K6ZDmOZrQzw+ySPHb/9+mlzZqPxo3nFR8Q==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"cyberG\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.100000000000000000\",\n                  \"max_rate\": \"1.000000000000000000\",\n                  \"max_change_rate\": \"0.880000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1en69twaxmv7xupy8lq7y539dpecx7yz8g0k8ft\",\n                \"validator_address\": \"bostromvaloper1en69twaxmv7xupy8lq7y539dpecx7yz8s43ceg\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"uMw2XjXqICe1CvEbYCwN3GEXm5r1CBhc0TacHucheyw=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"10000000000\"\n                }\n              }\n            ],\n            \"memo\": \"39a20a7d84c6e91c6638f5a685a13f655e050ee0@192.168.1.2:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A+/XPH/eRzCGPv+gabj4eialveLzwRrPvTUy6I/v5eMp\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"RQ+jbCPTw6d7dHpPs+ysuFBmj+BTFx2GJ/ZEK4Cyk34T+uM+PciG/DcycTd9VHCnYT4n35s3RmgHGUKX5YVhkA==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"Citadel.one\",\n                  \"identity\": \"EBB03EB4BB4CFCA7\",\n                  \"website\": \"https://citadel.one\",\n                  \"security_contact\": \"\",\n                  \"details\": \"Citadel.one is a multi-asset non-custodial staking platform that lets anyone become a part of decentralized infrastructure and earn passive income. Stake with our nodes or any other validator across multiple networks in a few clicks\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.200000000000000000\",\n                  \"max_change_rate\": \"0.030000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1argjwgcplguenq4l92ggn06wadnfrz0ecqrmqs\",\n                \"validator_address\": \"bostromvaloper1argjwgcplguenq4l92ggn06wadnfrz0eq6yysn\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"96vbjWw9jbyO8Krl9Rjbt8SU9tVuBiPhtVAxx28arcU=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"40000000000\"\n                }\n              }\n            ],\n            \"memo\": \"5b59d7daadd971a9613b2efcc3c6eab0777f5f29@10.129.0.24:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A/w52L7lXEuf+bzBuq08IEbrypuMpW5Gff9zGU4uYyMD\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"dgUZukDKCaztxabLHQru1+clM8wS+zTHOA4lp7YYt7pHTBCO3YBY5EMKJTEei+Nz8wJX0h8WkFBZYA+YtfGp4g==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"web34ever\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.200000000000000000\",\n                  \"max_change_rate\": \"0.100000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom15zs0cjct43xs4z4sesxcrynar5mxm82f0ykhl3\",\n                \"validator_address\": \"bostromvaloper15zs0cjct43xs4z4sesxcrynar5mxm82fh73g0j\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"Kry59s/u3vENIsWu+4ssFqsnECWTxA8iOFSXPbIQmsU=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"10000000000\"\n                }\n              }\n            ],\n            \"memo\": \"5e8522bef5ceca507e05aa0d5f67f37a70222c73@192.168.0.107:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"AoeGMAMQligEwocz8uo93DOcNQFIRDPD6MFJgCnd6mgc\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"bRNyFymF6LFfac+9DwnXRYCKCvZpIcc+O18gMVt2OB44tRCH3bS1m4dlnHHy2H8TMMJ021SSNkaaGBv7SuBTuA==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"Developer\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.300000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom19ys53t55r725j882gjcrnf7s449gdrds3h2hu4\",\n                \"validator_address\": \"bostromvaloper19ys53t55r725j882gjcrnf7s449gdrdsfddgvk\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"KdT8GK9d81xvkDzuNjM3nwi3mijxRfq2YWnM++SAIw4=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"38252993813\"\n                }\n              }\n            ],\n            \"memo\": \"77d27615009fc703ece46901792cc8750cccd0de@185.230.90.71:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"Aic66jxbwijTVJe5LugB2hOLnVUkEXAgQFAHF0B0a2HS\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"CAmQZPBhI6415XsNQC4FLN63kg9rwgoWkBeuhz4CQ8F3HS9LL2nDJJb5/OGNeLifrHsc02Fu+WQhuEhD6Bq2wA==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"Kerman\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.030000000000000000\",\n                  \"max_rate\": \"0.500000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1ke6pp2kq2wx74tlh5fxqgp7af6jtsna3kktuh6\",\n                \"validator_address\": \"bostromvaloper1ke6pp2kq2wx74tlh5fxqgp7af6jtsna3wvvr8e\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"0nAyxxNGDv3s2miDdJWibOEoWVre8jadmJiA7BSEugk=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"10000000000\"\n                }\n              }\n            ],\n            \"memo\": \"822b374bf2ca56c49fd565d149cd7cb6d175d8cb@192.168.0.67:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A2SWKzAFJLvVQEi/X1HDzFjJ5/1eC42xmaLzg/gs3xkk\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"vGtxVMDxclLZ+BgXsg9dggfOF439ccvs9gWxWQ5osCdKgj0QZSslJqgPs9RwGwxeeZHIHDLFztG0TzEcKQpUmw==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"papsan\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.300000000000000000\",\n                  \"max_change_rate\": \"0.100000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom18naxcfp2s397a2ucav2m53f003uylk3qz9fvr7\",\n                \"validator_address\": \"bostromvaloper18naxcfp2s397a2ucav2m53f003uylk3q6lwnna\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"YV4dJbW6TrErmwcs0VxFiAJUio+6Yh5shQ+hwlMveN8=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"10000000000\"\n                }\n              }\n            ],\n            \"memo\": \"902fb751851e474133ee4ba1e646f49237b50edf@192.168.0.161:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A5+dz3ZHelKjHTo31eZ2na4pKdlll/blg09/wBgoqzCx\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"6qgMlfzKEN+EM4lQi//6D6QI92wQPdOXGBy1l1MRigQ+uqdS5QfWIH2DJDpg/0gLSV1yJHj1ENhJAlh6wHN7YA==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"Godzilla\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.050000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1dxpm2ne0jflzr2hy9j5has6u2dvfv68calunqy\",\n                \"validator_address\": \"bostromvaloper1dxpm2ne0jflzr2hy9j5has6u2dvfv68c99mvs8\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"BncD9wiS2MKpBJw1t9PLoIeqQ9pTccPoGBx9cRNoZak=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"10000000000\"\n                }\n              }\n            ],\n            \"memo\": \"0c4296d5d591bdf7fc8a16ab316a0fefed245ed0@192.168.0.104:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"AhP0Psq9i0nwuprL3XwQpDE4AuCi+hSgDg/YtQV0ks93\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"mq2msMfWEra01A3cNxUFG8+4yd0ttgRM5xRjA0JMBS9l3AfNXoCYMTdFA7iPrKBblkNR8Yg8Ztrulc3UCGDrLw==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"Bro_n_Bro\",\n                  \"identity\": \"A57DAB9B09C7215D\",\n                  \"website\": \"monitor.bronbro.io\",\n                  \"security_contact\": \"\",\n                  \"details\": \"We building for decentralization. Until it comes follow our progress on Github github.com/bro-n-bro, join twitter.com/Bro_n_Bro and rank us at cyb.ai/search/Bro_n_Bro\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.150000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"500000000\",\n                \"delegator_address\": \"bostrom1ydc5fy9fjdygvgw36u49yj39fr67pd9mv67ety\",\n                \"validator_address\": \"bostromvaloper1ydc5fy9fjdygvgw36u49yj39fr67pd9m5qexm8\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"SEiFL2BSD9TOUsPIaBKx5xZU+ijry95DdZ44u9mwd3Y=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"850000000\"\n                }\n              }\n            ],\n            \"memo\": \"74b6fc649a41cb1d21201a440b16a1e478706a78@192.168.100.8:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"AjOKnmLV/8qlph6bINrTw3USPl8YVfwqMwY1xlT2+2nV\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"sctX7B6LKkBJ6XdwuLyohNipyg2PSMT9npqNc4rHYaBzlaTZCTv1loPmJW8rurKA4kiGCuU58kxR4X7m7gffhA==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"Hailbiafra\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1smsn8u0h5tlvt3jazf78nnrv54aspged9h2nl9\",\n                \"validator_address\": \"bostromvaloper1smsn8u0h5tlvt3jazf78nnrv54aspgedaddv0x\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"triXPhJGBlAduyzF6oF0PKHM9H2sXz9+TWY5gb9lkNI=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"1500000000\"\n                }\n              }\n            ],\n            \"memo\": \"082ec921427c35a5aeaa8576c5ba2a0513994c4d@192.168.0.21:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A8ht9IthhnJlqSqkOyPUOuA5I0bhEu//8V17Wvi5nDX0\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"jGWq0dtKzBLIVuY/s/Fk2eZjPy8CsOF9PhZj8iaHSM5Fpy0518Bqt0KYJ47/d2KAL8Zw3Zcw0n82UojxzZLhJw==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"MindPool\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1gd9r9uhd8a5k2naudq4hua3vf3lkwhfrm63qhq\",\n                \"validator_address\": \"bostromvaloper1gd9r9uhd8a5k2naudq4hua3vf3lkwhfrrqkl8r\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"RPBRQHcurf6ZOoar9DWoncHbcEGmaceT0zdalDYsobo=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"1100000000\"\n                }\n              }\n            ],\n            \"memo\": \"615e772ebe444a7bff0078b12ba0c445f56c9fea@31.14.40.221:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"AlR8VrZk5703owY5iA0M9Dhdf1pMBCk4bXg5KawbDG8g\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"FoLuebxVDbQJwDQ1Gv+klkFBIhCo/L87btLU/IMYofYA8KQ3iRnqxGuS15chFOv2z+SNVWc9uKQjDrpUKfLdLw==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"Nett\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1njsr8tngxtygsc73mrtn5738ztkzqy7c7y7h3t\",\n                \"validator_address\": \"bostromvaloper1njsr8tngxtygsc73mrtn5738ztkzqy7cx7egpg\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"ChguMkmpTQCnekerrNnAnyFePLY3C1jacudM3SYOrdg=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"10000000000\"\n                }\n              }\n            ],\n            \"memo\": \"6bc53131a0acdd7ffaaaad3f0bd2e13a0cf4544c@31.14.40.252:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"Ak/h9AX2Pl5aIvaC9wcEnj7QDU/pr0YU6WQfbbStR34V\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"fsdilaUl8FMkjptEUgPslypkGHlWUgYSdCTHrfeTkR4npA/1Aunx56J46bgVifKza/9KeHaFMn5sVSUO1rxLwA==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"NodeMarsel\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1vrym7t34gs9t2dkd8z849zcymkj54kgq7pdf8z\",\n                \"validator_address\": \"bostromvaloper1vrym7t34gs9t2dkd8z849zcymkj54kgqxm2khp\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"fIbK0sEsisgCoXnWmrfApLX7SdvuhltzU1llq+jiV8k=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"1200000000\"\n                }\n              }\n            ],\n            \"memo\": \"4a194e60d748fe7407aef58a22957d1d4d1327fd@213.108.130.224:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"AjDkMSMwESOWvRQGEtP/j09Iyul2827V83zhitE60tSm\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"ZD4QxpojQ5tlkW1ydaiwGAPL15olannbLDXjj0DBV3VJKVz/+TLAR4zW0MG5AQORrd5IksT6zHeTRHnfrjxNYg==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"Node_masters\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1zy553za8nenzukmv65240323jhuvxzym4pl6w9\",\n                \"validator_address\": \"bostromvaloper1zy553za8nenzukmv65240323jhuvxzymdmc97x\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"hkaRWuE3BNBVmeqv70qJ++iyYs7THerZyOhNa7E2gVM=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"150000000000\"\n                }\n              }\n            ],\n            \"memo\": \"4baf7d265d7524543bebc2322089bca4a3980b54@176.9.0.254:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A6ugL0vd+03w9K+27qpls79V265kl7xpIxkeFWxjAxos\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"eXqb2zaAjXsqUeeFlxLLhgd4ToUlbpz/ysg+tqFSossEmXknpoJB8hpwVOZeUC82zyNgV1VPNmwk+jxvqiLvdg==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"P2P.ORG - P2P Validator\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.100000000000000000\",\n                  \"max_rate\": \"1.000000000000000000\",\n                  \"max_change_rate\": \"0.100000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1daxxqs56f6j5qxxtjrjkexghsmnaj66tejshc8\",\n                \"validator_address\": \"bostromvaloper1daxxqs56f6j5qxxtjrjkexghsmnaj66tpghggy\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"4KsAoQUaZNVyA0Tc02Gw3GYxkuMdgtf+aXTOqKDNbgE=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"10000000000\"\n                }\n              }\n            ],\n            \"memo\": \"c08e42e2c61b42647f5d0f9179ecf71cc5b91983@85.10.204.155:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"AlJhCdxE6tlLq6sH2feIUpV5tjpqFTfdN/d727m7QFJo\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"ZoFtA2JHo7ENKp4zw360+sObHPimRgECdSAM7zF586YSXeUXRGiZ9j6MnsnbgHfqFg32jeRSG07ayY1RYYNY3w==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"PLap\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1wm4026rxqcrkh09k806m6y4lys942etx5cjz9z\",\n                \"validator_address\": \"bostromvaloper1wm4026rxqcrkh09k806m6y4lys942etxvz4a4p\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"2VHfckjdelAwGj8b3gw+kq7U0ni9aB9S3rNQx054iVU=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"2008629825\"\n                }\n              }\n            ],\n            \"memo\": \"d8783bd0a78777503143d90f55c6ce68bd5b53d3@178.170.46.52:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"AoWKUnsu5koT3S90SK96fnKcuzd5myJs6HsYbHskkoFc\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"HAeMOhN4PVUKZSmYzf23Rf4eNUlInL03YTbYaf+sAT8kPtSyA4UGffu6DZekLDWPDNf1fXypWnxXpxkaUvOJfQ==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"POSTHUMAN\",\n                  \"identity\": \"8A9FC930E1A980D6\",\n                  \"website\": \"https://posthuman.digital\",\n                  \"security_contact\": \"\",\n                  \"details\": \"full-time enthusiast\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.131200000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1ccvpcq9ffy0qd2ca8nmmpzfamtyjfc9znwak8m\",\n                \"validator_address\": \"bostromvaloper1ccvpcq9ffy0qd2ca8nmmpzfamtyjfc9zt56fhc\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"lWEU7pJSRroGTFMa5O6JKRC1JnGsupKTC88i3uAtxu0=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"10000000000\"\n                }\n              }\n            ],\n            \"memo\": \"55937c36959ea3984cc6e6ebd3354d73bbbdbcda@192.168.1.65:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A5khg0rKhMayAuU6AK2To44nGX7wjOz3kKgvjHQkgOpm\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"pZi8OR9mNdIliit7mNKp3Wvtt9RGSE0hvqkq8wgdOQ4oc2qZZdSFD7eu6YBBdMNhMxlQKt9GcXEZuIpXQ2C+Jg==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"StakeAngle\",\n                  \"identity\": \"0C2EBFF70582B725\",\n                  \"website\": \"https://stakeangle.com/\",\n                  \"security_contact\": \"\",\n                  \"details\": \"Non-custodial staking provider\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000\",\n                \"delegator_address\": \"bostrom1g2d9xyuf7ddgaj4llxvg50pfhlsr9ehf2r8dr6\",\n                \"validator_address\": \"bostromvaloper1g2d9xyuf7ddgaj4llxvg50pfhlsr9ehfjeqjne\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"qOE+qVo9giTu6cypXg6zN3ZT9MitNBHfTYfLL2ADVGo=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"5000000000\"\n                }\n              }\n            ],\n            \"memo\": \"0fc5cfc9c383223ab2b4b0811bc43c7123653ade@192.168.1.38:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"AzuPqiLKy2Y7g87DO43xNI19pSbQPsSKFh1XPR2AKFiA\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"nXsiARFuivsTpMNogfTiNJZDZIOik+koTMY9qyt0jJgPXxf90mDXCjgSuB9UQywawAe7cuko+bXuwg1egZ6tpA==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"DragonBall\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.200000000000000000\",\n                  \"max_change_rate\": \"0.100000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1dt9lwmuq8rkngm5gajxchqhpcnavgp7md9v929\",\n                \"validator_address\": \"bostromvaloper1dt9lwmuq8rkngm5gajxchqhpcnavgp7m4lt66x\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"SmngMSNxQ7TnildgcI5OzZYJxWbwAH2C0UJj3M+J+Fw=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"10000000000\"\n                }\n              }\n            ],\n            \"memo\": \"a99b8bcb07d027895bcc2abe6baa866174b5ec23@192.168.7.14:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"AtjlOQ83TD6uUs4FUqmVOPgjGp+JgYxk8P6SjUrCbxEn\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"6O7hkhSmqLOUp+/c95I9M1drzkdulcRoJETFpZaSPvEu/wQmTyW0V6Yg3LIJ6KR2U6sbs/e0kfBRHrYfY4OGkA==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"alinode\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1jdmfxzpnqqlhjsju3mz7qsgvvdparw5acx7t62\",\n                \"validator_address\": \"bostromvaloper1jdmfxzpnqqlhjsju3mz7qsgvvdparw5aque52f\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"JKHQ2Gg/+wWDMcvLwHoEHFccRVZYuGCBSTD/fnIi2vg=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"1500000000\"\n                }\n              }\n            ],\n            \"memo\": \"963ce143862bdad29c2707302ad4afa21bc1a48e@213.246.39.35:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A8zFftObCKT2prwqRKuY052meDr9PMCXpbpJdmO3EBty\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"arNRkETkLTBPGYIWi5tYkqeFolCmfn7160BPg5NvL7pW/0g/1T/d52zEUnD7J1CxvHjU7gCF7sIcKkxasLxF4A==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"blue\",\n                  \"identity\": \"4815E34CD44A9BCC\",\n                  \"website\": \"cyb.ai\",\n                  \"security_contact\": \"\",\n                  \"details\": \"May cyber be with you!\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.077000000000000000\",\n                  \"max_rate\": \"1.000000000000000000\",\n                  \"max_change_rate\": \"0.100000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1ymprf45c44rp9k0g2r84w2tjhsq7kalv98rgpt\",\n                \"validator_address\": \"bostromvaloper1ymprf45c44rp9k0g2r84w2tjhsq7kalvaayh3g\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"110HUJd7XFqWhXbE/nF1D4pFcM/vQ8D9yOJbyQF6gsc=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"150000000000\"\n                }\n              }\n            ],\n            \"memo\": \"d647c9f7f8a50de3fa75504dec5c6943e2f97297@192.168.1.22:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"AhhWC3Vm5nl0W46/gk07bObIRYKLpShYyPjKwyfZpbjE\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"7triW+S9rwnFEZVh57sgHHfvoYH7SHXYwu2rrCTxRbMPWhDhcv35L45NSq4izsWTRUDZXc4ECyXiPtzXPCcQiw==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"Citizen Cosmos\",\n                  \"identity\": \"DF0280597A20ACFE\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1f7nx65pmayfenpfwzwaamwas4ygmvalq2q2ayq\",\n                \"validator_address\": \"bostromvaloper1f7nx65pmayfenpfwzwaamwas4ygmvalqj6dz5r\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"hzZZ1s5Q2R0Qhbax0Hf7xS9m+kMxbc6FVUihIIoa35c=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"73000000000\"\n                }\n              }\n            ],\n            \"memo\": \"f1f24eb30de7a1874eb9f11b07bfc87304bd1e51@192.168.1.8:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A4YPXp3wQTKE8f6dWNPWhxbgMre2cPmN3XNkK+qa0bcM\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"rl6sgn+j7weVYnzBnkhnOg0ubuxUfhEgCqEncgY59p9JWsAqNCxB88bQf2cKDLTrwS7fb/0nNfxGNKp17D9Drw==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"csaxial\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1ezpth4mp3eeqdt49kgqd5ctr69xev6v2gykpur\",\n                \"validator_address\": \"bostromvaloper1ezpth4mp3eeqdt49kgqd5ctr69xev6v2s737vq\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"lB5R6K7wY2G4a3Aus+NWAwYiFga5Cc2WxvwZG3Ga3yk=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"1321419074\"\n                }\n              }\n            ],\n            \"memo\": \"142ac0545728f8c6ebdbb0c0c7bceb9037ac8500@213.246.45.11:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"AyZAyFNW/2s83BGnyEWcYQXRRrygMQCo9o/XDAZCP8oZ\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"TScK3vVqEZ7+i0xUFPvD0LMN1rTyfGgQuhdAcuzyFMVdMUme1i7MvIPCMZW6g1Arj70kNjl6qxO/Q1gHhM+mRg==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"Space\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.200000000000000000\",\n                  \"max_change_rate\": \"0.050000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1lnkg57t7mvg5mcl7kdkevtgr9wlf6f9qtp86sk\",\n                \"validator_address\": \"bostromvaloper1lnkg57t7mvg5mcl7kdkevtgr9wlf6f9qnmq9q4\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"0O20CW17q7chWZGHayK+SlEzCXfJaqTlshkE1xujQCg=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"70000000000\"\n                }\n              }\n            ],\n            \"memo\": \"dd4dd317f85209964232cbbe772c242c50bbbe58@88.218.191.79:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"AwvyyDlWja87ZwpT/pvNYBXXUGxNnLKA9MvWXij5gIts\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"vagsGgO+zNfHY6f75cwxxY2eF2Z/118v2Yo6okBeaAtnz9uJsy15r9gpi3xheAhd6fas4Cdm6StytC9k5zL3Fw==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"dobry\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1fpl40sref5vp8kfm7xkqlq5qc0v4xrjvk89kwa\",\n                \"validator_address\": \"bostromvaloper1fpl40sref5vp8kfm7xkqlq5qc0v4xrjvwazf77\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"ZxYmxQPGdPYaBJA8IY4Jg3h/Cs0wVRmPIippypxPrsU=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"2000000000\"\n                }\n              }\n            ],\n            \"memo\": \"6922a88c66cbfeea0831cc38c2f3485a78b29b46@192.168.88.9:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A61usxgHwcBypbZ2FaByVOGvL0sScEfE7qNDDvrxIkrx\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"MPUXshgRvcj2kIQRrZ4TvzzGL0+9XLwPKPuauNIZhTo0m8fAdtEGS6BKe1RuUHsmObju6dgWVEn5He8Nyi67ww==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"DemonKing\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.220000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1nvr4qa7szsd3e7xfysn946gcqv5wyemlcxmxpw\",\n                \"validator_address\": \"bostromvaloper1nvr4qa7szsd3e7xfysn946gcqv5wyemlquue3d\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"XXul+cFAn6BK4S/aZlMABb9h+jsqFi7/GgZ01JTfhnE=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"10000000000\"\n                }\n              }\n            ],\n            \"memo\": \"f1b4b596730ed81d33dbcf051870f0b7b50d6306@185.230.88.227:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"Ahz880YLBAqIp/nXoLLBkhirFgfKcBWd9AH5apprRUg5\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"CJ40V9iORA1e4XJI8DmTKf8i0JqUTNSweDaUpqPboRkek8eP9kzFY9B5wMwQyarUUTCiahBNGmYuw0aO9g5DNA==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"goto5k\",\n                  \"identity\": \"1B0142FC46D30561\",\n                  \"website\": \"https://validator.goto5k.com\",\n                  \"security_contact\": \"\",\n                  \"details\": \"validator goto5k\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"20000\",\n                \"delegator_address\": \"bostrom10trdf5eyfcmc9graltx4hmpgznhrm7hdz82k2n\",\n                \"validator_address\": \"bostromvaloper10trdf5eyfcmc9graltx4hmpgznhrm7hd6adf6s\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"TVfJZnq2vaHv1XI49n7nPn1wVQxurVL3JDVVUUo/Ijo=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"1941697143\"\n                }\n              }\n            ],\n            \"memo\": \"9715ea8afc6ba882fbb91cc389e4ca6174433e40@192.168.100.4:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A2y3DqIjyeTqoFiojpJh5eJmLxcROK/zw3fOVj87KvVf\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"h2WNVfwTvJt9q2qoIAPoI0RCCTxrKo5NBNA7jsSYS9JN80d7zIBhDsOZ8PKnS3WwtyAFkdV3nvULJ7+BzHdpiQ==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"kiwi\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"100000\",\n                \"delegator_address\": \"bostrom1w4tk9lj8qtx2x4xf4emgrnq950hnlajsxlnl3u\",\n                \"validator_address\": \"bostromvaloper1w4tk9lj8qtx2x4xf4emgrnq950hnlajs795qpl\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"823dliApVbj5vUsXFYViaOB6hI8/P7ul0zmZpHmW+80=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"3000000000\"\n                }\n              }\n            ],\n            \"memo\": \"1874c04a8cfffa6b47e37fe2255158abb7c69e8b@213.246.42.130:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A2qM2nYkdvgGaKEoEIvohiHgbux/4tdRFhQveYbUmHnp\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"XZeX3P3qL2YI2FAtJSkPZNdzpN4aKZK1OFic6UEzkSthNHl4gVyydwgjsIlS55A0pfMfatiimIOPNJlVdclS5g==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"qwertys318\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.100000000000000000\",\n                  \"max_rate\": \"0.200000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1402rpwdquxxkgvl740f6w69l65eau5vkqcvrax\",\n                \"validator_address\": \"bostromvaloper1402rpwdquxxkgvl740f6w69l65eau5vkcztud9\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"r3NIqDgCKwxfTIdvsUYruUSv+ExKI/dyL9UxRt3uuHQ=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"10000000000\"\n                }\n              }\n            ],\n            \"memo\": \"afa472f8880ce4ef3f7e83a446b6846456c7627a@62.182.82.18:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"AgHfo2wAJPHXlA0p+hez3PySR0siNykr4236MLZVwDwH\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"R9ueed1u83kC6eJSKQg79TYQhxN6bmOFgNQp0pa51kQVIaq8CloXymUbgYO0iN9L7CTUfeiSCJvR0ReKncmTiA==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"spectrum\",\n                  \"identity\": \"715E454ACF0C537C\",\n                  \"website\": \"https://spectrumstaking.net\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom15n3t80p7eseld809f7fu3s9tlcezlymkfeu59n\",\n                \"validator_address\": \"bostromvaloper15n3t80p7eseld809f7fu3s9tlcezlymk3rmt4s\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"ZxG1y2GSwb/HuBi8BFZLoYYUMyuvboplTa1DDuMGnG0=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"3000000000\"\n                }\n              }\n            ],\n            \"memo\": \"8285e7ddaa2bc545de9c6720f746c0d3cd48e782@192.168.1.105:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A+E8waurHOB4l8ab8C8TG3YhYKDC6S3T8SED22kpAHFy\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"1BG5B1EpwYyqJnrSk5xME9EoQnbk4KboqWGzk59L0AkKcrtOCsNoFf0npEBxVQp+Ag6tI+DNVwrtK4UtKF40/g==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"sta\",\n                  \"identity\": \"60507CCEB00F6CBD\",\n                  \"website\": \"https://cyb.ai/network/bostrom/hero/bostromvaloper1hmkqhy8ygl6tnl5g8tc503rwrmmrkjcqf92r73\",\n                  \"security_contact\": \"60507CCEB00F6CBD\",\n                  \"details\": \"a Great Web believer\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.200000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1hmkqhy8ygl6tnl5g8tc503rwrmmrkjcq3lduwj\",\n                \"validator_address\": \"bostromvaloper1hmkqhy8ygl6tnl5g8tc503rwrmmrkjcqf92r73\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"FVs7R89ToDtCaYNZHrRF8MWCQ4d3uxytQSMg4OMleW8=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"150000000000\"\n                }\n              }\n            ],\n            \"memo\": \"416aa82d0ab4c0fc379426fcedadc947d84afc50@192.168.1.18:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A2VNyRXHdKHqT3mosH+sPHFhvCglaCEnK6wLgG8yN8WO\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"tqyQRTpdfMkwClnRQghUOaeD+x8sobxcYVRFT0rr1YR37A1ONih5w1h1ZKPD7mIjF+ydSwM1JYGs/of/nUbdlg==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"Adorid\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"bostrom1mnfalar08dsvtwutmh43lnhx2zzmq7xhdulemj\",\n                \"validator_address\": \"bostromvaloper1mnfalar08dsvtwutmh43lnhx2zzmq7xh4xcxt3\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"AK7c305pBQkAz05OE8rw5JkwSx+nhcvna6Tz9RXhE+Q=\"\n                },\n                \"value\": {\n                  \"denom\": \"boot\",\n                  \"amount\": \"10000000000\"\n                }\n              }\n            ],\n            \"memo\": \"bd272d32665caea2d80127bb930a92e8bb563202@192.168.88.56:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A7vpgS7DhWrPcDfGh9fzTUXxutVYlAgEK3idq0kTSK7k\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"DSoWS3oAswZIEiruKCAF0cP4LGcp+l1dAA0EMYu4xE9zHN6xI3hLgAieIHtfxfS9vk6H+/sLYtmM5C6+mdhpdQ==\"\n          ]\n        }\n      ]\n    },\n    \"gov\": {\n      \"starting_proposal_id\": \"1\",\n      \"deposits\": [],\n      \"votes\": [],\n      \"proposals\": [],\n      \"deposit_params\": {\n        \"min_deposit\": [\n          {\n            \"denom\": \"boot\",\n            \"amount\": \"1000000000\"\n          }\n        ],\n        \"max_deposit_period\": \"604800s\"\n      },\n      \"voting_params\": {\n        \"voting_period\": \"604800s\"\n      },\n      \"tally_params\": {\n        \"quorum\": \"0.250000000000000000\",\n        \"threshold\": \"0.500000000000000000\",\n        \"veto_threshold\": \"0.250000000000000000\"\n      }\n    },\n    \"graph\": null,\n    \"grid\": {\n      \"params\": {\n        \"max_routes\": 16\n      },\n      \"routes\": []\n    },\n    \"ibc\": {\n      \"client_genesis\": {\n        \"clients\": [],\n        \"clients_consensus\": [],\n        \"clients_metadata\": [],\n        \"params\": {\n          \"allowed_clients\": [\n            \"06-solomachine\",\n            \"07-tendermint\"\n          ]\n        },\n        \"create_localhost\": false,\n        \"next_client_sequence\": \"0\"\n      },\n      \"connection_genesis\": {\n        \"connections\": [],\n        \"client_connection_paths\": [],\n        \"next_connection_sequence\": \"0\",\n        \"params\": {\n          \"max_expected_time_per_block\": \"30000000000\"\n        }\n      },\n      \"channel_genesis\": {\n        \"channels\": [],\n        \"acknowledgements\": [],\n        \"commitments\": [],\n        \"receipts\": [],\n        \"send_sequences\": [],\n        \"recv_sequences\": [],\n        \"ack_sequences\": [],\n        \"next_channel_sequence\": \"0\"\n      }\n    },\n    \"liquidity\": {\n      \"params\": {\n        \"pool_types\": [\n          {\n            \"id\": 1,\n            \"name\": \"StandardLiquidityPool\",\n            \"min_reserve_coin_num\": 2,\n            \"max_reserve_coin_num\": 2,\n            \"description\": \"Standard liquidity pool with pool price function X/Y, ESPM constraint, and two kinds of reserve coins\"\n          }\n        ],\n        \"min_init_deposit_amount\": \"1000000\",\n        \"init_pool_coin_mint_amount\": \"1000000000000\",\n        \"max_reserve_coin_amount\": \"0\",\n        \"pool_creation_fee\": [\n          {\n            \"denom\": \"boot\",\n            \"amount\": \"1000000000\"\n          }\n        ],\n        \"swap_fee_rate\": \"0.003000000000000000\",\n        \"withdraw_fee_rate\": \"0.003000000000000000\",\n        \"max_order_amount_ratio\": \"0.100000000000000000\",\n        \"unit_batch_height\": 1,\n        \"circuit_breaker_enabled\": false\n      },\n      \"pool_records\": []\n    },\n    \"mint\": {\n      \"minter\": {\n        \"inflation\": \"0.050000000000000000\",\n        \"annual_provisions\": \"0.000000000000000000\"\n      },\n      \"params\": {\n        \"mint_denom\": \"boot\",\n        \"inflation_rate_change\": \"0.200000000000000000\",\n        \"inflation_max\": \"0.150000000000000000\",\n        \"inflation_min\": \"0.030000000000000000\",\n        \"goal_bonded\": \"0.800000000000000000\",\n        \"blocks_per_year\": \"6311520\"\n      }\n    },\n    \"params\": null,\n    \"rank\": {\n      \"params\": {\n        \"calculation_period\": \"5\",\n        \"damping_factor\": \"0.800000000000000000\",\n        \"tolerance\": \"0.001000000000000000\"\n      }\n    },\n    \"resources\": {\n      \"params\": {\n        \"max_slots\": 8,\n        \"halving_period_volt_blocks\": 9000000,\n        \"halving_period_ampere_blocks\": 9000000,\n        \"base_investmint_period_volt\": 2592000,\n        \"base_investmint_period_ampere\": 2592000,\n        \"min_investmint_period\": 86400,\n        \"base_investmint_amount_volt\": {\n          \"denom\": \"hydrogen\",\n          \"amount\": \"1000000000\"\n        },\n        \"base_investmint_amount_ampere\": {\n          \"denom\": \"hydrogen\",\n          \"amount\": \"100000000\"\n        }\n      }\n    },\n    \"slashing\": {\n      \"params\": {\n        \"signed_blocks_window\": \"8000\",\n        \"min_signed_per_window\": \"0.750000000000000000\",\n        \"downtime_jail_duration\": \"600s\",\n        \"slash_fraction_double_sign\": \"0.050000000000000000\",\n        \"slash_fraction_downtime\": \"0.000100000000000000\"\n      },\n      \"signing_infos\": [],\n      \"missed_blocks\": []\n    },\n    \"staking\": {\n      \"params\": {\n        \"unbonding_time\": \"345600s\",\n        \"max_validators\": 92,\n        \"max_entries\": 10,\n        \"historical_entries\": 10000,\n        \"bond_denom\": \"boot\"\n      },\n      \"last_total_power\": \"0\",\n      \"last_validator_powers\": [],\n      \"validators\": [],\n      \"delegations\": [],\n      \"unbonding_delegations\": [],\n      \"redelegations\": [],\n      \"exported\": false\n    },\n    \"transfer\": {\n      \"port_id\": \"transfer\",\n      \"denom_traces\": [],\n      \"params\": {\n        \"send_enabled\": false,\n        \"receive_enabled\": false\n      }\n    },\n    \"upgrade\": {},\n    \"vesting\": {},\n    \"wasm\": {\n      \"params\": {\n        \"code_upload_access\": {\n          \"permission\": \"Everybody\",\n          \"address\": \"\"\n        },\n        \"instantiate_default_permission\": \"Everybody\",\n        \"max_wasm_code_size\": \"1228800\"\n      },\n      \"codes\": [],\n      \"contracts\": [],\n      \"sequences\": [],\n      \"gen_msgs\": []\n    }\n  }\n}"
  },
  {
    "path": "networks/bostrom/gentxs/bloqhub.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"bloqhub\",\"identity\":\"\",\"website\":\"https://bloqhub.io\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"600000000\",\"delegator_address\":\"bostrom1gh09lmm8flkuu3w38mr4axvunnu6qqlapuwzrv\",\"validator_address\":\"bostromvaloper1gh09lmm8flkuu3w38mr4axvunnu6qqlaexfan0\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"aIG2z/l2N3K6WslUGA8u5kZnqcvqyKEXQpoiiICLKa4=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"700000000\"}}],\"memo\":\"dd22cffccafaece970cfa9e7eb3c8468f6fa1c84@46.166.165.14:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"AjOqctJGZMZLaRwwrzZyuaTuXp1UL3End4PQVB7vC2J+\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"rNmSw3X53arQwmmH/n1QdrsedZ6DQFKmZL2cN2wmKZ8C9WeXRdYRo2pWtMukcHUSk4dzZGOkhaewxN2I794tqw==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-0base.vc.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"0base.vc\",\"identity\":\"67A577430DBBCEE0\",\"website\":\"https://0base.vc\",\"security_contact\":\"0@0base.vc\",\"details\":\"0base.vc is a validator who doesn't trust any blockchain; we validate it ourselves.\"},\"commission\":{\"rate\":\"0.000000000000000000\",\"max_rate\":\"0.250000000000000000\",\"max_change_rate\":\"0.100000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom152m9xcx0ht7yxr5834ju7qjcyvetw8amd04apw\",\"validator_address\":\"bostromvaloper152m9xcx0ht7yxr5834ju7qjcyvetw8am44jz3d\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"9EtOO5q/eUiQ1VtdFegl46fyhJ2tkzm2TDLkdm+zRm0=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"71000000000\"}}],\"memo\":\"d669803c3234f0a5f9db9883bd0a51fba90f9421@192.168.2.238:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"Alq7kX/SxB3TsTDBtPfiQYcDZmnt/JA1ND7bYbR601xM\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"PrHcAs1tDMNC081gnzm+4Pka/X3Xut6JJKuOIq9olYZU41MpEjt/K6ZDmOZrQzw+ySPHb/9+mlzZqPxo3nFR8Q==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-39a20a7d84c6e91c6638f5a685a13f655e050ee0.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"cyberG\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.100000000000000000\",\"max_rate\":\"1.000000000000000000\",\"max_change_rate\":\"0.880000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1en69twaxmv7xupy8lq7y539dpecx7yz8g0k8ft\",\"validator_address\":\"bostromvaloper1en69twaxmv7xupy8lq7y539dpecx7yz8s43ceg\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"uMw2XjXqICe1CvEbYCwN3GEXm5r1CBhc0TacHucheyw=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"10000000000\"}}],\"memo\":\"39a20a7d84c6e91c6638f5a685a13f655e050ee0@192.168.1.2:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A+/XPH/eRzCGPv+gabj4eialveLzwRrPvTUy6I/v5eMp\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"RQ+jbCPTw6d7dHpPs+ysuFBmj+BTFx2GJ/ZEK4Cyk34T+uM+PciG/DcycTd9VHCnYT4n35s3RmgHGUKX5YVhkA==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-5b59d7daadd971a9613b2efcc3c6eab0777f5f29.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"Citadel.one\",\"identity\":\"EBB03EB4BB4CFCA7\",\"website\":\"https://citadel.one\",\"security_contact\":\"\",\"details\":\"Citadel.one is a multi-asset non-custodial staking platform that lets anyone become a part of decentralized infrastructure and earn passive income. Stake with our nodes or any other validator across multiple networks in a few clicks\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.200000000000000000\",\"max_change_rate\":\"0.030000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1argjwgcplguenq4l92ggn06wadnfrz0ecqrmqs\",\"validator_address\":\"bostromvaloper1argjwgcplguenq4l92ggn06wadnfrz0eq6yysn\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"96vbjWw9jbyO8Krl9Rjbt8SU9tVuBiPhtVAxx28arcU=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"40000000000\"}}],\"memo\":\"5b59d7daadd971a9613b2efcc3c6eab0777f5f29@10.129.0.24:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A/w52L7lXEuf+bzBuq08IEbrypuMpW5Gff9zGU4uYyMD\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"dgUZukDKCaztxabLHQru1+clM8wS+zTHOA4lp7YYt7pHTBCO3YBY5EMKJTEei+Nz8wJX0h8WkFBZYA+YtfGp4g==\"]}"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-5e8522bef5ceca507e05aa0d5f67f37a70222c73.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"web34ever\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.200000000000000000\",\"max_change_rate\":\"0.100000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom15zs0cjct43xs4z4sesxcrynar5mxm82f0ykhl3\",\"validator_address\":\"bostromvaloper15zs0cjct43xs4z4sesxcrynar5mxm82fh73g0j\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"Kry59s/u3vENIsWu+4ssFqsnECWTxA8iOFSXPbIQmsU=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"10000000000\"}}],\"memo\":\"5e8522bef5ceca507e05aa0d5f67f37a70222c73@192.168.0.107:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"AoeGMAMQligEwocz8uo93DOcNQFIRDPD6MFJgCnd6mgc\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"bRNyFymF6LFfac+9DwnXRYCKCvZpIcc+O18gMVt2OB44tRCH3bS1m4dlnHHy2H8TMMJ021SSNkaaGBv7SuBTuA==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-77d27615009fc703ece46901792cc8750cccd0de.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"Developer\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.300000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom19ys53t55r725j882gjcrnf7s449gdrds3h2hu4\",\"validator_address\":\"bostromvaloper19ys53t55r725j882gjcrnf7s449gdrdsfddgvk\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"KdT8GK9d81xvkDzuNjM3nwi3mijxRfq2YWnM++SAIw4=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"38252993813\"}}],\"memo\":\"77d27615009fc703ece46901792cc8750cccd0de@185.230.90.71:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"Aic66jxbwijTVJe5LugB2hOLnVUkEXAgQFAHF0B0a2HS\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"CAmQZPBhI6415XsNQC4FLN63kg9rwgoWkBeuhz4CQ8F3HS9LL2nDJJb5/OGNeLifrHsc02Fu+WQhuEhD6Bq2wA==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-822b374bf2ca56c49fd565d149cd7cb6d175d8cb.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"Kerman\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.030000000000000000\",\"max_rate\":\"0.500000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1ke6pp2kq2wx74tlh5fxqgp7af6jtsna3kktuh6\",\"validator_address\":\"bostromvaloper1ke6pp2kq2wx74tlh5fxqgp7af6jtsna3wvvr8e\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"0nAyxxNGDv3s2miDdJWibOEoWVre8jadmJiA7BSEugk=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"10000000000\"}}],\"memo\":\"822b374bf2ca56c49fd565d149cd7cb6d175d8cb@192.168.0.67:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A2SWKzAFJLvVQEi/X1HDzFjJ5/1eC42xmaLzg/gs3xkk\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"vGtxVMDxclLZ+BgXsg9dggfOF439ccvs9gWxWQ5osCdKgj0QZSslJqgPs9RwGwxeeZHIHDLFztG0TzEcKQpUmw==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-902fb751851e474133ee4ba1e646f49237b50edf.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"papsan\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.300000000000000000\",\"max_change_rate\":\"0.100000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom18naxcfp2s397a2ucav2m53f003uylk3qz9fvr7\",\"validator_address\":\"bostromvaloper18naxcfp2s397a2ucav2m53f003uylk3q6lwnna\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"YV4dJbW6TrErmwcs0VxFiAJUio+6Yh5shQ+hwlMveN8=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"10000000000\"}}],\"memo\":\"902fb751851e474133ee4ba1e646f49237b50edf@192.168.0.161:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A5+dz3ZHelKjHTo31eZ2na4pKdlll/blg09/wBgoqzCx\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"6qgMlfzKEN+EM4lQi//6D6QI92wQPdOXGBy1l1MRigQ+uqdS5QfWIH2DJDpg/0gLSV1yJHj1ENhJAlh6wHN7YA==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-Amber.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"Godzilla\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.050000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1dxpm2ne0jflzr2hy9j5has6u2dvfv68calunqy\",\"validator_address\":\"bostromvaloper1dxpm2ne0jflzr2hy9j5has6u2dvfv68c99mvs8\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"BncD9wiS2MKpBJw1t9PLoIeqQ9pTccPoGBx9cRNoZak=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"10000000000\"}}],\"memo\":\"0c4296d5d591bdf7fc8a16ab316a0fefed245ed0@192.168.0.104:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"AhP0Psq9i0nwuprL3XwQpDE4AuCi+hSgDg/YtQV0ks93\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"mq2msMfWEra01A3cNxUFG8+4yd0ttgRM5xRjA0JMBS9l3AfNXoCYMTdFA7iPrKBblkNR8Yg8Ztrulc3UCGDrLw==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-Bro_n_Bro.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"Bro_n_Bro\",\"identity\":\"A57DAB9B09C7215D\",\"website\":\"monitor.bronbro.io\",\"security_contact\":\"\",\"details\":\"We building for decentralization. Until it comes follow our progress on Github github.com/bro-n-bro, join twitter.com/Bro_n_Bro and rank us at cyb.ai/search/Bro_n_Bro\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.150000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"500000000\",\"delegator_address\":\"bostrom1ydc5fy9fjdygvgw36u49yj39fr67pd9mv67ety\",\"validator_address\":\"bostromvaloper1ydc5fy9fjdygvgw36u49yj39fr67pd9m5qexm8\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"SEiFL2BSD9TOUsPIaBKx5xZU+ijry95DdZ44u9mwd3Y=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"850000000\"}}],\"memo\":\"74b6fc649a41cb1d21201a440b16a1e478706a78@192.168.100.8:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"AjOKnmLV/8qlph6bINrTw3USPl8YVfwqMwY1xlT2+2nV\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"sctX7B6LKkBJ6XdwuLyohNipyg2PSMT9npqNc4rHYaBzlaTZCTv1loPmJW8rurKA4kiGCuU58kxR4X7m7gffhA==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-Hailbiafra.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"Hailbiafra\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1smsn8u0h5tlvt3jazf78nnrv54aspged9h2nl9\",\"validator_address\":\"bostromvaloper1smsn8u0h5tlvt3jazf78nnrv54aspgedaddv0x\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"triXPhJGBlAduyzF6oF0PKHM9H2sXz9+TWY5gb9lkNI=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"1500000000\"}}],\"memo\":\"082ec921427c35a5aeaa8576c5ba2a0513994c4d@192.168.0.21:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A8ht9IthhnJlqSqkOyPUOuA5I0bhEu//8V17Wvi5nDX0\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"jGWq0dtKzBLIVuY/s/Fk2eZjPy8CsOF9PhZj8iaHSM5Fpy0518Bqt0KYJ47/d2KAL8Zw3Zcw0n82UojxzZLhJw==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-MindPool.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"MindPool\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1gd9r9uhd8a5k2naudq4hua3vf3lkwhfrm63qhq\",\"validator_address\":\"bostromvaloper1gd9r9uhd8a5k2naudq4hua3vf3lkwhfrrqkl8r\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"RPBRQHcurf6ZOoar9DWoncHbcEGmaceT0zdalDYsobo=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"1100000000\"}}],\"memo\":\"615e772ebe444a7bff0078b12ba0c445f56c9fea@31.14.40.221:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"AlR8VrZk5703owY5iA0M9Dhdf1pMBCk4bXg5KawbDG8g\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"FoLuebxVDbQJwDQ1Gv+klkFBIhCo/L87btLU/IMYofYA8KQ3iRnqxGuS15chFOv2z+SNVWc9uKQjDrpUKfLdLw==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-Nett.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"Nett\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1njsr8tngxtygsc73mrtn5738ztkzqy7c7y7h3t\",\"validator_address\":\"bostromvaloper1njsr8tngxtygsc73mrtn5738ztkzqy7cx7egpg\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"ChguMkmpTQCnekerrNnAnyFePLY3C1jacudM3SYOrdg=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"10000000000\"}}],\"memo\":\"6bc53131a0acdd7ffaaaad3f0bd2e13a0cf4544c@31.14.40.252:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"Ak/h9AX2Pl5aIvaC9wcEnj7QDU/pr0YU6WQfbbStR34V\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"fsdilaUl8FMkjptEUgPslypkGHlWUgYSdCTHrfeTkR4npA/1Aunx56J46bgVifKza/9KeHaFMn5sVSUO1rxLwA==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-NodeMarsel.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"NodeMarsel\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1vrym7t34gs9t2dkd8z849zcymkj54kgq7pdf8z\",\"validator_address\":\"bostromvaloper1vrym7t34gs9t2dkd8z849zcymkj54kgqxm2khp\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"fIbK0sEsisgCoXnWmrfApLX7SdvuhltzU1llq+jiV8k=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"1200000000\"}}],\"memo\":\"4a194e60d748fe7407aef58a22957d1d4d1327fd@213.108.130.224:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"AjDkMSMwESOWvRQGEtP/j09Iyul2827V83zhitE60tSm\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"ZD4QxpojQ5tlkW1ydaiwGAPL15olannbLDXjj0DBV3VJKVz/+TLAR4zW0MG5AQORrd5IksT6zHeTRHnfrjxNYg==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-Node_masters.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"Node_masters\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1zy553za8nenzukmv65240323jhuvxzym4pl6w9\",\"validator_address\":\"bostromvaloper1zy553za8nenzukmv65240323jhuvxzymdmc97x\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"hkaRWuE3BNBVmeqv70qJ++iyYs7THerZyOhNa7E2gVM=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"150000000000\"}}],\"memo\":\"4baf7d265d7524543bebc2322089bca4a3980b54@176.9.0.254:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A6ugL0vd+03w9K+27qpls79V265kl7xpIxkeFWxjAxos\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"eXqb2zaAjXsqUeeFlxLLhgd4ToUlbpz/ysg+tqFSossEmXknpoJB8hpwVOZeUC82zyNgV1VPNmwk+jxvqiLvdg==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-P2P.ORG.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"P2P.ORG - P2P Validator\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.100000000000000000\",\"max_rate\":\"1.000000000000000000\",\"max_change_rate\":\"0.100000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1daxxqs56f6j5qxxtjrjkexghsmnaj66tejshc8\",\"validator_address\":\"bostromvaloper1daxxqs56f6j5qxxtjrjkexghsmnaj66tpghggy\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"4KsAoQUaZNVyA0Tc02Gw3GYxkuMdgtf+aXTOqKDNbgE=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"10000000000\"}}],\"memo\":\"c08e42e2c61b42647f5d0f9179ecf71cc5b91983@85.10.204.155:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"AlJhCdxE6tlLq6sH2feIUpV5tjpqFTfdN/d727m7QFJo\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"ZoFtA2JHo7ENKp4zw360+sObHPimRgECdSAM7zF586YSXeUXRGiZ9j6MnsnbgHfqFg32jeRSG07ayY1RYYNY3w==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-PLap.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"PLap\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1wm4026rxqcrkh09k806m6y4lys942etx5cjz9z\",\"validator_address\":\"bostromvaloper1wm4026rxqcrkh09k806m6y4lys942etxvz4a4p\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"2VHfckjdelAwGj8b3gw+kq7U0ni9aB9S3rNQx054iVU=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"2008629825\"}}],\"memo\":\"d8783bd0a78777503143d90f55c6ce68bd5b53d3@178.170.46.52:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"AoWKUnsu5koT3S90SK96fnKcuzd5myJs6HsYbHskkoFc\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"HAeMOhN4PVUKZSmYzf23Rf4eNUlInL03YTbYaf+sAT8kPtSyA4UGffu6DZekLDWPDNf1fXypWnxXpxkaUvOJfQ==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-POSTHUMAN.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"POSTHUMAN\",\"identity\":\"8A9FC930E1A980D6\",\"website\":\"https://posthuman.digital\",\"security_contact\":\"\",\"details\":\"full-time enthusiast\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.131200000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1ccvpcq9ffy0qd2ca8nmmpzfamtyjfc9znwak8m\",\"validator_address\":\"bostromvaloper1ccvpcq9ffy0qd2ca8nmmpzfamtyjfc9zt56fhc\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"lWEU7pJSRroGTFMa5O6JKRC1JnGsupKTC88i3uAtxu0=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"10000000000\"}}],\"memo\":\"55937c36959ea3984cc6e6ebd3354d73bbbdbcda@192.168.1.65:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A5khg0rKhMayAuU6AK2To44nGX7wjOz3kKgvjHQkgOpm\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"pZi8OR9mNdIliit7mNKp3Wvtt9RGSE0hvqkq8wgdOQ4oc2qZZdSFD7eu6YBBdMNhMxlQKt9GcXEZuIpXQ2C+Jg==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-StakeAngle.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"StakeAngle\",\"identity\":\"0C2EBFF70582B725\",\"website\":\"https://stakeangle.com/\",\"security_contact\":\"\",\"details\":\"Non-custodial staking provider\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000\",\"delegator_address\":\"bostrom1g2d9xyuf7ddgaj4llxvg50pfhlsr9ehf2r8dr6\",\"validator_address\":\"bostromvaloper1g2d9xyuf7ddgaj4llxvg50pfhlsr9ehfjeqjne\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"qOE+qVo9giTu6cypXg6zN3ZT9MitNBHfTYfLL2ADVGo=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"5000000000\"}}],\"memo\":\"0fc5cfc9c383223ab2b4b0811bc43c7123653ade@192.168.1.38:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"AzuPqiLKy2Y7g87DO43xNI19pSbQPsSKFh1XPR2AKFiA\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"nXsiARFuivsTpMNogfTiNJZDZIOik+koTMY9qyt0jJgPXxf90mDXCjgSuB9UQywawAe7cuko+bXuwg1egZ6tpA==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-a99b8bcb07d027895bcc2abe6baa866174b5ec23.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"DragonBall\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.200000000000000000\",\"max_change_rate\":\"0.100000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1dt9lwmuq8rkngm5gajxchqhpcnavgp7md9v929\",\"validator_address\":\"bostromvaloper1dt9lwmuq8rkngm5gajxchqhpcnavgp7m4lt66x\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"SmngMSNxQ7TnildgcI5OzZYJxWbwAH2C0UJj3M+J+Fw=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"10000000000\"}}],\"memo\":\"a99b8bcb07d027895bcc2abe6baa866174b5ec23@192.168.7.14:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"AtjlOQ83TD6uUs4FUqmVOPgjGp+JgYxk8P6SjUrCbxEn\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"6O7hkhSmqLOUp+/c95I9M1drzkdulcRoJETFpZaSPvEu/wQmTyW0V6Yg3LIJ6KR2U6sbs/e0kfBRHrYfY4OGkA==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-alinode.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"alinode\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1jdmfxzpnqqlhjsju3mz7qsgvvdparw5acx7t62\",\"validator_address\":\"bostromvaloper1jdmfxzpnqqlhjsju3mz7qsgvvdparw5aque52f\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"JKHQ2Gg/+wWDMcvLwHoEHFccRVZYuGCBSTD/fnIi2vg=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"1500000000\"}}],\"memo\":\"963ce143862bdad29c2707302ad4afa21bc1a48e@213.246.39.35:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A8zFftObCKT2prwqRKuY052meDr9PMCXpbpJdmO3EBty\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"arNRkETkLTBPGYIWi5tYkqeFolCmfn7160BPg5NvL7pW/0g/1T/d52zEUnD7J1CxvHjU7gCF7sIcKkxasLxF4A==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-blue.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"blue\",\"identity\":\"4815E34CD44A9BCC\",\"website\":\"cyb.ai\",\"security_contact\":\"\",\"details\":\"May cyber be with you!\"},\"commission\":{\"rate\":\"0.077000000000000000\",\"max_rate\":\"1.000000000000000000\",\"max_change_rate\":\"0.100000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1ymprf45c44rp9k0g2r84w2tjhsq7kalv98rgpt\",\"validator_address\":\"bostromvaloper1ymprf45c44rp9k0g2r84w2tjhsq7kalvaayh3g\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"110HUJd7XFqWhXbE/nF1D4pFcM/vQ8D9yOJbyQF6gsc=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"150000000000\"}}],\"memo\":\"d647c9f7f8a50de3fa75504dec5c6943e2f97297@192.168.1.22:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"AhhWC3Vm5nl0W46/gk07bObIRYKLpShYyPjKwyfZpbjE\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"7triW+S9rwnFEZVh57sgHHfvoYH7SHXYwu2rrCTxRbMPWhDhcv35L45NSq4izsWTRUDZXc4ECyXiPtzXPCcQiw==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-citizen-cosmos.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"Citizen Cosmos\",\"identity\":\"DF0280597A20ACFE\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1f7nx65pmayfenpfwzwaamwas4ygmvalq2q2ayq\",\"validator_address\":\"bostromvaloper1f7nx65pmayfenpfwzwaamwas4ygmvalqj6dz5r\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"hzZZ1s5Q2R0Qhbax0Hf7xS9m+kMxbc6FVUihIIoa35c=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"73000000000\"}}],\"memo\":\"f1f24eb30de7a1874eb9f11b07bfc87304bd1e51@192.168.1.8:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A4YPXp3wQTKE8f6dWNPWhxbgMre2cPmN3XNkK+qa0bcM\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"rl6sgn+j7weVYnzBnkhnOg0ubuxUfhEgCqEncgY59p9JWsAqNCxB88bQf2cKDLTrwS7fb/0nNfxGNKp17D9Drw==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-csaxial.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"csaxial\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1ezpth4mp3eeqdt49kgqd5ctr69xev6v2gykpur\",\"validator_address\":\"bostromvaloper1ezpth4mp3eeqdt49kgqd5ctr69xev6v2s737vq\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"lB5R6K7wY2G4a3Aus+NWAwYiFga5Cc2WxvwZG3Ga3yk=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"1321419074\"}}],\"memo\":\"142ac0545728f8c6ebdbb0c0c7bceb9037ac8500@213.246.45.11:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"AyZAyFNW/2s83BGnyEWcYQXRRrygMQCo9o/XDAZCP8oZ\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"TScK3vVqEZ7+i0xUFPvD0LMN1rTyfGgQuhdAcuzyFMVdMUme1i7MvIPCMZW6g1Arj70kNjl6qxO/Q1gHhM+mRg==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-dd4dd317f85209964232cbbe772c242c50bbbe58.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"Space\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.200000000000000000\",\"max_change_rate\":\"0.050000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1lnkg57t7mvg5mcl7kdkevtgr9wlf6f9qtp86sk\",\"validator_address\":\"bostromvaloper1lnkg57t7mvg5mcl7kdkevtgr9wlf6f9qnmq9q4\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"0O20CW17q7chWZGHayK+SlEzCXfJaqTlshkE1xujQCg=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"70000000000\"}}],\"memo\":\"dd4dd317f85209964232cbbe772c242c50bbbe58@88.218.191.79:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"AwvyyDlWja87ZwpT/pvNYBXXUGxNnLKA9MvWXij5gIts\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"vagsGgO+zNfHY6f75cwxxY2eF2Z/118v2Yo6okBeaAtnz9uJsy15r9gpi3xheAhd6fas4Cdm6StytC9k5zL3Fw==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-dobry.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"dobry\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1fpl40sref5vp8kfm7xkqlq5qc0v4xrjvk89kwa\",\"validator_address\":\"bostromvaloper1fpl40sref5vp8kfm7xkqlq5qc0v4xrjvwazf77\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"ZxYmxQPGdPYaBJA8IY4Jg3h/Cs0wVRmPIippypxPrsU=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"2000000000\"}}],\"memo\":\"6922a88c66cbfeea0831cc38c2f3485a78b29b46@192.168.88.9:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A61usxgHwcBypbZ2FaByVOGvL0sScEfE7qNDDvrxIkrx\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"MPUXshgRvcj2kIQRrZ4TvzzGL0+9XLwPKPuauNIZhTo0m8fAdtEGS6BKe1RuUHsmObju6dgWVEn5He8Nyi67ww==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-f1b4b596730ed81d33dbcf051870f0b7b50d6306.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"DemonKing\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.220000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1nvr4qa7szsd3e7xfysn946gcqv5wyemlcxmxpw\",\"validator_address\":\"bostromvaloper1nvr4qa7szsd3e7xfysn946gcqv5wyemlquue3d\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"XXul+cFAn6BK4S/aZlMABb9h+jsqFi7/GgZ01JTfhnE=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"10000000000\"}}],\"memo\":\"f1b4b596730ed81d33dbcf051870f0b7b50d6306@185.230.88.227:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"Ahz880YLBAqIp/nXoLLBkhirFgfKcBWd9AH5apprRUg5\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"CJ40V9iORA1e4XJI8DmTKf8i0JqUTNSweDaUpqPboRkek8eP9kzFY9B5wMwQyarUUTCiahBNGmYuw0aO9g5DNA==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-goto5k.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"goto5k\",\"identity\":\"1B0142FC46D30561\",\"website\":\"https://validator.goto5k.com\",\"security_contact\":\"\",\"details\":\"validator goto5k\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"20000\",\"delegator_address\":\"bostrom10trdf5eyfcmc9graltx4hmpgznhrm7hdz82k2n\",\"validator_address\":\"bostromvaloper10trdf5eyfcmc9graltx4hmpgznhrm7hd6adf6s\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"TVfJZnq2vaHv1XI49n7nPn1wVQxurVL3JDVVUUo/Ijo=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"1941697143\"}}],\"memo\":\"9715ea8afc6ba882fbb91cc389e4ca6174433e40@192.168.100.4:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A2y3DqIjyeTqoFiojpJh5eJmLxcROK/zw3fOVj87KvVf\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"h2WNVfwTvJt9q2qoIAPoI0RCCTxrKo5NBNA7jsSYS9JN80d7zIBhDsOZ8PKnS3WwtyAFkdV3nvULJ7+BzHdpiQ==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-kiwi.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"kiwi\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"100000\",\"delegator_address\":\"bostrom1w4tk9lj8qtx2x4xf4emgrnq950hnlajsxlnl3u\",\"validator_address\":\"bostromvaloper1w4tk9lj8qtx2x4xf4emgrnq950hnlajs795qpl\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"823dliApVbj5vUsXFYViaOB6hI8/P7ul0zmZpHmW+80=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"3000000000\"}}],\"memo\":\"1874c04a8cfffa6b47e37fe2255158abb7c69e8b@213.246.42.130:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A2qM2nYkdvgGaKEoEIvohiHgbux/4tdRFhQveYbUmHnp\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"XZeX3P3qL2YI2FAtJSkPZNdzpN4aKZK1OFic6UEzkSthNHl4gVyydwgjsIlS55A0pfMfatiimIOPNJlVdclS5g==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-qwertys318.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"qwertys318\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.100000000000000000\",\"max_rate\":\"0.200000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1402rpwdquxxkgvl740f6w69l65eau5vkqcvrax\",\"validator_address\":\"bostromvaloper1402rpwdquxxkgvl740f6w69l65eau5vkcztud9\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"r3NIqDgCKwxfTIdvsUYruUSv+ExKI/dyL9UxRt3uuHQ=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"10000000000\"}}],\"memo\":\"afa472f8880ce4ef3f7e83a446b6846456c7627a@62.182.82.18:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"AgHfo2wAJPHXlA0p+hez3PySR0siNykr4236MLZVwDwH\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"R9ueed1u83kC6eJSKQg79TYQhxN6bmOFgNQp0pa51kQVIaq8CloXymUbgYO0iN9L7CTUfeiSCJvR0ReKncmTiA==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-spectrum.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"spectrum\",\"identity\":\"715E454ACF0C537C\",\"website\":\"https://spectrumstaking.net\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom15n3t80p7eseld809f7fu3s9tlcezlymkfeu59n\",\"validator_address\":\"bostromvaloper15n3t80p7eseld809f7fu3s9tlcezlymk3rmt4s\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"ZxG1y2GSwb/HuBi8BFZLoYYUMyuvboplTa1DDuMGnG0=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"3000000000\"}}],\"memo\":\"8285e7ddaa2bc545de9c6720f746c0d3cd48e782@192.168.1.105:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A+E8waurHOB4l8ab8C8TG3YhYKDC6S3T8SED22kpAHFy\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"1BG5B1EpwYyqJnrSk5xME9EoQnbk4KboqWGzk59L0AkKcrtOCsNoFf0npEBxVQp+Ag6tI+DNVwrtK4UtKF40/g==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx-sta.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"sta\",\"identity\":\"60507CCEB00F6CBD\",\"website\":\"https://cyb.ai/network/bostrom/hero/bostromvaloper1hmkqhy8ygl6tnl5g8tc503rwrmmrkjcqf92r73\",\"security_contact\":\"60507CCEB00F6CBD\",\"details\":\"a Great Web believer\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.200000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1hmkqhy8ygl6tnl5g8tc503rwrmmrkjcq3lduwj\",\"validator_address\":\"bostromvaloper1hmkqhy8ygl6tnl5g8tc503rwrmmrkjcqf92r73\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"FVs7R89ToDtCaYNZHrRF8MWCQ4d3uxytQSMg4OMleW8=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"150000000000\"}}],\"memo\":\"416aa82d0ab4c0fc379426fcedadc947d84afc50@192.168.1.18:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A2VNyRXHdKHqT3mosH+sPHFhvCglaCEnK6wLgG8yN8WO\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"tqyQRTpdfMkwClnRQghUOaeD+x8sobxcYVRFT0rr1YR37A1ONih5w1h1ZKPD7mIjF+ydSwM1JYGs/of/nUbdlg==\"]}\n"
  },
  {
    "path": "networks/bostrom/gentxs/gentx.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"Adorid\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"bostrom1mnfalar08dsvtwutmh43lnhx2zzmq7xhdulemj\",\"validator_address\":\"bostromvaloper1mnfalar08dsvtwutmh43lnhx2zzmq7xh4xcxt3\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"AK7c305pBQkAz05OE8rw5JkwSx+nhcvna6Tz9RXhE+Q=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"10000000000\"}}],\"memo\":\"bd272d32665caea2d80127bb930a92e8bb563202@192.168.88.56:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A7vpgS7DhWrPcDfGh9fzTUXxutVYlAgEK3idq0kTSK7k\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"DSoWS3oAswZIEiruKCAF0cP4LGcp+l1dAA0EMYu4xE9zHN6xI3hLgAieIHtfxfS9vk6H+/sLYtmM5C6+mdhpdQ==\"]}\n"
  },
  {
    "path": "networks/bostrom/peers.md",
    "content": "# Here you may fing peers and seeds to hop on bostrom chain\n\n## Seeds:\n\ncybercongress\n\n```bash\nd0518ce9881a4b0c5872e5e9b7c4ea8d760dad3f@85.10.207.173:26656\n```\n\nnotional\n```bash\n9ccf246720ba68f22c32548159fbe7cc5fc2f429@provider.xeon.computer:32199\n```\n\n## Peers:\n\ncyberongress:\n\n```bash\n5d542c0eb40ae48dc2cac0c140aedb605ded77dc@195.201.105.229:26656\nc72de1e20beed51b779d89b1cf08d8146016eec4@185.186.208.37:26656\n```\n\nBro_n_Bro validator\n\n```bash\nf995433a0b09666c3ced97a912726ab5f747a4d0@95.216.241.52:26656\n5e96c2a8d92b09a35da6e31838134ad306d79149@93.159.134.158:26656\n```\n\ncyberG\n\n```bash\n39a20a7d84c6e91c6638f5a685a13f655e050ee0@176.37.214.146:26656\n```\n\nDeveloper\n\n```bash\n77d27615009fc703ece46901792cc8750cccd0de@185.230.90.71:26656\n```\n\nBloqhub\n\n```bash\ndd22cffccafaece970cfa9e7eb3c8468f6fa1c84@46.166.165.14:26656\n```\n\nweb34ever\n\n```bash\n5e8522bef5ceca507e05aa0d5f67f37a70222c73@88.218.191.79:26656\n```\n\nPOSTHUMAN\n\n```bash\n55937c36959ea3984cc6e6ebd3354d73bbbdbcda@95.165.24.115:26656\n```\n\n## Run a seed on akash\n\n```yaml\n---\nversion: \"2.0\"\n\nservices:\n  osmosis:\n    image: ghcr.io/notional-labs/tinyseed:latest\n    env: \n     - ID=bostrom\n     - SEEDS=d0518ce9881a4b0c5872e5e9b7c4ea8d760dad3f@85.10.207.173:26656\n    expose:\n      - port: 8080\n        to:\n          - global: true\n      - port: 6969\n        to:\n          - global: true\nprofiles:\n  compute:\n    osmosis:\n      resources:\n        cpu:\n          units: 1\n        memory:\n          size: 100Mi\n        storage:\n          size: 100Mi\n  placement:\n    dcloud:\n      pricing:\n        osmosis:\n          denom: uakt\n          amount: 10\ndeployment:\n  osmosis:\n    dcloud:\n      profile: osmosis\n      count: 1\n```\n"
  },
  {
    "path": "networks/bostrom/unsigned-genesis.json",
    "content": "{\n    \"genesis_time\": \"2021-11-05T13:22:42Z\",\n    \"chain_id\": \"bostrom\",\n    \"initial_height\": \"1\",\n    \"consensus_params\": {\n        \"block\": {\n            \"max_bytes\": \"4194304\",\n            \"max_gas\": \"25000000\",\n            \"time_iota_ms\": \"1000\"\n        },\n        \"evidence\": {\n            \"max_age_num_blocks\": \"100000\",\n            \"max_age_duration\": \"172800000000000\",\n            \"max_bytes\": \"1048576\"\n        },\n        \"validator\": {\n            \"pub_key_types\": [\n                \"ed25519\"\n            ]\n        },\n        \"version\": {}\n    },\n    \"app_hash\": \"\",\n    \"app_state\": {\n        \"auth\": {\n            \"params\": {\n                \"max_memo_characters\": \"1024\",\n                \"tx_sig_limit\": \"7\",\n                \"tx_size_cost_per_byte\": \"20\",\n                \"sig_verify_cost_ed25519\": \"590\",\n                \"sig_verify_cost_secp256k1\": \"1000\"\n            },\n            \"accounts\": [\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"0\",\n                    \"address\": \"bostrom1xszmhkfjs3s00z2nvtn7evqxw3dtus6yr8e4pw\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"1\",\n                    \"address\": \"bostrom16230lc9r27vrxlzd4wlvcz2l66quzj84vlkxc5\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"2\",\n                    \"address\": \"bostrom1gxhs5wzam5rlgf6cs0lkme400ut64d4ncpfs2h\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"3\",\n                    \"address\": \"bostrom1qs9w7ry45axfxjgxa4jmuhjthzfvj78sxh5p6e\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"4\",\n                    \"address\": \"bostrom1ha4pw9w2qgc2ce9jwfrwrmaft5fneus58nqwev\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"5\",\n                    \"address\": \"bostrom1qn8sr2hzmktlecusdtxj9hwj0upnm0jft9snar\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"6\",\n                    \"address\": \"bostrom1d8754xqa9245pctlfcyv8eah468neqzn3a0y0t\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"7\",\n                    \"address\": \"bostrom1ttd4h585vgy29gj0xe0p338drvw9w4m4hzwj9p\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"8\",\n                    \"address\": \"bostrom1ngd5w7j4u5ar5xh7vzuwqqznnhhcjmnz0s6kpu\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"9\",\n                    \"address\": \"bostrom10c8znaj94y900syues06dz50hw6y9qpkhunn25\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.ModuleAccount\",\n                    \"base_account\": {\n                        \"account_number\": \"10\",\n                        \"address\": \"bostrom1jv65s3grqf6v6jl3dp4t6c9t9rk99cd8yvs0hc\",\n                        \"pub_key\": null,\n                        \"sequence\": \"0\"\n                    },\n                    \"name\": \"distribution\",\n                    \"permissions\": []\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"11\",\n                    \"address\": \"bostrom1pntx8ql2v7cqxu05etg8c4v0r2vz7qnq9uqmpy\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"12\",\n                    \"address\": \"bostrom17a7xxqa4drnalvv7pkxrkxqer953fdke3ulwx4\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"13\",\n                    \"address\": \"bostrom1s4czxghmh29aw2ldynk8r9lnkfccw5ph8rjpxa\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"14\",\n                    \"address\": \"bostrom1s4wntr9selfaznc2ezjkwnwt2y0terx9tqpda3\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"15\",\n                    \"address\": \"bostrom1qwzsnnuk2u6avvh059c9p50gqqquvcu5svvwrs\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"16\",\n                    \"address\": \"bostrom1g07gj9ph0r2hjx6ffqn8vl38u4agd5mpqx9m7f\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"17\",\n                    \"address\": \"bostrom10e3rqclgjz4m4fnx2c23jupcjpyuvyx3x4k7qj\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"18\",\n                    \"address\": \"bostrom1t3222ju7ssu58xsm3m2xw445p94cqn2qrex3vy\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"19\",\n                    \"address\": \"bostrom1edlrze5f48jjaw0wxcve4asqqf2tcjdl59ln8q\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"20\",\n                    \"address\": \"bostrom1m8yf3g2m9p7danjvt4ga6vzewy380pk52kcu9z\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"21\",\n                    \"address\": \"bostrom1fe5mspz9jsq6p9hqqet86dwp276635l6gacspa\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"22\",\n                    \"address\": \"bostrom14nzyt8wmx4g6zkeluelukamgsh5v4xgnc25k6j\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"23\",\n                    \"address\": \"bostrom1mcslqq8ghtuf6xu987qtk64shy6rd86a2xtwu8\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"24\",\n                    \"address\": \"bostrom1sng0f47cuvx6edxaujh24wc3dvk94q0w6r6smh\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"25\",\n                    \"address\": \"bostrom194pp2whvqynxnfyw5tqy8fzy2kxsugyrwsaynk\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"26\",\n                    \"address\": \"bostrom14d92r4svhl4qa3g6q48tjekarw2kt67ngqn4lr\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"27\",\n                    \"address\": \"bostrom1hmkqhy8ygl6tnl5g8tc503rwrmmrkjcq3lduwj\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"28\",\n                    \"address\": \"bostrom12psudf4rpaw4jwhuyx3y8sejhsynae7gv53hn6\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"29\",\n                    \"address\": \"bostrom178q202gz0093uke0jy96psyya452rt8apl4has\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"30\",\n                    \"address\": \"bostrom1kr6udadsvdjymq6m75un4khg27t25st2jn8sag\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"31\",\n                    \"address\": \"bostrom1ymprf45c44rp9k0g2r84w2tjhsq7kalv98rgpt\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"32\",\n                    \"address\": \"bostrom1w8ap0ns4d5fagjfwvph6t99uet0cwv6y6r03un\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"33\",\n                    \"address\": \"bostrom1svm5wl5jf4p7dwemj7wh0p4egr3js6rqtlnefu\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"34\",\n                    \"address\": \"bostrom1gnnd2eaeqpp6lsd34tnp6j0m85h6r9qg0wh3vr\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"35\",\n                    \"address\": \"bostrom1t0hmc79ht0qja92p6qgxn3ee3a3rzqutv7thqn\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"36\",\n                    \"address\": \"bostrom12q68xfj4r00nxnjrqk742rf0z2w6jmwaeppvr0\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"37\",\n                    \"address\": \"bostrom1ggc9sqvj0uhnzwxu5dyzcr05shwd2vv2guqmas\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"38\",\n                    \"address\": \"bostrom177y7sqkxmvl22j632haf8y9gv0j3wedssq5m50\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"39\",\n                    \"address\": \"bostrom1zhy7l8phhpsm2c6xl9c5arcu0z90clynluwrw5\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"40\",\n                    \"address\": \"bostrom1k60sfzh3ecyqfv36f7zav0089077e4zk4g6mxa\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"41\",\n                    \"address\": \"bostrom1kpep8dl93ud4wgpws3tcew6as2s36c9v3csw89\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"42\",\n                    \"address\": \"bostrom16lvsv3w7rnhcm079v6j9eah3xd0p3pd37hl48j\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"43\",\n                    \"address\": \"bostrom1mnrwpdlnglhtqwa55fa66va0j3fv72nvkz4e2x\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"44\",\n                    \"address\": \"bostrom1dt9lwmuq8rkngm5gajxchqhpcnavgp7md9v929\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"45\",\n                    \"address\": \"bostrom12xsg4qm4k5z48s79zdsz84jlhv56kmta3vyfvl\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"46\",\n                    \"address\": \"bostrom1dxpm2ne0jflzr2hy9j5has6u2dvfv68calunqy\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"47\",\n                    \"address\": \"bostrom1my32szlwazg9x56xqvsvtp0hqvpzm0r4u3k4ae\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"48\",\n                    \"address\": \"bostrom1g0ap9fvex93yzzj69uzl74942vjvq8e4f8xtyr\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"49\",\n                    \"address\": \"bostrom16zms8r32vad3z8hl2vc6wrcnanwmxf0dgh25yp\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"50\",\n                    \"address\": \"bostrom1d3zlsrjyl3tzp3aly7vjduhrtrtvkvkeaqpdku\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"51\",\n                    \"address\": \"bostrom18jwk949jqgq3j2du2dgscqxqkkqw5rsjfuucf3\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"52\",\n                    \"address\": \"bostrom13fwhvawke6867s6raqux25fd24t89j5h8wf2v0\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"53\",\n                    \"address\": \"bostrom18z9vsjffvggluxcxfqwsmrz02v37hx2e3auyn2\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"54\",\n                    \"address\": \"bostrom1lnkg57t7mvg5mcl7kdkevtgr9wlf6f9qtp86sk\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"55\",\n                    \"address\": \"bostrom1dl5df5g2xwj02e93k547etw2ergvc3a20v5ekz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"56\",\n                    \"address\": \"bostrom13ume6mqte5h9ngx2hh6ngc8aham7x0k6stuvkm\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"57\",\n                    \"address\": \"bostrom1ldjugf3uj2gwkmmsf5japfknf96zv6hw7xw7v4\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"58\",\n                    \"address\": \"bostrom1y9zkl7uqjev899swng4eqfuurwaxpchwppewyc\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"59\",\n                    \"address\": \"bostrom16lf2hvzy4n4gvtx37pgkkdw2e2psfjjdpej53p\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"60\",\n                    \"address\": \"bostrom15zs0cjct43xs4z4sesxcrynar5mxm82f0ykhl3\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"61\",\n                    \"address\": \"bostrom1v5jqg6k7mszmchhz8kyfml5h4e2txct9jz3am4\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"62\",\n                    \"address\": \"bostrom19ys53t55r725j882gjcrnf7s449gdrds3h2hu4\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"63\",\n                    \"address\": \"bostrom1en69twaxmv7xupy8lq7y539dpecx7yz8g0k8ft\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"64\",\n                    \"address\": \"bostrom1kgq82m6z2jttytv7fvwy2rklhq5k03gc2h9sej\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"65\",\n                    \"address\": \"bostrom1hvk6s053m6qdlz9kwllgldwf4qp2c3mrlh9s2q\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"66\",\n                    \"address\": \"bostrom1ch6nukdgj55c9sk4h5t8spzhahuuvn86gqvarm\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"67\",\n                    \"address\": \"bostrom1rqudjcrdwqedffxufmqgsleuguhm7pkaq0alce\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"68\",\n                    \"address\": \"bostrom1qgqkc9t3pfsp6yxjwds70e4r9y0p6resmfnymc\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"69\",\n                    \"address\": \"bostrom12kd8w45rqxuwpwqvpmdyvvdey9ezeqhav4nn85\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"70\",\n                    \"address\": \"bostrom152kqs8p7d3jy6kn4uk87ve3alkuqjgewt3cmvz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"71\",\n                    \"address\": \"bostrom1dn09uyhwmv3ratntc7c603vczgrec32c2fylpj\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"72\",\n                    \"address\": \"bostrom1qezgmksavgdvcvf9ckhazfy3jfw8whhzfrvtlz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"73\",\n                    \"address\": \"bostrom1d552nfgekkugdgxw3zl242qpxapl67jfkz76tp\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"74\",\n                    \"address\": \"bostrom10vpygn9ftv85ra7j7qpewuq5jdgvpjmehlds0g\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"75\",\n                    \"address\": \"bostrom18naxcfp2s397a2ucav2m53f003uylk3qz9fvr7\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"76\",\n                    \"address\": \"bostrom18t3kx877vyvstcvn50cgn5w6hppe8ce0pq72m2\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"77\",\n                    \"address\": \"bostrom1kfqv2fzzu6dgwnf6snql2jslwdws07fl2gz37u\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"78\",\n                    \"address\": \"bostrom1ggayl03vvv763az6eez66jzwuunyqkcusk8fwj\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"79\",\n                    \"address\": \"bostrom1fjeq0urgk4x0s6pl2p2fes8c95426amp7lv4dv\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"80\",\n                    \"address\": \"bostrom1jgh7ghrcr47tuahawzvg3svv2hxkxfx5u9lzr2\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"81\",\n                    \"address\": \"bostrom19y467lyhqlpa52y6snq9cxw47xhwq0th3p05r0\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"82\",\n                    \"address\": \"bostrom16ge9uqpqf78jdt0uz58ycalhtg59w77qm9t7d2\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"83\",\n                    \"address\": \"bostrom1463la66ac89tmlwgvx20c4d2jv84ekzs8kzh87\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"84\",\n                    \"address\": \"bostrom164k2s2s2td6a30d3rvnv93scy3v29psw4j3ndm\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"85\",\n                    \"address\": \"bostrom1rya5547x4lrwc2npd63s89ny2dvhamv9dfx9x9\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"86\",\n                    \"address\": \"bostrom18wn5kyxewwk6qh97493xtj9gufpmqserfahc37\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"87\",\n                    \"address\": \"bostrom1lljcf37yxh24l3v4kwqsyghwz4ywlg6urg4kte\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"88\",\n                    \"address\": \"bostrom1d7n8znqg635yxnzlsycnt6kut8z5du5yftutrf\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"89\",\n                    \"address\": \"bostrom16pdckvu70ufzvm8avd9anga6k35nu7axym02wp\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"90\",\n                    \"address\": \"bostrom18txzlmkqf264a2awhey6lmeq0dtv5ex69d2fcy\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"91\",\n                    \"address\": \"bostrom1mmtt0cnsgwx3t90vs4tn9k08kw8xn4v3pggfu7\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"92\",\n                    \"address\": \"bostrom1mryr27k3h8kqr5ahj82v0ym2xexdewfc9rmng8\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"93\",\n                    \"address\": \"bostrom1gg73t0eyrkqf953waqxh6uqah62p46jyg82ulr\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"94\",\n                    \"address\": \"bostrom1jx0az02ccnt4mgj2r9vhvycsdjsztrrgdkwzr3\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"95\",\n                    \"address\": \"bostrom1r90j4656xsug2hkj57a3knqcs9huh3ea88ykhp\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"96\",\n                    \"address\": \"bostrom1f7nx65pmayfenpfwzwaamwas4ygmvalq2q2ayq\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"97\",\n                    \"address\": \"bostrom1zl0t5703q42qx7drxsgl9thjwlul5x6unjhwgn\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"98\",\n                    \"address\": \"bostrom13q0m4hw6pmajqdqn4g464vzmst78sf55ktrp05\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"99\",\n                    \"address\": \"bostrom1cjyv02cja896rr5y5lks79enk2nretn3mqyc69\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"100\",\n                    \"address\": \"bostrom16qu2ymnzzjn05xc6yszjy50caaahcahdvmex5e\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"101\",\n                    \"address\": \"bostrom1jst67u54vquzvun3dawpmpwyx5ar8mayaak5j7\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"102\",\n                    \"address\": \"bostrom16s7gwc944patdynnfnvac0jh5u76wsnflty377\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"103\",\n                    \"address\": \"bostrom1s3lgc3mgy4ltwr796qk6j73xmau4njueds0mgu\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"104\",\n                    \"address\": \"bostrom10556xtnp39nvx3ec3yjafug662pyt6af84n477\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"105\",\n                    \"address\": \"bostrom1ffve0zx389ffl80ae9t8jmghcjuzdlqr5eayfd\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"106\",\n                    \"address\": \"bostrom1ftah3e558ww7xutn5w8h7vrqa9v69pntztnr3p\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"107\",\n                    \"address\": \"bostrom1wnpak7sfawsfv9c8vqe7naxfa4g99lv77d7c0z\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"108\",\n                    \"address\": \"bostrom1sgy27lctdrc5egpvc8f02rgzml6hmmvh5wu6xk\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"109\",\n                    \"address\": \"bostrom1cg79pj70mgl8xlum0rw5yy6enk9jszsrzvwysn\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"110\",\n                    \"address\": \"bostrom13dpy00jest96g7h5vdgvg9zpxq6xnclh5hzw5l\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"111\",\n                    \"address\": \"bostrom1mdq5r6az6z8su68zj6px88j2ukr78ea4ggkzt6\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"112\",\n                    \"address\": \"bostrom1lepnu7nt05g79jtmfp2pgrpys3fjc4p74sc0l2\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"113\",\n                    \"address\": \"bostrom1d5lu67hu3lhqtw6zyv7uy4gkfpdtfnzxdu6mrq\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"114\",\n                    \"address\": \"bostrom16jttzjgks48kqrhk5e68yv0gv6dt0rpw2f5pwn\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"115\",\n                    \"address\": \"bostrom1e20hw2pqcgxvumkwn2qeeavcrswzskzjhr2aq0\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"116\",\n                    \"address\": \"bostrom17z2fywzrdld7qmwzpsq0atxfwcns8rp833rgxy\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"117\",\n                    \"address\": \"bostrom1tu0e0ggvjtv4gvzcranjnrykac0umnf8y8fm0r\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"118\",\n                    \"address\": \"bostrom1sltcfypwms38jjj3g38rg7ldx3e6uqrzrnkf9y\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"119\",\n                    \"address\": \"bostrom1zy553za8nenzukmv65240323jhuvxzym4pl6w9\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"120\",\n                    \"address\": \"bostrom1lpfs6xv765u4yxr8rlyn5ux0g2a8tyt90hsnas\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"121\",\n                    \"address\": \"bostrom1smqr5tp684g07aekcn0w852wqlme5mn6dmsny3\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"122\",\n                    \"address\": \"bostrom1eqkdzfcjnu20ywju35rf3nutxzjxjaqnxqfyyz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"123\",\n                    \"address\": \"bostrom1waac73cpffx7suhpkvnn8w0a8s2cgzn66x2aka\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"124\",\n                    \"address\": \"bostrom16macu2qtc0jmqc7txvf0wkz84cycsx728ah0xc\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"125\",\n                    \"address\": \"bostrom1fapqgamx3c8za8d3z56sydjtjygyu0ly752j8g\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"126\",\n                    \"address\": \"bostrom1w4548vrnvc7t9j2ly55nvkjvhwqt9thnfcvuw6\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"127\",\n                    \"address\": \"bostrom133t8m00w7llsslnf05zdhehharntly8dqzpfs8\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"128\",\n                    \"address\": \"bostrom1smtmk8fe3qhlwj3h7nynl6p42946qydzvgj9va\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"129\",\n                    \"address\": \"bostrom1csf3up94qheqz88fvvlwjl7vc5sdymarktrvpw\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"130\",\n                    \"address\": \"bostrom1tr3eyy9l480pxjk0ygudwpfus7j8pgdljn09jm\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"131\",\n                    \"address\": \"bostrom16ahkkv0jzhtp73z83qlhqrypss6jpjm8eekpwv\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"132\",\n                    \"address\": \"bostrom1htq7u8gy9muv4fk6st04524tdzy8rv04528gys\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"133\",\n                    \"address\": \"bostrom1kk9clwd4eva7ww95gn4rw3xzuwfs0983sl5cwt\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"134\",\n                    \"address\": \"bostrom1k7cl9ya9qq30c7m4rvg3823hrc8k80eetqvhj8\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"135\",\n                    \"address\": \"bostrom16d69u47km5vqdvf6fr8qyhktlacgka7fdvazr8\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"136\",\n                    \"address\": \"bostrom1njsr8tngxtygsc73mrtn5738ztkzqy7c7y7h3t\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"137\",\n                    \"address\": \"bostrom1kf0d64nuwsf2zeul5wkx78fsznplnlpsfh7fqw\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"138\",\n                    \"address\": \"bostrom18ghjkwygsvjcsh20tc5zzhfttxxuex7a9lq8ps\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"139\",\n                    \"address\": \"bostrom1s2a7rckcky6jmhncxwy0xtwf2ymg87puk6jpzz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"140\",\n                    \"address\": \"bostrom1679yrs8dmska7wcsawgy2m25kwucm3z0hwr74y\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"141\",\n                    \"address\": \"bostrom15gk8edxtvvp372flljk884fav55y8ehwru4u8w\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"142\",\n                    \"address\": \"bostrom1jz57cgfr248y9w6sn76l7pugjkr6e7zh6y2grp\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"143\",\n                    \"address\": \"bostrom1gw5kdey7fs9wdh05w66s0h4s24tjdvtc9v6vpe\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"144\",\n                    \"address\": \"bostrom1kajt7sxfpnfujm7ptj90654lmwz4sftpc9mp9a\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"145\",\n                    \"address\": \"bostrom1t575qeee3qgshuf964qal057z77vljqef9tlck\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"146\",\n                    \"address\": \"bostrom105zy26ze9gean4qukqlvhkv4mtcndc9t2xaydz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"147\",\n                    \"address\": \"bostrom1a30w6j4m6g3s2c6zt02z56xynnuaqmn3ahwxuq\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"148\",\n                    \"address\": \"bostrom1pmaltcu0x97x8j5klc8xluaapkzcvztcn2vkmw\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"149\",\n                    \"address\": \"bostrom1n3mhyp9fvcmuu8l0q8qvjy07x0rql8q4uwev5z\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"150\",\n                    \"address\": \"bostrom1u3ap2d4ytcqrr6jlsjf380g3lvgldq4m64s7dg\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"151\",\n                    \"address\": \"bostrom1keny4peq77drtcdj6fscd9eknqcqyjmxqcr8t8\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"152\",\n                    \"address\": \"bostrom1kk79xcsuah7ckvunku78094gyh7900ehkllkur\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"153\",\n                    \"address\": \"bostrom137eezcxcyqgt6kshfdfuvnsdgwpujyje2l8qdz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"154\",\n                    \"address\": \"bostrom1uz39kh64w8p5df034fh6g5hwpdq8m0h5rx58he\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"155\",\n                    \"address\": \"bostrom1kz6s2mp4rg7plj8p4qqe2wkegn4ldw3ak2a7qc\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"156\",\n                    \"address\": \"bostrom1quchyywzdxp62dq3rwan8fg35v6j58sjwnfpuu\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"157\",\n                    \"address\": \"bostrom1x95keq9l9y9p7hjdt6xd8wnknrpnjsqrqhpwc9\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"158\",\n                    \"address\": \"bostrom1z98eg2ztdp2glyla62629nrlvczg8s7fvc0znp\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"159\",\n                    \"address\": \"bostrom1xvssufw8ke03halg8wgu8m994ktxz0y9vm6tqn\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"160\",\n                    \"address\": \"bostrom1vxxfhd8txmrq76jx3gj7sdrvg0vvqret6kxpgd\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"161\",\n                    \"address\": \"bostrom1vtu55cc7m6yz9zfg5vqdk80f2g68petgzj9fv4\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"162\",\n                    \"address\": \"bostrom16yf94eecl6h44l5w7zp75skh3rg0k4veavx762\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"163\",\n                    \"address\": \"bostrom1gxyf6tsjamnavmkfk43mwfzwscn4tgfkz8k85n\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"164\",\n                    \"address\": \"bostrom1w4tvyvf3hhpcwv9d4axa8n0mmj5d6ypvpq5mj6\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"165\",\n                    \"address\": \"bostrom1xk4a2u2rjt7mqu5eg8xtxk37l28r3cugkqk9lp\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"166\",\n                    \"address\": \"bostrom143x4d5wx50204zyreqg8ekgq3n3fcaxucacztp\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"167\",\n                    \"address\": \"bostrom1y83nga220nfjt9zz0mmqc90cd705az95n5cfwj\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"168\",\n                    \"address\": \"bostrom1hyjhy0tp6geral2g9vj9nyteglf8t5q42gfq3j\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"169\",\n                    \"address\": \"bostrom1d8mq46wt2yxsgwrmh6hhfgycl0537w8gggn47f\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"170\",\n                    \"address\": \"bostrom1p0r7uxstcw8ehrwuj4kn8qzzs0yypsjwxgd445\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"171\",\n                    \"address\": \"bostrom1duc9gthaeg82lx9pdf642g043xqhgxgxmfvwsz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"172\",\n                    \"address\": \"bostrom1a4mzr2y2g0cc9f0uhyeh3ftmsfxzqwxfdqtd7c\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"173\",\n                    \"address\": \"bostrom1xpl2sx64ra5san4su0r0hj8z9eh5cf5dcv48qa\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"174\",\n                    \"address\": \"bostrom1hem3076xmat8ttr0cg0nnn2lghtc2p7xtzpj8s\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"175\",\n                    \"address\": \"bostrom1402rpwdquxxkgvl740f6w69l65eau5vkqcvrax\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"176\",\n                    \"address\": \"bostrom1z8mlsd42eaguaqf5gexy5a7jxgpwpgvz99qzft\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"177\",\n                    \"address\": \"bostrom1v2n3hg6s4resacgpemfyrd5hul2ntk7tftnk6u\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"178\",\n                    \"address\": \"bostrom1ufpz4dlnfawg0pr5dcq4hkrf9gs30mu0272p9w\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"179\",\n                    \"address\": \"bostrom1mkhugmqg9c0qe27stz3m4my9xq7e9pct0jyr3p\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"180\",\n                    \"address\": \"bostrom1argjwgcplguenq4l92ggn06wadnfrz0ecqrmqs\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"181\",\n                    \"address\": \"bostrom1ke7kxdn29w2lrxt9dzusa6shvmwd8xm9gxm2zf\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"182\",\n                    \"address\": \"bostrom1fpl40sref5vp8kfm7xkqlq5qc0v4xrjvk89kwa\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"183\",\n                    \"address\": \"bostrom1g2d9xyuf7ddgaj4llxvg50pfhlsr9ehf2r8dr6\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"184\",\n                    \"address\": \"bostrom152m9xcx0ht7yxr5834ju7qjcyvetw8amd04apw\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"185\",\n                    \"address\": \"bostrom15n3t80p7eseld809f7fu3s9tlcezlymkfeu59n\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"186\",\n                    \"address\": \"bostrom1ke6pp2kq2wx74tlh5fxqgp7af6jtsna3kktuh6\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"187\",\n                    \"address\": \"bostrom1daxxqs56f6j5qxxtjrjkexghsmnaj66tejshc8\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"188\",\n                    \"address\": \"bostrom1nywu6z26tpcrr2kcqe8z7t235wrfkhfcfhlzmk\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"189\",\n                    \"address\": \"bostrom1mnqlcc7mslzxcf798acp80u2fxudsuzdn0px6s\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"190\",\n                    \"address\": \"bostrom1ccvpcq9ffy0qd2ca8nmmpzfamtyjfc9znwak8m\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"191\",\n                    \"address\": \"bostrom1w4tk9lj8qtx2x4xf4emgrnq950hnlajsxlnl3u\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"192\",\n                    \"address\": \"bostrom1s8l0akn79kk74g32kf86stfsa08ck9qmm4v6ws\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"193\",\n                    \"address\": \"bostrom10aqelwndkz9k8uawp26elxep64ayc5rgn24h7p\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"194\",\n                    \"address\": \"bostrom1ap7zhu5gxlk7n3g97dqehm9nnt3mje3nr5jecs\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"195\",\n                    \"address\": \"bostrom1j6he98h8xwnt2yp9eczhhuff3k3hvk98gr27ee\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"196\",\n                    \"address\": \"bostrom1mskldfjlnup46adzss7lukfh3emm6z4lmqhk7z\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"197\",\n                    \"address\": \"bostrom12ysvrknuwdr6737fnc06v875whfh52xj3ewaf2\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"198\",\n                    \"address\": \"bostrom10trdf5eyfcmc9graltx4hmpgznhrm7hdz82k2n\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"199\",\n                    \"address\": \"bostrom1nvr4qa7szsd3e7xfysn946gcqv5wyemlcxmxpw\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"200\",\n                    \"address\": \"bostrom1wm4026rxqcrkh09k806m6y4lys942etx5cjz9z\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"201\",\n                    \"address\": \"bostrom1zeg2k7kd8qadmwd3kslwmag3erq7hqxt5aajjz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"202\",\n                    \"address\": \"bostrom16h7tyj5p69t3r7qasunf938cx2elp38fhqc7zr\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"203\",\n                    \"address\": \"bostrom1jdmfxzpnqqlhjsju3mz7qsgvvdparw5acx7t62\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"204\",\n                    \"address\": \"bostrom1smsn8u0h5tlvt3jazf78nnrv54aspged9h2nl9\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"205\",\n                    \"address\": \"bostrom15kl5tv0smz5h8eewu5hs9mtnusz4dereyqxxtw\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"206\",\n                    \"address\": \"bostrom1uew6fawa3ahu60tj5kspmr4u0zvljj69q4s3ps\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"207\",\n                    \"address\": \"bostrom1ezpth4mp3eeqdt49kgqd5ctr69xev6v2gykpur\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"208\",\n                    \"address\": \"bostrom1avvkajdvmj9d8jpl0ga4scftjykeuhjpsa9kf5\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"209\",\n                    \"address\": \"bostrom1gd9r9uhd8a5k2naudq4hua3vf3lkwhfrm63qhq\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"210\",\n                    \"address\": \"bostrom1vrym7t34gs9t2dkd8z849zcymkj54kgq7pdf8z\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"211\",\n                    \"address\": \"bostrom1lk3yjcn0lvwj9f2dj75m8y3smpq5s5zsnnj3nz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"212\",\n                    \"address\": \"bostrom1hk49ws6ded79xmwehv7yrw3q6mfj7kulafxqhr\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"213\",\n                    \"address\": \"bostrom1vx9qctuxswd6ydcv4z5pcuuvct7y9l0nqq799x\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"214\",\n                    \"address\": \"bostrom1ydc5fy9fjdygvgw36u49yj39fr67pd9mv67ety\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"215\",\n                    \"address\": \"bostrom1wkjn2nc4v5g3tpjj043wxtmeda90ql3yqqddav\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"216\",\n                    \"address\": \"bostrom1gh09lmm8flkuu3w38mr4axvunnu6qqlapuwzrv\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"217\",\n                    \"address\": \"bostrom1m0tjgkrh4td9fcp8nnssu3rfdahzfgdshsall9\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"218\",\n                    \"address\": \"bostrom1mnfalar08dsvtwutmh43lnhx2zzmq7xhdulemj\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"219\",\n                    \"address\": \"bostrom1g36u05ehktgw5h5udj8hyudd9057d9tx9r6zef\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"220\",\n                    \"address\": \"bostrom175tm6fucmk0e29cfgzaud6kqgksy25p884kjx0\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"221\",\n                    \"address\": \"bostrom1v46pz6ddetfc3tnvdr28ss0l48jhazgynvp3c7\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"222\",\n                    \"address\": \"bostrom1stfw0z5nf2ncxxtrk7zndpf2dla3nh379egwcy\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"223\",\n                    \"address\": \"bostrom147rnn0rxqkythj4j9ccq0kytmh7f005rn0a3zj\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"224\",\n                    \"address\": \"bostrom1pswgrf5ap0kld3lpun5z4x08wh7nmgamd8mgex\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"225\",\n                    \"address\": \"bostrom1wt9h9wm3zf7yzsy68x7v8p973w02kw8yyurh55\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"226\",\n                    \"address\": \"bostrom1ucl2c39dpwqm9pp6cvmlazn2tkwavszhs27j96\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"227\",\n                    \"address\": \"bostrom16w2xwdzf6tzucpwcjjqtg9656a4kkv7g2f6vk9\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"228\",\n                    \"address\": \"bostrom1hmrxmc27fu4ggdpvpxqtahn6uvtj38vuu77a02\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"229\",\n                    \"address\": \"bostrom1uwfk6h06w8vnhmyp48vwcpgwncsec8yv3z0xyg\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"230\",\n                    \"address\": \"bostrom1nuc82t22xgp09rs2tdnlxxgm95pjg5matjwwye\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"231\",\n                    \"address\": \"bostrom15kdrahda8qcyfa9xe8kt2f737m22x2sleslj5l\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"232\",\n                    \"address\": \"bostrom1n89a8avc4j7cv75lfsyynx5kazlk80ar5qcdx6\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"233\",\n                    \"address\": \"bostrom19vgwu99fdawejnedgsfx8dmxuc0z4emjf7a044\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"234\",\n                    \"address\": \"bostrom1s6v5ragv9gg3sq7j3aeqtyy82uaxv3y05hzhh8\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"235\",\n                    \"address\": \"bostrom1y6huw3naar38u4rtgqmlh9smfu93gszst9tawp\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"236\",\n                    \"address\": \"bostrom1hqeqy4s039q0qcpayqcyaq5hyyvmph97t79m9n\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"237\",\n                    \"address\": \"bostrom14h099ukgvp4fm9qs0xnmljzhevrmneq6m6cltv\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"238\",\n                    \"address\": \"bostrom1xhk0s2ynz2sq3ak3lr4u5gg0da4vyaxkfjhg7l\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"239\",\n                    \"address\": \"bostrom14z6glatrayal5j53632kcefskyge6ujmgshqfv\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"240\",\n                    \"address\": \"bostrom14n625exc6ftee3t6tez3hj47lv49amjzan5pkr\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"241\",\n                    \"address\": \"bostrom1fhj7pkuvwflr7z7ngp2v9tj7g58aq2tjgvqfaj\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"242\",\n                    \"address\": \"bostrom1l4krahjfp87exsmumzpnrfeaer2gsghpuwhfp6\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"243\",\n                    \"address\": \"bostrom1udal5nr3lz7mg7j7k79se4rz0tsjj8lur45q99\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"244\",\n                    \"address\": \"bostrom1n55zyf6wlvh8jp4wxqgx4ta283jx0e2n2tutgm\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"245\",\n                    \"address\": \"bostrom1glgevt43557u6s7a2q9q40kzt8myw4ngcv6wr6\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"246\",\n                    \"address\": \"bostrom1mj0sj4eaar5qnjn3l05ep5wgq3l6agtvvqwvyk\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"247\",\n                    \"address\": \"bostrom1sm9sq4wnn62tk5yz0x3fvvx2ea9efguqwvdu64\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"248\",\n                    \"address\": \"bostrom190y8vwhmyjdnk7cfutcm7u8haw80xyejdwxsql\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"249\",\n                    \"address\": \"bostrom1rfh303jsl5297sxgs5txpt97lvxpjt4he3yy5r\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"250\",\n                    \"address\": \"bostrom12u6qgyrdsy4xmw04vfkkkh9a9tqzw66g59hudt\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"251\",\n                    \"address\": \"bostrom1pjvkddp4fmx8ym5j7s7su8kn3zuqj255djzpja\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"252\",\n                    \"address\": \"bostrom13nrdf490fsuv4rwjp02hlyvalqjkn5u6xxqvqz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"253\",\n                    \"address\": \"bostrom1fp9q2t9zn9gr5qjh9wljxuavtcsc4h8uqgnm2e\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"254\",\n                    \"address\": \"bostrom1u2s32xsws9y2sskz6zvn7lawepdqxad5dcsyy6\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"255\",\n                    \"address\": \"bostrom158mysantvvk7x65tfhhuu8q2va4ls34r54hk78\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"256\",\n                    \"address\": \"bostrom1clalfxmsrqdgnqq5uxlx0mc983pyp3wq4xl03c\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"257\",\n                    \"address\": \"bostrom1wf8alywyvlxy2dqfe38efdpdmuscfpf4jxvg6r\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"258\",\n                    \"address\": \"bostrom13zf8kghx7h5fyttk6xdnjqn9c87z0rd36sfqjw\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"259\",\n                    \"address\": \"bostrom1cc43k76udpd3xvpn6md76zz3ru6nvcnreeg2eq\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"260\",\n                    \"address\": \"bostrom1l5x6kerswths5xl0d6672y9yyn9mg2vw8yz59q\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"261\",\n                    \"address\": \"bostrom1qe4sguqg8ztlyy7psf7lzwr4ahph9j36k5hltz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"262\",\n                    \"address\": \"bostrom1mn8ev805fde2xswght0snwfayfj9tn54dt24zg\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"263\",\n                    \"address\": \"bostrom16vc2mjjfxx2h5m6jpdp4nqfu5095qaeeq27qxj\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"264\",\n                    \"address\": \"bostrom1jmhqgld7luvuhh42wac24z6nlggjvkc7fzgs62\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"265\",\n                    \"address\": \"bostrom1qjknpllzp6w6qsxxjx52zxald29wpyzljznzdv\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"266\",\n                    \"address\": \"bostrom1eq2h9enjxsg5s08scr69lzwde8fl79snw20dc8\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"267\",\n                    \"address\": \"bostrom1dx8mvxfu6mpfnjehvdkp9lsvu78ek2gjr7r766\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"268\",\n                    \"address\": \"bostrom19uryr2zuxcfdevfq429jng9a2evxwadlsky04c\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"269\",\n                    \"address\": \"bostrom16862syzdtc6h0sxz92jhnjjas5yhhjgzvyewwd\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"270\",\n                    \"address\": \"bostrom1teuan269feyw4ax94jfp4pcgrhqnn28gxxz8mw\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"271\",\n                    \"address\": \"bostrom1yvlp9gzqaufwz02swp5wqsqhlmfcrcl8m22gzm\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"272\",\n                    \"address\": \"bostrom1latzme6xf6s8tsrymuu6laf2ks2humqvfcz7m6\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"273\",\n                    \"address\": \"bostrom1ec9da8avgv7tnvsx3v8g8veqrhlqq26lnncg5t\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"274\",\n                    \"address\": \"bostrom1c7pv6zyza76f3yhv0zvjc042e8m7w796qmvkse\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"275\",\n                    \"address\": \"bostrom1yslufs9kq762qty0wh62c8qtlpm2202ejmw4ef\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"276\",\n                    \"address\": \"bostrom1y935ede6znmcvqdmn6mnl2aa5zxcqvvracsczu\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"277\",\n                    \"address\": \"bostrom1y675phjdvw576ahlcmlamrzr28rjht9mx709lg\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"278\",\n                    \"address\": \"bostrom1kjhdx3nkh6krdhryvjzkq33xwh6wsyy7y8ark6\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"279\",\n                    \"address\": \"bostrom1jxpe7neu764uasz5y5u4lrr5jtltv430gjm9dw\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"280\",\n                    \"address\": \"bostrom1hq8d6pu2l6wkrwu9jxcqjcu55g8l43zxmrd6dk\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"281\",\n                    \"address\": \"bostrom1c4h647a9rj8n9zye5ttmh9chpg66f3ffdvdds0\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"282\",\n                    \"address\": \"bostrom14ysuwg6p4fzfaa6tg4s3hazu86pfevsw4cegce\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"283\",\n                    \"address\": \"bostrom1x7wp0u877dkw7m84jv54c9g6zpd5r8t2nm47gn\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"284\",\n                    \"address\": \"bostrom1gss7y04dky2fykck4dyp0pe39wxawlxm2l0yj2\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"285\",\n                    \"address\": \"bostrom1cerh237zd5rdexptjw8ryhwdf2tc9eupz7sfn0\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"286\",\n                    \"address\": \"bostrom1fz799u9jc0umceng3nkjt0njxy6y3550uq06jn\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"287\",\n                    \"address\": \"bostrom1wzqyjejz5px38vgqsegafrcexl3963q9dsgqh9\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"288\",\n                    \"address\": \"bostrom1evz2xfd6sam0kzz5qc5lje4s90vcgyyrzz47pm\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"289\",\n                    \"address\": \"bostrom1mzmzlzk4xpm6zy68c43e6hen98w07yhfedumgg\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"290\",\n                    \"address\": \"bostrom184dur4s6pldvhvcyputu6yshsm09s6wmvylt8k\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"291\",\n                    \"address\": \"bostrom1gyhwacrpqwues05pkavw7xwehcqsmgruy34zps\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"292\",\n                    \"address\": \"bostrom19wtkh935tx2ut2n4m6tjvkfvew4shaeezfl7em\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"293\",\n                    \"address\": \"bostrom1a2kn43nquua6gmr4n42htmjpceqj7fzushe28h\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"294\",\n                    \"address\": \"bostrom1u74s0z4ft63c6zz7g8xs62esdtdjkzuk4zf0rt\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"295\",\n                    \"address\": \"bostrom1d9en5u0cfaucavx848qeq4k6ywqd3z5d5a778h\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"296\",\n                    \"address\": \"bostrom1edwwsevuywe3sx82sustvyx3f3cvjt44ugccgy\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"297\",\n                    \"address\": \"bostrom1gcy4f6f2sc73aegd9r68rt2q6teekl6swjva3p\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"298\",\n                    \"address\": \"bostrom1d6nkeqxmme3564wd889kr6cjed3asxqzjve0wl\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"299\",\n                    \"address\": \"bostrom1djdfq5mn3dzm9whpznczxz77s8ep2qggc5w5xn\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"300\",\n                    \"address\": \"bostrom1z8fyzv3mjfccvrxhckr2u3lnc0hrgrlm4zkf8c\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"301\",\n                    \"address\": \"bostrom1tcnlvf6qhlc3x7ax2vk3vzhxhf8wy8xrnjl72d\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"302\",\n                    \"address\": \"bostrom17ud38eyfkd800kvw3c9kl3zpvgvj296nfszelr\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"303\",\n                    \"address\": \"bostrom19rtverjn8kw7dzwzch2elktxgcmak6dlqugxfw\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"304\",\n                    \"address\": \"bostrom1mlqakhlxplhlezk80lph99wcy377j9dk2qx3gg\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"305\",\n                    \"address\": \"bostrom1ssu4wqtzvvmwcukcv7l8zxny647mdx03e0t57j\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"306\",\n                    \"address\": \"bostrom12reh000lje8y20wshqmgl8tg70qggt2ac7qz45\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"307\",\n                    \"address\": \"bostrom150svyax8m8dwljwenc8xxtsg0avud07m5frlrz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"308\",\n                    \"address\": \"bostrom14tjwqqyha0c9r0s29dm0n0zdpdc4hfrvn7jqsq\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"309\",\n                    \"address\": \"bostrom1x8r0ktn36dsxsadnp3863txyd9pksrp6awcuaa\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"310\",\n                    \"address\": \"bostrom19lsruwa85k93ahzkdwaydyrl6ehz9dmmkava0y\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"311\",\n                    \"address\": \"bostrom1tyzmkpn0axquu4jlht3lllsmq03um8kn5cu5pt\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"312\",\n                    \"address\": \"bostrom10a9mqy8cu04nyz3nj934ck39p6u9ddjt9y5fve\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"313\",\n                    \"address\": \"bostrom1f2uslv6udnjwyqkdngc7rswp5vkmgavzgy952g\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"314\",\n                    \"address\": \"bostrom1t7gw3d2jz4qc6k6umgkazvfyeydjv7l6nym265\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"315\",\n                    \"address\": \"bostrom1rc2647d9nftgwwh9n5vaw26lnjdrewc4dum68g\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"316\",\n                    \"address\": \"bostrom1zejjt25xw9gwvhave95ykkvgqjtk7j56fe9cwh\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"317\",\n                    \"address\": \"bostrom1vesdfkzd36m08clhvkpusq4gv0dnqm28rm2hey\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"318\",\n                    \"address\": \"bostrom1ypvt8rf8md7qedvnk0p8cvd6mnffepst8f05p7\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"319\",\n                    \"address\": \"bostrom167hs9ma63wd02xym0vjw80uqlekt0cs54ass6v\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"320\",\n                    \"address\": \"bostrom17tksas9e4nkp25vgwcsd7z6y83pa6u7sddyyez\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"321\",\n                    \"address\": \"bostrom14thj9udwenk5q8c5ey2urude2j54xud2a26rp3\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"322\",\n                    \"address\": \"bostrom1y7ku6vf9vq53pv4y6lw2zjn4d5ul3javm92whz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"323\",\n                    \"address\": \"bostrom1mzn966mlprxgkvayrqu209069px0qwz7gzn799\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"324\",\n                    \"address\": \"bostrom1cjeg60652ueyu5222l3atmm8vrhlq4tfusnswk\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"325\",\n                    \"address\": \"bostrom13855g4d5pfhtnqemgp700qs36qpjdnaz0dx2m5\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"326\",\n                    \"address\": \"bostrom1ueywgan39tj27pdysq0d54cqvcwyggf6eves07\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"327\",\n                    \"address\": \"bostrom197h938dvw52kzf2l7gke2u5tcz3grvlexeaq0y\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"328\",\n                    \"address\": \"bostrom1pkxtd9xwmqwg08kjgz9xqyee3aw7j8upd89ah6\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"329\",\n                    \"address\": \"bostrom12arnsa069zhad0e40mlgy034n7aq77e2nxdven\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"330\",\n                    \"address\": \"bostrom1m3yh7j0jefp9dl26cz8fqexfg8tds39lh957jw\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"331\",\n                    \"address\": \"bostrom1ysn8jyjv464fv4wpt40vezh7d5tw05tc9v858t\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"332\",\n                    \"address\": \"bostrom1gh8tenvx2sf9kj2c359ey6s5k0vzlrl7z4t59z\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"333\",\n                    \"address\": \"bostrom1svwchckmrrkfl7py7l2fz3esla7lwmalld4yr2\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"334\",\n                    \"address\": \"bostrom1hmdjgtv3yq4qzyuk3ynyt42sjntma8hqarepjd\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"335\",\n                    \"address\": \"bostrom1wr0mqeyea45u9av63srtvgr553nyg6l9p57ezr\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"336\",\n                    \"address\": \"bostrom1e20dl8se4v2ev79qcay3ag7uf5t98gampz0d48\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"337\",\n                    \"address\": \"bostrom12c8kh7aaz2gg0l4nkd73t58nhurdaren55atua\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"338\",\n                    \"address\": \"bostrom1ftyx5guwf39fz4nc5n5nc9fua36cq344rm2d43\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"339\",\n                    \"address\": \"bostrom17jq8ev7n4e3zv8zdek5mccvxcgxxtkwva5vwtx\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"340\",\n                    \"address\": \"bostrom123wttw3lu62m7lcg23rkwr88cvv8apjmvkuj9f\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"341\",\n                    \"address\": \"bostrom1j5wpswepyxva5vupvg05pq6jzqh7ttdvepkhp3\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"342\",\n                    \"address\": \"bostrom1wh5gfxyz8x95qyjlc2s24h3czr60vfehwt49xa\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"343\",\n                    \"address\": \"bostrom1z3u9w3vyq6sw7ndxcdpjkgvlj0qaqm6spc3jmp\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"344\",\n                    \"address\": \"bostrom1pzyt3y68zcnvl7hkvuffqfedccaptf6nt2x8ya\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"345\",\n                    \"address\": \"bostrom1pzxnpyvxr6x9z64y6w3ctv0cvcx9sp90ehj960\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"346\",\n                    \"address\": \"bostrom1pvu65ccqw3fmgq88j2j485wc6qm96nx7h7ln4f\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"347\",\n                    \"address\": \"bostrom1nqxwnut0hdgsn3l9zaladaft5xt9c6ex9qquza\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"348\",\n                    \"address\": \"bostrom1njpfrygstn6r5awzp77keyhkl3wfhzmvdz2pug\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"349\",\n                    \"address\": \"bostrom1ke9xxd3d6y0ttduac062zvv3r0jtakvhkvqcjz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"350\",\n                    \"address\": \"bostrom15ak23s0usm36hv2e4kajhe0yx592hw474p3gkq\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"351\",\n                    \"address\": \"bostrom1gffprg0nuvj9ve39s9rjhjp04u7k8xwan2tzff\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"352\",\n                    \"address\": \"bostrom1yq5h0gjxuup83hdz53utukwhkkz684mk3lx7cr\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"353\",\n                    \"address\": \"bostrom19rfaqnnz5fy3qct8qxzany94t2p7h0rrc75lmz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"354\",\n                    \"address\": \"bostrom15y8g5ggq2lslncdnlcscqygyesefmjy0t4cae3\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"355\",\n                    \"address\": \"bostrom1gfkztltd789py02jcd79dnkl252uej7x8pnx4p\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"356\",\n                    \"address\": \"bostrom1h9k38zr5a532jzl0hsker9qz785m822zmqw974\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"357\",\n                    \"address\": \"bostrom18ghdg8y5hx6esxm6ndw3ywgtalvkmz48zeyc6z\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"358\",\n                    \"address\": \"bostrom1zy3nxgwtw9hr99tzfaxasgwklm9ev843fju9zl\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"359\",\n                    \"address\": \"bostrom1vmfs06hv80gc8jcpzu93ld4494azendxfalh2g\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"360\",\n                    \"address\": \"bostrom1d66wegxpllcsnrzv9saqugpk2dausa836qlqaz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"361\",\n                    \"address\": \"bostrom15njl9exppdfms5fg4zz9wafn4a95lfj30ftx58\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"362\",\n                    \"address\": \"bostrom1v2fzs3a8mvm4nhsfcpk85gt3d8rdacv6zggl9r\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"363\",\n                    \"address\": \"bostrom1fm842pq6zxaqs86fm30xv459gx7hm7f0ufujvz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"364\",\n                    \"address\": \"bostrom1rzr7gnkm3kdqmzqya7ky98m8tnnmtet58deav0\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"365\",\n                    \"address\": \"bostrom16gtt4cmrvg2us2rgecym9zt65zet7qq2euzvdf\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"366\",\n                    \"address\": \"bostrom1jsdfjw0pjjj5thg7z2tpm30njusrlsagtac7rs\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"367\",\n                    \"address\": \"bostrom1z33aen2znsmgy7wwzavwh2q0u7cu4e9xhky379\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"368\",\n                    \"address\": \"bostrom10r2sn7sasanc0tuw5wzupxvlpht5uv267her62\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"369\",\n                    \"address\": \"bostrom1gtma98yjsx43zc30j99t7t0tmdjt2gyp9e7g0r\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"370\",\n                    \"address\": \"bostrom185y3kgv3e6t4sue0a55jyq88hv76th3urnca4c\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"371\",\n                    \"address\": \"bostrom1xc6jdlqd8gd9e6p73xdc2yw7ad3tnl8w7j4wsl\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"372\",\n                    \"address\": \"bostrom1wdk6rndatlj8dpxq799vmu50zft7xk5768ej2v\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"373\",\n                    \"address\": \"bostrom1uz3xp4au0rxawmct6ffj0u3le7uglyza43appc\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"374\",\n                    \"address\": \"bostrom1uym8hd4pum4zz2mpkf93y8435u725k97e2c38p\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"375\",\n                    \"address\": \"bostrom1u8yt9tvnwvvvlm36w97nyg27ue797hrvkz6eux\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"376\",\n                    \"address\": \"bostrom1u4427txgc9pulkuu0wk4v9cjxqa0dxee5az972\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"377\",\n                    \"address\": \"bostrom1epcd5upewwa7s20u6kgf9uywa2f7c3yj6zaeg0\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"378\",\n                    \"address\": \"bostrom1tx6dnqh0nnj05uuell7rhnwhennscehlnjylxv\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"379\",\n                    \"address\": \"bostrom1ypzhtfsyuejekw0w0z207wyedqm3xqafc8nu7g\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"380\",\n                    \"address\": \"bostrom1s4ytylknecgkp7sp3jgf2f5lj7mm2xxz0f9rl3\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"381\",\n                    \"address\": \"bostrom1s05hsv6fxhkpclwxzgnlfjjk7qdm78nmpchj08\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"382\",\n                    \"address\": \"bostrom176q2gvutyk63dzknylcvdhp6lyjwu5w9fdmmev\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"383\",\n                    \"address\": \"bostrom1e08w7wrjn05gl06xkwnlfmud5f6trdkrf0drg5\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"384\",\n                    \"address\": \"bostrom1pzp9nadejsjzfkpfl9k7ktu2cfhprw4r7qvd5p\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"385\",\n                    \"address\": \"bostrom1pt3a6xk432vs8lp0z6ya3qhqhxks99xe4sxxqq\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"386\",\n                    \"address\": \"bostrom1damlfdlp8yynjvrmv6pd3t33f4currrhe4cm4z\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"387\",\n                    \"address\": \"bostrom1cmhrs08sqv0823mj057svp8jerp6avne6xmtrc\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"388\",\n                    \"address\": \"bostrom19wlc6vms3qkuy48wgg2dl06veahgxl47s8859j\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"389\",\n                    \"address\": \"bostrom1h9zrqgwcjtul3s9qxf0hk0ym9alm44ztywkfyj\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"390\",\n                    \"address\": \"bostrom18fudz7p6ah9yvdr4p9aflp8pgzngx84cem5lra\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"391\",\n                    \"address\": \"bostrom1e8dsx8yx9mjn8v8egz2n5vafkymqw98wy4z6re\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"392\",\n                    \"address\": \"bostrom189tpr8vg4qvwn7fgs6szkqr25yrammvvlzx0zr\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"393\",\n                    \"address\": \"bostrom1xvsukg4tltfzduw0lsvgqyrhe6rzrlp472ln92\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"394\",\n                    \"address\": \"bostrom1w7f07762zelhx4spzkndmygh2dz58g3nn58v7q\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"395\",\n                    \"address\": \"bostrom1808q4nv5qafkk8ec9h56wwth6sl5a5yd0elve6\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"396\",\n                    \"address\": \"bostrom15a8z9l8ufw8v8zdddfhesnmfzwwhua7axrmfxl\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"397\",\n                    \"address\": \"bostrom1undz2328av9agfhaguqs8zxzejv5zqcc9grdmv\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"398\",\n                    \"address\": \"bostrom17vw0qcu9j8t6jhh83sjrzj07nwg9nndfcpw9g0\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"399\",\n                    \"address\": \"bostrom1evnwfeuqsgkjwe5qwe5acyy6m4w5ch03m3e7a6\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"400\",\n                    \"address\": \"bostrom1t5r4uhu0tscqw380t6hqmvrgyhlrj3u43vsm43\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"401\",\n                    \"address\": \"bostrom17kwvcuvar02ldacltr48373rm74z8lfkcq80vj\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"402\",\n                    \"address\": \"bostrom1r7grd2sazgzsy8y0c8wlsnjyhdc0sq4npr0v4q\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"403\",\n                    \"address\": \"bostrom1pfwja2fu2qcqvdws6rcdr9y6za46dklaxc83fh\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"404\",\n                    \"address\": \"bostrom1p4uyyk8sc2arl4n9egw3xrn9g7rpkzlerf4nlc\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"405\",\n                    \"address\": \"bostrom16gxdwa79rsvkjaawpcpswthgahm56p4mpu8fe9\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"406\",\n                    \"address\": \"bostrom13nef2p2g48kmj83m7f0ey76q6p9cdyrn03x4tz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"407\",\n                    \"address\": \"bostrom1m9x4gg6frezyeqldxdz4dvegxpcytxnapgykwu\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"408\",\n                    \"address\": \"bostrom1kfz37afuxfyajrzk7xv6937xc0jsq4zd0ce7dz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"409\",\n                    \"address\": \"bostrom1kae5k3nnzs3q7tar4ec3w29w4avd8saqujpjk5\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"410\",\n                    \"address\": \"bostrom1hjjsjgv7sx88mxfq9y44ql24xs76jj3w7y9ff8\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"411\",\n                    \"address\": \"bostrom130avjyegx7glgnqvraetqj6ztacrqv9kdwawkj\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"412\",\n                    \"address\": \"bostrom104rtaftr9xmx6dcakempk590tfxx4ytddqcj97\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"413\",\n                    \"address\": \"bostrom1f6tmyjffs0p7f6xeh25esjhawxu2kll9j00a47\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"414\",\n                    \"address\": \"bostrom105c5jk0xwzlk4pexgaeqkxq0xadtqchc4lmev6\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"415\",\n                    \"address\": \"bostrom185tek8r0ptelug0erducctzc4d83q5np3339k5\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"416\",\n                    \"address\": \"bostrom1z0m5tcv4jde5acv0w4dms537wvntgj7x47zmeu\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"417\",\n                    \"address\": \"bostrom1fzkp5pux48ux72wsgls9lhxp5cq2tqsy32hfec\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"418\",\n                    \"address\": \"bostrom1nsffk0nt927vn7pdsk8epzjeqch3yfzkzq57pl\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"419\",\n                    \"address\": \"bostrom1e4cnw86pl73k2sfv7uwauflfl42qzncn4akyv7\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"420\",\n                    \"address\": \"bostrom1jlu5u2sj0afddmcj7lxfy0ng466s8l2qdjz24v\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"421\",\n                    \"address\": \"bostrom1y9tvvunr7uaqjjw8u6xn5muypq6pheyz5gygm3\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"422\",\n                    \"address\": \"bostrom1qsm0ujra4vdwymc5vrtey2rvalyq8392h75nr4\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"423\",\n                    \"address\": \"bostrom1jgvy2vr96auye3er6n3tkhlu9hnxs6h3a38rpp\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"424\",\n                    \"address\": \"bostrom1jcj0w0e2khy0asm7dz8883xnepzmaxylwez7j2\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"425\",\n                    \"address\": \"bostrom1q22fvnhna2zg2g2xm6s5587w8fvsh2zzfeey68\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"426\",\n                    \"address\": \"bostrom1amletsu7926696dpeay8wrewqgww5s7yunjjxr\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"427\",\n                    \"address\": \"bostrom1qkltelhy5zsr4kfrefvwsupxyt6y9skwjpd7h4\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"428\",\n                    \"address\": \"bostrom1nfdyvvjy5hum8gpgmt29d0m5y4te3ekpfyz7pw\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"429\",\n                    \"address\": \"bostrom1hjz37u09vws084cvwjlr5t27wmsrzm9tmfspu5\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"430\",\n                    \"address\": \"bostrom16zykdjnfjdy5cy3phuymmcghh8x24eah2cmmpu\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"431\",\n                    \"address\": \"bostrom15pax03gsgw84lsygpxyyvtthd8fswrqp7wjs7m\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"432\",\n                    \"address\": \"bostrom124ll3q05an955eh26ygn34u5gtm9287arjrgj9\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"433\",\n                    \"address\": \"bostrom1teyn0utv6yhnwux44ycfvqh6z888pvjaz9cz6l\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"434\",\n                    \"address\": \"bostrom10905rstxf5tzj0w6gguaa76ma7s32v48um4w9z\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"435\",\n                    \"address\": \"bostrom1m7y6qezuemqe6n535z7s80ee8zw4zg486vr53u\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"436\",\n                    \"address\": \"bostrom1pkhgpslggp3t0nrwskvgczxmavg7yejfullesx\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"437\",\n                    \"address\": \"bostrom1zyws7rajm9f3ql6jqqpzvnml0aym9vspd7tjxk\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"438\",\n                    \"address\": \"bostrom1pa0rcdua5v9d4vf09ksnnl7t96nfkf3w37k4dc\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"439\",\n                    \"address\": \"bostrom1durjade4he9l23rw38azruzfttpmc8223n6r87\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"440\",\n                    \"address\": \"bostrom16jvmfza0q60umemx2pv8s5kle2h8g9x6jj9fkq\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"441\",\n                    \"address\": \"bostrom1gywad2frusetg26dyh83cfaevacravashyjwg6\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"442\",\n                    \"address\": \"bostrom16kqpk5jg9e5ucxv3e003mf48yuamw4ce5ww4la\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"443\",\n                    \"address\": \"bostrom1zr9urr3m42w7pu5h5xn7rvghcdk5vtrtmfw7wf\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"444\",\n                    \"address\": \"bostrom1jet9jf456dja8vqlhk407l06yvfehwzuvjaynv\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"445\",\n                    \"address\": \"bostrom1q8ajen3vu5v5uu4czkvqasqvw827dz2nqq6d0s\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"446\",\n                    \"address\": \"bostrom12w56mhf4nsfchquw0sgzwn72qkzvfvquxhg6dn\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"447\",\n                    \"address\": \"bostrom10v8qjj6haddx7wmnr65mcsllu8xunkee7zg3z5\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"448\",\n                    \"address\": \"bostrom1hy8dexwz6ynlnnaj8ge7jvmzs4c6qmz6yh97lc\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"449\",\n                    \"address\": \"bostrom1vpp9vy0fnxxw8yk5t2cctutpfv8pprvyhnjw90\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"450\",\n                    \"address\": \"bostrom1w0u83ty3nmflg9846zmh28u0hweccs3fzfpx0f\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"451\",\n                    \"address\": \"bostrom1z6lhk6u25fceqylmgv65t5py0c8kclgkszmqyx\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"452\",\n                    \"address\": \"bostrom1zcf0ph3k4p2q2pl32zqspy5f7jkgxd5s4kcd66\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"453\",\n                    \"address\": \"bostrom13s4egz6pqg6a88dunme3esuee5w7qlkjttcs08\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"454\",\n                    \"address\": \"bostrom12w37894jf7rt2ck709rk8xa23lz3lg9tv93tlz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"455\",\n                    \"address\": \"bostrom1sntt4y34tghn45vw97az7mz4vkcw8kgregkph7\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"456\",\n                    \"address\": \"bostrom1pa0lcssmjkkycdvrhhzey5h94v34wuf9u4ths6\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"457\",\n                    \"address\": \"bostrom1l9yx676futn4h28rxupsvk7evl9s68hrufetdw\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"458\",\n                    \"address\": \"bostrom1knpgev72f2empt8j8gcn24my8kdasy2lcezjea\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"459\",\n                    \"address\": \"bostrom1clr05sms7eklm509ger6jdzhgheafskv4wwxrg\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"460\",\n                    \"address\": \"bostrom186tpdptavhzz7fg83vnm4r2y85cfqyg6sntmun\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"461\",\n                    \"address\": \"bostrom1qc4t2q45f826cfc7k0y45ma8f5qrrfv2nkly33\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"462\",\n                    \"address\": \"bostrom1n0wkta56ktj93nzpe9amkgrzq7rhzt3gy6m8uh\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"463\",\n                    \"address\": \"bostrom1exul86z68fzck5jra7jp8xdwvmfz5p9qyuh8um\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"464\",\n                    \"address\": \"bostrom1melp9r22clnjzzudd0thvs5zzveqfjyl9xfw54\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"465\",\n                    \"address\": \"bostrom1zx70t5xqc8h4kmvrssdc2w82v9ksw0r82a99av\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"466\",\n                    \"address\": \"bostrom17ssaukj47urfj6c8cgywyz9xhgqz3tnpy7n5kv\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"467\",\n                    \"address\": \"bostrom1znt56em2psvx8ylfpplcmpy5esrea08g2psvxm\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"468\",\n                    \"address\": \"bostrom1tz4yrvqlw87e74n783n0da4pttay2ypsfq6668\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"469\",\n                    \"address\": \"bostrom1prrtyfgrw2tzj9kua5eu7tnctt474m36eygux2\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"470\",\n                    \"address\": \"bostrom1ftkw5j528j94cajk4rvqum3k7mhhmpvyc8k7yg\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"471\",\n                    \"address\": \"bostrom1pe42d4gkg7smf9na6dvh5twq9hgczsag4elx84\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"472\",\n                    \"address\": \"bostrom1nscf69wvc0wkgqm8ma79qv8cr6j6zq3dt0t898\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"473\",\n                    \"address\": \"bostrom1exv982mrkyfd967xv7fam7lq8h3ce3dvcnd4s3\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"474\",\n                    \"address\": \"bostrom14q65nd2ft893dagpln4fq39wutv2xmpe3kc4w0\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"475\",\n                    \"address\": \"bostrom17llhhwjmglhhqumz72e4jap5cj39r8rwar7zzv\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"476\",\n                    \"address\": \"bostrom15k9z24v0thrxffetjp97493ec89zlz7re07pjj\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"477\",\n                    \"address\": \"bostrom1y795vkzvczrauey63vmvvcjr84l3fjheqd8f38\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"478\",\n                    \"address\": \"bostrom1qf560sekun7kjsu4r0puey5u4fn90025f4q2p2\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"479\",\n                    \"address\": \"bostrom1v9p7ukxpw2yjk7eqm8720vkgqq5qlk7w3jqgzu\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"480\",\n                    \"address\": \"bostrom1a57rc9cnhdn4l843ca4990aqldh5wmq0uuetzg\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"481\",\n                    \"address\": \"bostrom1q2ajajyu0t544tudcnvk7xcznerhylz36p5vtc\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"482\",\n                    \"address\": \"bostrom1ayc0pueqve9a3xjpgwh3p4l6hjlyvfpvclvldm\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"483\",\n                    \"address\": \"bostrom1jmdtfuxag0deeuyxmj4ge2mqhvc200hlmzyztf\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"484\",\n                    \"address\": \"bostrom1k24kf4reet2lstvmkx9a4j0r87xfuqeqh2lprz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"485\",\n                    \"address\": \"bostrom1e0c3ehnfzvcxvwh9fgzyfc2vqshy9w53du7hnv\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"486\",\n                    \"address\": \"bostrom178nsekn4qcdkqqmv95qlmp68kaqpga3zpsdnf4\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"487\",\n                    \"address\": \"bostrom13uz23f4stcg8esqvvc7d2w9psxv0dya5xaq5ne\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"488\",\n                    \"address\": \"bostrom19trgcp8uldtc5xtnpf0u7x7dk3t3jcp4y7cusm\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"489\",\n                    \"address\": \"bostrom1fn4ep44ud3edyh304ta38f55xd6pxswsw9e23z\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"490\",\n                    \"address\": \"bostrom143dfs4ur5gjvwgx8l54jjz27rq57us0zz3hqj0\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"491\",\n                    \"address\": \"bostrom1e3je4h3vkxywt2sf7mudelhf6zrx405yfgczkf\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"492\",\n                    \"address\": \"bostrom180upuj8yp0326px2uys9r60xrlhpsa6fwryf80\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"493\",\n                    \"address\": \"bostrom1jdypscylf6hjlrlva03tx5vqqkcdnllg6rpza7\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"494\",\n                    \"address\": \"bostrom1r85972mwrka5w9ct6km58ww9jl9sh46fx559fu\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"495\",\n                    \"address\": \"bostrom1xz2dkqrnrvq0ezc0vxtcvhwy39xr63vxzfedsr\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"496\",\n                    \"address\": \"bostrom134llrhdus60n7853fn3ulmx6uy7evsx3ltzstt\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"497\",\n                    \"address\": \"bostrom1pv5clfxxfpqvuerquue2vgr2ndgh0h50jx898c\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"498\",\n                    \"address\": \"bostrom107v45crxqedhmf4yqa9y98v99wm2078fwtklsq\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"499\",\n                    \"address\": \"bostrom1959r3zp37k9yuz8kjtc4feayyfkkxpcv43mu0w\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"500\",\n                    \"address\": \"bostrom1qh6eavdzp5ffks2rvd5mjt3rdmjxg3qm5l4pw2\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"501\",\n                    \"address\": \"bostrom1lk7m28npegzy0sz5s06sy95n27yzrj4d3rytdg\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"502\",\n                    \"address\": \"bostrom1clk49u6rvv8c40udn9qgp0s8hv5uvfcgxqptky\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"503\",\n                    \"address\": \"bostrom1gws6ulm3u23txc6p8kv6ew6e2zn45udrwjkdqm\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"504\",\n                    \"address\": \"bostrom17rg7cldfsqfmv53n6r7qmjmcge7ucxx2hhum0q\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"505\",\n                    \"address\": \"bostrom1kkwwsk0v4h7tmccr4sdmpyl2j2gvfah6jzw7n8\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"506\",\n                    \"address\": \"bostrom1ggh3zff5paq5c3r2j34mquq9lrcc7s0nvfnuwz\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"507\",\n                    \"address\": \"bostrom1gp5s4tetnk7ng49g58uhn2znfpmgs4cfdq4ns3\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"508\",\n                    \"address\": \"bostrom1ejkkddkuw63zn557l0lvqq3gmjcra53ealmy2x\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"509\",\n                    \"address\": \"bostrom1jrp04lvvpzkyylr4l7e5xp256l9yd4hdhrpmls\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"510\",\n                    \"address\": \"bostrom14c8rllqzmgyrkt8aeyanprl7g3adrlc2flq57a\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"511\",\n                    \"address\": \"bostrom1j39uxls4clq76ej7mk2tdskvql2tdp2zek8g89\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"512\",\n                    \"address\": \"bostrom1qcy673rd8a27t48ry6evmv6as7fuetd8cyhnjn\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"513\",\n                    \"address\": \"bostrom12d3klseftxsfs5xmvjju339enk8xcvg5y55qvl\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"514\",\n                    \"address\": \"bostrom148g7gmqvw5gfj7dmpjymtsw3j7gvasflqrsyx5\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"515\",\n                    \"address\": \"bostrom1eur22ds9gn06lgg9j3raqlzj8j2qzxx6vuje4x\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"516\",\n                    \"address\": \"bostrom1809klqrjjrs8ch2gtf5hmmfhysspkrr894rmhm\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"517\",\n                    \"address\": \"bostrom1f9nx8jrlx9pvns70edanu37mxtm359k606qyds\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"518\",\n                    \"address\": \"bostrom1qgkdm2asr0qey7jafqyqlnarvgndjws23fpkrh\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"519\",\n                    \"address\": \"bostrom1r5gvlzt03a0a9rks3s57cppmfqx2lzjrquh3d0\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"520\",\n                    \"address\": \"bostrom1yaastlp99jvqta2x5fngdzw6zur7khctd9gk3x\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"521\",\n                    \"address\": \"bostrom14jhjmhm2xmx6wyefju30auqvrs35hmnn2m8ewl\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"522\",\n                    \"address\": \"bostrom10pqp6py9pqtagyde9tnkkvakg3gqsnq7lgzxnp\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"523\",\n                    \"address\": \"bostrom1spndx95pckqnmjss6emff6fyylasg66qzdfv6v\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"524\",\n                    \"address\": \"bostrom17qkfq2uwags5pzplrfqg2elhn9s0pfwja4mgeu\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"525\",\n                    \"address\": \"bostrom194097avwy9a6h0cvznev232z28h96rp2q3w3uc\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"526\",\n                    \"address\": \"bostrom1l8hx9jxul439uyjve4zn45nujtx9gmrw3za3vs\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"527\",\n                    \"address\": \"bostrom12zmexhujvw7j82la9uslzfl5g29erpysqt555s\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"528\",\n                    \"address\": \"bostrom12vexhfe4m9p9szsqvzsalssf8sxluj6pqx8gr3\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"529\",\n                    \"address\": \"bostrom1ukgaegxryydqckt6fgrt60dajxq758x9pntmhh\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"530\",\n                    \"address\": \"bostrom1756xr3jtsdve6vuwqgqdtmt6ws3td49gq7vc77\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"531\",\n                    \"address\": \"bostrom1fn5cutfgat9s9z6nz5ucnnq9aec82wvqpevsn5\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"532\",\n                    \"address\": \"bostrom1e63p9zdn5xks5ge9gj2y9gfkl5u0jgkvfrnhzl\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"533\",\n                    \"address\": \"bostrom1zq9f4eczclr5cexrxdusfxxr6eumn2rlg2h4hs\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"534\",\n                    \"address\": \"bostrom1sjtl9n7fqszta6p4w5y5yl7d4xqth26d8z2gjj\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"535\",\n                    \"address\": \"bostrom1a4krl6m7jg7ckczk94hh0wdlcezvpgwcwkrpcg\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"536\",\n                    \"address\": \"bostrom17lzmvgnahdncwnsx3dr7mss65qv6l9md2hy2qq\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"537\",\n                    \"address\": \"bostrom1pljwxmmkhfrkzkdpmdjv29t6959sa77mjt0xz4\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"538\",\n                    \"address\": \"bostrom1t9xfg2kurjlvnw86repcpte3shpgasdjge6a7t\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"539\",\n                    \"address\": \"bostrom1erxn6kmz3xhfrv40m7lyp88v43qahqn8fy2xhn\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"540\",\n                    \"address\": \"bostrom1k879z65mwwwu4jause7galz0hlsqqj4rtah7r6\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"541\",\n                    \"address\": \"bostrom16dsvdl4jer9jyplelgz4x68hjvg5k647nrnc8z\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"542\",\n                    \"address\": \"bostrom12pafl09rqzcw7d77qs63pg2nlsgvc3dsfxyzum\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"543\",\n                    \"address\": \"bostrom15cq4l7d6v43rtv493cps3c7tpsf26d83pseqwn\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"544\",\n                    \"address\": \"bostrom1wrtzl04mxs2en94ysc5p8mvqc5p0culr9w9m0n\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"545\",\n                    \"address\": \"bostrom1a2zr8qx60sl3srh982hjduse0l7pdcnhtl7juy\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"546\",\n                    \"address\": \"bostrom1r82whjffalh2hgmrayywc9g53es96n9e9893yv\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"547\",\n                    \"address\": \"bostrom15884n6qmrwq8gjuwtqh6q8z7vx500n5s3djcv6\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"548\",\n                    \"address\": \"bostrom1nhkl9r84zjucmjswhddwq8zgpun5yks5mjk7xc\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"549\",\n                    \"address\": \"bostrom12cq4xxcr6pmjz320aj7j8pn9l8vjeed63slcz5\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"550\",\n                    \"address\": \"bostrom1fwx3u5w8qyzp8msv2n9umajgst86dnuqrsft0g\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"551\",\n                    \"address\": \"bostrom1zg3xqymyrvlu5fmmyx8htdm84kqt50t7xdfmuj\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"552\",\n                    \"address\": \"bostrom152xtf7tvw60tyhls32wwc9ypehqzf366zjkeeg\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"553\",\n                    \"address\": \"bostrom1uspnj6pvq0u78d8qux8lz6p24dzm998phldqgv\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"554\",\n                    \"address\": \"bostrom1ppzvqc7yf9lfs8cljqu6w992gct6d5h9jx5wsn\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"555\",\n                    \"address\": \"bostrom1jn8cp663fl0mv6k55xvy2lr6s0r57zg0v6gzr3\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"556\",\n                    \"address\": \"bostrom1fmpuldfmgj0a4dlkn0cdlap4h3qs7nljyph4rj\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"557\",\n                    \"address\": \"bostrom10mja0qpcq6ze2nrchhh7w3n7g589sdktfu7p9m\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                },\n                {\n                    \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n                    \"account_number\": \"558\",\n                    \"address\": \"bostrom1kaaxhzud2ev7v69kwkf8vuvhst9a36wz5l424q\",\n                    \"pub_key\": null,\n                    \"sequence\": \"0\"\n                }\n            ]\n        },\n        \"authz\": {\n            \"authorization\": []\n        },\n        \"bandwidth\": {\n            \"params\": {\n                \"recovery_period\": \"16000\",\n                \"adjust_price_period\": \"5\",\n                \"base_price\": \"0.250000000000000000\",\n                \"max_block_bandwidth\": \"25000\",\n                \"base_load\": \"0.100000000000000000\"\n            }\n        },\n        \"bank\": {\n            \"params\": {\n                \"send_enabled\": [],\n                \"default_send_enabled\": true\n            },\n            \"balances\": [\n                {\n                    \"address\": \"bostrom1xszmhkfjs3s00z2nvtn7evqxw3dtus6yr8e4pw\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"115880796057845\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"115880796057845\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16230lc9r27vrxlzd4wlvcz2l66quzj84vlkxc5\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"10000000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"10000000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1gxhs5wzam5rlgf6cs0lkme400ut64d4ncpfs2h\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"10000000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"10000000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1qs9w7ry45axfxjgxa4jmuhjthzfvj78sxh5p6e\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"700000000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"700000000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ha4pw9w2qgc2ce9jwfrwrmaft5fneus58nqwev\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"50000000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"50000000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1qn8sr2hzmktlecusdtxj9hwj0upnm0jft9snar\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"10152301267211\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"10152301267211\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1d8754xqa9245pctlfcyv8eah468neqzn3a0y0t\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"360239818444\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"360239818444\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ttd4h585vgy29gj0xe0p338drvw9w4m4hzwj9p\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"4000000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"4000000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ngd5w7j4u5ar5xh7vzuwqqznnhhcjmnz0s6kpu\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1000000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1000000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom10c8znaj94y900syues06dz50hw6y9qpkhunn25\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1400000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1400000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1jv65s3grqf6v6jl3dp4t6c9t9rk99cd8yvs0hc\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"50726497621325\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"50726497621325\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1pntx8ql2v7cqxu05etg8c4v0r2vz7qnq9uqmpy\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"4000000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"4000000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom17a7xxqa4drnalvv7pkxrkxqer953fdke3ulwx4\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1000000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1000000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1s4czxghmh29aw2ldynk8r9lnkfccw5ph8rjpxa\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"4000000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"4000000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1s4wntr9selfaznc2ezjkwnwt2y0terx9tqpda3\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1000000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1000000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1qwzsnnuk2u6avvh059c9p50gqqquvcu5svvwrs\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"4000000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"4000000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1g07gj9ph0r2hjx6ffqn8vl38u4agd5mpqx9m7f\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"4000000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"4000000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom10e3rqclgjz4m4fnx2c23jupcjpyuvyx3x4k7qj\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1000000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1000000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1t3222ju7ssu58xsm3m2xw445p94cqn2qrex3vy\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"2000000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"2000000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1edlrze5f48jjaw0wxcve4asqqf2tcjdl59ln8q\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"2000000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"2000000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1m8yf3g2m9p7danjvt4ga6vzewy380pk52kcu9z\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"4000000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"4000000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1fe5mspz9jsq6p9hqqet86dwp276635l6gacspa\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1000200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1000200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom14nzyt8wmx4g6zkeluelukamgsh5v4xgnc25k6j\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"508729659282\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"508729659282\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1mcslqq8ghtuf6xu987qtk64shy6rd86a2xtwu8\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"400000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"400000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1sng0f47cuvx6edxaujh24wc3dvk94q0w6r6smh\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"474221734944\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"474221734944\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom194pp2whvqynxnfyw5tqy8fzy2kxsugyrwsaynk\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1000000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1000000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom14d92r4svhl4qa3g6q48tjekarw2kt67ngqn4lr\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"40000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"40000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1hmkqhy8ygl6tnl5g8tc503rwrmmrkjcq3lduwj\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"386336649906\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"386336649906\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom12psudf4rpaw4jwhuyx3y8sejhsynae7gv53hn6\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"320106862931\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"320106862931\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom178q202gz0093uke0jy96psyya452rt8apl4has\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"285239999451\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"285239999451\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1kr6udadsvdjymq6m75un4khg27t25st2jn8sag\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"255496772589\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"255496772589\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ymprf45c44rp9k0g2r84w2tjhsq7kalv98rgpt\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"369099401568\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"369099401568\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1w8ap0ns4d5fagjfwvph6t99uet0cwv6y6r03un\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200997782490\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200997782490\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1svm5wl5jf4p7dwemj7wh0p4egr3js6rqtlnefu\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"197153970492\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"197153970492\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1gnnd2eaeqpp6lsd34tnp6j0m85h6r9qg0wh3vr\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"194917719034\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"194917719034\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1t0hmc79ht0qja92p6qgxn3ee3a3rzqutv7thqn\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"188630461585\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"188630461585\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom12q68xfj4r00nxnjrqk742rf0z2w6jmwaeppvr0\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"183750995527\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"183750995527\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ggc9sqvj0uhnzwxu5dyzcr05shwd2vv2guqmas\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"188148534837\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"188148534837\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom177y7sqkxmvl22j632haf8y9gv0j3wedssq5m50\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"227878425830\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"227878425830\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1zhy7l8phhpsm2c6xl9c5arcu0z90clynluwrw5\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"161481707259\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"161481707259\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1k60sfzh3ecyqfv36f7zav0089077e4zk4g6mxa\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"146840247453\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"146840247453\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1kpep8dl93ud4wgpws3tcew6as2s36c9v3csw89\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"140997260087\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"140997260087\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16lvsv3w7rnhcm079v6j9eah3xd0p3pd37hl48j\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"122742180846\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"122742180846\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1mnrwpdlnglhtqwa55fa66va0j3fv72nvkz4e2x\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"114829832854\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"114829832854\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1dt9lwmuq8rkngm5gajxchqhpcnavgp7md9v929\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"115117293353\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"115117293353\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom12xsg4qm4k5z48s79zdsz84jlhv56kmta3vyfvl\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"74772629353\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"74772629353\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1dxpm2ne0jflzr2hy9j5has6u2dvfv68calunqy\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"99815252312\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"99815252312\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1my32szlwazg9x56xqvsvtp0hqvpzm0r4u3k4ae\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"70271964895\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"70271964895\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1g0ap9fvex93yzzj69uzl74942vjvq8e4f8xtyr\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"67992083477\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"67992083477\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16zms8r32vad3z8hl2vc6wrcnanwmxf0dgh25yp\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"67229160818\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"67229160818\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1d3zlsrjyl3tzp3aly7vjduhrtrtvkvkeaqpdku\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"63422106566\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"63422106566\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom18jwk949jqgq3j2du2dgscqxqkkqw5rsjfuucf3\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"61558395847\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"61558395847\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom13fwhvawke6867s6raqux25fd24t89j5h8wf2v0\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"60883067675\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"60883067675\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom18z9vsjffvggluxcxfqwsmrz02v37hx2e3auyn2\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"63671664821\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"63671664821\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1lnkg57t7mvg5mcl7kdkevtgr9wlf6f9qtp86sk\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"70907190105\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"70907190105\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1dl5df5g2xwj02e93k547etw2ergvc3a20v5ekz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"46480474242\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"46480474242\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom13ume6mqte5h9ngx2hh6ngc8aham7x0k6stuvkm\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"41813199988\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"41813199988\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ldjugf3uj2gwkmmsf5japfknf96zv6hw7xw7v4\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"43229857071\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"43229857071\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1y9zkl7uqjev899swng4eqfuurwaxpchwppewyc\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"40330418998\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"40330418998\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16lf2hvzy4n4gvtx37pgkkdw2e2psfjjdpej53p\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"37988147654\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"37988147654\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom15zs0cjct43xs4z4sesxcrynar5mxm82f0ykhl3\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"111131994342\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"111131994342\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1v5jqg6k7mszmchhz8kyfml5h4e2txct9jz3am4\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"37418729590\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"37418729590\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom19ys53t55r725j882gjcrnf7s449gdrds3h2hu4\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"38253993813\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"38253993813\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1en69twaxmv7xupy8lq7y539dpecx7yz8g0k8ft\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"88440007493\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"88440007493\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1kgq82m6z2jttytv7fvwy2rklhq5k03gc2h9sej\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"30494554808\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"30494554808\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1hvk6s053m6qdlz9kwllgldwf4qp2c3mrlh9s2q\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"29370149824\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"29370149824\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ch6nukdgj55c9sk4h5t8spzhahuuvn86gqvarm\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"27485323135\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"27485323135\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1rqudjcrdwqedffxufmqgsleuguhm7pkaq0alce\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"27363284437\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"27363284437\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1qgqkc9t3pfsp6yxjwds70e4r9y0p6resmfnymc\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"26376882296\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"26376882296\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom12kd8w45rqxuwpwqvpmdyvvdey9ezeqhav4nn85\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"26208333897\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"26208333897\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom152kqs8p7d3jy6kn4uk87ve3alkuqjgewt3cmvz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"28921406054\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"28921406054\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1dn09uyhwmv3ratntc7c603vczgrec32c2fylpj\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"24175157388\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"24175157388\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1qezgmksavgdvcvf9ckhazfy3jfw8whhzfrvtlz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"21979059507\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"21979059507\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1d552nfgekkugdgxw3zl242qpxapl67jfkz76tp\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"21555502893\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"21555502893\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom10vpygn9ftv85ra7j7qpewuq5jdgvpjmehlds0g\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"20335729382\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"20335729382\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom18naxcfp2s397a2ucav2m53f003uylk3qz9fvr7\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"95514429798\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"95514429798\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom18t3kx877vyvstcvn50cgn5w6hppe8ce0pq72m2\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"18546327724\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"18546327724\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1kfqv2fzzu6dgwnf6snql2jslwdws07fl2gz37u\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"17879700159\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"17879700159\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ggayl03vvv763az6eez66jzwuunyqkcusk8fwj\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"17754934798\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"17754934798\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1fjeq0urgk4x0s6pl2p2fes8c95426amp7lv4dv\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"17601345097\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"17601345097\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1jgh7ghrcr47tuahawzvg3svv2hxkxfx5u9lzr2\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"17333444802\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"17333444802\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom19y467lyhqlpa52y6snq9cxw47xhwq0th3p05r0\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"14256149914\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"14256149914\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16ge9uqpqf78jdt0uz58ycalhtg59w77qm9t7d2\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"14222312706\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"14222312706\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1463la66ac89tmlwgvx20c4d2jv84ekzs8kzh87\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"13368713572\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"13368713572\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom164k2s2s2td6a30d3rvnv93scy3v29psw4j3ndm\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"12701785716\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"12701785716\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1rya5547x4lrwc2npd63s89ny2dvhamv9dfx9x9\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"12090950492\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"12090950492\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom18wn5kyxewwk6qh97493xtj9gufpmqserfahc37\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"12063356572\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"12063356572\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1lljcf37yxh24l3v4kwqsyghwz4ywlg6urg4kte\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"13616553392\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"13616553392\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1d7n8znqg635yxnzlsycnt6kut8z5du5yftutrf\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"10958899451\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"10958899451\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16pdckvu70ufzvm8avd9anga6k35nu7axym02wp\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"9792986284\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"9792986284\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom18txzlmkqf264a2awhey6lmeq0dtv5ex69d2fcy\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"9333557553\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"9333557553\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1mmtt0cnsgwx3t90vs4tn9k08kw8xn4v3pggfu7\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"6701991111\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"6701991111\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1mryr27k3h8kqr5ahj82v0ym2xexdewfc9rmng8\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"6310270182\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"6310270182\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1gg73t0eyrkqf953waqxh6uqah62p46jyg82ulr\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"5787292447\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"5787292447\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1jx0az02ccnt4mgj2r9vhvycsdjsztrrgdkwzr3\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"4220671315\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"4220671315\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1r90j4656xsug2hkj57a3knqcs9huh3ea88ykhp\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"3475567070\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"3475567070\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1f7nx65pmayfenpfwzwaamwas4ygmvalq2q2ayq\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"73338027208\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"73338027208\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1zl0t5703q42qx7drxsgl9thjwlul5x6unjhwgn\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"2742969308\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"2742969308\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom13q0m4hw6pmajqdqn4g464vzmst78sf55ktrp05\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"2064986311\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"2064986311\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1cjyv02cja896rr5y5lks79enk2nretn3mqyc69\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"13447758288\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"13447758288\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16qu2ymnzzjn05xc6yszjy50caaahcahdvmex5e\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1362390306\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1362390306\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1jst67u54vquzvun3dawpmpwyx5ar8mayaak5j7\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"181160067\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"181160067\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16s7gwc944patdynnfnvac0jh5u76wsnflty377\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"77674844\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"77674844\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1s3lgc3mgy4ltwr796qk6j73xmau4njueds0mgu\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1340337491769\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1340337491769\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom10556xtnp39nvx3ec3yjafug662pyt6af84n477\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1304153455839\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1304153455839\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ffve0zx389ffl80ae9t8jmghcjuzdlqr5eayfd\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"701778551659\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"701778551659\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ftah3e558ww7xutn5w8h7vrqa9v69pntztnr3p\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"622444466499\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"622444466499\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1wnpak7sfawsfv9c8vqe7naxfa4g99lv77d7c0z\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"517421971282\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"517421971282\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1sgy27lctdrc5egpvc8f02rgzml6hmmvh5wu6xk\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"359172486938\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"359172486938\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1cg79pj70mgl8xlum0rw5yy6enk9jszsrzvwysn\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"279430823965\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"279430823965\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom13dpy00jest96g7h5vdgvg9zpxq6xnclh5hzw5l\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"258229369437\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"258229369437\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1mdq5r6az6z8su68zj6px88j2ukr78ea4ggkzt6\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"237448433882\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"237448433882\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1lepnu7nt05g79jtmfp2pgrpys3fjc4p74sc0l2\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"182911039870\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"182911039870\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1d5lu67hu3lhqtw6zyv7uy4gkfpdtfnzxdu6mrq\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"157995617348\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"157995617348\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16jttzjgks48kqrhk5e68yv0gv6dt0rpw2f5pwn\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"141302079887\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"141302079887\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1e20hw2pqcgxvumkwn2qeeavcrswzskzjhr2aq0\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"119454359990\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"119454359990\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom17z2fywzrdld7qmwzpsq0atxfwcns8rp833rgxy\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"95223358775\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"95223358775\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1tu0e0ggvjtv4gvzcranjnrykac0umnf8y8fm0r\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"92010985676\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"92010985676\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1sltcfypwms38jjj3g38rg7ldx3e6uqrzrnkf9y\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"91965450766\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"91965450766\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1zy553za8nenzukmv65240323jhuvxzym4pl6w9\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"154293211852\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"154293211852\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1lpfs6xv765u4yxr8rlyn5ux0g2a8tyt90hsnas\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"59256843788\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"59256843788\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1smqr5tp684g07aekcn0w852wqlme5mn6dmsny3\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"47098839942\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"47098839942\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1eqkdzfcjnu20ywju35rf3nutxzjxjaqnxqfyyz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"44081312892\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"44081312892\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1waac73cpffx7suhpkvnn8w0a8s2cgzn66x2aka\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"42415701749\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"42415701749\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16macu2qtc0jmqc7txvf0wkz84cycsx728ah0xc\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"97996176301\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"97996176301\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1fapqgamx3c8za8d3z56sydjtjygyu0ly752j8g\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"37850807372\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"37850807372\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1w4548vrnvc7t9j2ly55nvkjvhwqt9thnfcvuw6\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"33395512349\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"33395512349\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom133t8m00w7llsslnf05zdhehharntly8dqzpfs8\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"31992273571\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"31992273571\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1smtmk8fe3qhlwj3h7nynl6p42946qydzvgj9va\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"29390986364\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"29390986364\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1csf3up94qheqz88fvvlwjl7vc5sdymarktrvpw\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"18442151620\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"18442151620\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1tr3eyy9l480pxjk0ygudwpfus7j8pgdljn09jm\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"17537519175\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"17537519175\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16ahkkv0jzhtp73z83qlhqrypss6jpjm8eekpwv\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"17375703563\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"17375703563\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1htq7u8gy9muv4fk6st04524tdzy8rv04528gys\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"16744189104\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"16744189104\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1kk9clwd4eva7ww95gn4rw3xzuwfs0983sl5cwt\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"16191669541\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"16191669541\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1k7cl9ya9qq30c7m4rvg3823hrc8k80eetqvhj8\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"14797976623\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"14797976623\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16d69u47km5vqdvf6fr8qyhktlacgka7fdvazr8\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"14751375909\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"14751375909\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1njsr8tngxtygsc73mrtn5738ztkzqy7c7y7h3t\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"51066633718\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"51066633718\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1kf0d64nuwsf2zeul5wkx78fsznplnlpsfh7fqw\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"11673069511\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"11673069511\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom18ghjkwygsvjcsh20tc5zzhfttxxuex7a9lq8ps\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"9561458741\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"9561458741\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1s2a7rckcky6jmhncxwy0xtwf2ymg87puk6jpzz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"14991446142\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"14991446142\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1679yrs8dmska7wcsawgy2m25kwucm3z0hwr74y\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"388969016352\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"388969016352\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom15gk8edxtvvp372flljk884fav55y8ehwru4u8w\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"2279889403\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"2279889403\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1jz57cgfr248y9w6sn76l7pugjkr6e7zh6y2grp\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"2378739020\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"2378739020\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1gw5kdey7fs9wdh05w66s0h4s24tjdvtc9v6vpe\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1799479675\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1799479675\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1kajt7sxfpnfujm7ptj90654lmwz4sftpc9mp9a\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1743792737\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1743792737\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1t575qeee3qgshuf964qal057z77vljqef9tlck\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1099995800\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1099995800\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom105zy26ze9gean4qukqlvhkv4mtcndc9t2xaydz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1006206924\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1006206924\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1a30w6j4m6g3s2c6zt02z56xynnuaqmn3ahwxuq\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"974688373\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"974688373\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1pmaltcu0x97x8j5klc8xluaapkzcvztcn2vkmw\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"736741030\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"736741030\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1n3mhyp9fvcmuu8l0q8qvjy07x0rql8q4uwev5z\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"704276829\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"704276829\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1u3ap2d4ytcqrr6jlsjf380g3lvgldq4m64s7dg\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"675487504\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"675487504\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1keny4peq77drtcdj6fscd9eknqcqyjmxqcr8t8\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"647527281\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"647527281\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1kk79xcsuah7ckvunku78094gyh7900ehkllkur\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"173703544\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"173703544\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom137eezcxcyqgt6kshfdfuvnsdgwpujyje2l8qdz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"73708712\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"73708712\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1uz39kh64w8p5df034fh6g5hwpdq8m0h5rx58he\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"49997750\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"49997750\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1kz6s2mp4rg7plj8p4qqe2wkegn4ldw3ak2a7qc\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"233827\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"233827\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1quchyywzdxp62dq3rwan8fg35v6j58sjwnfpuu\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"432771825520\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"432771825520\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1x95keq9l9y9p7hjdt6xd8wnknrpnjsqrqhpwc9\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"150000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"150000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1z98eg2ztdp2glyla62629nrlvczg8s7fvc0znp\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"100000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"100000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1xvssufw8ke03halg8wgu8m994ktxz0y9vm6tqn\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"100000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"100000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1vxxfhd8txmrq76jx3gj7sdrvg0vvqret6kxpgd\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"100000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"100000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1vtu55cc7m6yz9zfg5vqdk80f2g68petgzj9fv4\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"100000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"100000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16yf94eecl6h44l5w7zp75skh3rg0k4veavx762\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"25185396846\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"25185396846\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1gxyf6tsjamnavmkfk43mwfzwscn4tgfkz8k85n\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"5000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"5000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1w4tvyvf3hhpcwv9d4axa8n0mmj5d6ypvpq5mj6\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"278432605496\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"278432605496\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1xk4a2u2rjt7mqu5eg8xtxk37l28r3cugkqk9lp\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"233157212646\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"233157212646\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom143x4d5wx50204zyreqg8ekgq3n3fcaxucacztp\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"9826875134\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"9826875134\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1y83nga220nfjt9zz0mmqc90cd705az95n5cfwj\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"9608859331\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"9608859331\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1hyjhy0tp6geral2g9vj9nyteglf8t5q42gfq3j\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"2388890839\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"2388890839\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1d8mq46wt2yxsgwrmh6hhfgycl0537w8gggn47f\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"2182283065\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"2182283065\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1p0r7uxstcw8ehrwuj4kn8qzzs0yypsjwxgd445\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"2018839163\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"2018839163\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1duc9gthaeg82lx9pdf642g043xqhgxgxmfvwsz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"994320008\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"994320008\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1a4mzr2y2g0cc9f0uhyeh3ftmsfxzqwxfdqtd7c\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"7092669793\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"7092669793\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1xpl2sx64ra5san4su0r0hj8z9eh5cf5dcv48qa\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"970654649\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"970654649\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1hem3076xmat8ttr0cg0nnn2lghtc2p7xtzpj8s\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"951329198\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"951329198\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1402rpwdquxxkgvl740f6w69l65eau5vkqcvrax\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"16533932739\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"16533932739\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1z8mlsd42eaguaqf5gexy5a7jxgpwpgvz99qzft\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"218609970\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"218609970\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1v2n3hg6s4resacgpemfyrd5hul2ntk7tftnk6u\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"218382779\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"218382779\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ufpz4dlnfawg0pr5dcq4hkrf9gs30mu0272p9w\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"218341548\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"218341548\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1mkhugmqg9c0qe27stz3m4my9xq7e9pct0jyr3p\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"218115192\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"218115192\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1argjwgcplguenq4l92ggn06wadnfrz0ecqrmqs\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"50591836687\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"50591836687\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ke7kxdn29w2lrxt9dzusa6shvmwd8xm9gxm2zf\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"120588855018\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"120588855018\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1fpl40sref5vp8kfm7xkqlq5qc0v4xrjvk89kwa\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"11118481031\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"11118481031\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1g2d9xyuf7ddgaj4llxvg50pfhlsr9ehf2r8dr6\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"5689509530\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"5689509530\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom152m9xcx0ht7yxr5834ju7qjcyvetw8amd04apw\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"71337787640\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"71337787640\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom15n3t80p7eseld809f7fu3s9tlcezlymkfeu59n\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"4294256393\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"4294256393\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ke6pp2kq2wx74tlh5fxqgp7af6jtsna3kktuh6\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"11975798321\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"11975798321\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1daxxqs56f6j5qxxtjrjkexghsmnaj66tejshc8\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"72921262872\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"72921262872\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1nywu6z26tpcrr2kcqe8z7t235wrfkhfcfhlzmk\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"10932888406\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"10932888406\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1mnqlcc7mslzxcf798acp80u2fxudsuzdn0px6s\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"12677003041\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"12677003041\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ccvpcq9ffy0qd2ca8nmmpzfamtyjfc9znwak8m\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"32639852509\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"32639852509\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1w4tk9lj8qtx2x4xf4emgrnq950hnlajsxlnl3u\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"3420409835\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"3420409835\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1s8l0akn79kk74g32kf86stfsa08ck9qmm4v6ws\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"3409436625\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"3409436625\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom10aqelwndkz9k8uawp26elxep64ayc5rgn24h7p\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"3389782351\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"3389782351\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ap7zhu5gxlk7n3g97dqehm9nnt3mje3nr5jecs\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"3368708754\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"3368708754\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1j6he98h8xwnt2yp9eczhhuff3k3hvk98gr27ee\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"3326309936\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"3326309936\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1mskldfjlnup46adzss7lukfh3emm6z4lmqhk7z\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"3275155354\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"3275155354\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom12ysvrknuwdr6737fnc06v875whfh52xj3ewaf2\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"2961579452\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"2961579452\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom10trdf5eyfcmc9graltx4hmpgznhrm7hdz82k2n\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"2941697143\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"2941697143\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1nvr4qa7szsd3e7xfysn946gcqv5wyemlcxmxpw\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"10653917696\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"10653917696\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1wm4026rxqcrkh09k806m6y4lys942etx5cjz9z\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"2128629825\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"2128629825\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1zeg2k7kd8qadmwd3kslwmag3erq7hqxt5aajjz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"13163031473\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"13163031473\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16h7tyj5p69t3r7qasunf938cx2elp38fhqc7zr\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"14451060685\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"14451060685\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1jdmfxzpnqqlhjsju3mz7qsgvvdparw5acx7t62\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1664373777\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1664373777\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1smsn8u0h5tlvt3jazf78nnrv54aspged9h2nl9\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1654337644\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1654337644\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom15kl5tv0smz5h8eewu5hs9mtnusz4dereyqxxtw\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1408569410\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1408569410\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1uew6fawa3ahu60tj5kspmr4u0zvljj69q4s3ps\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1380580057\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1380580057\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ezpth4mp3eeqdt49kgqd5ctr69xev6v2gykpur\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1351419074\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1351419074\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1avvkajdvmj9d8jpl0ga4scftjykeuhjpsa9kf5\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1334996609\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1334996609\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1gd9r9uhd8a5k2naudq4hua3vf3lkwhfrm63qhq\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1301510822\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1301510822\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1vrym7t34gs9t2dkd8z849zcymkj54kgq7pdf8z\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1231063676\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1231063676\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1lk3yjcn0lvwj9f2dj75m8y3smpq5s5zsnnj3nz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1202315516\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1202315516\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1hk49ws6ded79xmwehv7yrw3q6mfj7kulafxqhr\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1108262797\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1108262797\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1vx9qctuxswd6ydcv4z5pcuuvct7y9l0nqq799x\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1083041319\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1083041319\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ydc5fy9fjdygvgw36u49yj39fr67pd9mv67ety\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"894267502\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"894267502\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1wkjn2nc4v5g3tpjj043wxtmeda90ql3yqqddav\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"814730401\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"814730401\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1gh09lmm8flkuu3w38mr4axvunnu6qqlapuwzrv\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"760249650\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"760249650\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1m0tjgkrh4td9fcp8nnssu3rfdahzfgdshsall9\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"682238027\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"682238027\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1mnfalar08dsvtwutmh43lnhx2zzmq7xhdulemj\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"15592862337\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"15592862337\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1g36u05ehktgw5h5udj8hyudd9057d9tx9r6zef\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"303617054\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"303617054\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom175tm6fucmk0e29cfgzaud6kqgksy25p884kjx0\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"26259431\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"26259431\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1v46pz6ddetfc3tnvdr28ss0l48jhazgynvp3c7\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"14979552\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"14979552\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1stfw0z5nf2ncxxtrk7zndpf2dla3nh379egwcy\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"61678847673\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"61678847673\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom147rnn0rxqkythj4j9ccq0kytmh7f005rn0a3zj\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"55311848847\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"55311848847\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1pswgrf5ap0kld3lpun5z4x08wh7nmgamd8mgex\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"8641145058\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"8641145058\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1wt9h9wm3zf7yzsy68x7v8p973w02kw8yyurh55\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"10537454450\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"10537454450\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ucl2c39dpwqm9pp6cvmlazn2tkwavszhs27j96\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"9691549420\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"9691549420\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16w2xwdzf6tzucpwcjjqtg9656a4kkv7g2f6vk9\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"458125791\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"458125791\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1hmrxmc27fu4ggdpvpxqtahn6uvtj38vuu77a02\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1854496759\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1854496759\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1uwfk6h06w8vnhmyp48vwcpgwncsec8yv3z0xyg\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1502715615\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1502715615\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1nuc82t22xgp09rs2tdnlxxgm95pjg5matjwwye\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"3573424538\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"3573424538\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom15kdrahda8qcyfa9xe8kt2f737m22x2sleslj5l\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1631606648\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1631606648\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1n89a8avc4j7cv75lfsyynx5kazlk80ar5qcdx6\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"41000576\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"41000576\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom19vgwu99fdawejnedgsfx8dmxuc0z4emjf7a044\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"5014404214\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"5014404214\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1s6v5ragv9gg3sq7j3aeqtyy82uaxv3y05hzhh8\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"4273801138\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"4273801138\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1y6huw3naar38u4rtgqmlh9smfu93gszst9tawp\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1688512495\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1688512495\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1hqeqy4s039q0qcpayqcyaq5hyyvmph97t79m9n\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1190379955\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1190379955\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom14h099ukgvp4fm9qs0xnmljzhevrmneq6m6cltv\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"978084362\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"978084362\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1xhk0s2ynz2sq3ak3lr4u5gg0da4vyaxkfjhg7l\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"924447759\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"924447759\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom14z6glatrayal5j53632kcefskyge6ujmgshqfv\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"327466267\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"327466267\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom14n625exc6ftee3t6tez3hj47lv49amjzan5pkr\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"236797768\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"236797768\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1fhj7pkuvwflr7z7ngp2v9tj7g58aq2tjgvqfaj\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"135097195\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"135097195\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1l4krahjfp87exsmumzpnrfeaer2gsghpuwhfp6\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"112519320\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"112519320\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1udal5nr3lz7mg7j7k79se4rz0tsjj8lur45q99\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"9724669100\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"9724669100\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1n55zyf6wlvh8jp4wxqgx4ta283jx0e2n2tutgm\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1099456389\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1099456389\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1glgevt43557u6s7a2q9q40kzt8myw4ngcv6wr6\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"309112576\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"309112576\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1mj0sj4eaar5qnjn3l05ep5wgq3l6agtvvqwvyk\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1178234463\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1178234463\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1sm9sq4wnn62tk5yz0x3fvvx2ea9efguqwvdu64\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"722135415\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"722135415\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom190y8vwhmyjdnk7cfutcm7u8haw80xyejdwxsql\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"56952126\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"56952126\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1rfh303jsl5297sxgs5txpt97lvxpjt4he3yy5r\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"54988260\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"54988260\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom12u6qgyrdsy4xmw04vfkkkh9a9tqzw66g59hudt\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"27886903\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"27886903\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1pjvkddp4fmx8ym5j7s7su8kn3zuqj255djzpja\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"4022780851\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"4022780851\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom13nrdf490fsuv4rwjp02hlyvalqjkn5u6xxqvqz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"14925385\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"14925385\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1fp9q2t9zn9gr5qjh9wljxuavtcsc4h8uqgnm2e\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"12175972\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"12175972\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1u2s32xsws9y2sskz6zvn7lawepdqxad5dcsyy6\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"330695020\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"330695020\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom158mysantvvk7x65tfhhuu8q2va4ls34r54hk78\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"9819332\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"9819332\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1clalfxmsrqdgnqq5uxlx0mc983pyp3wq4xl03c\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"4713279\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"4713279\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1wf8alywyvlxy2dqfe38efdpdmuscfpf4jxvg6r\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"4320506\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"4320506\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom13zf8kghx7h5fyttk6xdnjqn9c87z0rd36sfqjw\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"4320506\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"4320506\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1cc43k76udpd3xvpn6md76zz3ru6nvcnreeg2eq\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"3927733\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"3927733\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1l5x6kerswths5xl0d6672y9yyn9mg2vw8yz59q\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"3142186\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"3142186\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1qe4sguqg8ztlyy7psf7lzwr4ahph9j36k5hltz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"2749413\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"2749413\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1mn8ev805fde2xswght0snwfayfj9tn54dt24zg\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"2749413\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"2749413\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16vc2mjjfxx2h5m6jpdp4nqfu5095qaeeq27qxj\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"2749413\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"2749413\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1jmhqgld7luvuhh42wac24z6nlggjvkc7fzgs62\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"2356640\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"2356640\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1qjknpllzp6w6qsxxjx52zxald29wpyzljznzdv\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1571093\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1571093\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1eq2h9enjxsg5s08scr69lzwde8fl79snw20dc8\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1571093\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1571093\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1dx8mvxfu6mpfnjehvdkp9lsvu78ek2gjr7r766\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1571093\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1571093\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom19uryr2zuxcfdevfq429jng9a2evxwadlsky04c\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"198757551\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"198757551\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16862syzdtc6h0sxz92jhnjjas5yhhjgzvyewwd\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1571093\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1571093\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1teuan269feyw4ax94jfp4pcgrhqnn28gxxz8mw\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"20201178320\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"20201178320\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1yvlp9gzqaufwz02swp5wqsqhlmfcrcl8m22gzm\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200785547\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200785547\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1latzme6xf6s8tsrymuu6laf2ks2humqvfcz7m6\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"785547\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"785547\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ec9da8avgv7tnvsx3v8g8veqrhlqq26lnncg5t\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"785547\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"785547\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1c7pv6zyza76f3yhv0zvjc042e8m7w796qmvkse\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"785547\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"785547\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1yslufs9kq762qty0wh62c8qtlpm2202ejmw4ef\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"392773\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"392773\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1y935ede6znmcvqdmn6mnl2aa5zxcqvvracsczu\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"392773\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"392773\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1y675phjdvw576ahlcmlamrzr28rjht9mx709lg\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"392773\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"392773\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1kjhdx3nkh6krdhryvjzkq33xwh6wsyy7y8ark6\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"392773\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"392773\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1jxpe7neu764uasz5y5u4lrr5jtltv430gjm9dw\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"392773\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"392773\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1hq8d6pu2l6wkrwu9jxcqjcu55g8l43zxmrd6dk\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"392773\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"392773\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1c4h647a9rj8n9zye5ttmh9chpg66f3ffdvdds0\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"392773\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"392773\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom14ysuwg6p4fzfaa6tg4s3hazu86pfevsw4cegce\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"392773\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"392773\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1x7wp0u877dkw7m84jv54c9g6zpd5r8t2nm47gn\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"33812731064\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"33812731064\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1gss7y04dky2fykck4dyp0pe39wxawlxm2l0yj2\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"28704261935\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"28704261935\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1cerh237zd5rdexptjw8ryhwdf2tc9eupz7sfn0\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"20918517127\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"20918517127\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1fz799u9jc0umceng3nkjt0njxy6y3550uq06jn\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"14973655085\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"14973655085\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1wzqyjejz5px38vgqsegafrcexl3963q9dsgqh9\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"13098969682\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"13098969682\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1evz2xfd6sam0kzz5qc5lje4s90vcgyyrzz47pm\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"11323309556\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"11323309556\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1mzmzlzk4xpm6zy68c43e6hen98w07yhfedumgg\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"10780033350\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"10780033350\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom184dur4s6pldvhvcyputu6yshsm09s6wmvylt8k\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"5728639830\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"5728639830\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1gyhwacrpqwues05pkavw7xwehcqsmgruy34zps\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"564067516\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"564067516\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom19wtkh935tx2ut2n4m6tjvkfvew4shaeezfl7em\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"59855356\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"59855356\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1a2kn43nquua6gmr4n42htmjpceqj7fzushe28h\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"52853070\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"52853070\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1u74s0z4ft63c6zz7g8xs62esdtdjkzuk4zf0rt\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"42282456\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"42282456\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1d9en5u0cfaucavx848qeq4k6ywqd3z5d5a778h\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"20000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"20000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1edwwsevuywe3sx82sustvyx3f3cvjt44ugccgy\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"20000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"20000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1gcy4f6f2sc73aegd9r68rt2q6teekl6swjva3p\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"20000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"20000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1d6nkeqxmme3564wd889kr6cjed3asxqzjve0wl\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"20000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"20000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1djdfq5mn3dzm9whpznczxz77s8ep2qggc5w5xn\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"20000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"20000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1z8fyzv3mjfccvrxhckr2u3lnc0hrgrlm4zkf8c\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"20000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"20000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1tcnlvf6qhlc3x7ax2vk3vzhxhf8wy8xrnjl72d\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"20000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"20000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom17ud38eyfkd800kvw3c9kl3zpvgvj296nfszelr\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"20000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"20000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom19rtverjn8kw7dzwzch2elktxgcmak6dlqugxfw\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"20000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"20000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1mlqakhlxplhlezk80lph99wcy377j9dk2qx3gg\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"4000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"4000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ssu4wqtzvvmwcukcv7l8zxny647mdx03e0t57j\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"2001189000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"2001189000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom12reh000lje8y20wshqmgl8tg70qggt2ac7qz45\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"2000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"2000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom150svyax8m8dwljwenc8xxtsg0avud07m5frlrz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom14tjwqqyha0c9r0s29dm0n0zdpdc4hfrvn7jqsq\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1x8r0ktn36dsxsadnp3863txyd9pksrp6awcuaa\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom19lsruwa85k93ahzkdwaydyrl6ehz9dmmkava0y\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1tyzmkpn0axquu4jlht3lllsmq03um8kn5cu5pt\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom10a9mqy8cu04nyz3nj934ck39p6u9ddjt9y5fve\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1f2uslv6udnjwyqkdngc7rswp5vkmgavzgy952g\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1t7gw3d2jz4qc6k6umgkazvfyeydjv7l6nym265\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1rc2647d9nftgwwh9n5vaw26lnjdrewc4dum68g\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1zejjt25xw9gwvhave95ykkvgqjtk7j56fe9cwh\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1vesdfkzd36m08clhvkpusq4gv0dnqm28rm2hey\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ypvt8rf8md7qedvnk0p8cvd6mnffepst8f05p7\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom167hs9ma63wd02xym0vjw80uqlekt0cs54ass6v\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom17tksas9e4nkp25vgwcsd7z6y83pa6u7sddyyez\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom14thj9udwenk5q8c5ey2urude2j54xud2a26rp3\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1y7ku6vf9vq53pv4y6lw2zjn4d5ul3javm92whz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1mzn966mlprxgkvayrqu209069px0qwz7gzn799\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1cjeg60652ueyu5222l3atmm8vrhlq4tfusnswk\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom13855g4d5pfhtnqemgp700qs36qpjdnaz0dx2m5\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ueywgan39tj27pdysq0d54cqvcwyggf6eves07\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom197h938dvw52kzf2l7gke2u5tcz3grvlexeaq0y\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1pkxtd9xwmqwg08kjgz9xqyee3aw7j8upd89ah6\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom12arnsa069zhad0e40mlgy034n7aq77e2nxdven\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1m3yh7j0jefp9dl26cz8fqexfg8tds39lh957jw\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ysn8jyjv464fv4wpt40vezh7d5tw05tc9v858t\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1gh8tenvx2sf9kj2c359ey6s5k0vzlrl7z4t59z\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1svwchckmrrkfl7py7l2fz3esla7lwmalld4yr2\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1hmdjgtv3yq4qzyuk3ynyt42sjntma8hqarepjd\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1wr0mqeyea45u9av63srtvgr553nyg6l9p57ezr\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1e20dl8se4v2ev79qcay3ag7uf5t98gampz0d48\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom12c8kh7aaz2gg0l4nkd73t58nhurdaren55atua\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ftyx5guwf39fz4nc5n5nc9fua36cq344rm2d43\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom17jq8ev7n4e3zv8zdek5mccvxcgxxtkwva5vwtx\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom123wttw3lu62m7lcg23rkwr88cvv8apjmvkuj9f\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1j5wpswepyxva5vupvg05pq6jzqh7ttdvepkhp3\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1wh5gfxyz8x95qyjlc2s24h3czr60vfehwt49xa\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1z3u9w3vyq6sw7ndxcdpjkgvlj0qaqm6spc3jmp\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1pzyt3y68zcnvl7hkvuffqfedccaptf6nt2x8ya\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1pzxnpyvxr6x9z64y6w3ctv0cvcx9sp90ehj960\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1pvu65ccqw3fmgq88j2j485wc6qm96nx7h7ln4f\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1nqxwnut0hdgsn3l9zaladaft5xt9c6ex9qquza\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1njpfrygstn6r5awzp77keyhkl3wfhzmvdz2pug\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ke9xxd3d6y0ttduac062zvv3r0jtakvhkvqcjz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom15ak23s0usm36hv2e4kajhe0yx592hw474p3gkq\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1gffprg0nuvj9ve39s9rjhjp04u7k8xwan2tzff\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1yq5h0gjxuup83hdz53utukwhkkz684mk3lx7cr\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom19rfaqnnz5fy3qct8qxzany94t2p7h0rrc75lmz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom15y8g5ggq2lslncdnlcscqygyesefmjy0t4cae3\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1gfkztltd789py02jcd79dnkl252uej7x8pnx4p\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1h9k38zr5a532jzl0hsker9qz785m822zmqw974\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom18ghdg8y5hx6esxm6ndw3ywgtalvkmz48zeyc6z\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1zy3nxgwtw9hr99tzfaxasgwklm9ev843fju9zl\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1vmfs06hv80gc8jcpzu93ld4494azendxfalh2g\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1d66wegxpllcsnrzv9saqugpk2dausa836qlqaz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom15njl9exppdfms5fg4zz9wafn4a95lfj30ftx58\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1v2fzs3a8mvm4nhsfcpk85gt3d8rdacv6zggl9r\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1fm842pq6zxaqs86fm30xv459gx7hm7f0ufujvz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1rzr7gnkm3kdqmzqya7ky98m8tnnmtet58deav0\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16gtt4cmrvg2us2rgecym9zt65zet7qq2euzvdf\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1jsdfjw0pjjj5thg7z2tpm30njusrlsagtac7rs\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1z33aen2znsmgy7wwzavwh2q0u7cu4e9xhky379\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom10r2sn7sasanc0tuw5wzupxvlpht5uv267her62\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1gtma98yjsx43zc30j99t7t0tmdjt2gyp9e7g0r\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom185y3kgv3e6t4sue0a55jyq88hv76th3urnca4c\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1xc6jdlqd8gd9e6p73xdc2yw7ad3tnl8w7j4wsl\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1wdk6rndatlj8dpxq799vmu50zft7xk5768ej2v\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1uz3xp4au0rxawmct6ffj0u3le7uglyza43appc\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1uym8hd4pum4zz2mpkf93y8435u725k97e2c38p\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1u8yt9tvnwvvvlm36w97nyg27ue797hrvkz6eux\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1u4427txgc9pulkuu0wk4v9cjxqa0dxee5az972\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1epcd5upewwa7s20u6kgf9uywa2f7c3yj6zaeg0\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1tx6dnqh0nnj05uuell7rhnwhennscehlnjylxv\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ypzhtfsyuejekw0w0z207wyedqm3xqafc8nu7g\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1s4ytylknecgkp7sp3jgf2f5lj7mm2xxz0f9rl3\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1s05hsv6fxhkpclwxzgnlfjjk7qdm78nmpchj08\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom176q2gvutyk63dzknylcvdhp6lyjwu5w9fdmmev\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1e08w7wrjn05gl06xkwnlfmud5f6trdkrf0drg5\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1pzp9nadejsjzfkpfl9k7ktu2cfhprw4r7qvd5p\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1pt3a6xk432vs8lp0z6ya3qhqhxks99xe4sxxqq\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1damlfdlp8yynjvrmv6pd3t33f4currrhe4cm4z\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1cmhrs08sqv0823mj057svp8jerp6avne6xmtrc\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom19wlc6vms3qkuy48wgg2dl06veahgxl47s8859j\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1h9zrqgwcjtul3s9qxf0hk0ym9alm44ztywkfyj\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom18fudz7p6ah9yvdr4p9aflp8pgzngx84cem5lra\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1e8dsx8yx9mjn8v8egz2n5vafkymqw98wy4z6re\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom189tpr8vg4qvwn7fgs6szkqr25yrammvvlzx0zr\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1xvsukg4tltfzduw0lsvgqyrhe6rzrlp472ln92\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1w7f07762zelhx4spzkndmygh2dz58g3nn58v7q\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1808q4nv5qafkk8ec9h56wwth6sl5a5yd0elve6\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom15a8z9l8ufw8v8zdddfhesnmfzwwhua7axrmfxl\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1undz2328av9agfhaguqs8zxzejv5zqcc9grdmv\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom17vw0qcu9j8t6jhh83sjrzj07nwg9nndfcpw9g0\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1evnwfeuqsgkjwe5qwe5acyy6m4w5ch03m3e7a6\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1t5r4uhu0tscqw380t6hqmvrgyhlrj3u43vsm43\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom17kwvcuvar02ldacltr48373rm74z8lfkcq80vj\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1r7grd2sazgzsy8y0c8wlsnjyhdc0sq4npr0v4q\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1pfwja2fu2qcqvdws6rcdr9y6za46dklaxc83fh\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1p4uyyk8sc2arl4n9egw3xrn9g7rpkzlerf4nlc\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16gxdwa79rsvkjaawpcpswthgahm56p4mpu8fe9\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom13nef2p2g48kmj83m7f0ey76q6p9cdyrn03x4tz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1m9x4gg6frezyeqldxdz4dvegxpcytxnapgykwu\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1kfz37afuxfyajrzk7xv6937xc0jsq4zd0ce7dz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1kae5k3nnzs3q7tar4ec3w29w4avd8saqujpjk5\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1hjjsjgv7sx88mxfq9y44ql24xs76jj3w7y9ff8\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom130avjyegx7glgnqvraetqj6ztacrqv9kdwawkj\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom104rtaftr9xmx6dcakempk590tfxx4ytddqcj97\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1f6tmyjffs0p7f6xeh25esjhawxu2kll9j00a47\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom105c5jk0xwzlk4pexgaeqkxq0xadtqchc4lmev6\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom185tek8r0ptelug0erducctzc4d83q5np3339k5\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1z0m5tcv4jde5acv0w4dms537wvntgj7x47zmeu\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1fzkp5pux48ux72wsgls9lhxp5cq2tqsy32hfec\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1nsffk0nt927vn7pdsk8epzjeqch3yfzkzq57pl\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1e4cnw86pl73k2sfv7uwauflfl42qzncn4akyv7\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"400000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1jlu5u2sj0afddmcj7lxfy0ng466s8l2qdjz24v\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1y9tvvunr7uaqjjw8u6xn5muypq6pheyz5gygm3\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1qsm0ujra4vdwymc5vrtey2rvalyq8392h75nr4\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1jgvy2vr96auye3er6n3tkhlu9hnxs6h3a38rpp\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1jcj0w0e2khy0asm7dz8883xnepzmaxylwez7j2\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1q22fvnhna2zg2g2xm6s5587w8fvsh2zzfeey68\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1amletsu7926696dpeay8wrewqgww5s7yunjjxr\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1qkltelhy5zsr4kfrefvwsupxyt6y9skwjpd7h4\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1nfdyvvjy5hum8gpgmt29d0m5y4te3ekpfyz7pw\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1hjz37u09vws084cvwjlr5t27wmsrzm9tmfspu5\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16zykdjnfjdy5cy3phuymmcghh8x24eah2cmmpu\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom15pax03gsgw84lsygpxyyvtthd8fswrqp7wjs7m\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom124ll3q05an955eh26ygn34u5gtm9287arjrgj9\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1teyn0utv6yhnwux44ycfvqh6z888pvjaz9cz6l\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom10905rstxf5tzj0w6gguaa76ma7s32v48um4w9z\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1m7y6qezuemqe6n535z7s80ee8zw4zg486vr53u\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1pkhgpslggp3t0nrwskvgczxmavg7yejfullesx\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1zyws7rajm9f3ql6jqqpzvnml0aym9vspd7tjxk\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1pa0rcdua5v9d4vf09ksnnl7t96nfkf3w37k4dc\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1durjade4he9l23rw38azruzfttpmc8223n6r87\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16jvmfza0q60umemx2pv8s5kle2h8g9x6jj9fkq\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1gywad2frusetg26dyh83cfaevacravashyjwg6\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16kqpk5jg9e5ucxv3e003mf48yuamw4ce5ww4la\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1zr9urr3m42w7pu5h5xn7rvghcdk5vtrtmfw7wf\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1jet9jf456dja8vqlhk407l06yvfehwzuvjaynv\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1q8ajen3vu5v5uu4czkvqasqvw827dz2nqq6d0s\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom12w56mhf4nsfchquw0sgzwn72qkzvfvquxhg6dn\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom10v8qjj6haddx7wmnr65mcsllu8xunkee7zg3z5\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1hy8dexwz6ynlnnaj8ge7jvmzs4c6qmz6yh97lc\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1vpp9vy0fnxxw8yk5t2cctutpfv8pprvyhnjw90\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1w0u83ty3nmflg9846zmh28u0hweccs3fzfpx0f\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1z6lhk6u25fceqylmgv65t5py0c8kclgkszmqyx\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1zcf0ph3k4p2q2pl32zqspy5f7jkgxd5s4kcd66\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom13s4egz6pqg6a88dunme3esuee5w7qlkjttcs08\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom12w37894jf7rt2ck709rk8xa23lz3lg9tv93tlz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1sntt4y34tghn45vw97az7mz4vkcw8kgregkph7\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1pa0lcssmjkkycdvrhhzey5h94v34wuf9u4ths6\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1l9yx676futn4h28rxupsvk7evl9s68hrufetdw\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1knpgev72f2empt8j8gcn24my8kdasy2lcezjea\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1clr05sms7eklm509ger6jdzhgheafskv4wwxrg\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom186tpdptavhzz7fg83vnm4r2y85cfqyg6sntmun\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1qc4t2q45f826cfc7k0y45ma8f5qrrfv2nkly33\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1n0wkta56ktj93nzpe9amkgrzq7rhzt3gy6m8uh\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1exul86z68fzck5jra7jp8xdwvmfz5p9qyuh8um\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1melp9r22clnjzzudd0thvs5zzveqfjyl9xfw54\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1zx70t5xqc8h4kmvrssdc2w82v9ksw0r82a99av\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom17ssaukj47urfj6c8cgywyz9xhgqz3tnpy7n5kv\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1znt56em2psvx8ylfpplcmpy5esrea08g2psvxm\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1tz4yrvqlw87e74n783n0da4pttay2ypsfq6668\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1prrtyfgrw2tzj9kua5eu7tnctt474m36eygux2\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ftkw5j528j94cajk4rvqum3k7mhhmpvyc8k7yg\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1pe42d4gkg7smf9na6dvh5twq9hgczsag4elx84\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1nscf69wvc0wkgqm8ma79qv8cr6j6zq3dt0t898\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1exv982mrkyfd967xv7fam7lq8h3ce3dvcnd4s3\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom14q65nd2ft893dagpln4fq39wutv2xmpe3kc4w0\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom17llhhwjmglhhqumz72e4jap5cj39r8rwar7zzv\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom15k9z24v0thrxffetjp97493ec89zlz7re07pjj\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1y795vkzvczrauey63vmvvcjr84l3fjheqd8f38\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1qf560sekun7kjsu4r0puey5u4fn90025f4q2p2\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1v9p7ukxpw2yjk7eqm8720vkgqq5qlk7w3jqgzu\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1a57rc9cnhdn4l843ca4990aqldh5wmq0uuetzg\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1q2ajajyu0t544tudcnvk7xcznerhylz36p5vtc\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ayc0pueqve9a3xjpgwh3p4l6hjlyvfpvclvldm\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1jmdtfuxag0deeuyxmj4ge2mqhvc200hlmzyztf\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1k24kf4reet2lstvmkx9a4j0r87xfuqeqh2lprz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1e0c3ehnfzvcxvwh9fgzyfc2vqshy9w53du7hnv\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom178nsekn4qcdkqqmv95qlmp68kaqpga3zpsdnf4\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom13uz23f4stcg8esqvvc7d2w9psxv0dya5xaq5ne\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom19trgcp8uldtc5xtnpf0u7x7dk3t3jcp4y7cusm\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"1000000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"1000000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1fn4ep44ud3edyh304ta38f55xd6pxswsw9e23z\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom143dfs4ur5gjvwgx8l54jjz27rq57us0zz3hqj0\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1e3je4h3vkxywt2sf7mudelhf6zrx405yfgczkf\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom180upuj8yp0326px2uys9r60xrlhpsa6fwryf80\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1jdypscylf6hjlrlva03tx5vqqkcdnllg6rpza7\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1r85972mwrka5w9ct6km58ww9jl9sh46fx559fu\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1xz2dkqrnrvq0ezc0vxtcvhwy39xr63vxzfedsr\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom134llrhdus60n7853fn3ulmx6uy7evsx3ltzstt\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1pv5clfxxfpqvuerquue2vgr2ndgh0h50jx898c\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom107v45crxqedhmf4yqa9y98v99wm2078fwtklsq\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1959r3zp37k9yuz8kjtc4feayyfkkxpcv43mu0w\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1qh6eavdzp5ffks2rvd5mjt3rdmjxg3qm5l4pw2\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1lk7m28npegzy0sz5s06sy95n27yzrj4d3rytdg\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1clk49u6rvv8c40udn9qgp0s8hv5uvfcgxqptky\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1gws6ulm3u23txc6p8kv6ew6e2zn45udrwjkdqm\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom17rg7cldfsqfmv53n6r7qmjmcge7ucxx2hhum0q\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1kkwwsk0v4h7tmccr4sdmpyl2j2gvfah6jzw7n8\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ggh3zff5paq5c3r2j34mquq9lrcc7s0nvfnuwz\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1gp5s4tetnk7ng49g58uhn2znfpmgs4cfdq4ns3\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ejkkddkuw63zn557l0lvqq3gmjcra53ealmy2x\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1jrp04lvvpzkyylr4l7e5xp256l9yd4hdhrpmls\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom14c8rllqzmgyrkt8aeyanprl7g3adrlc2flq57a\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1j39uxls4clq76ej7mk2tdskvql2tdp2zek8g89\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1qcy673rd8a27t48ry6evmv6as7fuetd8cyhnjn\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom12d3klseftxsfs5xmvjju339enk8xcvg5y55qvl\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom148g7gmqvw5gfj7dmpjymtsw3j7gvasflqrsyx5\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1eur22ds9gn06lgg9j3raqlzj8j2qzxx6vuje4x\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1809klqrjjrs8ch2gtf5hmmfhysspkrr894rmhm\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1f9nx8jrlx9pvns70edanu37mxtm359k606qyds\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1qgkdm2asr0qey7jafqyqlnarvgndjws23fpkrh\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1r5gvlzt03a0a9rks3s57cppmfqx2lzjrquh3d0\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1yaastlp99jvqta2x5fngdzw6zur7khctd9gk3x\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom14jhjmhm2xmx6wyefju30auqvrs35hmnn2m8ewl\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom10pqp6py9pqtagyde9tnkkvakg3gqsnq7lgzxnp\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1spndx95pckqnmjss6emff6fyylasg66qzdfv6v\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom17qkfq2uwags5pzplrfqg2elhn9s0pfwja4mgeu\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom194097avwy9a6h0cvznev232z28h96rp2q3w3uc\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1l8hx9jxul439uyjve4zn45nujtx9gmrw3za3vs\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom12zmexhujvw7j82la9uslzfl5g29erpysqt555s\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom12vexhfe4m9p9szsqvzsalssf8sxluj6pqx8gr3\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ukgaegxryydqckt6fgrt60dajxq758x9pntmhh\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1756xr3jtsdve6vuwqgqdtmt6ws3td49gq7vc77\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1fn5cutfgat9s9z6nz5ucnnq9aec82wvqpevsn5\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1e63p9zdn5xks5ge9gj2y9gfkl5u0jgkvfrnhzl\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1zq9f4eczclr5cexrxdusfxxr6eumn2rlg2h4hs\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1sjtl9n7fqszta6p4w5y5yl7d4xqth26d8z2gjj\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1a4krl6m7jg7ckczk94hh0wdlcezvpgwcwkrpcg\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom17lzmvgnahdncwnsx3dr7mss65qv6l9md2hy2qq\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1pljwxmmkhfrkzkdpmdjv29t6959sa77mjt0xz4\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1t9xfg2kurjlvnw86repcpte3shpgasdjge6a7t\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1erxn6kmz3xhfrv40m7lyp88v43qahqn8fy2xhn\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1k879z65mwwwu4jause7galz0hlsqqj4rtah7r6\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom16dsvdl4jer9jyplelgz4x68hjvg5k647nrnc8z\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom12pafl09rqzcw7d77qs63pg2nlsgvc3dsfxyzum\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom15cq4l7d6v43rtv493cps3c7tpsf26d83pseqwn\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1wrtzl04mxs2en94ysc5p8mvqc5p0culr9w9m0n\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1a2zr8qx60sl3srh982hjduse0l7pdcnhtl7juy\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1r82whjffalh2hgmrayywc9g53es96n9e9893yv\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom15884n6qmrwq8gjuwtqh6q8z7vx500n5s3djcv6\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1nhkl9r84zjucmjswhddwq8zgpun5yks5mjk7xc\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom12cq4xxcr6pmjz320aj7j8pn9l8vjeed63slcz5\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1fwx3u5w8qyzp8msv2n9umajgst86dnuqrsft0g\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1zg3xqymyrvlu5fmmyx8htdm84kqt50t7xdfmuj\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom152xtf7tvw60tyhls32wwc9ypehqzf366zjkeeg\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1uspnj6pvq0u78d8qux8lz6p24dzm998phldqgv\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1ppzvqc7yf9lfs8cljqu6w992gct6d5h9jx5wsn\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1jn8cp663fl0mv6k55xvy2lr6s0r57zg0v6gzr3\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1fmpuldfmgj0a4dlkn0cdlap4h3qs7nljyph4rj\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom10mja0qpcq6ze2nrchhh7w3n7g589sdktfu7p9m\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                },\n                {\n                    \"address\": \"bostrom1kaaxhzud2ev7v69kwkf8vuvhst9a36wz5l424q\",\n                    \"coins\": [\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"boot\"\n                        },\n                        {\n                            \"amount\": \"200000000\",\n                            \"denom\": \"tocyb\"\n                        }\n                    ]\n                }\n            ],\n            \"supply\": [\n                {\n                    \"amount\": \"1000000000000000\",\n                    \"denom\": \"boot\"\n                },\n                {\n                    \"amount\": \"1000000000000000\",\n                    \"denom\": \"tocyb\"\n                }\n            ],\n            \"denom_metadata\": [\n                {\n                    \"description\": \"The staking token of Bostrom\",\n                    \"base\": \"boot\",\n                    \"display\": \"boot\",\n                    \"name\": \"Bostrom Boot\",\n                    \"symbol\": \"BOOT\",\n                    \"denom_units\": [\n                        {\n                            \"denom\": \"boot\",\n                            \"exponent\": 0,\n                            \"aliases\": [\n                                \"BOOT\"\n                            ]\n                        }\n                    ]\n                },\n                {\n                    \"description\": \"The liquid staking token of Bostrom\",\n                    \"base\": \"hydrogen\",\n                    \"display\": \"hydrogen\",\n                    \"name\": \"Bostrom Hydrogen\",\n                    \"symbol\": \"HYDROGEN\",\n                    \"denom_units\": [\n                        {\n                            \"denom\": \"hydrogen\",\n                            \"exponent\": 0,\n                            \"aliases\": [\n                                \"HYDROGEN\"\n                            ]\n                        }\n                    ]\n                },\n                {\n                    \"description\": \"The power token of Bostrom\",\n                    \"base\": \"milliampere\",\n                    \"display\": \"ampere\",\n                    \"name\": \"Bostrom Ampere\",\n                    \"symbol\": \"AMPERE\",\n                    \"denom_units\": [\n                        {\n                            \"denom\": \"milliampere\",\n                            \"exponent\": 0,\n                            \"aliases\": []\n                        },\n                        {\n                            \"denom\": \"ampere\",\n                            \"exponent\": 3,\n                            \"aliases\": [\n                                \"AMPERE\"\n                            ]\n                        }\n                    ]\n                },\n                {\n                    \"description\": \"The bandwidth token of Bostrom\",\n                    \"base\": \"millivolt\",\n                    \"display\": \"volt\",\n                    \"name\": \"Bostrom Volt\",\n                    \"symbol\": \"VOLT\",\n                    \"denom_units\": [\n                        {\n                            \"denom\": \"millivolt\",\n                            \"exponent\": 0,\n                            \"aliases\": []\n                        },\n                        {\n                            \"denom\": \"volt\",\n                            \"exponent\": 3,\n                            \"aliases\": [\n                                \"VOLT\"\n                            ]\n                        }\n                    ]\n                }\n            ]\n        },\n        \"capability\": {\n            \"index\": \"1\",\n            \"owners\": []\n        },\n        \"crisis\": {\n            \"constant_fee\": {\n                \"denom\": \"boot\",\n                \"amount\": \"10000000\"\n            }\n        },\n        \"cyberbank\": null,\n        \"distribution\": {\n            \"params\": {\n                \"community_tax\": \"0.000000000000000000\",\n                \"base_proposer_reward\": \"0.010000000000000000\",\n                \"bonus_proposer_reward\": \"0.030000000000000000\",\n                \"withdraw_addr_enabled\": true\n            },\n            \"fee_pool\": {\n                \"community_pool\": [\n                    {\n                        \"amount\": \"50726497621325\",\n                        \"denom\": \"boot\"\n                    },\n                    {\n                        \"amount\": \"50726497621325\",\n                        \"denom\": \"tocyb\"\n                    }\n                ]\n            },\n            \"delegator_withdraw_infos\": [],\n            \"previous_proposer\": \"\",\n            \"outstanding_rewards\": [],\n            \"validator_accumulated_commissions\": [],\n            \"validator_historical_rewards\": [],\n            \"validator_current_rewards\": [],\n            \"delegator_starting_infos\": [],\n            \"validator_slash_events\": []\n        },\n        \"dmn\": {\n            \"params\": {\n                \"max_slots\": 4,\n                \"max_gas\": 2500000,\n                \"fee_ttl\": 50\n            }\n        },\n        \"evidence\": {\n            \"evidence\": []\n        },\n        \"feegrant\": {\n            \"allowances\": []\n        },\n        \"genutil\": {\n            \"gen_txs\": []\n        },\n        \"gov\": {\n            \"starting_proposal_id\": \"1\",\n            \"deposits\": [],\n            \"votes\": [],\n            \"proposals\": [],\n            \"deposit_params\": {\n                \"min_deposit\": [\n                    {\n                        \"denom\": \"boot\",\n                        \"amount\": \"1000000000\"\n                    }\n                ],\n                \"max_deposit_period\": \"604800s\"\n            },\n            \"voting_params\": {\n                \"voting_period\": \"604800s\"\n            },\n            \"tally_params\": {\n                \"quorum\": \"0.250000000000000000\",\n                \"threshold\": \"0.500000000000000000\",\n                \"veto_threshold\": \"0.250000000000000000\"\n            }\n        },\n        \"graph\": null,\n        \"grid\": {\n            \"params\": {\n                \"max_routes\": 16\n            },\n            \"routes\": []\n        },\n        \"ibc\": {\n            \"client_genesis\": {\n                \"clients\": [],\n                \"clients_consensus\": [],\n                \"clients_metadata\": [],\n                \"params\": {\n                    \"allowed_clients\": [\n                        \"06-solomachine\",\n                        \"07-tendermint\"\n                    ]\n                },\n                \"create_localhost\": false,\n                \"next_client_sequence\": \"0\"\n            },\n            \"connection_genesis\": {\n                \"connections\": [],\n                \"client_connection_paths\": [],\n                \"next_connection_sequence\": \"0\",\n                \"params\": {\n                    \"max_expected_time_per_block\": \"30000000000\"\n                }\n            },\n            \"channel_genesis\": {\n                \"channels\": [],\n                \"acknowledgements\": [],\n                \"commitments\": [],\n                \"receipts\": [],\n                \"send_sequences\": [],\n                \"recv_sequences\": [],\n                \"ack_sequences\": [],\n                \"next_channel_sequence\": \"0\"\n            }\n        },\n        \"liquidity\": {\n            \"params\": {\n                \"pool_types\": [\n                    {\n                        \"id\": 1,\n                        \"name\": \"StandardLiquidityPool\",\n                        \"min_reserve_coin_num\": 2,\n                        \"max_reserve_coin_num\": 2,\n                        \"description\": \"Standard liquidity pool with pool price function X/Y, ESPM constraint, and two kinds of reserve coins\"\n                    }\n                ],\n                \"min_init_deposit_amount\": \"1000000\",\n                \"init_pool_coin_mint_amount\": \"1000000000000\",\n                \"max_reserve_coin_amount\": \"0\",\n                \"pool_creation_fee\": [\n                    {\n                        \"denom\": \"boot\",\n                        \"amount\": \"1000000000\"\n                    }\n                ],\n                \"swap_fee_rate\": \"0.003000000000000000\",\n                \"withdraw_fee_rate\": \"0.003000000000000000\",\n                \"max_order_amount_ratio\": \"0.100000000000000000\",\n                \"unit_batch_height\": 1,\n                \"circuit_breaker_enabled\": false\n            },\n            \"pool_records\": []\n        },\n        \"mint\": {\n            \"minter\": {\n                \"inflation\": \"0.050000000000000000\",\n                \"annual_provisions\": \"0.000000000000000000\"\n            },\n            \"params\": {\n                \"mint_denom\": \"boot\",\n                \"inflation_rate_change\": \"0.200000000000000000\",\n                \"inflation_max\": \"0.150000000000000000\",\n                \"inflation_min\": \"0.030000000000000000\",\n                \"goal_bonded\": \"0.800000000000000000\",\n                \"blocks_per_year\": \"6311520\"\n            }\n        },\n        \"params\": null,\n        \"rank\": {\n            \"params\": {\n                \"calculation_period\": \"5\",\n                \"damping_factor\": \"0.800000000000000000\",\n                \"tolerance\": \"0.001000000000000000\"\n            }\n        },\n        \"resources\": {\n            \"params\": {\n                \"max_slots\": 8,\n                \"halving_period_volt_blocks\": 9000000,\n                \"halving_period_ampere_blocks\": 9000000,\n                \"base_investmint_period_volt\": 2592000,\n                \"base_investmint_period_ampere\": 2592000,\n                \"min_investmint_period\": 86400,\n                \"base_investmint_amount_volt\": {\n                    \"denom\": \"hydrogen\",\n                    \"amount\": \"1000000000\"\n                },\n                \"base_investmint_amount_ampere\": {\n                    \"denom\": \"hydrogen\",\n                    \"amount\": \"100000000\"\n                }\n            }\n        },\n        \"slashing\": {\n            \"params\": {\n                \"signed_blocks_window\": \"8000\",\n                \"min_signed_per_window\": \"0.750000000000000000\",\n                \"downtime_jail_duration\": \"600s\",\n                \"slash_fraction_double_sign\": \"0.050000000000000000\",\n                \"slash_fraction_downtime\": \"0.000100000000000000\"\n            },\n            \"signing_infos\": [],\n            \"missed_blocks\": []\n        },\n        \"staking\": {\n            \"params\": {\n                \"unbonding_time\": \"345600s\",\n                \"max_validators\": 92,\n                \"max_entries\": 10,\n                \"historical_entries\": 10000,\n                \"bond_denom\": \"boot\"\n            },\n            \"last_total_power\": \"0\",\n            \"last_validator_powers\": [],\n            \"validators\": [],\n            \"delegations\": [],\n            \"unbonding_delegations\": [],\n            \"redelegations\": [],\n            \"exported\": false\n        },\n        \"transfer\": {\n            \"port_id\": \"transfer\",\n            \"denom_traces\": [],\n            \"params\": {\n                \"send_enabled\": false,\n                \"receive_enabled\": false\n            }\n        },\n        \"upgrade\": {},\n        \"vesting\": {},\n        \"wasm\": {\n            \"params\": {\n                \"code_upload_access\": {\n                    \"permission\": \"Everybody\",\n                    \"address\": \"\"\n                },\n                \"instantiate_default_permission\": \"Everybody\",\n                \"max_wasm_code_size\": \"1228800\"\n            },\n            \"codes\": [],\n            \"contracts\": [],\n            \"sequences\": [],\n            \"gen_msgs\": []\n        }\n    }\n}"
  },
  {
    "path": "networks/bostrom/v3-upgrade-guide.md",
    "content": "# How to prepare your node for v3 upgrade\n\nThis guide includes all the steps you need to get ready for the `v3` upgrade in Bostrom.\n\nHereby we assume that you run your node in docker with the cyber [\"official\"](https://hub.docker.com/layers/cyber/cyberd/cyber/bostrom-1/images/sha256-6383de3e4562690907b0dbb99b752f53ef2d41f44a7d452a903d24397e49911b?context=explore) image, otherwise, this guide will not suit you.\n\n## Step 1: Pull a new docker image\n\nThe new cyber binary is wrapped in the new docker image, so we have to pull it first:\n\n```js\ndocker pull cyberd/bostrom:v3.0.0-cuda11.4\n```\n\nIt may take a few minutes. When complete, check that you have it:\n\n```js\ndocker images\n```\n\n## Step 2: Replace the docker image for the Bostrom container\n\n*At this stage you will have to operate quickly to reduce your node downtime, so please read all the sub-steps first!*\n\nStop your docker container with Bostrom:\n\n```js\ndocker stop bostrom\n```\n\nRemove Bostrom container (do not worry, files will stay intact):\n\n```js\ndocker rm bostrom\n```\n\nCreate Bostrom container from new image (note: if you have custom ports set, please adjust accordingly):\n\n```sh\ndocker run -d --gpus all --name=bostrom --restart always -p 26656:26656 -p 26657:26657 -p 1317:1317 -e ALLOW_SEARCH=true -v $HOME/.cyber:/root/.cyber  cyberd/bostrom:v3.0.0-cuda11.4\n```\n\nCheck logs. Block production should be restored after startup:\n\n```sh\ndocker logs bostrom -f --tail 20 \n```\n\n## Step 3: Verify that everything is OK\n\nAfter the container launch, the new cyber binary should appear inside the `$HOME/.cyber/cosmovisor/` folder. Check that you have a similar folder layout:\n\n```sh\ncd $HOME/.cyber/cosmovisor/\ntree\n```\n\nYou should have a similar layout of files and folders:\n\n```sh\nroot@node:~/.cyber/cosmovisor# tree\n.\n├── current -> /root/.cyber/cosmovisor/upgrades/cyberfrey\n├── genesis\n│   └── bin\n│       └── cyber\n└── upgrades\n    ├── cyberfrey\n    │   ├── bin\n    │   │   └── cyber\n    │   └── upgrade-info.json\n    └── v3\n        └── bin\n            └── cyber\n```\n\n## You are done! What's next?\n\nNow is a good time to go and vote for prop #41. If you haven't done this yet, report that you have completed preparation for the upgrade in our [Hall of Fame](https://t.me/fameofcyber) and chill until the upgrade block 13078000, which should come around 12:00am UTC Wednesday 17.04.2024 ([ping.pub timer](https://ping.pub/bostrom/block/13078000)).\n\nWhat will happen at the block 13078000:\n\n- the chain will halt with the message `CONSENSUS FAILURE!!! err=\"UPGRADE \\\"v3\\\" NEEDED at height: 13078000:`\n- Cosmovisor inside the container will catch this event and change symlink inside `.cyber/cosmovisor/` folder\n- node will start and as soon as 66%+ of voting power is online, blocks will resume\n\n## Crisis protocol\n\nThe process of upgrading should go pretty smoothly and should not require any direct action, but in case something goes wrong, cyber devs may consider certain ways to recover. Simply check your node at the time of the upgrade and consult the [Hall of Fame](https://t.me/fameofcyber) chat for possible coordination.\n"
  },
  {
    "path": "networks/bostrom/v4-upgrade-guide.md",
    "content": "# How to prepare your node for v4 upgrade\n\nThis guide describes all the steps you need to get ready for the `v4` upgrade in Bostrom.\n\nHereby we assume that you run your node in docker with the cyber [\"official\"](https://hub.docker.com/layers/cyber/cyberd/cyber/bostrom-1/images/sha256-6383de3e4562690907b0dbb99b752f53ef2d41f44a7d452a903d24397e49911b?context=explore) image, otherwise, this guide will not suit you.\n\n## Step 1: Pull a new docker image & prepare\n\nThe new cyber binary is wrapped in the new docker image, so we have to pull it first:\n\n```js\ndocker pull cyberd/bostrom:v4.0.0-cuda11.4\n```\n\nIt may take a few minutes. When complete, check that you have it:\n\n```js\ndocker images\n```\n\nMake sure that in `config/app.toml` you have  `minimum-gas-prices` valuet set: \n\n```bash\n minimum-gas-prices = \"0boot\"\n ```\n\n## Step 2: Replace the docker image for the Bostrom container\n\n*At this stage you will have to operate quickly to reduce your node downtime, so please read all the sub-steps first!*\n\nStop your docker container with Bostrom:\n\n```js\ndocker stop bostrom\n```\n\nRemove Bostrom container (do not worry, files will stay intact):\n\n```js\ndocker rm bostrom\n```\n\nCreate Bostrom container from new image (note: if you have custom ports set, please adjust accordingly):\n\n```sh\ndocker run -d --gpus all --name=bostrom --restart always -p 26656:26656 -p 26657:26657 -p 1317:1317 -e ALLOW_SEARCH=true -v $HOME/.cyber:/root/.cyber  cyberd/bostrom:v4.0.0-cuda11.4\n```\n\nCheck logs. Block production should be restored after startup:\n\n```sh\ndocker logs bostrom -f --tail 20 \n```\n\n## Step 3: Verify that everything is OK\n\nAfter the container launch, the new cyber binary should appear inside the `$HOME/.cyber/cosmovisor/` folder. Check that you have a similar folder layout:\n\n```sh\ncd $HOME/.cyber/cosmovisor/\ntree\n```\n\nYou should have a similar layout of files and folders:\n\n```sh\nroot@node:~/.cyber/cosmovisor# tree\n.\n├── current -> /root/.cyber/cosmovisor/upgrades/v3\n├── genesis\n│   └── bin\n│       └── cyber\n└── upgrades\n    ├── cyber\n    ├── cyberfrey\n    │   ├── bin\n    │   │   └── cyber\n    │   ├── cyber\n    │   └── upgrade-info.json\n    ├── v3\n    │   ├── bin\n    │   │   └── cyber\n    │   └── upgrade-info.json\n    └── v4\n        └── bin\n            └── cyber\n\n```\n\n## You are done! What's next?\n\nNow is a good time to go and vote for prop [#45](https://cyb.ai/senate/45). If you haven't done this yet, report that you have completed preparation for the upgrade in our [Hall of Fame](https://t.me/fameofcyber) and chill until the upgrade block 15515000, which should come around ~9:00am UTC Friday 04.10.2024 ([ping.pub timer](https://ping.pub/bostrom/block/15515000)).\n\nWhat will happen at the block 15515000:\n\n- the chain will halt with the message `CONSENSUS FAILURE!!! err=\"UPGRADE \\\"v4\\\" NEEDED at height: 15515000:`\n- Cosmovisor inside the container will catch this event and change symlink inside `.cyber/cosmovisor/` folder\n- node will start and as soon as 66%+ of voting power is online, blocks will resume\n\n## Crisis protocol\n\nThe process of upgrading should go pretty smoothly and should not require any direct action, but in case something goes wrong, cyber devs may consider certain ways to recover. Simply check your node at the time of the upgrade and consult the [Hall of Fame](https://t.me/fameofcyber) chat for possible coordination.\n\n## Note: Keys format upgrade\n\nIn the v4 release cyber is being updated to the cometbft consensus engine, which leads to keystore migration to the cometbft compatible version. That will mean that after the upgrade and first signed TX using the new version of CLI, the keystore would be migrated and no longer compatible with the old CLI versions. Everything would work smoothly if you use `docker exec -ti bostrom cyber tx ...` for transaction casting, however, if you have CLI installed separately - make sure to upgrade it as well to [v4.0.0](https://github.com/cybercongress/go-cyber/releases/tag/v4.0.0).\n"
  },
  {
    "path": "networks/space-pussy/deploy_node_from_snapshot.md",
    "content": "# Deploy bostrom node from snapshot\n\n## Download snapshot\nFirst, go to [Cyber Snapshot Robot](https://cyb.ai/network/bostrom/contract/bostrom137p3ll78yrlw3gtfltgwhdkz0qxke4z6mt9qe6) page\n\nLatest post will show you available snapsot:\n![](https://ipfs.io/ipfs/QmWjcgseTj5GmGSC8z1X6wzD5Eh1wQv1RfBfChmafqcwvm)\n\n\nСlick on the link with the block and you will see two results:\n![](https://ipfs.io/ipfs/QmQvZegg39JnQ5EESgA3t9seCYSAF7nZyDZGRo1iUXLemi)\n\nWe typicaly store only latest snashot, older might be available only in IPFS if someone stored them.\n\nThe first one is a hash of the current snapshot that can be downloaded directly from ipfs (to use this way, you need an ipfs [client](https://docs.ipfs.tech/install/command-line/) installed)\n\n```\nipfs get <insert the hash here> --output bostrom_pruned.tar.gz\n```\nThe second hash contains url that can be downloaded directly:\n\n```\nwget https://link_from_above\n```\n\n## Unpack snapshot\n\nSingle thread:\n\n```\ntar -xvzf bostrom_pruned_<snap_block>.tar.gz\n```\n\nMultiple threads (much faster and require pigz installation):\n\n```\napt install pigz  \n```\n```\ntar -I pigz -xf bostrom_pruned_<snap_block>.tar.gz -C ./\n```\n\n## Stop Cyber\n\n```\ndocker stop bostrom\n```\n\n## Remove old data from home directory\n\n**Dont forget to use correct path if your node is not in $HOME of your user.**\n\n```\nrm -rf ~/.cyber/data ~/.cyber/wasm\n```\n\n## Move unpacked folders into home directory\n\n```\ncd bostrom_pruned_<snap_block>  \n```\n```\nmv data/ ~/.cyber/  \n```\n```\nmv wasm/ ~/.cyber/\n```\n\n## Set up your pruning strategy to everything\n\nTo save the space ont the disk consumed by the node set pruning to everything (lightest one) and set snapshot-interval to 0 in `.cyber/config/app.toml`:\n\n```\npruning = \"everything\"  \n```\n```\nsnapshot-interval = 0\n```\n\n## Start Cyber container and check logs\n\n```\ndocker start bostrom  \n```\n```\ndocker logs bostrom -f --tail 10\n```\nYou will see node started sync from the snapshot block.\n\n## When done dont forget to remove folder and archive to save some space\n\n```\nrm -rf bostrom_pruned_<snap_block> bostrom_pruned_<snap_block>.tar.gz\n```\n"
  },
  {
    "path": "networks/space-pussy/genesis-validator.md",
    "content": "# Setting up space-pussy Genesis Validator\n\nThis guide will provide detailed instructions on how to submit gentx for the Space-pussy chain!\n\nThe primary point of communication for the whole gentx and lauch ceremonies will be our [Cyber Hall of Fame](https://t.me/fameofcyber) telegram chat.\n\nSome important notices about joining the genesis validator set: \n\n1. **GenTx must be submited by 17:00 UTC 3rd October**\n2. We recommend only highly experienced validators who have run on past Cosmos SDK chains and have participated in a genesis ceremony before become genesis validators on Cyber.\n3. Being a Genesis validator for a Supercomputer is an honor, so we expect all participants to treat this opportunity accordingly. We want our validators to be pro-active, maintain good uptime, communicate and act professionally during chain upgrades, and respectfully participate in governance.\n4. To become a Genesis validator, you must have pussy tokens on your account in Genesis. \n\n\n## Hardware setup\n\nRecommended hardware setup stays the same as it was for the Bostrom:\n\n```js\nCPU: 6 cores\nRAM: 32 GB\nSSD: 1 TB\nConnection: 50+Mbps, Stable and low-latency connection\nGPU: Nvidia GeForce (or Tesla/Titan/Quadro) with CUDA-cores; 4+ Gb of video memory*\nSoftware: Ubuntu 18.04 LTS / 20.04 LTS\n```\n\nThe blockchain is always growing. Therefore, in the future, hardware requirements might increase.\nAlso, the specs above are not mandatory and may differ, but it always implies that the node might be powerful and reliable.\n\n## Instructions\n\nAll instructions provided are for the Ubuntu 20.04 system and may vary for other versions\\OS.\n\n### Install GO 1.17+\n\nCyber is written in `go`, and we'll need the version 1.17+ to compile it. \n\nCheck which version you currently have with \n\n```bash\ngo version\n``` \n\nIf you need to update or install 'go' we'd recommend to use the handy go version manager called [g](https://github.com/stefanmaric/g). To install 'go' with it use: \n\n```bash\ncurl -sSL https://git.io/g-install | sh -s\nsource ~/.bashrc\n```\n\nAgree to install latest version, or manually install specific version: \n\n```bash\ng install 1.19.1\ng set 1.19.1\ngo version\n```\nYou might see something like that: \n\n```bash\ngo version go1.19.1 linux/amd64\n```\n\n### Install pussy\n\nDownload source files from github: \n\n```bash\ngit clone https://github.com/joinresistance/space-pussy.git\ncd space-pussy\n```\n\nThen install `pussy` daemon.  Running the following command will install the executable pussy to your GOPATH: \n\n```bash\nmake install CUDA_ENABLED=false\n```\n\nIf your `pussy` version does not match - please verify that you dont have any other daemons laying somewhere else in `/usr/local/bin`.\n\n### Initialize your node\n\nBefore you proceed verify that you don't have any old\\test nodes initialized in that machine, check and remove folders inside `~/.pussy/`. If you have the testnet node running, stop it and remove `~/.pussy/` folder (do not forget to backup your seeds before you remove anything):\n\n```bash\nls -la ~/\nrm -rf .pussy/\n```\n\nThen run the following to init fresh one(replace <your_node_moniker> with something, for example `web2_destroyer`): \n\n```bash\npussy init <your_node_moniker>\n```\n\nThis will create a new `.pussy` folder in your HOME directory.\n\n### Download Pre-genesis File\n\nYou can now download the \"pregenesis\" file for the chain.  This is a genesis file with the chain-id and all balances.\n\n```sh\ncd $HOME/.pussy/config/\nwget -O $HOME/.pussy/config/genesis.json  https://raw.githubusercontent.com/joinresistance/networks/main/space-pussy/unsigned-genesis.json\n```\n\n### Import Validator Key\n\nTo create a gentx, you will need the private key to an address that has some tokens in Genesis.\n\nThere are a couple options for how to import a key into `pussy`.\n\nYou can import such a key into via a mnemonic or add one from the Ledger.\n\n```bash\npussy keys add <your_key_name> --recover\n```\n\nYou could use your **ledger** device with the Cosmos app installed on it to sign transactions. Add address from Ledger:\n\n```bash\npussy keys add <your_key_name> --ledger\n```\n\n**<your_key_name>** is any name you pick to represent this key pair.\nYou have to refer to that name later when you use cli to sign transactions.\n\n*Note* \n\nIf you got an error saying \n\n```js\nError: No such interface “org.freedesktop.DBus.Properties” on object at path /\n```\n during key import, please use file keyring with all cli key commands:\n\n ```bash\n pussy keys add <your_key_name> --recover --keyring-backend file\n ```\n\n### Create GenTx\n\nNow that you have your key imported you are able to use it to create your gentx.\n\nTo create the Genesis transaction, you will have to choose the following parameters for your validator:\n\n- moniker\n- commission-rate\n- commission-max-rate\n- commission-max-change-rate\n- min-self-delegation (must be >10000pussy)\n- website (optional)\n- details (optional)\n- identity (keybase key hash, this is used to get validator logos in block explorers. optional)\n- pubkey (will be pulled automatically)\n\nNote that your gentx will be rejected if you use an amount greater than what you have on you balance in Genesis.\n\nAn example Genesis command would look like this:\n\n```bash\npussy gentx <your_key_name> 1000000000000pussy \\\n  --min-self-delegation \"1000000000\" \\\n  --pubkey=$(pussy tendermint show-validator) \\\n  --moniker=<your_validator_nickname> \\\n  --commission-rate=\"0.05\" \\\n  --commission-max-rate=\"0.10\" \\\n  --commission-max-change-rate=\"0.01\" \\\n  --chain-id=space-pussy \n```\n\n*add `--keyring-backend file` if you used it during key import.*\n\n\nOutput will look similar to this:\n\n```sh\nGenesis transaction written to \"/root/.pussy/config/gentx/gentx-445e04520cef1116faab9900e2edadcb8164477c.json\"\n```\nFile content must look similar to this [sample-gentx](https://github.com/joinresistance/networks/blob/main/space-pussy/gentxs/gentx-SAMPLE.json)\n\n### Submit Your GenTx\n\nTo submit your GenTx for inclusion in the chain, please upload it to the [[github.com/joinresistance/networks](https://github.com/joinresistance/networks)](https://github.com/joinresistance/networks/blob/main/space-pussy/gentxs) repo by `18:00 UTC 3rd October`.\n\nTo upload the your Genesis file, please follow these steps:\n\n1. Rename the gentx file located in your `$HOME/.pussy/config/gentx/` to gentx-{your-moniker}.json (please do not put any spaces or special characters in the file name)\n2. Fork this repo by going to https://github.com/joinresistance/networks, clicking on fork, and choose your account (if multiple).\n3. Clone your copy of the fork to your local machine\n```sh\ngit clone https://github.com/<your_github_username>/networks\n```\n4. Copy the gentx to the networks repo (ensure that it is in the correct folder)\n\n```sh\ncp ~/.pussy/config/gentx/gentx-<your-moniker>.json networks/space-pussy/gentxs/\n```\n\n5. Commit and push to your repo.\n \n```sh\ncd networks\ngit add space-pussy/gentxs/*\ngit commit -m \"<your validator moniker> gentx\"\ngit push origin master\n```\n\n6. Create a pull request from your fork to master on this repo.\n7. Let us know in [Cyber Hall of Fame](https://t.me/fameofcyber) when you've completed this process!\n8. Stay tuned, further steps will be provided soon! \n\n### Back-up validator keys (!)\n\nYour identity as validator consists of two things: \n\n- your account (to sign transactions)\n- your validator private key (to sign stuff on the chain consensus layer)\n\nPlease back up `$HOME/.pussy/config/priv_validator_key.json` along with your seed phrase. In case of occasional folder loss you would be able to restore you validator.\n\nThose things should not be changed, otherwise, your validator won't start on Genesis. \n\n\n## Prepare node for chain start\n\nOk, so here is it, the final genesis for the space-pussy `TBA`. Now only a few steps left to finalize the validator node setup for space-pussy launch:\n\n- Clear out old containers\n- Download final genesis, and place it to working directory `$HOME/.cyber`\n- Pull and deploy new Docker container\n- Configure persistent peers, seeds, and some other stuff from `config.toml`\n- Verify the correctness of the keys and files on the node\n\n\n### Obtain signed genesis file\n\nHereby we mean that you already have your pussy node initialized in $HOME directory.\n\nRemove pre-genesis from .pussy:\n\n```bash\nrm $HOME/.pussy/config/genesis.json\n```\n\nDownload genesis file for space-pussy:\n\n```bash\nwget -O $HOME/.pussy/config/genesis.json https://gateway.ipfs.cybernode.ai/ipfs/TBA\n```\n\nAlso, it is **required** to remove old chain data and reset the home directory to state of signed genesis:\n\n```bash\npussy tendermint unsafe-reset-all --home $HOME/.pussy/\n```\n\n### Deploy docker container\n\nTo pull and deploy docker container for the `space-pussy` chain use the following command:\n\n```bash\ndocker run -d --gpus all --name=space-pussy --restart always -p 26656:26656 -p 26657:26657 -p 1317:1317 -e ALLOW_SEARCH=true -e COMPUTE_GPU=true -v $HOME/.pussy:/root/.pussy  cyberd/space-pussy:v0.0.1-cuda11.4\n```\n\n\n### Setup config.toml\n\nAdd correct seeds and persistent peers nodes. You may find some [here](https://github.com/joinresistance/networks/blob/main/space-pussy/peers.md)\nInsert them into lines 185 and 188 of $HOME/.pussy/config/config.toml:\n\n```bash\nnano $HOME/.pussy/config/config.toml\n```\n\n```bash\n# Comma separated list of seed nodes to connect to\nseeds = \"\"\n\n# Comma separated list of nodes to keep persistent connections to\npersistent_peers = \"\"\n```\n\nFor better network stability please update your `.pussy/config/config.toml` lines as follows: \n\n```\naddr_book_strict = false\n\nmax_num_inbound_peers = 100\n\nmax_num_outbound_peers = 80\n\npersistent_peers_max_dial_period = \"500s\"\n\n```\n\n## Launch\n\nWhen all above are checked and completed please go ahead and restart the container:\n\n```bash\ndocker restart space-pussy\n```\n\nCheck the logs. \n\n```bash\ndocker logs space-pussy\n```\n\nThey have to contain the following:\n\n```bash\n1:42AM INF Starting Node service impl=Node\n1:42AM INF Genesis time is in the future. Sleeping until then... genTime=2022-09-03T22:55:42Z\n```\n\nIf you got that message - congrats, you set everything up!\n\nThe chain will start at `3rd October 19:55UTC`. Please track [Cyber Hall of Fame](https://t.me/fameofcyber) telegram chat, all coordination will be done there.  \n"
  },
  {
    "path": "networks/space-pussy/genesis.json",
    "content": "{\n  \"genesis_time\": \"2022-10-03T19:55:00Z\",\n  \"chain_id\": \"space-pussy\",\n  \"initial_height\": \"1\",\n  \"consensus_params\": {\n    \"block\": {\n      \"max_bytes\": \"4194304\",\n      \"max_gas\": \"25000000\",\n      \"time_iota_ms\": \"1000\"\n    },\n    \"evidence\": {\n      \"max_age_num_blocks\": \"100000\",\n      \"max_age_duration\": \"172800000000000\",\n      \"max_bytes\": \"1048576\"\n    },\n    \"validator\": {\n      \"pub_key_types\": [\n        \"ed25519\"\n      ]\n    },\n    \"version\": {}\n  },\n  \"app_hash\": \"\",\n  \"app_state\": {\n    \"auth\": {\n      \"params\": {\n        \"max_memo_characters\": \"1024\",\n        \"tx_sig_limit\": \"7\",\n        \"tx_size_cost_per_byte\": \"20\",\n        \"sig_verify_cost_ed25519\": \"590\",\n        \"sig_verify_cost_secp256k1\": \"1000\"\n      },\n      \"accounts\": [\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1d8754xqa9245pctlfcyv8eah468neqznm33fvz\",\n          \"pub_key\": null,\n          \"account_number\": \"0\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1gxhs5wzam5rlgf6cs0lkme400ut64d4njdhaf7\",\n          \"pub_key\": null,\n          \"account_number\": \"1\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1j3w0aa7s6665puyls9lwx9ej6cz2afysuy0v80\",\n          \"pub_key\": null,\n          \"account_number\": \"2\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy13hepw93y8mjcew7mfra5z7ju7k658534dpd39u\",\n          \"pub_key\": null,\n          \"account_number\": \"3\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1m5rf5fvhrl76s3xkvh3kde0p4dpwzewurch92s\",\n          \"pub_key\": null,\n          \"account_number\": \"4\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1gdpk4xeyeqzdkdwc0c2zrd8ltrthnze3a42c0n\",\n          \"pub_key\": null,\n          \"account_number\": \"5\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1zaefvwrgk2g45k68a3ngahgq0xky5zged294fr\",\n          \"pub_key\": null,\n          \"account_number\": \"6\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1ke3aflev7cr75gxa54k6qwrajfc53vqh4yfjj0\",\n          \"pub_key\": null,\n          \"account_number\": \"7\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1e8238v24qccht9mqc2w0r4luq462yxttjjv5pq\",\n          \"pub_key\": null,\n          \"account_number\": \"8\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1956s252r7du0jfeskaauep4lm6a9wn2pktntq0\",\n          \"pub_key\": null,\n          \"account_number\": \"9\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1r28nhrkwcvqs4qss2l7zqdvc2qfdl8ar6f4gqe\",\n          \"pub_key\": null,\n          \"account_number\": \"10\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy12kpw3e9ypjal6upmju9smwgjhwefpt7v0smhkt\",\n          \"pub_key\": null,\n          \"account_number\": \"11\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1qkw8dtdansmvayk2jxfkpel9q4d20rvfazxykl\",\n          \"pub_key\": null,\n          \"account_number\": \"12\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1rj7zt2pzuzwhjlr24u0prnqqxm3xexavpd7xp0\",\n          \"pub_key\": null,\n          \"account_number\": \"13\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy17zdyl3gfssc3vzzyxptnr0xl8z0pnte9a8zjjx\",\n          \"pub_key\": null,\n          \"account_number\": \"14\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1vg8lh3dsp7023kz79mlk642dux9vu038pmp4ma\",\n          \"pub_key\": null,\n          \"account_number\": \"15\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy10trdf5eyfcmc9graltx4hmpgznhrm7hdgt5mf6\",\n          \"pub_key\": null,\n          \"account_number\": \"16\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1v46pz6ddetfc3tnvdr28ss0l48jhazgyeqlumh\",\n          \"pub_key\": null,\n          \"account_number\": \"17\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1fnwevu5z89qd5tx6qdpfxh6u3dttc6kc6hfa9y\",\n          \"pub_key\": null,\n          \"account_number\": \"18\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy14hrqklee0tx6asycyfj357keql2jr5rdq9h34a\",\n          \"pub_key\": null,\n          \"account_number\": \"19\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1r8d26xgfxr80v3slu8r6z7wkl4h7f99qa4hhqg\",\n          \"pub_key\": null,\n          \"account_number\": \"20\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1r7q209q5yeh9d37pftdsm2eqtrl45ry8lmrfet\",\n          \"pub_key\": null,\n          \"account_number\": \"21\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy13jnp8uk4xnqcvdejcnq9rphm9actc90pf2r4ka\",\n          \"pub_key\": null,\n          \"account_number\": \"22\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1hyrtrdqnayvvtznddczjymjcj2jagcqugfp2rl\",\n          \"pub_key\": null,\n          \"account_number\": \"23\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1kfqme88c6vq8mt0smw29z67k4zz2ykr6km5rck\",\n          \"pub_key\": null,\n          \"account_number\": \"24\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1u2kvnwxmmpru764l5ht3nxkfwwu6ytw4s3zzsr\",\n          \"pub_key\": null,\n          \"account_number\": \"25\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1d59yxkz9uem873a3nyt5j379hsa7tjpvej0xfh\",\n          \"pub_key\": null,\n          \"account_number\": \"26\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1uynj0jhl059u9t5h4ug9075jrepdz4cwasmeqa\",\n          \"pub_key\": null,\n          \"account_number\": \"27\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy14fwr9m4rf27r3txv5luvph98nrckyu2qkfsn0f\",\n          \"pub_key\": null,\n          \"account_number\": \"28\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1n8hu3cqsn3txf0ltdk3x0sff2s0yt96xyffz3m\",\n          \"pub_key\": null,\n          \"account_number\": \"29\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1p5sudrdkr9r8a84s7fh27tkhdrhujhqatztfqf\",\n          \"pub_key\": null,\n          \"account_number\": \"30\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1p74unan6vpp9frdcz2nhv8z59jx295njwzfmc0\",\n          \"pub_key\": null,\n          \"account_number\": \"31\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1jxzpz4ggqefs5ps7veupd8zfy5a62cgyrm7rr8\",\n          \"pub_key\": null,\n          \"account_number\": \"32\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1ezpth4mp3eeqdt49kgqd5ctr69xev6v2zggvl2\",\n          \"pub_key\": null,\n          \"account_number\": \"33\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1wm4026rxqcrkh09k806m6y4lys942etx75v0xt\",\n          \"pub_key\": null,\n          \"account_number\": \"34\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1gwlqmqc9nrnuu8fanls76exyrzum9xjmdtlgnl\",\n          \"pub_key\": null,\n          \"account_number\": \"35\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1ezqvp6aga74ms7jqrfwhrm7266sn2m50afvapg\",\n          \"pub_key\": null,\n          \"account_number\": \"36\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1cwu6g93hnfm44zyl8cnkn58dsakxh2ac49m8c3\",\n          \"pub_key\": null,\n          \"account_number\": \"37\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1rxdzc0c80u9wympy8sgmx32ra0df5dztx0v7xh\",\n          \"pub_key\": null,\n          \"account_number\": \"38\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy10jmsqhf7mwquv0wa08hegxqaasvue5tnn7wn79\",\n          \"pub_key\": null,\n          \"account_number\": \"39\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1m0tjgkrh4td9fcp8nnssu3rfdahzfgdsaurjuv\",\n          \"pub_key\": null,\n          \"account_number\": \"40\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1g65rmjkeuy5rywx04s4fvwfylmlz98vq87mdq7\",\n          \"pub_key\": null,\n          \"account_number\": \"41\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.ModuleAccount\",\n          \"base_account\": {\n            \"account_number\": \"42\",\n            \"address\": \"pussy1jv65s3grqf6v6jl3dp4t6c9t9rk99cd8wqwz53\",\n            \"pub_key\": null,\n            \"sequence\": \"0\"\n          },\n          \"name\": \"distribution\",\n          \"permissions\": []\n        }\n      ]\n    },\n    \"authz\": {\n      \"authorization\": []\n    },\n    \"bandwidth\": {\n      \"params\": {\n        \"recovery_period\": \"16000\",\n        \"adjust_price_period\": \"5\",\n        \"base_price\": \"0.250000000000000000\",\n        \"max_block_bandwidth\": \"25000\",\n        \"base_load\": \"0.100000000000000000\"\n      }\n    },\n    \"bank\": {\n      \"params\": {\n        \"send_enabled\": [],\n        \"default_send_enabled\": true\n      },\n      \"balances\": [\n        {\n          \"address\": \"pussy1d8754xqa9245pctlfcyv8eah468neqznm33fvz\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1gxhs5wzam5rlgf6cs0lkme400ut64d4njdhaf7\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1j3w0aa7s6665puyls9lwx9ej6cz2afysuy0v80\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy13hepw93y8mjcew7mfra5z7ju7k658534dpd39u\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1m5rf5fvhrl76s3xkvh3kde0p4dpwzewurch92s\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1gdpk4xeyeqzdkdwc0c2zrd8ltrthnze3a42c0n\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1zaefvwrgk2g45k68a3ngahgq0xky5zged294fr\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1ke3aflev7cr75gxa54k6qwrajfc53vqh4yfjj0\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1e8238v24qccht9mqc2w0r4luq462yxttjjv5pq\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1956s252r7du0jfeskaauep4lm6a9wn2pktntq0\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1r28nhrkwcvqs4qss2l7zqdvc2qfdl8ar6f4gqe\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy12kpw3e9ypjal6upmju9smwgjhwefpt7v0smhkt\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1qkw8dtdansmvayk2jxfkpel9q4d20rvfazxykl\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1rj7zt2pzuzwhjlr24u0prnqqxm3xexavpd7xp0\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy17zdyl3gfssc3vzzyxptnr0xl8z0pnte9a8zjjx\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1vg8lh3dsp7023kz79mlk642dux9vu038pmp4ma\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy10trdf5eyfcmc9graltx4hmpgznhrm7hdgt5mf6\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1v46pz6ddetfc3tnvdr28ss0l48jhazgyeqlumh\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1fnwevu5z89qd5tx6qdpfxh6u3dttc6kc6hfa9y\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy14hrqklee0tx6asycyfj357keql2jr5rdq9h34a\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1r8d26xgfxr80v3slu8r6z7wkl4h7f99qa4hhqg\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1r7q209q5yeh9d37pftdsm2eqtrl45ry8lmrfet\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy13jnp8uk4xnqcvdejcnq9rphm9actc90pf2r4ka\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1hyrtrdqnayvvtznddczjymjcj2jagcqugfp2rl\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1kfqme88c6vq8mt0smw29z67k4zz2ykr6km5rck\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1u2kvnwxmmpru764l5ht3nxkfwwu6ytw4s3zzsr\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1d59yxkz9uem873a3nyt5j379hsa7tjpvej0xfh\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1uynj0jhl059u9t5h4ug9075jrepdz4cwasmeqa\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy14fwr9m4rf27r3txv5luvph98nrckyu2qkfsn0f\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1n8hu3cqsn3txf0ltdk3x0sff2s0yt96xyffz3m\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1p5sudrdkr9r8a84s7fh27tkhdrhujhqatztfqf\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1p74unan6vpp9frdcz2nhv8z59jx295njwzfmc0\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1jxzpz4ggqefs5ps7veupd8zfy5a62cgyrm7rr8\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1ezpth4mp3eeqdt49kgqd5ctr69xev6v2zggvl2\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1wm4026rxqcrkh09k806m6y4lys942etx75v0xt\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1gwlqmqc9nrnuu8fanls76exyrzum9xjmdtlgnl\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1ezqvp6aga74ms7jqrfwhrm7266sn2m50afvapg\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1cwu6g93hnfm44zyl8cnkn58dsakxh2ac49m8c3\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1rxdzc0c80u9wympy8sgmx32ra0df5dztx0v7xh\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy10jmsqhf7mwquv0wa08hegxqaasvue5tnn7wn79\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1m0tjgkrh4td9fcp8nnssu3rfdahzfgdsaurjuv\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1g65rmjkeuy5rywx04s4fvwfylmlz98vq87mdq7\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1jv65s3grqf6v6jl3dp4t6c9t9rk99cd8wqwz53\",\n          \"coins\": [\n            {\n              \"amount\": \"958000000000000000\",\n              \"denom\": \"pussy\"\n            }\n          ]\n        }\n      ],\n      \"supply\": [\n        {\n          \"amount\": \"1000000000000000000\",\n          \"denom\": \"pussy\"\n        }\n      ],\n      \"denom_metadata\": [\n        {\n          \"description\": \"The staking token of space-pussy\",\n          \"base\": \"pussy\",\n          \"display\": \"pussy\",\n          \"name\": \"Pussy token\",\n          \"symbol\": \"PUSSY\",\n          \"denom_units\": [\n            {\n              \"denom\": \"pussy\",\n              \"exponent\": 0,\n              \"aliases\": [\n                \"PUSSY\"\n              ]\n            }\n          ]\n        },\n        {\n          \"description\": \"The liquid staking token of Space-pussy\",\n          \"base\": \"liquidpussy\",\n          \"display\": \"liquidpussy\",\n          \"name\": \"liquidpussy\",\n          \"symbol\": \"LIQUIDPUSSY\",\n          \"denom_units\": [\n            {\n              \"denom\": \"liquidpussy\",\n              \"exponent\": 0,\n              \"aliases\": [\n                \"LIQUIDPUSSY\"\n              ]\n            }\n          ]\n        },\n        {\n          \"description\": \"The power token of Space-pussy\",\n          \"base\": \"milliampere\",\n          \"display\": \"ampere\",\n          \"name\": \"Space-pussy Ampere\",\n          \"symbol\": \"AMPERE\",\n          \"denom_units\": [\n            {\n              \"denom\": \"milliampere\",\n              \"exponent\": 0,\n              \"aliases\": []\n            },\n            {\n              \"denom\": \"ampere\",\n              \"exponent\": 3,\n              \"aliases\": [\n                \"AMPERE\"\n              ]\n            }\n          ]\n        },\n        {\n          \"description\": \"The bandwidth token of Space-pussy\",\n          \"base\": \"millivolt\",\n          \"display\": \"volt\",\n          \"name\": \"Space-pussy Volt\",\n          \"symbol\": \"VOLT\",\n          \"denom_units\": [\n            {\n              \"denom\": \"millivolt\",\n              \"exponent\": 0,\n              \"aliases\": []\n            },\n            {\n              \"denom\": \"volt\",\n              \"exponent\": 3,\n              \"aliases\": [\n                \"VOLT\"\n              ]\n            }\n          ]\n        }\n      ]\n    },\n    \"capability\": {\n      \"index\": \"1\",\n      \"owners\": []\n    },\n    \"crisis\": {\n      \"constant_fee\": {\n        \"denom\": \"pussy\",\n        \"amount\": \"10000000\"\n      }\n    },\n    \"cyberbank\": null,\n    \"distribution\": {\n      \"params\": {\n        \"community_tax\": \"0.000000000000000000\",\n        \"base_proposer_reward\": \"0.010000000000000000\",\n        \"bonus_proposer_reward\": \"0.030000000000000000\",\n        \"withdraw_addr_enabled\": true\n      },\n      \"fee_pool\": {\n        \"community_pool\": [\n          {\n            \"amount\": \"958000000000000000\",\n            \"denom\": \"pussy\"\n          }\n        ]\n      },\n      \"delegator_withdraw_infos\": [],\n      \"previous_proposer\": \"\",\n      \"outstanding_rewards\": [],\n      \"validator_accumulated_commissions\": [],\n      \"validator_historical_rewards\": [],\n      \"validator_current_rewards\": [],\n      \"delegator_starting_infos\": [],\n      \"validator_slash_events\": []\n    },\n    \"dmn\": {\n      \"params\": {\n        \"max_slots\": 4,\n        \"max_gas\": 2500000,\n        \"fee_ttl\": 50\n      }\n    },\n    \"evidence\": {\n      \"evidence\": []\n    },\n    \"feegrant\": {\n      \"allowances\": []\n    },\n    \"genutil\": {\n      \"gen_txs\": [\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"Bloqhub\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"pussy1p5sudrdkr9r8a84s7fh27tkhdrhujhqatztfqf\",\n                \"validator_address\": \"pussyvaloper1p5sudrdkr9r8a84s7fh27tkhdrhujhqau8du7t\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"dfy2Tjb24fytmLaTIqMRigVfwh7mX4gr2C3prhcBPd0=\"\n                },\n                \"value\": {\n                  \"denom\": \"pussy\",\n                  \"amount\": \"1000000000000\"\n                }\n              }\n            ],\n            \"memo\": \"4913a219c47a83f843ec4be9d9440e96ca8eee92@192.167.254.10:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A+k17mb2lLGBARPZ14gHuefCdUxn30ZLlsRrSVSxyzSf\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"OYred5zZU2KnUiVMtzB6Px9dGUTfc993VUay9+0CjlkstllhrRYQtl7NK7KIQB5uqEeqFu6V35LFlKpvkMv9Yg==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"Citizen Cosmos\",\n                  \"identity\": \"DF0280597A20ACFE\",\n                  \"website\": \"www.citizencosmos.space\",\n                  \"security_contact\": \"\",\n                  \"details\": \"Citizen Cosmos is a web3 brand and podcast\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.200000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"10000000000\",\n                \"delegator_address\": \"pussy1uynj0jhl059u9t5h4ug9075jrepdz4cwasmeqa\",\n                \"validator_address\": \"pussyvaloper1uynj0jhl059u9t5h4ug9075jrepdz4cw24av7l\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"gylED9s/yfWjaPUAsFUAQBVfZoYDTk8X+L0EjREk7l0=\"\n                },\n                \"value\": {\n                  \"denom\": \"pussy\",\n                  \"amount\": \"850000000000000\"\n                }\n              }\n            ],\n            \"memo\": \"66eabcb6639163be65bdf88cde11732b9fe0a63c@195.201.81.239:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"ArhPmoTf9ioffBMf0WpkkuBKnv7vg0y7dRB1bbyzIwuL\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"SurtRcNVHVwlDYWaFeylQPA8dQLQD8PrBdSDnvEjW3ss/jEA5mK98NVdN+b353uGlwdOv7RioZaqB5i/0lCIFg==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"Developer\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.200000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"pussy1hyrtrdqnayvvtznddczjymjcj2jagcqugfp2rl\",\n                \"validator_address\": \"pussyvaloper1hyrtrdqnayvvtznddczjymjcj2jagcqulv8laa\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"/unHhQAqM3i1KJ59PT0D5MEBJAmytPv8cutOhrPVQAg=\"\n                },\n                \"value\": {\n                  \"denom\": \"pussy\",\n                  \"amount\": \"1000000000000\"\n                }\n              }\n            ],\n            \"memo\": \"6590ffaadab0384de9062bb5fa49ff5fb8d995a7@176.100.3.51:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"AtqUTtRprpb9K7bhAg1k24RKmkfab0wpZOiCfnZuOBi7\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"ucRhfid7DINBaCZzYhoZ0sPHAckFys5EPB3OoiQ3X7InkzQQwui77ZEQJsDlMTeHtrFvPm0vhOOzgeP5jh0h3A==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"Kerman\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.200000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"pussy1u2kvnwxmmpru764l5ht3nxkfwwu6ytw4s3zzsr\",\n                \"validator_address\": \"pussyvaloper1u2kvnwxmmpru764l5ht3nxkfwwu6ytw485yhwp\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"k2FA9IN6wJTjF3MHUNy04IUUwhh3ssTHz7eOFM0CLuM=\"\n                },\n                \"value\": {\n                  \"denom\": \"pussy\",\n                  \"amount\": \"1000000000000\"\n                }\n              }\n            ],\n            \"memo\": \"890bc056e5f5faaa0efa7fe55a72af09e45b398d@185.230.90.71:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"AimwqRc63WjLVIInJMb/X+IQq31ZG08CvqwEGjsTP8iC\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"t3y7E1He8WPNAkHZNMYRBwTKFv7eHFYXjMPlYSZVKg0/nYltESBZlxgemrzcMt7IO8yJiNxEU5Uw9pp2r6E5+w==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"MikeLitoris\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"pussy1rxdzc0c80u9wympy8sgmx32ra0df5dztx0v7xh\",\n                \"validator_address\": \"pussyvaloper1rxdzc0c80u9wympy8sgmx32ra0df5dzt322tc4\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"Ed+EBKPAgjZhyG2uhcHDXEFpocSUpPpyJb5qLvhRfr4=\"\n                },\n                \"value\": {\n                  \"denom\": \"pussy\",\n                  \"amount\": \"1000000000000\"\n                }\n              }\n            ],\n            \"memo\": \"ba5af23f90706c80230df6db9c2fa42e11678d54@167.235.150.1:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"As00LA0oJPNpisW/RdUboX1kGxN2l93PPyEpTdDu7vIO\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"RRYQJQFkTTwH/KjOBL+SY+hJSsgOpC6sE8F8izwzCoNoAgbPELTi3SoMfFABSB7dTOFdUKJamILl2TOtmfgrVQ==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"POSTHUMAN ꝏ DVS\",\n                  \"identity\": \"8A9FC930E1A980D6\",\n                  \"website\": \"https://posthuman.digital\",\n                  \"security_contact\": \"validator@posthuman.digital\",\n                  \"details\": \"100% refund in case of slashing ⚛️ MEꝏWE 🤲 Part of the profits goes to charity\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"pussy1e8238v24qccht9mqc2w0r4luq462yxttjjv5pq\",\n                \"validator_address\": \"pussyvaloper1e8238v24qccht9mqc2w0r4luq462yxtt9h2plz\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"zEBYTxQrRDumdM1stwnTay9z52VkGh3iYIUIa+XPObU=\"\n                },\n                \"value\": {\n                  \"denom\": \"pussy\",\n                  \"amount\": \"1000000000000\"\n                }\n              }\n            ],\n            \"memo\": \"c349c49922435fc0cfdf02ac51548be989fbd102@142.132.253.246:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A+rHQzOD96xTzMUmBsuOCo7rbm5a4dEMA0bJJdhtXHDT\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"5GQwYr4ZwgSvRzlJ3xdBQ3p40mVShld0opOEjDzwz3hWouYojXUg/0OmN135sbosgNsRSiIpDW5e26H2W5QdHg==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"Papsan\",\n                  \"identity\": \"C3AAAE53B3BDAC3F\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"pussy1r7q209q5yeh9d37pftdsm2eqtrl45ry8lmrfet\",\n                \"validator_address\": \"pussyvaloper1r7q209q5yeh9d37pftdsm2eqtrl45ry8g79u8f\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"cMynSZRzuNCrMFOenCcrkhldpIy3hfC6mOjBgmXmlpA=\"\n                },\n                \"value\": {\n                  \"denom\": \"pussy\",\n                  \"amount\": \"1000000000000\"\n                }\n              }\n            ],\n            \"memo\": \"81f9706d4e9357e45bb2bafd4486b66ac6e58451@185.230.90.202:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"AvywWdD4SyRXjRvDZovKcEGxIUEJjHTjut0fingxl61X\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"XoTfuQy9+KYtW6FTQ/kGOP4pqNzT//9dlgSD+P6RDENKwFnTMGyDZSEx3WFOuKuYix6YEx/zntz/ENDkwBr3WQ==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"Stigga\",\n                  \"identity\": \"8A41E5318619A3ED\",\n                  \"website\": \"https://stigga.org/\",\n                  \"security_contact\": \"\",\n                  \"details\": \"Individual PoS validator in Cosmos Hub Ecosystem chains, Discord:alexmed#5188\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"pussy12kpw3e9ypjal6upmju9smwgjhwefpt7v0smhkt\",\n                \"validator_address\": \"pussyvaloper12kpw3e9ypjal6upmju9smwgjhwefpt7vc4azgf\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"bNjOAI/PiehyuwYz+lCQDPpcrjlAF2i3Yvb3OSdmYAo=\"\n                },\n                \"value\": {\n                  \"denom\": \"pussy\",\n                  \"amount\": \"1000000000000\"\n                }\n              }\n            ],\n            \"memo\": \"e932305e9a36c9423c1a38ebf408e250d0ddb5f7@89.38.97.150:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A+2iJ2ufEo3cALGyEq8humzARIZk/G0WzdvmbEcjwUP0\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"1tY74vvbD7+ewFyrbp8kh1Z2PXzwz8I3zz1pqgh8/QoLMKLvOMvtiqGqFACBMjvOpuKYtYuMUAwrJZ4hVMHkFg==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"ToTheMars\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"pussy1vg8lh3dsp7023kz79mlk642dux9vu038pmp4ma\",\n                \"validator_address\": \"pussyvaloper1vg8lh3dsp7023kz79mlk642dux9vu038k78q9l\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"fuRnTyscip2Lp29YngUSqhzqFuUYt//BhVKMdChqQno=\"\n                },\n                \"value\": {\n                  \"denom\": \"pussy\",\n                  \"amount\": \"1000000000000\"\n                }\n              }\n            ],\n            \"memo\": \"a012320ef30581df99f505c449a4c42a0490e9a6@192.168.0.248:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"Ar1A0LR8koZLzQhovHBHVQ0XsWMDIL+NuA2VWfuHmYWp\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"ka2M/eQO3f0NpAqiXTei8tFi0O3eI8IIxkePC+CIdj5AzERAxCtRTnLC4H9OEMUkGWWoWE0Ysv3YEGdZVkbU9g==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"Bro_n_Bro\",\n                  \"identity\": \"A57DAB9B09C7215D\",\n                  \"website\": \"bronbro.io\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.200000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"100000000000\",\n                \"delegator_address\": \"pussy1j3w0aa7s6665puyls9lwx9ej6cz2afysuy0v80\",\n                \"validator_address\": \"pussyvaloper1j3w0aa7s6665puyls9lwx9ej6cz2afystpfeed\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"evJq4xH5kUwUa4yy74j7nAd6qFHLTfSm5NwqJlSLYCE=\"\n                },\n                \"value\": {\n                  \"denom\": \"pussy\",\n                  \"amount\": \"850000000000000\"\n                }\n              }\n            ],\n            \"memo\": \"2e51205853f88048ac2ccb0b830960bbead14996@93.159.133.250:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"AhHVVko1tNyG8GVIjpzBL/E1f1K+1dQ5ItheZLTkNLNz\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"1WKvnWn5iGXKcGxmKU9CEeJHGp8q1lfKcJv9hJvsB8or5OGb/N7acc117yIMIE7kWt6IuNfO2IiPtSIrpxh7nw==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"ChainManiacs | Real Solar\\u0026Wind validator\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"pussy14fwr9m4rf27r3txv5luvph98nrckyu2qkfsn0f\",\n                \"validator_address\": \"pussyvaloper14fwr9m4rf27r3txv5luvph98nrckyu2qpvkx3t\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"3x+1Cab1diHNXd2yXYRQ/b2hIA/iAqqyWDonG6mg9+o=\"\n                },\n                \"value\": {\n                  \"denom\": \"pussy\",\n                  \"amount\": \"1000000000000\"\n                }\n              }\n            ],\n            \"memo\": \"59ab923bee54f5815b591d1d3d312931a3d4e89a@192.167.254.10:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A99rSpuMJoCXa603FCfC8gqffxilbKZwAI30ygly5kwl\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"xtpx8B7rtTzgNGYSlTpCKU+JAdojbOAuA2eOXD+t7odem6l+AbQ67sc6PqKvt98yvwXwyJBgxFM351nYDBxoYw==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"cyberG\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"pussy17zdyl3gfssc3vzzyxptnr0xl8z0pnte9a8zjjx\",\n                \"validator_address\": \"pussyvaloper17zdyl3gfssc3vzzyxptnr0xl8z0pnte92zy8vy\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"mH49uKT67SY4ODuXUGkqbKMYjZxzHc+UI6QbNGqWI+Y=\"\n                },\n                \"value\": {\n                  \"denom\": \"pussy\",\n                  \"amount\": \"1000000000000\"\n                }\n              }\n            ],\n            \"memo\": \"472e953f82e3993614b93635307ca503b7fad812@192.168.0.188:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A8HHUcU41AdJWAVryBu/fD7SG6s+3My2OPelPlLBHeWe\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"3neewRTs3pwwGtXinK+BMJ/TVMAxR8zf1Hgq5o/5tBgXUQBSBtTaHE73/gmMkmxqEJx2gFomX+zVW512O22yHQ==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"Denwer\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"pussy1n8hu3cqsn3txf0ltdk3x0sff2s0yt96xyffz3m\",\n                \"validator_address\": \"pussyvaloper1n8hu3cqsn3txf0ltdk3x0sff2s0yt96xnv0h0e\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"HPovYK9BjXDpC/NUTdRufVpfCB23ewveyE7X8vHxUsg=\"\n                },\n                \"value\": {\n                  \"denom\": \"pussy\",\n                  \"amount\": \"1000000000000\"\n                }\n              }\n            ],\n            \"memo\": \"a0b15d6721d13a91ce368b56cdad9991c76d4c86@46.211.3.216:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"AlsigW11Iogtfe1wf2NPbLR3qWMTVPLA5cOm9hCyW1Ro\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"R1dkYmTnOwAoHF0zABktAXnE4fiBJ7sJ2fUk0jYoaiQwdQ/z1TSWDnX8jk2F5WxtXnd0/9eAIjuCaAmAKnSJhA==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"goto5k\",\n                  \"identity\": \"1B0142FC46D30561\",\n                  \"website\": \"https://goto5k.com\",\n                  \"security_contact\": \"\",\n                  \"details\": \"Independent validator. Ambassador.\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.100000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"pussy10trdf5eyfcmc9graltx4hmpgznhrm7hdgt5mf6\",\n                \"validator_address\": \"pussyvaloper10trdf5eyfcmc9graltx4hmpgznhrm7hdlwjwhc\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"YPe0JNydv1qJDlvvGapbQxaRFp/rFswW0w3PdvKuaBw=\"\n                },\n                \"value\": {\n                  \"denom\": \"pussy\",\n                  \"amount\": \"1000000000000\"\n                }\n              }\n            ],\n            \"memo\": \"659189a8e378833332ffd61f3495443359fb52a0@192.168.100.4:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A2y3DqIjyeTqoFiojpJh5eJmLxcROK/zw3fOVj87KvVf\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"+IJUBzJisyJUFfP3kDmldQL85Ols8T2Ri3cOGmm4DSFY00E7XEgykHX3YLFxAPB/wS18NAScqM/07yANQJFzjg==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"Joy prophet\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"pussy14hrqklee0tx6asycyfj357keql2jr5rdq9h34a\",\n                \"validator_address\": \"pussyvaloper14hrqklee0tx6asycyfj357keql2jr5rdhq3ytl\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"jSKJDVC/AGr6D+nnmdhMe+zmPinqrEMSlSsYja0FB7w=\"\n                },\n                \"value\": {\n                  \"denom\": \"pussy\",\n                  \"amount\": \"1000000000000\"\n                }\n              }\n            ],\n            \"memo\": \"178f1f4f430d1052c78ab12a5132f37b5d2c654d@172.19.219.100:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"Aw5AOC6ECe3PnVisdqXhw65gPj8rDL68oyBmkI5a57la\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"KPsZI03UmKY8uovSr3NQ5EEAa+fwjCf4Yys6LOjwXl0/xiBOKFDptqWCK5XqQjClhaj/RVv7zHEU6/iUAJSppA==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"linak\",\n                  \"identity\": \"6F961E9B32E722ED\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.100000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"pussy1v46pz6ddetfc3tnvdr28ss0l48jhazgyeqlumh\",\n                \"validator_address\": \"pussyvaloper1v46pz6ddetfc3tnvdr28ss0l48jhazgyw9ef94\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"lAPc3XVbfWl+WhIxup6ReXQ90UhQyKYi6yCUnvVv6L4=\"\n                },\n                \"value\": {\n                  \"denom\": \"pussy\",\n                  \"amount\": \"1000000000000\"\n                }\n              }\n            ],\n            \"memo\": \"4d8e240bf3a4d3a13f627e1aba2ca0fffa8a1cd7@185.242.112.3:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A6xdxbJ47TzrUdGG8SoVi/jPUH7x+x7jK5nlb3af+ILy\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"N0ll3hrLTFHbLFnriCCtZNcm/k3HJVdVSjpxuSEjFnYpOpaF8+uehIVsQfNTwbobatoAf10Iq+RldVrOpDZsyQ==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"lux8.net\",\n                  \"identity\": \"EBBAB54C972A579A\",\n                  \"website\": \"https://lux8.net\",\n                  \"security_contact\": \"\",\n                  \"details\": \"Fiat Lux. Infinite Lux.\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"pussy1m0tjgkrh4td9fcp8nnssu3rfdahzfgdsaurjuv\",\n                \"validator_address\": \"pussyvaloper1m0tjgkrh4td9fcp8nnssu3rfdahzfgds2e98zw\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"zaSRRntTmScRxBexrH3Tjfsa23yulZ3iUdN4yHBoJt0=\"\n                },\n                \"value\": {\n                  \"denom\": \"pussy\",\n                  \"amount\": \"1000000000000\"\n                }\n              }\n            ],\n            \"memo\": \"3630247f32b5b363825027546cbbaa27b2ee8886@194.190.169.129:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"AleLx6VDXm7sVYlwUwXCRpFMYKzIDaWuCVcXH5I0qji1\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"qztwtzDxA+p/4ZXMjBZMgScFsUbb5Q+u+7IE8Sfrj4g3fElhLRwmfatI1pyKOISQtF6MjYZBMDwPEkNMaqk0KQ==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"space\",\n                  \"identity\": \"B80D9AB4E8981B6A\",\n                  \"website\": \"\",\n                  \"security_contact\": \"andfat#4230\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.200000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"pussy1kfqme88c6vq8mt0smw29z67k4zz2ykr6km5rck\",\n                \"validator_address\": \"pussyvaloper1kfqme88c6vq8mt0smw29z67k4zz2ykr6p7jkx5\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"cElo/7UWLQYVKpqjHuyeDas1DKrS6D87jooPjjB4RSs=\"\n                },\n                \"value\": {\n                  \"denom\": \"pussy\",\n                  \"amount\": \"1000000000000\"\n                }\n              }\n            ],\n            \"memo\": \"3d11aee6b074c4293d60fca7dfb1b12172a60fa3@88.218.191.78:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A5cZnI4Nt6B8HGkkYarRt2/SIlETX/urxNHwYscYhwQK\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"I753eO+EW+HL34Unak35+jdPu3Ypv9uAcni5qrLx0NkeKBfThKno51soo2EcI87GARR00XaQqBlmRA/dh5r3fA==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"web34ever\",\n                  \"identity\": \"52D7E9C59B92F133\",\n                  \"website\": \"https://web3validator.info\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"pussy1r8d26xgfxr80v3slu8r6z7wkl4h7f99qa4hhqg\",\n                \"validator_address\": \"pussyvaloper1r8d26xgfxr80v3slu8r6z7wkl4h7f99q2s3z72\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"KDEt7qRMgauk8PosX+iB4l1ZJh4nuSPRFX6jqU16kuo=\"\n                },\n                \"value\": {\n                  \"denom\": \"pussy\",\n                  \"amount\": \"1000000000000\"\n                }\n              }\n            ],\n            \"memo\": \"e2c4ea781c86ace81e895ac8a2c60f215138ed0f@88.218.191.79:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"Aoc7SC9kMjYyJCWL9SAvEbaTu9uPTz9hj/7wdDM4nTIl\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"fHLfEzSnf056+l1qKtly3BhNwkYVENgDxro4D8/uRq8DLn2L9glwCXQVzlCXCsSZVImUDu4hzjIRSIjYuYGIig==\"\n          ]\n        },\n        {\n          \"body\": {\n            \"messages\": [\n              {\n                \"@type\": \"/cosmos.staking.v1beta1.MsgCreateValidator\",\n                \"description\": {\n                  \"moniker\": \"Mimino\",\n                  \"identity\": \"\",\n                  \"website\": \"\",\n                  \"security_contact\": \"\",\n                  \"details\": \"\"\n                },\n                \"commission\": {\n                  \"rate\": \"0.050000000000000000\",\n                  \"max_rate\": \"0.100000000000000000\",\n                  \"max_change_rate\": \"0.010000000000000000\"\n                },\n                \"min_self_delegation\": \"1000000000\",\n                \"delegator_address\": \"pussy1p74unan6vpp9frdcz2nhv8z59jx295njwzfmc0\",\n                \"validator_address\": \"pussyvaloper1p74unan6vpp9frdcz2nhv8z59jx295nje80wxd\",\n                \"pubkey\": {\n                  \"@type\": \"/cosmos.crypto.ed25519.PubKey\",\n                  \"key\": \"BMTtI0sCeGPqmAiKUsm4N7rstiKY6WFA1P2Il9wD5Eo=\"\n                },\n                \"value\": {\n                  \"denom\": \"pussy\",\n                  \"amount\": \"1000000000000\"\n                }\n              }\n            ],\n            \"memo\": \"70e31b1f1f05cb4b262bb7f67119d08a0c3b58d5@46.221.13.16:26656\",\n            \"timeout_height\": \"0\",\n            \"extension_options\": [],\n            \"non_critical_extension_options\": []\n          },\n          \"auth_info\": {\n            \"signer_infos\": [\n              {\n                \"public_key\": {\n                  \"@type\": \"/cosmos.crypto.secp256k1.PubKey\",\n                  \"key\": \"A+MSp7ZI8SK9IhpbUydvKExkSwjYkQoYy5Tubp26Jcat\"\n                },\n                \"mode_info\": {\n                  \"single\": {\n                    \"mode\": \"SIGN_MODE_DIRECT\"\n                  }\n                },\n                \"sequence\": \"0\"\n              }\n            ],\n            \"fee\": {\n              \"amount\": [],\n              \"gas_limit\": \"200000\",\n              \"payer\": \"\",\n              \"granter\": \"\"\n            }\n          },\n          \"signatures\": [\n            \"Hv596QA/CfniTyB7h1ylgWmq2ki0nsA3h5+EOq9/Tw0+UxPsapZ11W6F4b4qdzvid3oWwQHEi2uTUe8nmnNURg==\"\n          ]\n        }\n      ]\n    },\n    \"gov\": {\n      \"starting_proposal_id\": \"1\",\n      \"deposits\": [],\n      \"votes\": [],\n      \"proposals\": [],\n      \"deposit_params\": {\n        \"min_deposit\": [\n          {\n            \"denom\": \"pussy\",\n            \"amount\": \"100000000000\"\n          }\n        ],\n        \"max_deposit_period\": \"23650000s\"\n      },\n      \"voting_params\": {\n        \"voting_period\": \"345600s\"\n      },\n      \"tally_params\": {\n        \"quorum\": \"0.250000000000000000\",\n        \"threshold\": \"0.500000000000000000\",\n        \"veto_threshold\": \"0.250000000000000000\"\n      }\n    },\n    \"graph\": null,\n    \"grid\": {\n      \"params\": {\n        \"max_routes\": 16\n      },\n      \"routes\": []\n    },\n    \"ibc\": {\n      \"client_genesis\": {\n        \"clients\": [],\n        \"clients_consensus\": [],\n        \"clients_metadata\": [],\n        \"params\": {\n          \"allowed_clients\": [\n            \"06-solomachine\",\n            \"07-tendermint\"\n          ]\n        },\n        \"create_localhost\": false,\n        \"next_client_sequence\": \"0\"\n      },\n      \"connection_genesis\": {\n        \"connections\": [],\n        \"client_connection_paths\": [],\n        \"next_connection_sequence\": \"0\",\n        \"params\": {\n          \"max_expected_time_per_block\": \"30000000000\"\n        }\n      },\n      \"channel_genesis\": {\n        \"channels\": [],\n        \"acknowledgements\": [],\n        \"commitments\": [],\n        \"receipts\": [],\n        \"send_sequences\": [],\n        \"recv_sequences\": [],\n        \"ack_sequences\": [],\n        \"next_channel_sequence\": \"0\"\n      }\n    },\n    \"liquidity\": {\n      \"params\": {\n        \"pool_types\": [\n          {\n            \"id\": 1,\n            \"name\": \"StandardLiquidityPool\",\n            \"min_reserve_coin_num\": 2,\n            \"max_reserve_coin_num\": 2,\n            \"description\": \"Standard liquidity pool with pool price function X/Y, ESPM constraint, and two kinds of reserve coins\"\n          }\n        ],\n        \"min_init_deposit_amount\": \"1000000\",\n        \"init_pool_coin_mint_amount\": \"1000000000000\",\n        \"max_reserve_coin_amount\": \"0\",\n        \"pool_creation_fee\": [\n          {\n            \"denom\": \"pussy\",\n            \"amount\": \"1000000000\"\n          }\n        ],\n        \"swap_fee_rate\": \"0.003000000000000000\",\n        \"withdraw_fee_rate\": \"0.003000000000000000\",\n        \"max_order_amount_ratio\": \"0.100000000000000000\",\n        \"unit_batch_height\": 1,\n        \"circuit_breaker_enabled\": false\n      },\n      \"pool_records\": []\n    },\n    \"mint\": {\n      \"minter\": {\n        \"inflation\": \"0.050000000000000000\",\n        \"annual_provisions\": \"0.000000000000000000\"\n      },\n      \"params\": {\n        \"mint_denom\": \"pussy\",\n        \"inflation_rate_change\": \"0.030000000000000000\",\n        \"inflation_max\": \"0.030000000000000000\",\n        \"inflation_min\": \"0.010000000000000000\",\n        \"goal_bonded\": \"0.100000000000000000\",\n        \"blocks_per_year\": \"6311520\"\n      }\n    },\n    \"params\": null,\n    \"rank\": {\n      \"params\": {\n        \"calculation_period\": \"5\",\n        \"damping_factor\": \"0.800000000000000000\",\n        \"tolerance\": \"0.001000000000000000\"\n      }\n    },\n    \"resources\": {\n      \"params\": {\n        \"max_slots\": 8,\n        \"halving_period_volt_blocks\": 6000000,\n        \"halving_period_ampere_blocks\": 6000000,\n        \"base_investmint_period_volt\": 2592000,\n        \"base_investmint_period_ampere\": 2592000,\n        \"min_investmint_period\": 86400,\n        \"base_investmint_amount_volt\": {\n          \"denom\": \"liquidpussy\",\n          \"amount\": \"1000000000\"\n        },\n        \"base_investmint_amount_ampere\": {\n          \"denom\": \"liquidpussy\",\n          \"amount\": \"100000000\"\n        }\n      }\n    },\n    \"slashing\": {\n      \"params\": {\n        \"signed_blocks_window\": \"10000\",\n        \"min_signed_per_window\": \"0.050000000000000000\",\n        \"downtime_jail_duration\": \"600s\",\n        \"slash_fraction_double_sign\": \"0.050000000000000000\",\n        \"slash_fraction_downtime\": \"0.000100000000000000\"\n      },\n      \"signing_infos\": [],\n      \"missed_blocks\": []\n    },\n    \"staking\": {\n      \"params\": {\n        \"unbonding_time\": \"2419200s\",\n        \"max_validators\": 69,\n        \"max_entries\": 35,\n        \"historical_entries\": 10000,\n        \"bond_denom\": \"pussy\"\n      },\n      \"last_total_power\": \"0\",\n      \"last_validator_powers\": [],\n      \"validators\": [],\n      \"delegations\": [],\n      \"unbonding_delegations\": [],\n      \"redelegations\": [],\n      \"exported\": false\n    },\n    \"transfer\": {\n      \"port_id\": \"transfer\",\n      \"denom_traces\": [],\n      \"params\": {\n        \"send_enabled\": true,\n        \"receive_enabled\": true\n      }\n    },\n    \"upgrade\": {},\n    \"vesting\": {},\n    \"wasm\": {\n      \"params\": {\n        \"code_upload_access\": {\n          \"permission\": \"Everybody\",\n          \"address\": \"\"\n        },\n        \"instantiate_default_permission\": \"Everybody\"\n      },\n      \"codes\": [],\n      \"contracts\": [],\n      \"sequences\": [],\n      \"gen_msgs\": []\n    }\n  }\n}"
  },
  {
    "path": "networks/space-pussy/gentxs/bloqhub.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"Bloqhub\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"pussy1p5sudrdkr9r8a84s7fh27tkhdrhujhqatztfqf\",\"validator_address\":\"pussyvaloper1p5sudrdkr9r8a84s7fh27tkhdrhujhqau8du7t\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"dfy2Tjb24fytmLaTIqMRigVfwh7mX4gr2C3prhcBPd0=\"},\"value\":{\"denom\":\"pussy\",\"amount\":\"1000000000000\"}}],\"memo\":\"4913a219c47a83f843ec4be9d9440e96ca8eee92@192.167.254.10:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A+k17mb2lLGBARPZ14gHuefCdUxn30ZLlsRrSVSxyzSf\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"OYred5zZU2KnUiVMtzB6Px9dGUTfc993VUay9+0CjlkstllhrRYQtl7NK7KIQB5uqEeqFu6V35LFlKpvkMv9Yg==\"]}\n"
  },
  {
    "path": "networks/space-pussy/gentxs/gentx-Citizen-Cosmos.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"Citizen Cosmos\",\"identity\":\"DF0280597A20ACFE\",\"website\":\"www.citizencosmos.space\",\"security_contact\":\"\",\"details\":\"Citizen Cosmos is a web3 brand and podcast\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.200000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"10000000000\",\"delegator_address\":\"pussy1uynj0jhl059u9t5h4ug9075jrepdz4cwasmeqa\",\"validator_address\":\"pussyvaloper1uynj0jhl059u9t5h4ug9075jrepdz4cw24av7l\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"gylED9s/yfWjaPUAsFUAQBVfZoYDTk8X+L0EjREk7l0=\"},\"value\":{\"denom\":\"pussy\",\"amount\":\"850000000000000\"}}],\"memo\":\"66eabcb6639163be65bdf88cde11732b9fe0a63c@195.201.81.239:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"ArhPmoTf9ioffBMf0WpkkuBKnv7vg0y7dRB1bbyzIwuL\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"SurtRcNVHVwlDYWaFeylQPA8dQLQD8PrBdSDnvEjW3ss/jEA5mK98NVdN+b353uGlwdOv7RioZaqB5i/0lCIFg==\"]}\n"
  },
  {
    "path": "networks/space-pussy/gentxs/gentx-Developer.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"Developer\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.200000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"pussy1hyrtrdqnayvvtznddczjymjcj2jagcqugfp2rl\",\"validator_address\":\"pussyvaloper1hyrtrdqnayvvtznddczjymjcj2jagcqulv8laa\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"/unHhQAqM3i1KJ59PT0D5MEBJAmytPv8cutOhrPVQAg=\"},\"value\":{\"denom\":\"pussy\",\"amount\":\"1000000000000\"}}],\"memo\":\"6590ffaadab0384de9062bb5fa49ff5fb8d995a7@176.100.3.51:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"AtqUTtRprpb9K7bhAg1k24RKmkfab0wpZOiCfnZuOBi7\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"ucRhfid7DINBaCZzYhoZ0sPHAckFys5EPB3OoiQ3X7InkzQQwui77ZEQJsDlMTeHtrFvPm0vhOOzgeP5jh0h3A==\"]}\n"
  },
  {
    "path": "networks/space-pussy/gentxs/gentx-Kerman.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"Kerman\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.200000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"pussy1u2kvnwxmmpru764l5ht3nxkfwwu6ytw4s3zzsr\",\"validator_address\":\"pussyvaloper1u2kvnwxmmpru764l5ht3nxkfwwu6ytw485yhwp\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"k2FA9IN6wJTjF3MHUNy04IUUwhh3ssTHz7eOFM0CLuM=\"},\"value\":{\"denom\":\"pussy\",\"amount\":\"1000000000000\"}}],\"memo\":\"890bc056e5f5faaa0efa7fe55a72af09e45b398d@185.230.90.71:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"AimwqRc63WjLVIInJMb/X+IQq31ZG08CvqwEGjsTP8iC\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"t3y7E1He8WPNAkHZNMYRBwTKFv7eHFYXjMPlYSZVKg0/nYltESBZlxgemrzcMt7IO8yJiNxEU5Uw9pp2r6E5+w==\"]}\n"
  },
  {
    "path": "networks/space-pussy/gentxs/gentx-MikeLitoris.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"MikeLitoris\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"pussy1rxdzc0c80u9wympy8sgmx32ra0df5dztx0v7xh\",\"validator_address\":\"pussyvaloper1rxdzc0c80u9wympy8sgmx32ra0df5dzt322tc4\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"Ed+EBKPAgjZhyG2uhcHDXEFpocSUpPpyJb5qLvhRfr4=\"},\"value\":{\"denom\":\"pussy\",\"amount\":\"1000000000000\"}}],\"memo\":\"ba5af23f90706c80230df6db9c2fa42e11678d54@167.235.150.1:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"As00LA0oJPNpisW/RdUboX1kGxN2l93PPyEpTdDu7vIO\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"RRYQJQFkTTwH/KjOBL+SY+hJSsgOpC6sE8F8izwzCoNoAgbPELTi3SoMfFABSB7dTOFdUKJamILl2TOtmfgrVQ==\"]}\n"
  },
  {
    "path": "networks/space-pussy/gentxs/gentx-POSTHUMAN.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"POSTHUMAN ꝏ DVS\",\"identity\":\"8A9FC930E1A980D6\",\"website\":\"https://posthuman.digital\",\"security_contact\":\"validator@posthuman.digital\",\"details\":\"100% refund in case of slashing ⚛️ MEꝏWE 🤲 Part of the profits goes to charity\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"pussy1e8238v24qccht9mqc2w0r4luq462yxttjjv5pq\",\"validator_address\":\"pussyvaloper1e8238v24qccht9mqc2w0r4luq462yxtt9h2plz\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"zEBYTxQrRDumdM1stwnTay9z52VkGh3iYIUIa+XPObU=\"},\"value\":{\"denom\":\"pussy\",\"amount\":\"1000000000000\"}}],\"memo\":\"c349c49922435fc0cfdf02ac51548be989fbd102@142.132.253.246:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A+rHQzOD96xTzMUmBsuOCo7rbm5a4dEMA0bJJdhtXHDT\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"5GQwYr4ZwgSvRzlJ3xdBQ3p40mVShld0opOEjDzwz3hWouYojXUg/0OmN135sbosgNsRSiIpDW5e26H2W5QdHg==\"]}\n"
  },
  {
    "path": "networks/space-pussy/gentxs/gentx-Papsan.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"Papsan\",\"identity\":\"C3AAAE53B3BDAC3F\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"pussy1r7q209q5yeh9d37pftdsm2eqtrl45ry8lmrfet\",\"validator_address\":\"pussyvaloper1r7q209q5yeh9d37pftdsm2eqtrl45ry8g79u8f\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"cMynSZRzuNCrMFOenCcrkhldpIy3hfC6mOjBgmXmlpA=\"},\"value\":{\"denom\":\"pussy\",\"amount\":\"1000000000000\"}}],\"memo\":\"81f9706d4e9357e45bb2bafd4486b66ac6e58451@185.230.90.202:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"AvywWdD4SyRXjRvDZovKcEGxIUEJjHTjut0fingxl61X\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"XoTfuQy9+KYtW6FTQ/kGOP4pqNzT//9dlgSD+P6RDENKwFnTMGyDZSEx3WFOuKuYix6YEx/zntz/ENDkwBr3WQ==\"]}\n"
  },
  {
    "path": "networks/space-pussy/gentxs/gentx-SAMPLE.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"hacker\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.100000000000000000\",\"max_rate\":\"0.200000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1\",\"delegator_address\":\"bostrom1cayzklulpvxvsw4742046609xp9k2arc5nyg6n\",\"validator_address\":\"bostromvaloper1cayzklulpvxvsw4742046609xp9k2arcvfrh2s\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"YxN/kkQlXBwKNF4Cgi6tiqMh2ae8+tpo9VxENmFUhv8=\"},\"value\":{\"denom\":\"boot\",\"amount\":\"1000000000000\"}}],\"memo\":\"\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A6oFVHXSAJ7GLvhKlBYcdFdBsYKYamgCAs11IWQCVAJi\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"x56LPJXVpBp9pLv7X9EAaDP1NrLV4HILQc/fv6oq6dkKwIaMW8Il77q0oVouZgAqsNmpyTTYLRxZybrWyxOCWQ==\"]}\n"
  },
  {
    "path": "networks/space-pussy/gentxs/gentx-Stigga.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"Stigga\",\"identity\":\"8A41E5318619A3ED\",\"website\":\"https://stigga.org/\",\"security_contact\":\"\",\"details\":\"Individual PoS validator in Cosmos Hub Ecosystem chains, Discord:alexmed#5188\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"pussy12kpw3e9ypjal6upmju9smwgjhwefpt7v0smhkt\",\"validator_address\":\"pussyvaloper12kpw3e9ypjal6upmju9smwgjhwefpt7vc4azgf\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"bNjOAI/PiehyuwYz+lCQDPpcrjlAF2i3Yvb3OSdmYAo=\"},\"value\":{\"denom\":\"pussy\",\"amount\":\"1000000000000\"}}],\"memo\":\"e932305e9a36c9423c1a38ebf408e250d0ddb5f7@89.38.97.150:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A+2iJ2ufEo3cALGyEq8humzARIZk/G0WzdvmbEcjwUP0\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"1tY74vvbD7+ewFyrbp8kh1Z2PXzwz8I3zz1pqgh8/QoLMKLvOMvtiqGqFACBMjvOpuKYtYuMUAwrJZ4hVMHkFg==\"]}\n"
  },
  {
    "path": "networks/space-pussy/gentxs/gentx-ToTheMars.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"ToTheMars\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"pussy1vg8lh3dsp7023kz79mlk642dux9vu038pmp4ma\",\"validator_address\":\"pussyvaloper1vg8lh3dsp7023kz79mlk642dux9vu038k78q9l\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"fuRnTyscip2Lp29YngUSqhzqFuUYt//BhVKMdChqQno=\"},\"value\":{\"denom\":\"pussy\",\"amount\":\"1000000000000\"}}],\"memo\":\"a012320ef30581df99f505c449a4c42a0490e9a6@192.168.0.248:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"Ar1A0LR8koZLzQhovHBHVQ0XsWMDIL+NuA2VWfuHmYWp\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"ka2M/eQO3f0NpAqiXTei8tFi0O3eI8IIxkePC+CIdj5AzERAxCtRTnLC4H9OEMUkGWWoWE0Ysv3YEGdZVkbU9g==\"]}\n"
  },
  {
    "path": "networks/space-pussy/gentxs/gentx-Traneco.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"des\ncription\":{\"moniker\":\"Traneco\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\"\n,\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.200000\n000000000000\",\"max_change_rate\":\"0.020000000000000000\"},\"min_self_delegation\":\"\n1000000000\",\"delegator_address\":\"pussy1fnwevu5z89qd5tx6qdpfxh6u3dttc6kc6hfa9y\",\n\"validator_address\":\"pussyvaloper1fnwevu5z89qd5tx6qdpfxh6u3dttc6kcdj0gmx\",\"pubk\ney\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"aX3+3SxQaU5MiU8Mtxg8/koA9Hp\nrTLUL7JZbjWqlTpg=\"},\"value\":{\"denom\":\"pussy\",\"amount\":\"1000000000000\"}}],\"memo\"\n:\"61548477f8aab38eb12a0dea72c9ec53a8a1ba6f@192.168.0.163:26656\",\"timeout_height\n\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\n\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\n\"A4gVW7U+ROpfzvV5V3R2wBPrphVN3CswXTPllE/dsv9y\"},\"mode_info\":{\"single\":{\"mode\":\"\nSIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"p\nayer\":\"\",\"granter\":\"\"}},\"signatures\":[\"dGhfFBjOAIw8+bqZ3+TcXDwq5/z8MPB/fidB4VNX\n9PRd2DLKJdliXuGFPLEGlRrJzTRPHzEmkVKd9Jng7rN22Q==\"]}\n"
  },
  {
    "path": "networks/space-pussy/gentxs/gentx-bro-n-bro.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"Bro_n_Bro\",\"identity\":\"A57DAB9B09C7215D\",\"website\":\"bronbro.io\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.200000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"100000000000\",\"delegator_address\":\"pussy1j3w0aa7s6665puyls9lwx9ej6cz2afysuy0v80\",\"validator_address\":\"pussyvaloper1j3w0aa7s6665puyls9lwx9ej6cz2afystpfeed\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"evJq4xH5kUwUa4yy74j7nAd6qFHLTfSm5NwqJlSLYCE=\"},\"value\":{\"denom\":\"pussy\",\"amount\":\"850000000000000\"}}],\"memo\":\"2e51205853f88048ac2ccb0b830960bbead14996@93.159.133.250:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"AhHVVko1tNyG8GVIjpzBL/E1f1K+1dQ5ItheZLTkNLNz\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"1WKvnWn5iGXKcGxmKU9CEeJHGp8q1lfKcJv9hJvsB8or5OGb/N7acc117yIMIE7kWt6IuNfO2IiPtSIrpxh7nw==\"]}\n"
  },
  {
    "path": "networks/space-pussy/gentxs/gentx-chainmaniacs.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"ChainManiacs | Real Solar\\u0026Wind validator\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"pussy14fwr9m4rf27r3txv5luvph98nrckyu2qkfsn0f\",\"validator_address\":\"pussyvaloper14fwr9m4rf27r3txv5luvph98nrckyu2qpvkx3t\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"3x+1Cab1diHNXd2yXYRQ/b2hIA/iAqqyWDonG6mg9+o=\"},\"value\":{\"denom\":\"pussy\",\"amount\":\"1000000000000\"}}],\"memo\":\"59ab923bee54f5815b591d1d3d312931a3d4e89a@192.167.254.10:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A99rSpuMJoCXa603FCfC8gqffxilbKZwAI30ygly5kwl\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"xtpx8B7rtTzgNGYSlTpCKU+JAdojbOAuA2eOXD+t7odem6l+AbQ67sc6PqKvt98yvwXwyJBgxFM351nYDBxoYw==\"]}\n"
  },
  {
    "path": "networks/space-pussy/gentxs/gentx-cyberG.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"cyberG\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"pussy17zdyl3gfssc3vzzyxptnr0xl8z0pnte9a8zjjx\",\"validator_address\":\"pussyvaloper17zdyl3gfssc3vzzyxptnr0xl8z0pnte92zy8vy\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"mH49uKT67SY4ODuXUGkqbKMYjZxzHc+UI6QbNGqWI+Y=\"},\"value\":{\"denom\":\"pussy\",\"amount\":\"1000000000000\"}}],\"memo\":\"472e953f82e3993614b93635307ca503b7fad812@192.168.0.188:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A8HHUcU41AdJWAVryBu/fD7SG6s+3My2OPelPlLBHeWe\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"3neewRTs3pwwGtXinK+BMJ/TVMAxR8zf1Hgq5o/5tBgXUQBSBtTaHE73/gmMkmxqEJx2gFomX+zVW512O22yHQ==\"]}\n"
  },
  {
    "path": "networks/space-pussy/gentxs/gentx-denwer.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"Denwer\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"pussy1n8hu3cqsn3txf0ltdk3x0sff2s0yt96xyffz3m\",\"validator_address\":\"pussyvaloper1n8hu3cqsn3txf0ltdk3x0sff2s0yt96xnv0h0e\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"HPovYK9BjXDpC/NUTdRufVpfCB23ewveyE7X8vHxUsg=\"},\"value\":{\"denom\":\"pussy\",\"amount\":\"1000000000000\"}}],\"memo\":\"a0b15d6721d13a91ce368b56cdad9991c76d4c86@46.211.3.216:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"AlsigW11Iogtfe1wf2NPbLR3qWMTVPLA5cOm9hCyW1Ro\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"R1dkYmTnOwAoHF0zABktAXnE4fiBJ7sJ2fUk0jYoaiQwdQ/z1TSWDnX8jk2F5WxtXnd0/9eAIjuCaAmAKnSJhA==\"]}\n"
  },
  {
    "path": "networks/space-pussy/gentxs/gentx-goto5k.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"goto5k\",\"identity\":\"1B0142FC46D30561\",\"website\":\"https://goto5k.com\",\"security_contact\":\"\",\"details\":\"Independent validator. Ambassador.\"},\"commission\":{\"rate\":\"0.100000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"pussy10trdf5eyfcmc9graltx4hmpgznhrm7hdgt5mf6\",\"validator_address\":\"pussyvaloper10trdf5eyfcmc9graltx4hmpgznhrm7hdlwjwhc\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"YPe0JNydv1qJDlvvGapbQxaRFp/rFswW0w3PdvKuaBw=\"},\"value\":{\"denom\":\"pussy\",\"amount\":\"1000000000000\"}}],\"memo\":\"659189a8e378833332ffd61f3495443359fb52a0@192.168.100.4:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A2y3DqIjyeTqoFiojpJh5eJmLxcROK/zw3fOVj87KvVf\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"+IJUBzJisyJUFfP3kDmldQL85Ols8T2Ri3cOGmm4DSFY00E7XEgykHX3YLFxAPB/wS18NAScqM/07yANQJFzjg==\"]}\n"
  },
  {
    "path": "networks/space-pussy/gentxs/gentx-joy_prophet.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"Joy prophet\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"pussy14hrqklee0tx6asycyfj357keql2jr5rdq9h34a\",\"validator_address\":\"pussyvaloper14hrqklee0tx6asycyfj357keql2jr5rdhq3ytl\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"jSKJDVC/AGr6D+nnmdhMe+zmPinqrEMSlSsYja0FB7w=\"},\"value\":{\"denom\":\"pussy\",\"amount\":\"1000000000000\"}}],\"memo\":\"178f1f4f430d1052c78ab12a5132f37b5d2c654d@172.19.219.100:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"Aw5AOC6ECe3PnVisdqXhw65gPj8rDL68oyBmkI5a57la\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"KPsZI03UmKY8uovSr3NQ5EEAa+fwjCf4Yys6LOjwXl0/xiBOKFDptqWCK5XqQjClhaj/RVv7zHEU6/iUAJSppA==\"]}\n"
  },
  {
    "path": "networks/space-pussy/gentxs/gentx-linak.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"linak\",\"identity\":\"6F961E9B32E722ED\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.100000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"pussy1v46pz6ddetfc3tnvdr28ss0l48jhazgyeqlumh\",\"validator_address\":\"pussyvaloper1v46pz6ddetfc3tnvdr28ss0l48jhazgyw9ef94\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"lAPc3XVbfWl+WhIxup6ReXQ90UhQyKYi6yCUnvVv6L4=\"},\"value\":{\"denom\":\"pussy\",\"amount\":\"1000000000000\"}}],\"memo\":\"4d8e240bf3a4d3a13f627e1aba2ca0fffa8a1cd7@185.242.112.3:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A6xdxbJ47TzrUdGG8SoVi/jPUH7x+x7jK5nlb3af+ILy\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"N0ll3hrLTFHbLFnriCCtZNcm/k3HJVdVSjpxuSEjFnYpOpaF8+uehIVsQfNTwbobatoAf10Iq+RldVrOpDZsyQ==\"]}\n"
  },
  {
    "path": "networks/space-pussy/gentxs/gentx-lux8net.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"lux8.net\",\"identity\":\"EBBAB54C972A579A\",\"website\":\"https://lux8.net\",\"security_contact\":\"\",\"details\":\"Fiat Lux. Infinite Lux.\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"pussy1m0tjgkrh4td9fcp8nnssu3rfdahzfgdsaurjuv\",\"validator_address\":\"pussyvaloper1m0tjgkrh4td9fcp8nnssu3rfdahzfgds2e98zw\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"zaSRRntTmScRxBexrH3Tjfsa23yulZ3iUdN4yHBoJt0=\"},\"value\":{\"denom\":\"pussy\",\"amount\":\"1000000000000\"}}],\"memo\":\"3630247f32b5b363825027546cbbaa27b2ee8886@194.190.169.129:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"AleLx6VDXm7sVYlwUwXCRpFMYKzIDaWuCVcXH5I0qji1\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"qztwtzDxA+p/4ZXMjBZMgScFsUbb5Q+u+7IE8Sfrj4g3fElhLRwmfatI1pyKOISQtF6MjYZBMDwPEkNMaqk0KQ==\"]}\n"
  },
  {
    "path": "networks/space-pussy/gentxs/gentx-space.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"space\",\"identity\":\"B80D9AB4E8981B6A\",\"website\":\"\",\"security_contact\":\"andfat#4230\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.200000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"pussy1kfqme88c6vq8mt0smw29z67k4zz2ykr6km5rck\",\"validator_address\":\"pussyvaloper1kfqme88c6vq8mt0smw29z67k4zz2ykr6p7jkx5\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"cElo/7UWLQYVKpqjHuyeDas1DKrS6D87jooPjjB4RSs=\"},\"value\":{\"denom\":\"pussy\",\"amount\":\"1000000000000\"}}],\"memo\":\"3d11aee6b074c4293d60fca7dfb1b12172a60fa3@88.218.191.78:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A5cZnI4Nt6B8HGkkYarRt2/SIlETX/urxNHwYscYhwQK\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"I753eO+EW+HL34Unak35+jdPu3Ypv9uAcni5qrLx0NkeKBfThKno51soo2EcI87GARR00XaQqBlmRA/dh5r3fA==\"]}\n"
  },
  {
    "path": "networks/space-pussy/gentxs/gentx-web34ever.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"web34ever\",\"identity\":\"52D7E9C59B92F133\",\"website\":\"https://web3validator.info\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"pussy1r8d26xgfxr80v3slu8r6z7wkl4h7f99qa4hhqg\",\"validator_address\":\"pussyvaloper1r8d26xgfxr80v3slu8r6z7wkl4h7f99q2s3z72\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"KDEt7qRMgauk8PosX+iB4l1ZJh4nuSPRFX6jqU16kuo=\"},\"value\":{\"denom\":\"pussy\",\"amount\":\"1000000000000\"}}],\"memo\":\"e2c4ea781c86ace81e895ac8a2c60f215138ed0f@88.218.191.79:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"Aoc7SC9kMjYyJCWL9SAvEbaTu9uPTz9hj/7wdDM4nTIl\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"fHLfEzSnf056+l1qKtly3BhNwkYVENgDxro4D8/uRq8DLn2L9glwCXQVzlCXCsSZVImUDu4hzjIRSIjYuYGIig==\"]}\n"
  },
  {
    "path": "networks/space-pussy/gentxs/mimino.json",
    "content": "{\"body\":{\"messages\":[{\"@type\":\"/cosmos.staking.v1beta1.MsgCreateValidator\",\"description\":{\"moniker\":\"Mimino\",\"identity\":\"\",\"website\":\"\",\"security_contact\":\"\",\"details\":\"\"},\"commission\":{\"rate\":\"0.050000000000000000\",\"max_rate\":\"0.100000000000000000\",\"max_change_rate\":\"0.010000000000000000\"},\"min_self_delegation\":\"1000000000\",\"delegator_address\":\"pussy1p74unan6vpp9frdcz2nhv8z59jx295njwzfmc0\",\"validator_address\":\"pussyvaloper1p74unan6vpp9frdcz2nhv8z59jx295nje80wxd\",\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"BMTtI0sCeGPqmAiKUsm4N7rstiKY6WFA1P2Il9wD5Eo=\"},\"value\":{\"denom\":\"pussy\",\"amount\":\"1000000000000\"}}],\"memo\":\"70e31b1f1f05cb4b262bb7f67119d08a0c3b58d5@46.221.13.16:26656\",\"timeout_height\":\"0\",\"extension_options\":[],\"non_critical_extension_options\":[]},\"auth_info\":{\"signer_infos\":[{\"public_key\":{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A+MSp7ZI8SK9IhpbUydvKExkSwjYkQoYy5Tubp26Jcat\"},\"mode_info\":{\"single\":{\"mode\":\"SIGN_MODE_DIRECT\"}},\"sequence\":\"0\"}],\"fee\":{\"amount\":[],\"gas_limit\":\"200000\",\"payer\":\"\",\"granter\":\"\"}},\"signatures\":[\"Hv596QA/CfniTyB7h1ylgWmq2ki0nsA3h5+EOq9/Tw0+UxPsapZ11W6F4b4qdzvid3oWwQHEi2uTUe8nmnNURg==\"]}\n"
  },
  {
    "path": "networks/space-pussy/get_peers/getpeers.nu",
    "content": "## Script pull peers from RPC Node \nhttp get https ://rpc.space-pussy.cybernode.ai:443/net_info | get result.peers | each {|i| $i | get remote_ip node_info.id node_info.listen_addr} | each {|i| $'($i.1)@($i.0):($i.2 | split row \":\" | last)'} | str join ',' | $'persistent_peers = \"($in)\"'"
  },
  {
    "path": "networks/space-pussy/get_peers/getpeers.sh",
    "content": "#!/bin/bash\n\n## https://gist.github.com/Cordtus/87b147862627d3039f394695b78e4361\n## dump connected peers to comma separated persistent_peers list\n\nRED='\\033[0;91m'\nGREEN='\\033[0;32m'\nBLUE='\\033[0;34m'\nNC='\\033[0m'\nx=0\n\nprintf \"\\n${RED}rpc${NC} address?: \"\nread -r RPC\nDATA=$(curl -s $RPC/net_info)\nif [  -z \"$DATA\" ]\nthen\n  printf \"%b\\n${RED}rpc%b${NC} error\\n\\n\"\n  exit\nfi\nNETWORK=$(echo $DATA | jq '.result | .peers | .[0] | .node_info | .network' | tr -d '\"')\nCOUNT=$(echo $DATA | jq '.result | .n_peers' | tr -d '\"')\nwhile [ $x -lt $COUNT ]\ndo\n  if [ $(echo $DATA | jq \".result | .peers | .[$x] | .is_outbound\") == 'true' ]\n  then\n    ID=$(echo $DATA | jq \".result | .peers | .[$x] | .node_info | .id\" 2> /dev/null)\n    ADDRESS=$(echo $DATA | jq \".result | .peers | .[$x] | .remote_ip\" 2> /dev/null)\n    PORT=$(echo $DATA | jq \".result | .peers | .[$x] | .node_info | .listen_addr\" 2> /dev/null | tr -d '\"')\n    PEER=$(echo $ID | tr -d '\"')@$(echo $ADDRESS | tr -d '\"'):${PORT##*:}\n    PEERS[${#PEERS[@]}]=\"$PEER\"\n    ((x++))\n  else\n    ((x++))\n  fi\ndone\n\nprintf \"\\n${RED}$x${NC} outbound peers found\"\n\nprintf \"\\n${RED}number${NC} of peers to list? (1,3,10,all): \"\nread -r NUMBER\n\nif [ -z $NUMBER ]\nthen\nTOTAL=\"$x\"\nelif [ $NUMBER == \"all\" ] || [ $NUMBER -ge $x ]\nthen\nTOTAL=\"$x\"\nelse\nTOTAL=\"$NUMBER\"\nfi\n\nwhile [[ $i -lt $TOTAL ]]\ndo\n  P_LIST=\"$P_LIST,$(echo ${PEERS[$i]} | tr -d '\\n')\"\n  ((i++))\ndone\nprintf \"\\npersistent_peers = \\\"${P_LIST:1}\\\"\\n\""
  },
  {
    "path": "networks/space-pussy/peers.md",
    "content": "# Here you may fing peers and seeds to hop on bostrom chain\n\n## Peers:\n\ncyberongress:\n\n```bash\n0b2689ae3b712adbaf4f3a124ca175725aa01fcd@95.216.76.211:26656\n```\n\nBro_n_Bro validator\n\n```bash\n6c8dc2888fc42b910c4bd34d7d51ee1d01946c76@93.159.134.158:36656\n```\n\nCitizen Cosmos\n\n```bash\n66eabcb6639163be65bdf88cde11732b9fe0a63c@195.201.81.239:26656\n```"
  },
  {
    "path": "networks/space-pussy/pussy_snapshot_deploy_guide.md",
    "content": "# ![](https://ipfs.io/ipfs/QmWeAd87fZm1pMYyX9BmhnTrXYKCZLoyzMJMcSwNHfB6gU) Deploy Pussy node from snapshot\n\n## Download snapshot\nFirst, go to [Pussy Snapshot Robot](https://cyb.ai/network/bostrom/contract/pussy137p3ll78yrlw3gtfltgwhdkz0qxke4z638md6n) quitter page\n\nLatest post will show you available snapsot:\n![](https://ipfs.io/ipfs/QmaFJ56SNwEvF2J1wsuKjdb1psYNSbFPiSRntPrjEcYoHa)\n\nСlick on the link with the block and you will see three results:\n![](https://ipfs.io/ipfs/QmaSj6avQZFs8Yn7ZbKNoR96TVqAng1Cov21ZukNoU2n7U)\n\nWe typicaly store only latest snashot, older might be available only in IPFS if someone stored them.\n\nThe first one is a hash of the current snapshot that can be downloaded directly from ipfs (to use this way, you need an ipfs [client](https://docs.ipfs.tech/install/command-line/) installed)\n\n```\nipfs get <insert the hash here> --output space-pussy-pruned.tar.gz\n```\nThe second hash contains url that can be downloaded directly:\n\n```\nwget https://jupiter.cybernode.ai/shared/space-pussy-pruned_<change block number>.tar.gz\n```\n\n## Unpack snapshot\n\nSingle thread:\n\n```\ntar -xvzf space-pussy-pruned_<snap_block>.tar.gz\n```\n\nMultiple threads (much faster and require pigz installation):\n\n```\napt install pigz\ntar -I pigz -xf space-pussy-pruned_<snap_block>.tar.gz -C ./\n```\n\n## Stop Pussy\n\n```\ndocker stop space-pussy\n```\n\n## Remove old data from home directory\n\n**Dont forget to use correct path if your node is not in $HOME of your user.**\n\n```\nrm -rf ~/.pussy/data ~/.pussy/wasm\n```\n\n## Move unpacked folders into home directory\n\n```\ncd space-pussy-pruned_<snap_block>\nmv data/ ~/.pussy/\nmv wasm/ ~/.pussy/\n```\n\n## Set up your pruning strategy to everything\n\nTo save the space ont the disk consumed by the node set pruning to everything (lightest one) and set snapshot-interval to 0 in `.pussy/config/app.toml`:\n\n```\npruning = \"everything\"\nsnapshot-interval = 0\n```\n\n## Start Pussy container and check logs\n\n```\ndocker start space-pussy\ndocker logs space-pussy -f --tail 10\n```\nYou will see node started sync from the snapshot block.\n\n## When done dont forget to remove folder and archive to save some space\n\n```\nrm -rf space-pussy-pruned_<snap_block> space-pussy-pruned_<snap_block>.tar.gz\n```\n"
  },
  {
    "path": "networks/space-pussy/unsigned-genesis.json",
    "content": "{\n  \"genesis_time\": \"2022-10-03T19:55:00Z\",\n  \"chain_id\": \"space-pussy\",\n  \"initial_height\": \"1\",\n  \"consensus_params\": {\n    \"block\": {\n      \"max_bytes\": \"4194304\",\n      \"max_gas\": \"25000000\",\n      \"time_iota_ms\": \"1000\"\n    },\n    \"evidence\": {\n      \"max_age_num_blocks\": \"100000\",\n      \"max_age_duration\": \"172800000000000\",\n      \"max_bytes\": \"1048576\"\n    },\n    \"validator\": {\n      \"pub_key_types\": [\n        \"ed25519\"\n      ]\n    },\n    \"version\": {}\n  },\n  \"app_hash\": \"\",\n  \"app_state\": {\n    \"auth\": {\n      \"params\": {\n        \"max_memo_characters\": \"1024\",\n        \"tx_sig_limit\": \"7\",\n        \"tx_size_cost_per_byte\": \"20\",\n        \"sig_verify_cost_ed25519\": \"590\",\n        \"sig_verify_cost_secp256k1\": \"1000\"\n      },\n      \"accounts\": [\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1d8754xqa9245pctlfcyv8eah468neqznm33fvz\",\n          \"pub_key\": null,\n          \"account_number\": \"0\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1gxhs5wzam5rlgf6cs0lkme400ut64d4njdhaf7\",\n          \"pub_key\": null,\n          \"account_number\": \"1\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1j3w0aa7s6665puyls9lwx9ej6cz2afysuy0v80\",\n          \"pub_key\": null,\n          \"account_number\": \"2\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy13hepw93y8mjcew7mfra5z7ju7k658534dpd39u\",\n          \"pub_key\": null,\n          \"account_number\": \"3\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1m5rf5fvhrl76s3xkvh3kde0p4dpwzewurch92s\",\n          \"pub_key\": null,\n          \"account_number\": \"4\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1gdpk4xeyeqzdkdwc0c2zrd8ltrthnze3a42c0n\",\n          \"pub_key\": null,\n          \"account_number\": \"5\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1zaefvwrgk2g45k68a3ngahgq0xky5zged294fr\",\n          \"pub_key\": null,\n          \"account_number\": \"6\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1ke3aflev7cr75gxa54k6qwrajfc53vqh4yfjj0\",\n          \"pub_key\": null,\n          \"account_number\": \"7\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1e8238v24qccht9mqc2w0r4luq462yxttjjv5pq\",\n          \"pub_key\": null,\n          \"account_number\": \"8\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1956s252r7du0jfeskaauep4lm6a9wn2pktntq0\",\n          \"pub_key\": null,\n          \"account_number\": \"9\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1r28nhrkwcvqs4qss2l7zqdvc2qfdl8ar6f4gqe\",\n          \"pub_key\": null,\n          \"account_number\": \"10\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy12kpw3e9ypjal6upmju9smwgjhwefpt7v0smhkt\",\n          \"pub_key\": null,\n          \"account_number\": \"11\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1qkw8dtdansmvayk2jxfkpel9q4d20rvfazxykl\",\n          \"pub_key\": null,\n          \"account_number\": \"12\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1rj7zt2pzuzwhjlr24u0prnqqxm3xexavpd7xp0\",\n          \"pub_key\": null,\n          \"account_number\": \"13\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy17zdyl3gfssc3vzzyxptnr0xl8z0pnte9a8zjjx\",\n          \"pub_key\": null,\n          \"account_number\": \"14\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1vg8lh3dsp7023kz79mlk642dux9vu038pmp4ma\",\n          \"pub_key\": null,\n          \"account_number\": \"15\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy10trdf5eyfcmc9graltx4hmpgznhrm7hdgt5mf6\",\n          \"pub_key\": null,\n          \"account_number\": \"16\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1v46pz6ddetfc3tnvdr28ss0l48jhazgyeqlumh\",\n          \"pub_key\": null,\n          \"account_number\": \"17\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1fnwevu5z89qd5tx6qdpfxh6u3dttc6kc6hfa9y\",\n          \"pub_key\": null,\n          \"account_number\": \"18\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy14hrqklee0tx6asycyfj357keql2jr5rdq9h34a\",\n          \"pub_key\": null,\n          \"account_number\": \"19\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1r8d26xgfxr80v3slu8r6z7wkl4h7f99qa4hhqg\",\n          \"pub_key\": null,\n          \"account_number\": \"20\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1r7q209q5yeh9d37pftdsm2eqtrl45ry8lmrfet\",\n          \"pub_key\": null,\n          \"account_number\": \"21\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy13jnp8uk4xnqcvdejcnq9rphm9actc90pf2r4ka\",\n          \"pub_key\": null,\n          \"account_number\": \"22\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1hyrtrdqnayvvtznddczjymjcj2jagcqugfp2rl\",\n          \"pub_key\": null,\n          \"account_number\": \"23\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1kfqme88c6vq8mt0smw29z67k4zz2ykr6km5rck\",\n          \"pub_key\": null,\n          \"account_number\": \"24\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1u2kvnwxmmpru764l5ht3nxkfwwu6ytw4s3zzsr\",\n          \"pub_key\": null,\n          \"account_number\": \"25\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1d59yxkz9uem873a3nyt5j379hsa7tjpvej0xfh\",\n          \"pub_key\": null,\n          \"account_number\": \"26\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1uynj0jhl059u9t5h4ug9075jrepdz4cwasmeqa\",\n          \"pub_key\": null,\n          \"account_number\": \"27\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy14fwr9m4rf27r3txv5luvph98nrckyu2qkfsn0f\",\n          \"pub_key\": null,\n          \"account_number\": \"28\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1n8hu3cqsn3txf0ltdk3x0sff2s0yt96xyffz3m\",\n          \"pub_key\": null,\n          \"account_number\": \"29\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1p5sudrdkr9r8a84s7fh27tkhdrhujhqatztfqf\",\n          \"pub_key\": null,\n          \"account_number\": \"30\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1p74unan6vpp9frdcz2nhv8z59jx295njwzfmc0\",\n          \"pub_key\": null,\n          \"account_number\": \"31\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1jxzpz4ggqefs5ps7veupd8zfy5a62cgyrm7rr8\",\n          \"pub_key\": null,\n          \"account_number\": \"32\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1ezpth4mp3eeqdt49kgqd5ctr69xev6v2zggvl2\",\n          \"pub_key\": null,\n          \"account_number\": \"33\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1wm4026rxqcrkh09k806m6y4lys942etx75v0xt\",\n          \"pub_key\": null,\n          \"account_number\": \"34\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1gwlqmqc9nrnuu8fanls76exyrzum9xjmdtlgnl\",\n          \"pub_key\": null,\n          \"account_number\": \"35\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1ezqvp6aga74ms7jqrfwhrm7266sn2m50afvapg\",\n          \"pub_key\": null,\n          \"account_number\": \"36\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1cwu6g93hnfm44zyl8cnkn58dsakxh2ac49m8c3\",\n          \"pub_key\": null,\n          \"account_number\": \"37\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1rxdzc0c80u9wympy8sgmx32ra0df5dztx0v7xh\",\n          \"pub_key\": null,\n          \"account_number\": \"38\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy10jmsqhf7mwquv0wa08hegxqaasvue5tnn7wn79\",\n          \"pub_key\": null,\n          \"account_number\": \"39\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1m0tjgkrh4td9fcp8nnssu3rfdahzfgdsaurjuv\",\n          \"pub_key\": null,\n          \"account_number\": \"40\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.BaseAccount\",\n          \"address\": \"pussy1g65rmjkeuy5rywx04s4fvwfylmlz98vq87mdq7\",\n          \"pub_key\": null,\n          \"account_number\": \"41\",\n          \"sequence\": \"0\"\n        },\n        {\n          \"@type\": \"/cosmos.auth.v1beta1.ModuleAccount\",\n          \"base_account\": {\n              \"account_number\": \"42\",\n              \"address\": \"pussy1jv65s3grqf6v6jl3dp4t6c9t9rk99cd8wqwz53\",\n              \"pub_key\": null,\n              \"sequence\": \"0\"\n          },\n          \"name\": \"distribution\",\n          \"permissions\": []\n      }\n      ]\n    },\n    \"authz\": {\n      \"authorization\": []\n    },\n    \"bandwidth\": {\n      \"params\": {\n        \"recovery_period\": \"16000\",\n        \"adjust_price_period\": \"5\",\n        \"base_price\": \"0.250000000000000000\",\n        \"max_block_bandwidth\": \"25000\",\n        \"base_load\": \"0.100000000000000000\"\n      }\n    },\n    \"bank\": {\n      \"params\": {\n        \"send_enabled\": [],\n        \"default_send_enabled\": true\n      },\n      \"balances\": [\n        {\n          \"address\": \"pussy1d8754xqa9245pctlfcyv8eah468neqznm33fvz\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1gxhs5wzam5rlgf6cs0lkme400ut64d4njdhaf7\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1j3w0aa7s6665puyls9lwx9ej6cz2afysuy0v80\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy13hepw93y8mjcew7mfra5z7ju7k658534dpd39u\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1m5rf5fvhrl76s3xkvh3kde0p4dpwzewurch92s\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1gdpk4xeyeqzdkdwc0c2zrd8ltrthnze3a42c0n\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1zaefvwrgk2g45k68a3ngahgq0xky5zged294fr\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1ke3aflev7cr75gxa54k6qwrajfc53vqh4yfjj0\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1e8238v24qccht9mqc2w0r4luq462yxttjjv5pq\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1956s252r7du0jfeskaauep4lm6a9wn2pktntq0\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1r28nhrkwcvqs4qss2l7zqdvc2qfdl8ar6f4gqe\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy12kpw3e9ypjal6upmju9smwgjhwefpt7v0smhkt\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1qkw8dtdansmvayk2jxfkpel9q4d20rvfazxykl\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1rj7zt2pzuzwhjlr24u0prnqqxm3xexavpd7xp0\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy17zdyl3gfssc3vzzyxptnr0xl8z0pnte9a8zjjx\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1vg8lh3dsp7023kz79mlk642dux9vu038pmp4ma\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy10trdf5eyfcmc9graltx4hmpgznhrm7hdgt5mf6\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1v46pz6ddetfc3tnvdr28ss0l48jhazgyeqlumh\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1fnwevu5z89qd5tx6qdpfxh6u3dttc6kc6hfa9y\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy14hrqklee0tx6asycyfj357keql2jr5rdq9h34a\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1r8d26xgfxr80v3slu8r6z7wkl4h7f99qa4hhqg\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1r7q209q5yeh9d37pftdsm2eqtrl45ry8lmrfet\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy13jnp8uk4xnqcvdejcnq9rphm9actc90pf2r4ka\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1hyrtrdqnayvvtznddczjymjcj2jagcqugfp2rl\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1kfqme88c6vq8mt0smw29z67k4zz2ykr6km5rck\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1u2kvnwxmmpru764l5ht3nxkfwwu6ytw4s3zzsr\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1d59yxkz9uem873a3nyt5j379hsa7tjpvej0xfh\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1uynj0jhl059u9t5h4ug9075jrepdz4cwasmeqa\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy14fwr9m4rf27r3txv5luvph98nrckyu2qkfsn0f\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1n8hu3cqsn3txf0ltdk3x0sff2s0yt96xyffz3m\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1p5sudrdkr9r8a84s7fh27tkhdrhujhqatztfqf\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1p74unan6vpp9frdcz2nhv8z59jx295njwzfmc0\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1jxzpz4ggqefs5ps7veupd8zfy5a62cgyrm7rr8\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1ezpth4mp3eeqdt49kgqd5ctr69xev6v2zggvl2\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1wm4026rxqcrkh09k806m6y4lys942etx75v0xt\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1gwlqmqc9nrnuu8fanls76exyrzum9xjmdtlgnl\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1ezqvp6aga74ms7jqrfwhrm7266sn2m50afvapg\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1cwu6g93hnfm44zyl8cnkn58dsakxh2ac49m8c3\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1rxdzc0c80u9wympy8sgmx32ra0df5dztx0v7xh\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy10jmsqhf7mwquv0wa08hegxqaasvue5tnn7wn79\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1m0tjgkrh4td9fcp8nnssu3rfdahzfgdsaurjuv\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1g65rmjkeuy5rywx04s4fvwfylmlz98vq87mdq7\",\n          \"coins\": [\n            {\n              \"denom\": \"pussy\",\n              \"amount\": \"1000000000000000\"\n            }\n          ]\n        },\n        {\n          \"address\": \"pussy1jv65s3grqf6v6jl3dp4t6c9t9rk99cd8wqwz53\",\n          \"coins\": [\n              {\n                  \"amount\": \"958000000000000000\",\n                  \"denom\": \"pussy\"\n              }\n          ]\n      }\n      ],\n      \"supply\": [\n        {\n          \"amount\": \"1000000000000000000\",\n          \"denom\": \"pussy\"\n        }\n      ],\n      \"denom_metadata\": [\n        {\n          \"description\": \"The staking token of space-pussy\",\n          \"base\": \"pussy\",\n          \"display\": \"pussy\",\n          \"name\": \"Pussy token\",\n          \"symbol\": \"PUSSY\",\n          \"denom_units\": [\n            {\n              \"denom\": \"pussy\",\n              \"exponent\": 0,\n              \"aliases\": [\n                \"PUSSY\"\n              ]\n            }\n          ]\n        },\n        {\n          \"description\": \"The liquid staking token of Space-pussy\",\n          \"base\": \"liquidpussy\",\n          \"display\": \"liquidpussy\",\n          \"name\": \"liquidpussy\",\n          \"symbol\": \"LIQUIDPUSSY\",\n          \"denom_units\": [\n            {\n              \"denom\": \"liquidpussy\",\n              \"exponent\": 0,\n              \"aliases\": [\n                \"LIQUIDPUSSY\"\n              ]\n            }\n          ]\n        },\n        {\n          \"description\": \"The power token of Space-pussy\",\n          \"base\": \"milliampere\",\n          \"display\": \"ampere\",\n          \"name\": \"Space-pussy Ampere\",\n          \"symbol\": \"AMPERE\",\n          \"denom_units\": [\n            {\n              \"denom\": \"milliampere\",\n              \"exponent\": 0,\n              \"aliases\": []\n            },\n            {\n              \"denom\": \"ampere\",\n              \"exponent\": 3,\n              \"aliases\": [\n                \"AMPERE\"\n              ]\n            }\n          ]\n        },\n        {\n          \"description\": \"The bandwidth token of Space-pussy\",\n          \"base\": \"millivolt\",\n          \"display\": \"volt\",\n          \"name\": \"Space-pussy Volt\",\n          \"symbol\": \"VOLT\",\n          \"denom_units\": [\n            {\n              \"denom\": \"millivolt\",\n              \"exponent\": 0,\n              \"aliases\": []\n            },\n            {\n              \"denom\": \"volt\",\n              \"exponent\": 3,\n              \"aliases\": [\n                \"VOLT\"\n              ]\n            }\n          ]\n        }\n      ]\n    },\n    \"capability\": {\n      \"index\": \"1\",\n      \"owners\": []\n    },\n    \"crisis\": {\n      \"constant_fee\": {\n        \"denom\": \"pussy\",\n        \"amount\": \"10000000\"\n      }\n    },\n    \"cyberbank\": null,\n    \"distribution\": {\n      \"params\": {\n        \"community_tax\": \"0.000000000000000000\",\n        \"base_proposer_reward\": \"0.010000000000000000\",\n        \"bonus_proposer_reward\": \"0.030000000000000000\",\n        \"withdraw_addr_enabled\": true\n      },\n      \"fee_pool\": {\n        \"community_pool\": [\n          {\n            \"amount\": \"958000000000000000\",\n            \"denom\": \"pussy\"\n          }\n        ]\n      },\n      \"delegator_withdraw_infos\": [],\n      \"previous_proposer\": \"\",\n      \"outstanding_rewards\": [],\n      \"validator_accumulated_commissions\": [],\n      \"validator_historical_rewards\": [],\n      \"validator_current_rewards\": [],\n      \"delegator_starting_infos\": [],\n      \"validator_slash_events\": []\n    },\n    \"dmn\": {\n      \"params\": {\n        \"max_slots\": 4,\n        \"max_gas\": 2500000,\n        \"fee_ttl\": 50\n      }\n    },\n    \"evidence\": {\n      \"evidence\": []\n    },\n    \"feegrant\": {\n      \"allowances\": []\n    },\n    \"genutil\": {\n      \"gen_txs\": []\n    },\n    \"gov\": {\n      \"starting_proposal_id\": \"1\",\n      \"deposits\": [],\n      \"votes\": [],\n      \"proposals\": [],\n      \"deposit_params\": {\n        \"min_deposit\": [\n          {\n            \"denom\": \"pussy\",\n            \"amount\": \"100000000000\"\n          }\n        ],\n        \"max_deposit_period\": \"23650000s\"\n      },\n      \"voting_params\": {\n        \"voting_period\": \"345600s\"\n      },\n      \"tally_params\": {\n        \"quorum\": \"0.250000000000000000\",\n        \"threshold\": \"0.500000000000000000\",\n        \"veto_threshold\": \"0.250000000000000000\"\n      }\n    },\n    \"graph\": null,\n    \"grid\": {\n      \"params\": {\n        \"max_routes\": 16\n      },\n      \"routes\": []\n    },\n    \"ibc\": {\n      \"client_genesis\": {\n        \"clients\": [],\n        \"clients_consensus\": [],\n        \"clients_metadata\": [],\n        \"params\": {\n          \"allowed_clients\": [\n            \"06-solomachine\",\n            \"07-tendermint\"\n          ]\n        },\n        \"create_localhost\": false,\n        \"next_client_sequence\": \"0\"\n      },\n      \"connection_genesis\": {\n        \"connections\": [],\n        \"client_connection_paths\": [],\n        \"next_connection_sequence\": \"0\",\n        \"params\": {\n          \"max_expected_time_per_block\": \"30000000000\"\n        }\n      },\n      \"channel_genesis\": {\n        \"channels\": [],\n        \"acknowledgements\": [],\n        \"commitments\": [],\n        \"receipts\": [],\n        \"send_sequences\": [],\n        \"recv_sequences\": [],\n        \"ack_sequences\": [],\n        \"next_channel_sequence\": \"0\"\n      }\n    },\n    \"liquidity\": {\n      \"params\": {\n        \"pool_types\": [\n          {\n            \"id\": 1,\n            \"name\": \"StandardLiquidityPool\",\n            \"min_reserve_coin_num\": 2,\n            \"max_reserve_coin_num\": 2,\n            \"description\": \"Standard liquidity pool with pool price function X/Y, ESPM constraint, and two kinds of reserve coins\"\n          }\n        ],\n        \"min_init_deposit_amount\": \"1000000\",\n        \"init_pool_coin_mint_amount\": \"1000000000000\",\n        \"max_reserve_coin_amount\": \"0\",\n        \"pool_creation_fee\": [\n          {\n            \"denom\": \"pussy\",\n            \"amount\": \"1000000000\"\n          }\n        ],\n        \"swap_fee_rate\": \"0.003000000000000000\",\n        \"withdraw_fee_rate\": \"0.003000000000000000\",\n        \"max_order_amount_ratio\": \"0.100000000000000000\",\n        \"unit_batch_height\": 1,\n        \"circuit_breaker_enabled\": false\n      },\n      \"pool_records\": []\n    },\n    \"mint\": {\n      \"minter\": {\n        \"inflation\": \"0.050000000000000000\",\n        \"annual_provisions\": \"0.000000000000000000\"\n      },\n      \"params\": {\n        \"mint_denom\": \"pussy\",\n        \"inflation_rate_change\": \"0.030000000000000000\",\n        \"inflation_max\": \"0.030000000000000000\",\n        \"inflation_min\": \"0.010000000000000000\",\n        \"goal_bonded\": \"0.100000000000000000\",\n        \"blocks_per_year\": \"6311520\"\n      }\n    },\n    \"params\": null,\n    \"rank\": {\n      \"params\": {\n        \"calculation_period\": \"5\",\n        \"damping_factor\": \"0.800000000000000000\",\n        \"tolerance\": \"0.001000000000000000\"\n      }\n    },\n    \"resources\": {\n      \"params\": {\n        \"max_slots\": 8,\n        \"halving_period_volt_blocks\": 6000000,\n        \"halving_period_ampere_blocks\": 6000000,\n        \"base_investmint_period_volt\": 2592000,\n        \"base_investmint_period_ampere\": 2592000,\n        \"min_investmint_period\": 86400,\n        \"base_investmint_amount_volt\": {\n          \"denom\": \"liquidpussy\",\n          \"amount\": \"1000000000\"\n        },\n        \"base_investmint_amount_ampere\": {\n          \"denom\": \"liquidpussy\",\n          \"amount\": \"100000000\"\n        }\n      }\n    },\n    \"slashing\": {\n      \"params\": {\n        \"signed_blocks_window\": \"10000\",\n        \"min_signed_per_window\": \"0.050000000000000000\",\n        \"downtime_jail_duration\": \"600s\",\n        \"slash_fraction_double_sign\": \"0.050000000000000000\",\n        \"slash_fraction_downtime\": \"0.000100000000000000\"\n      },\n      \"signing_infos\": [],\n      \"missed_blocks\": []\n    },\n    \"staking\": {\n      \"params\": {\n        \"unbonding_time\": \"2419200s\",\n        \"max_validators\": 69,\n        \"max_entries\": 35,\n        \"historical_entries\": 10000,\n        \"bond_denom\": \"pussy\"\n      },\n      \"last_total_power\": \"0\",\n      \"last_validator_powers\": [],\n      \"validators\": [],\n      \"delegations\": [],\n      \"unbonding_delegations\": [],\n      \"redelegations\": [],\n      \"exported\": false\n    },\n    \"transfer\": {\n      \"port_id\": \"transfer\",\n      \"denom_traces\": [],\n      \"params\": {\n        \"send_enabled\": true,\n        \"receive_enabled\": true\n      }\n    },\n    \"upgrade\": {},\n    \"vesting\": {},\n    \"wasm\": {\n      \"params\": {\n        \"code_upload_access\": {\n          \"permission\": \"Everybody\",\n          \"address\": \"\"\n        },\n        \"instantiate_default_permission\": \"Everybody\"\n      },\n      \"codes\": [],\n      \"contracts\": [],\n      \"sequences\": [],\n      \"gen_msgs\": []\n    }\n  }\n}"
  },
  {
    "path": "plugins/types/custom_querier.go",
    "content": "package types\n\nimport (\n\terrorsmod \"cosmossdk.io/errors\"\n\t\"encoding/json\"\n\t\"errors\"\n\twasmvmtypes \"github.com/CosmWasm/wasmvm/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tbankkeeper \"github.com/cosmos/cosmos-sdk/x/bank/keeper\"\n\tbandwidthkeeper \"github.com/cybercongress/go-cyber/v7/x/bandwidth/keeper\"\n\tbandwidthtypes \"github.com/cybercongress/go-cyber/v7/x/bandwidth/types\"\n\tdmnkeeper \"github.com/cybercongress/go-cyber/v7/x/dmn/keeper\"\n\tdmntypes \"github.com/cybercongress/go-cyber/v7/x/dmn/types\"\n\tgraphkeeper \"github.com/cybercongress/go-cyber/v7/x/graph/keeper\"\n\tgraphtypes \"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n\tgridkeeper \"github.com/cybercongress/go-cyber/v7/x/grid/keeper\"\n\tgridtypes \"github.com/cybercongress/go-cyber/v7/x/grid/types\"\n\trankkeeper \"github.com/cybercongress/go-cyber/v7/x/rank/keeper\"\n\tranktypes \"github.com/cybercongress/go-cyber/v7/x/rank/types\"\n\ttokenfactorykeeper \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/keeper\"\n\ttokenfactorytypes \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\ntype ModuleQuerier interface {\n\tHandleQuery(ctx sdk.Context, query CyberQuery) ([]byte, error)\n}\n\nvar ErrHandleQuery = errors.New(\"error handle query\")\n\ntype QueryPlugin struct {\n\tmoduleQueriers     map[string]ModuleQuerier\n\trankKeeper         *rankkeeper.StateKeeper\n\tgraphKeeper        *graphkeeper.GraphKeeper\n\tdmnKeeper          *dmnkeeper.Keeper\n\tgridKeeper         *gridkeeper.Keeper\n\tbandwidthMeter     *bandwidthkeeper.BandwidthMeter\n\tbankKeeper         *bankkeeper.Keeper\n\ttokenFactoryKeeper *tokenfactorykeeper.Keeper\n}\n\nfunc NewQueryPlugin(\n\tmoduleQueriers map[string]ModuleQuerier,\n\trank *rankkeeper.StateKeeper,\n\tgraph *graphkeeper.GraphKeeper,\n\tdmn *dmnkeeper.Keeper,\n\tgrid *gridkeeper.Keeper,\n\tbandwidth *bandwidthkeeper.BandwidthMeter,\n\tbank *bankkeeper.Keeper,\n\ttokenFactory *tokenfactorykeeper.Keeper,\n) *QueryPlugin {\n\treturn &QueryPlugin{\n\t\tmoduleQueriers:     moduleQueriers,\n\t\trankKeeper:         rank,\n\t\tgraphKeeper:        graph,\n\t\tdmnKeeper:          dmn,\n\t\tgridKeeper:         grid,\n\t\tbandwidthMeter:     bandwidth,\n\t\tbankKeeper:         bank,\n\t\ttokenFactoryKeeper: tokenFactory,\n\t}\n}\n\nfunc CustomQuerier(qp *QueryPlugin) func(ctx sdk.Context, request json.RawMessage) ([]byte, error) {\n\treturn func(ctx sdk.Context, request json.RawMessage) ([]byte, error) {\n\t\tvar contractQuery CyberQuery\n\t\tif err := json.Unmarshal(request, &contractQuery); err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"cyber query error\")\n\t\t}\n\n\t\tswitch {\n\t\tcase contractQuery.ParticleRank != nil:\n\t\t\treturn qp.moduleQueriers[ranktypes.ModuleName].HandleQuery(ctx, contractQuery)\n\t\tcase contractQuery.GraphStats != nil:\n\t\t\treturn qp.moduleQueriers[graphtypes.ModuleName].HandleQuery(ctx, contractQuery)\n\t\tcase contractQuery.Thought != nil:\n\t\t\treturn qp.moduleQueriers[dmntypes.ModuleName].HandleQuery(ctx, contractQuery)\n\t\tcase contractQuery.ThoughtStats != nil:\n\t\t\treturn qp.moduleQueriers[dmntypes.ModuleName].HandleQuery(ctx, contractQuery)\n\t\tcase contractQuery.ThoughtsFees != nil:\n\t\t\treturn qp.moduleQueriers[dmntypes.ModuleName].HandleQuery(ctx, contractQuery)\n\t\tcase contractQuery.SourceRoutes != nil:\n\t\t\treturn qp.moduleQueriers[gridtypes.ModuleName].HandleQuery(ctx, contractQuery)\n\t\tcase contractQuery.SourceRoutedEnergy != nil:\n\t\t\treturn qp.moduleQueriers[gridtypes.ModuleName].HandleQuery(ctx, contractQuery)\n\t\tcase contractQuery.DestinationRoutedEnergy != nil:\n\t\t\treturn qp.moduleQueriers[gridtypes.ModuleName].HandleQuery(ctx, contractQuery)\n\t\tcase contractQuery.Route != nil:\n\t\t\treturn qp.moduleQueriers[gridtypes.ModuleName].HandleQuery(ctx, contractQuery)\n\t\tcase contractQuery.BandwidthLoad != nil:\n\t\t\treturn qp.moduleQueriers[bandwidthtypes.ModuleName].HandleQuery(ctx, contractQuery)\n\t\tcase contractQuery.BandwidthPrice != nil:\n\t\t\treturn qp.moduleQueriers[bandwidthtypes.ModuleName].HandleQuery(ctx, contractQuery)\n\t\tcase contractQuery.TotalBandwidth != nil:\n\t\t\treturn qp.moduleQueriers[bandwidthtypes.ModuleName].HandleQuery(ctx, contractQuery)\n\t\tcase contractQuery.NeuronBandwidth != nil:\n\t\t\treturn qp.moduleQueriers[bandwidthtypes.ModuleName].HandleQuery(ctx, contractQuery)\n\t\t//case contractQuery.TokenFactory != nil:\n\t\t//\treturn qp.moduleQueriers[tokenfactorytypes.ModuleName].HandleQuery(ctx, contractQuery)\n\t\tcase contractQuery.FullDenom != nil:\n\t\t\treturn qp.moduleQueriers[tokenfactorytypes.ModuleName].HandleQuery(ctx, contractQuery)\n\t\tcase contractQuery.Admin != nil:\n\t\t\treturn qp.moduleQueriers[tokenfactorytypes.ModuleName].HandleQuery(ctx, contractQuery)\n\t\tcase contractQuery.Metadata != nil:\n\t\t\treturn qp.moduleQueriers[tokenfactorytypes.ModuleName].HandleQuery(ctx, contractQuery)\n\t\tcase contractQuery.DenomsByCreator != nil:\n\t\t\treturn qp.moduleQueriers[tokenfactorytypes.ModuleName].HandleQuery(ctx, contractQuery)\n\t\tcase contractQuery.Params != nil:\n\t\t\treturn qp.moduleQueriers[tokenfactorytypes.ModuleName].HandleQuery(ctx, contractQuery)\n\t\tdefault:\n\t\t\treturn nil, wasmvmtypes.UnsupportedRequest{Kind: \"unknown cyber query variant\"}\n\t\t}\n\n\t\t// Iterate over the module queriers and dispatch to the appropriate one\n\t\t//for _, querier := range qp.moduleQueriers {\n\t\t//\tresp, err := querier.HandleQuery(ctx, contractQuery)\n\t\t//\tif err != nil {\n\t\t//\t\tif err == ErrHandleQuery {\n\t\t//\t\t\t// This querier cannot handle the query, try the next one\n\t\t//\t\t\tcontinue\n\t\t//\t\t}\n\t\t//\t\t// Some other error occurred, return it\n\t\t//\t\treturn nil, err\n\t\t//\t}\n\t\t//\t// Query was handled successfully, return the response\n\t\t//\treturn resp, nil\n\t\t//}\n\t\t//\n\t\t//// If no querier could handle the query, return an error\n\t\t//return nil, wasmvmtypes.UnsupportedRequest{Kind: \"unknown cyber query variant\"}\n\t}\n}\n"
  },
  {
    "path": "plugins/types/dispatch_msg.go",
    "content": "package types\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\tbankkeeper \"github.com/cosmos/cosmos-sdk/x/bank/keeper\"\n\tdmnkeeper \"github.com/cybercongress/go-cyber/v7/x/dmn/keeper\"\n\tdmntypes \"github.com/cybercongress/go-cyber/v7/x/dmn/types\"\n\tgraphkeeper \"github.com/cybercongress/go-cyber/v7/x/graph/keeper\"\n\tgraphtypes \"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n\tgridkeeper \"github.com/cybercongress/go-cyber/v7/x/grid/keeper\"\n\tgridtypes \"github.com/cybercongress/go-cyber/v7/x/grid/types\"\n\tresourceskeeper \"github.com/cybercongress/go-cyber/v7/x/resources/keeper\"\n\tresourcestypes \"github.com/cybercongress/go-cyber/v7/x/resources/types\"\n\ttokenfactorykeeper \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/keeper\"\n\ttokenfactorytypes \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n\n\terrorsmod \"cosmossdk.io/errors\"\n\twasmkeeper \"github.com/CosmWasm/wasmd/x/wasm/keeper\"\n\twasmvmtypes \"github.com/CosmWasm/wasmvm/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tsdkerrors \"github.com/cosmos/cosmos-sdk/types/errors\"\n)\n\nvar _ wasmkeeper.Messenger = (*CustomMessenger)(nil)\n\nvar ErrHandleMsg = errors.New(\"error handle message\")\n\ntype ModuleMessenger interface {\n\tHandleMsg(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg CyberMsg) ([]sdk.Event, [][]byte, error)\n}\n\ntype CustomMessenger struct {\n\twrapped            wasmkeeper.Messenger\n\tmoduleMessengers   map[string]ModuleMessenger\n\tgraphKeeper        *graphkeeper.GraphKeeper\n\tdmnKeeper          *dmnkeeper.Keeper\n\tgridKeeper         *gridkeeper.Keeper\n\tresourcesKeeper    *resourceskeeper.Keeper\n\tbankKeeper         *bankkeeper.Keeper\n\ttokenFactoryKeeper *tokenfactorykeeper.Keeper\n}\n\nfunc CustomMessageDecorator(\n\tmoduleMessengers map[string]ModuleMessenger,\n\tgraph *graphkeeper.GraphKeeper,\n\tdmn *dmnkeeper.Keeper,\n\tgrid *gridkeeper.Keeper,\n\tresources *resourceskeeper.Keeper,\n\tbank *bankkeeper.Keeper,\n\ttokenFactory *tokenfactorykeeper.Keeper,\n) func(wasmkeeper.Messenger) wasmkeeper.Messenger {\n\treturn func(old wasmkeeper.Messenger) wasmkeeper.Messenger {\n\t\treturn &CustomMessenger{\n\t\t\twrapped:            old,\n\t\t\tmoduleMessengers:   moduleMessengers,\n\t\t\tgraphKeeper:        graph,\n\t\t\tdmnKeeper:          dmn,\n\t\t\tgridKeeper:         grid,\n\t\t\tresourcesKeeper:    resources,\n\t\t\tbankKeeper:         bank,\n\t\t\ttokenFactoryKeeper: tokenFactory,\n\t\t}\n\t}\n}\n\nfunc (m *CustomMessenger) DispatchMsg(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) ([]sdk.Event, [][]byte, error) {\n\t// Return early if msg.Custom is nil\n\tif msg.Custom == nil {\n\t\treturn m.wrapped.DispatchMsg(ctx, contractAddr, contractIBCPortID, msg)\n\t}\n\n\tvar contractMsg CyberMsg\n\tif err := json.Unmarshal(msg.Custom, &contractMsg); err != nil {\n\t\tctx.Logger().Debug(\"json.Unmarshal: failed to decode incoming custom cosmos message\",\n\t\t\t\"from_address\", contractAddr.String(),\n\t\t\t\"message\", string(msg.Custom),\n\t\t\t\"error\", err,\n\t\t)\n\t\treturn nil, nil, errorsmod.Wrap(err, \"cyber msg error\")\n\t}\n\n\tswitch {\n\tcase contractMsg.Cyberlink != nil:\n\t\treturn m.moduleMessengers[graphtypes.ModuleName].HandleMsg(ctx, contractAddr, contractIBCPortID, contractMsg)\n\tcase contractMsg.Investmint != nil:\n\t\treturn m.moduleMessengers[resourcestypes.ModuleName].HandleMsg(ctx, contractAddr, contractIBCPortID, contractMsg)\n\tcase contractMsg.CreateEnergyRoute != nil:\n\t\treturn m.moduleMessengers[gridtypes.ModuleName].HandleMsg(ctx, contractAddr, contractIBCPortID, contractMsg)\n\tcase contractMsg.EditEnergyRoute != nil:\n\t\treturn m.moduleMessengers[gridtypes.ModuleName].HandleMsg(ctx, contractAddr, contractIBCPortID, contractMsg)\n\tcase contractMsg.EditEnergyRouteName != nil:\n\t\treturn m.moduleMessengers[gridtypes.ModuleName].HandleMsg(ctx, contractAddr, contractIBCPortID, contractMsg)\n\tcase contractMsg.DeleteEnergyRoute != nil:\n\t\treturn m.moduleMessengers[gridtypes.ModuleName].HandleMsg(ctx, contractAddr, contractIBCPortID, contractMsg)\n\n\tcase contractMsg.CreateThought != nil:\n\t\treturn m.moduleMessengers[dmntypes.ModuleName].HandleMsg(ctx, contractAddr, contractIBCPortID, contractMsg)\n\tcase contractMsg.ForgetThought != nil:\n\t\treturn m.moduleMessengers[dmntypes.ModuleName].HandleMsg(ctx, contractAddr, contractIBCPortID, contractMsg)\n\tcase contractMsg.ChangeThoughtInput != nil:\n\t\treturn m.moduleMessengers[dmntypes.ModuleName].HandleMsg(ctx, contractAddr, contractIBCPortID, contractMsg)\n\tcase contractMsg.ChangeThoughtPeriod != nil:\n\t\treturn m.moduleMessengers[dmntypes.ModuleName].HandleMsg(ctx, contractAddr, contractIBCPortID, contractMsg)\n\tcase contractMsg.ChangeThoughtBlock != nil:\n\t\treturn m.moduleMessengers[dmntypes.ModuleName].HandleMsg(ctx, contractAddr, contractIBCPortID, contractMsg)\n\tcase contractMsg.ChangeThoughtGasPrice != nil:\n\t\treturn m.moduleMessengers[dmntypes.ModuleName].HandleMsg(ctx, contractAddr, contractIBCPortID, contractMsg)\n\tcase contractMsg.ChangeThoughtParticle != nil:\n\t\treturn m.moduleMessengers[dmntypes.ModuleName].HandleMsg(ctx, contractAddr, contractIBCPortID, contractMsg)\n\tcase contractMsg.ChangeThoughtName != nil:\n\t\treturn m.moduleMessengers[dmntypes.ModuleName].HandleMsg(ctx, contractAddr, contractIBCPortID, contractMsg)\n\tcase contractMsg.TokenFactory != nil:\n\t\treturn m.moduleMessengers[tokenfactorytypes.ModuleName].HandleMsg(ctx, contractAddr, contractIBCPortID, contractMsg)\n\tdefault:\n\t\t// If no handler could handle the message, return an error\n\t\treturn nil, nil, errorsmod.Wrap(sdkerrors.ErrUnknownRequest, \"unknown cyber message type\")\n\t}\n\n\t// Iterate over the module message handlers and dispatch to the appropriate one\n\t//for _, handler := range m.moduleMessengers {\n\t//\tevent, resp, err := handler.HandleMsg(ctx, contractAddr, contractIBCPortID, contractMsg)\n\t//\tif err != nil {\n\t//\t\tif err == ErrHandleMsg {\n\t//\t\t\t// This handler cannot handle the message, try the next one\n\t//\t\t\tcontinue\n\t//\t\t}\n\t//\t\t// Some other error occurred, return it\n\t//\t\treturn nil, nil, err\n\t//\t}\n\t//\t// Message was handled successfully, return the result\n\t//\treturn event, resp, nil\n\t//}\n\t//\n\t//// If no handler could handle the message, return an error\n\t//return nil, nil, errorsmod.Wrap(sdkerrors.ErrUnknownRequest, \"unknown cyber message type\")\n\n}\n"
  },
  {
    "path": "plugins/types/stargate_querier.go",
    "content": "package types\n\nimport (\n\t\"fmt\"\n\twasmvmtypes \"github.com/CosmWasm/wasmvm/types\"\n\tabci \"github.com/cometbft/cometbft/abci/types\"\n\t\"github.com/cosmos/cosmos-sdk/baseapp\"\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\n// StargateQuerier dispatches whitelisted stargate queries\nfunc StargateQuerier(queryRouter baseapp.GRPCQueryRouter, cdc codec.Codec) func(ctx sdk.Context, request *wasmvmtypes.StargateQuery) ([]byte, error) {\n\treturn func(ctx sdk.Context, request *wasmvmtypes.StargateQuery) ([]byte, error) {\n\t\tprotoResponseType, err := GetWhitelistedQuery(request.Path)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// no matter what happens after this point, we must return\n\t\t// the response type to prevent sync.Pool from leaking.\n\t\tdefer ReturnStargateResponseToPool(request.Path, protoResponseType)\n\n\t\troute := queryRouter.Route(request.Path)\n\t\tif route == nil {\n\t\t\treturn nil, wasmvmtypes.UnsupportedRequest{Kind: fmt.Sprintf(\"No route to query '%s'\", request.Path)}\n\t\t}\n\n\t\tres, err := route(ctx, abci.RequestQuery{\n\t\t\tData: request.Data,\n\t\t\tPath: request.Path,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif res.Value == nil {\n\t\t\treturn nil, fmt.Errorf(\"Res returned from abci query route is nil\")\n\t\t}\n\n\t\tbz, err := ConvertProtoToJSONMarshal(protoResponseType, res.Value, cdc)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\treturn bz, nil\n\t}\n}\n\n// ConvertProtoToJSONMarshal unmarshals the given bytes into a proto message and then marshals it to json.\n// This is done so that clients calling stargate queries do not need to define their own proto unmarshalers,\n// being able to use response directly by json marshalling, which is supported in cosmwasm.\nfunc ConvertProtoToJSONMarshal(protoResponseType codec.ProtoMarshaler, bz []byte, cdc codec.Codec) ([]byte, error) {\n\t// unmarshal binary into stargate response data structure\n\terr := cdc.Unmarshal(bz, protoResponseType)\n\tif err != nil {\n\t\treturn nil, wasmvmtypes.Unknown{}\n\t}\n\n\tbz, err = cdc.MarshalJSON(protoResponseType)\n\tif err != nil {\n\t\treturn nil, wasmvmtypes.Unknown{}\n\t}\n\n\tprotoResponseType.Reset()\n\n\treturn bz, nil\n}\n"
  },
  {
    "path": "plugins/types/stargate_queries.go",
    "content": "package types\n\nimport (\n\t\"fmt\"\n\twasmvmtypes \"github.com/CosmWasm/wasmvm/types\"\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tauthtypes \"github.com/cosmos/cosmos-sdk/x/auth/types\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n\tdistributiontypes \"github.com/cosmos/cosmos-sdk/x/distribution/types\"\n\tgovtypesv1 \"github.com/cosmos/cosmos-sdk/x/gov/types/v1\"\n\tslashingtypes \"github.com/cosmos/cosmos-sdk/x/slashing/types\"\n\tstakingtypes \"github.com/cosmos/cosmos-sdk/x/staking/types\"\n\tibctransfertypes \"github.com/cosmos/ibc-go/v7/modules/apps/transfer/types\"\n\ttokenfactorytypes \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n\t\"sync\"\n)\n\n// stargateResponsePools keeps whitelist and its deterministic\n// response binding for stargate queries.\n// CONTRACT: since results of queries go into blocks, queries being added here should always be\n// deterministic or can cause non-determinism in the state machine.\n//\n// The query is multi-threaded so we're using a sync.Pool\n// to manage the allocation and de-allocation of newly created\n// pb objects.\nvar stargateResponsePools = make(map[string]*sync.Pool)\n\n// Note: When adding a migration here, we should also add it to the Async ICQ params in the upgrade.\n// In the future we may want to find a better way to keep these in sync\n\n//nolint:staticcheck\nfunc init() {\n\t// ibc queries\n\tsetWhitelistedQuery(\"/ibc.applications.transfer.v1.Query/DenomTrace\", &ibctransfertypes.QueryDenomTraceResponse{})\n\n\t// cosmos-sdk queries\n\n\t// auth\n\tsetWhitelistedQuery(\"/cosmos.auth.v1beta1.Query/Account\", &authtypes.QueryAccountResponse{})\n\tsetWhitelistedQuery(\"/cosmos.auth.v1beta1.Query/Params\", &authtypes.QueryParamsResponse{})\n\tsetWhitelistedQuery(\"/cosmos.auth.v1beta1.Query/ModuleAccounts\", &authtypes.QueryModuleAccountsResponse{})\n\n\t// bank\n\tsetWhitelistedQuery(\"/cosmos.bank.v1beta1.Query/Balance\", &banktypes.QueryBalanceResponse{})\n\tsetWhitelistedQuery(\"/cosmos.bank.v1beta1.Query/DenomMetadata\", &banktypes.QueryDenomMetadataResponse{})\n\tsetWhitelistedQuery(\"/cosmos.bank.v1beta1.Query/DenomsMetadata\", &banktypes.QueryDenomsMetadataResponse{})\n\tsetWhitelistedQuery(\"/cosmos.bank.v1beta1.Query/Params\", &banktypes.QueryParamsResponse{})\n\tsetWhitelistedQuery(\"/cosmos.bank.v1beta1.Query/SupplyOf\", &banktypes.QuerySupplyOfResponse{})\n\n\t// distribution\n\tsetWhitelistedQuery(\"/cosmos.distribution.v1beta1.Query/Params\", &distributiontypes.QueryParamsResponse{})\n\tsetWhitelistedQuery(\"/cosmos.distribution.v1beta1.Query/DelegatorWithdrawAddress\", &distributiontypes.QueryDelegatorWithdrawAddressResponse{})\n\tsetWhitelistedQuery(\"/cosmos.distribution.v1beta1.Query/ValidatorCommission\", &distributiontypes.QueryValidatorCommissionResponse{})\n\n\t// gov\n\tsetWhitelistedQuery(\"/cosmos.gov.v1beta1.Query/Deposit\", &govtypesv1.QueryDepositResponse{})\n\tsetWhitelistedQuery(\"/cosmos.gov.v1beta1.Query/Params\", &govtypesv1.QueryParamsResponse{})\n\tsetWhitelistedQuery(\"/cosmos.gov.v1beta1.Query/Vote\", &govtypesv1.QueryVoteResponse{})\n\n\t// slashing\n\tsetWhitelistedQuery(\"/cosmos.slashing.v1beta1.Query/Params\", &slashingtypes.QueryParamsResponse{})\n\tsetWhitelistedQuery(\"/cosmos.slashing.v1beta1.Query/SigningInfo\", &slashingtypes.QuerySigningInfoResponse{})\n\n\t// staking\n\tsetWhitelistedQuery(\"/cosmos.staking.v1beta1.Query/Delegation\", &stakingtypes.QueryDelegationResponse{})\n\tsetWhitelistedQuery(\"/cosmos.staking.v1beta1.Query/Params\", &stakingtypes.QueryParamsResponse{})\n\tsetWhitelistedQuery(\"/cosmos.staking.v1beta1.Query/Validator\", &stakingtypes.QueryValidatorResponse{})\n\n\t// tokenfactory\n\tsetWhitelistedQuery(\"/osmosis.tokenfactory.v1beta1.Query/Params\", &tokenfactorytypes.QueryParamsResponse{})\n\tsetWhitelistedQuery(\"/osmosis.tokenfactory.v1beta1.Query/DenomAuthorityMetadata\", &tokenfactorytypes.QueryDenomAuthorityMetadataResponse{})\n\t// Does not include denoms_from_creator, TBD if this is the index we want contracts to use instead of admin\n}\n\n// IsWhitelistedQuery returns if the query is not whitelisted.\nfunc IsWhitelistedQuery(queryPath string) error {\n\t_, isWhitelisted := stargateResponsePools[queryPath]\n\tif !isWhitelisted {\n\t\treturn wasmvmtypes.UnsupportedRequest{Kind: fmt.Sprintf(\"'%s' path is not allowed from the contract\", queryPath)}\n\t}\n\treturn nil\n}\n\n// GetWhitelistedQuery returns the whitelisted query at the provided path.\n// If the query does not exist, or it was setup wrong by the chain, this returns an error.\n// CONTRACT: must call returnStargateResponseToPool in order to avoid pointless allocs.\nfunc GetWhitelistedQuery(queryPath string) (codec.ProtoMarshaler, error) {\n\tprotoResponseAny, isWhitelisted := stargateResponsePools[queryPath]\n\tif !isWhitelisted {\n\t\treturn nil, wasmvmtypes.UnsupportedRequest{Kind: fmt.Sprintf(\"'%s' path is not allowed from the contract\", queryPath)}\n\t}\n\tprotoMarshaler, ok := protoResponseAny.Get().(codec.ProtoMarshaler)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"failed to assert type to codec.ProtoMarshaler\")\n\t}\n\treturn protoMarshaler, nil\n}\n\ntype protoTypeG[T any] interface {\n\t*T\n\tcodec.ProtoMarshaler\n}\n\n// setWhitelistedQuery sets the whitelisted query at the provided path.\n// This method also creates a sync.Pool for the provided protoMarshaler.\n// We use generics so we can properly instantiate an object that the\n// queryPath expects as a response.\nfunc setWhitelistedQuery[T any, PT protoTypeG[T]](queryPath string, _ PT) {\n\tstargateResponsePools[queryPath] = &sync.Pool{\n\t\tNew: func() any {\n\t\t\treturn PT(new(T))\n\t\t},\n\t}\n}\n\n// ReturnStargateResponseToPool returns the provided protoMarshaler to the appropriate pool based on it's query path.\nfunc ReturnStargateResponseToPool(queryPath string, pb codec.ProtoMarshaler) {\n\tstargateResponsePools[queryPath].Put(pb)\n}\n\nfunc GetStargateWhitelistedPaths() (keys []string) {\n\t// Iterate over the map and collect the keys\n\tkeys = make([]string, 0, len(stargateResponsePools))\n\tfor k := range stargateResponsePools {\n\t\tkeys = append(keys, k)\n\t}\n\treturn keys\n}\n"
  },
  {
    "path": "plugins/types/types.go",
    "content": "package types\n\nimport (\n\tbandwidthtypes \"github.com/cybercongress/go-cyber/v7/x/bandwidth/types\"\n\tdmntypes \"github.com/cybercongress/go-cyber/v7/x/dmn/types\"\n\tgraphtypes \"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n\tgridtypes \"github.com/cybercongress/go-cyber/v7/x/grid/types\"\n\tranktypes \"github.com/cybercongress/go-cyber/v7/x/rank/types\"\n\tresourcestypes \"github.com/cybercongress/go-cyber/v7/x/resources/types\"\n\ttokenfactorytypes \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/wasm/types\"\n)\n\ntype CyberQuery struct {\n\t// rankKeeper queries\n\tParticleRank *ranktypes.QueryRankRequest `json:\"particle_rank,omitempty\"`\n\t// TODO add IsLinkExist, IsAnyLinkExist\n\n\t// graph queries\n\tGraphStats *graphtypes.QueryGraphStatsRequest `json:\"graph_stats,omitempty\"`\n\n\t// dmn queries\n\tThought      *dmntypes.QueryThoughtParamsRequest `json:\"thought,omitempty\"`\n\tThoughtStats *dmntypes.QueryThoughtParamsRequest `json:\"thought_stats,omitempty\"`\n\tThoughtsFees *dmntypes.QueryThoughtsFeesRequest  `json:\"thoughts_fees,omitempty\"`\n\n\t// grid queries\n\tSourceRoutes            *gridtypes.QuerySourceRequest      `json:\"source_routes,omitempty\"`\n\tSourceRoutedEnergy      *gridtypes.QuerySourceRequest      `json:\"source_routed_energy,omitempty\"`\n\tDestinationRoutedEnergy *gridtypes.QueryDestinationRequest `json:\"destination_routed_energy,omitempty\"`\n\tRoute                   *gridtypes.QueryRouteRequest       `json:\"route,omitempty\"`\n\n\t// bandwidth queries\n\tBandwidthLoad   *bandwidthtypes.QueryLoadRequest            `json:\"bandwidth_load,omitempty\"`\n\tBandwidthPrice  *bandwidthtypes.QueryPriceRequest           `json:\"bandwidth_price,omitempty\"`\n\tTotalBandwidth  *bandwidthtypes.QueryTotalBandwidthRequest  `json:\"total_bandwidth,omitempty\"`\n\tNeuronBandwidth *bandwidthtypes.QueryNeuronBandwidthRequest `json:\"neuron_bandwidth,omitempty\"`\n\n\t// token factory queries\n\t//TokenFactory *types.TokenFactoryQuery `json:\"token_factory,omitempty\"`\n\n\tFullDenom       *tokenfactorytypes.FullDenom       `json:\"full_denom,omitempty\"`\n\tAdmin           *tokenfactorytypes.DenomAdmin      `json:\"admin,omitempty\"`\n\tMetadata        *tokenfactorytypes.GetMetadata     `json:\"metadata,omitempty\"`\n\tDenomsByCreator *tokenfactorytypes.DenomsByCreator `json:\"denoms_by_creator,omitempty\"`\n\tParams          *tokenfactorytypes.GetParams       `json:\"params,omitempty\"`\n}\n\ntype CyberMsg struct {\n\t// graph messages\n\tCyberlink *graphtypes.MsgCyberlink `json:\"cyberlink,omitempty\"`\n\n\t// dmn messages\n\tCreateThought         *dmntypes.MsgCreateThought         `json:\"create_thought,omitempty\"`\n\tForgetThought         *dmntypes.MsgForgetThought         `json:\"forget_thought,omitempty\"`\n\tChangeThoughtInput    *dmntypes.MsgChangeThoughtInput    `json:\"change_thought_input,omitempty\"`\n\tChangeThoughtPeriod   *dmntypes.MsgChangeThoughtPeriod   `json:\"change_thought_period,omitempty\"`\n\tChangeThoughtBlock    *dmntypes.MsgChangeThoughtBlock    `json:\"change_thought_block,omitempty\"`\n\tChangeThoughtGasPrice *dmntypes.MsgChangeThoughtGasPrice `json:\"change_thought_gas_price,omitempty\"`\n\tChangeThoughtParticle *dmntypes.MsgChangeThoughtParticle `json:\"change_thought_particle,omitempty\"`\n\tChangeThoughtName     *dmntypes.MsgChangeThoughtName     `json:\"change_thought_name,omitempty\"`\n\n\t// grid messages\n\tCreateEnergyRoute   *gridtypes.MsgCreateRoute   `json:\"create_energy_route,omitempty\"`\n\tEditEnergyRoute     *gridtypes.MsgEditRoute     `json:\"edit_energy_route,omitempty\"`\n\tEditEnergyRouteName *gridtypes.MsgEditRouteName `json:\"edit_energy_route_name,omitempty\"`\n\tDeleteEnergyRoute   *gridtypes.MsgDeleteRoute   `json:\"delete_energy_route,omitempty\"`\n\n\t// resources messages\n\tInvestmint *resourcestypes.MsgInvestmint `json:\"investmint,omitempty\"`\n\n\t// token factory messages\n\tTokenFactory *tokenfactorytypes.TokenFactoryMsg `json:\"token_factory,omitempty\"`\n}\n"
  },
  {
    "path": "plugins/wasm.go",
    "content": "package plugins\n\nimport (\n\t\"github.com/CosmWasm/wasmd/x/wasm\"\n\twasmkeeper \"github.com/CosmWasm/wasmd/x/wasm/keeper\"\n\t\"github.com/cosmos/cosmos-sdk/baseapp\"\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tauthkeeper \"github.com/cosmos/cosmos-sdk/x/auth/keeper\"\n\tbankkeeper \"github.com/cosmos/cosmos-sdk/x/bank/keeper\"\n\tbandwidthtypes \"github.com/cybercongress/go-cyber/v7/x/bandwidth/types\"\n\tdmntypes \"github.com/cybercongress/go-cyber/v7/x/dmn/types\"\n\tgraphtypes \"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n\tgridtypes \"github.com/cybercongress/go-cyber/v7/x/grid/types\"\n\tranktypes \"github.com/cybercongress/go-cyber/v7/x/rank/types\"\n\tresourcestypes \"github.com/cybercongress/go-cyber/v7/x/resources/types\"\n\ttokenfactorykeeper \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/keeper\"\n\ttokenfactorytypes \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/plugins/types\"\n\tcyberbankkeeper \"github.com/cybercongress/go-cyber/v7/x/cyberbank/keeper\"\n\tdmnwasm \"github.com/cybercongress/go-cyber/v7/x/dmn/wasm\"\n\tresourceskeeper \"github.com/cybercongress/go-cyber/v7/x/resources/keeper\"\n\n\tpluginstypes \"github.com/cybercongress/go-cyber/v7/plugins/types\"\n\tbandwidthkeeper \"github.com/cybercongress/go-cyber/v7/x/bandwidth/keeper\"\n\tbandwidthwasm \"github.com/cybercongress/go-cyber/v7/x/bandwidth/wasm\"\n\tdmnkeeper \"github.com/cybercongress/go-cyber/v7/x/dmn/keeper\"\n\tgraphkeeper \"github.com/cybercongress/go-cyber/v7/x/graph/keeper\"\n\tgraphwasm \"github.com/cybercongress/go-cyber/v7/x/graph/wasm\"\n\tgridkeeper \"github.com/cybercongress/go-cyber/v7/x/grid/keeper\"\n\tgridwasm \"github.com/cybercongress/go-cyber/v7/x/grid/wasm\"\n\trankkeeper \"github.com/cybercongress/go-cyber/v7/x/rank/keeper\"\n\trankwasm \"github.com/cybercongress/go-cyber/v7/x/rank/wasm\"\n\tresourceswasm \"github.com/cybercongress/go-cyber/v7/x/resources/wasm\"\n\ttokenfactorywasm \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/wasm\"\n)\n\nfunc RegisterCustomPlugins(\n\trank *rankkeeper.StateKeeper,\n\tgraph *graphkeeper.GraphKeeper,\n\tdmn *dmnkeeper.Keeper,\n\tgrid *gridkeeper.Keeper,\n\tbandwidth *bandwidthkeeper.BandwidthMeter,\n\tresources *resourceskeeper.Keeper,\n\tgraphIndex *graphkeeper.IndexKeeper,\n\taccount *authkeeper.AccountKeeper,\n\tcyberbank *cyberbankkeeper.IndexedKeeper,\n\tbank *bankkeeper.Keeper,\n\ttokenFactory *tokenfactorykeeper.Keeper,\n) []wasmkeeper.Option {\n\trankQuerier := rankwasm.NewWasmQuerier(rank)\n\tgraphQuerier := graphwasm.NewWasmQuerier(graph)\n\tdmnQuerier := dmnwasm.NewWasmQuerier(dmn)\n\tgridQuerier := gridwasm.NewWasmQuerier(grid)\n\tbandwidthQuerier := bandwidthwasm.NewWasmQuerier(bandwidth)\n\ttokenFactoryQuerier := tokenfactorywasm.NewWasmQuerier(*bank, tokenFactory)\n\n\tgraphMessenger := graphwasm.NewMessenger(graph, graphIndex, account, cyberbank, bandwidth)\n\tdmnMessenger := dmnwasm.NewMessenger(dmn)\n\tgridMessenger := gridwasm.NewMessenger(grid)\n\tresourcesMessenger := resourceswasm.NewMessenger(resources)\n\ttokenFactoryMessenger := tokenfactorywasm.NewMessenger(*bank, tokenFactory)\n\n\tmoduleQueriers := map[string]types.ModuleQuerier{\n\t\tranktypes.ModuleName:         rankQuerier,\n\t\tgraphtypes.ModuleName:        graphQuerier,\n\t\tdmntypes.ModuleName:          dmnQuerier,\n\t\tgridtypes.ModuleName:         gridQuerier,\n\t\tbandwidthtypes.ModuleName:    bandwidthQuerier,\n\t\ttokenfactorytypes.ModuleName: tokenFactoryQuerier,\n\t}\n\n\twasmQueryPlugin := types.NewQueryPlugin(\n\t\tmoduleQueriers,\n\t\trank,\n\t\tgraph,\n\t\tdmn,\n\t\tgrid,\n\t\tbandwidth,\n\t\tbank,\n\t\ttokenFactory,\n\t)\n\n\tqueryPluginOpt := wasmkeeper.WithQueryPlugins(&wasmkeeper.QueryPlugins{\n\t\tCustom: types.CustomQuerier(wasmQueryPlugin),\n\t})\n\n\tmoduleMessengers := map[string]types.ModuleMessenger{\n\t\tgraphtypes.ModuleName:        graphMessenger,\n\t\tdmntypes.ModuleName:          dmnMessenger,\n\t\tgridtypes.ModuleName:         gridMessenger,\n\t\tresourcestypes.ModuleName:    resourcesMessenger,\n\t\ttokenfactorytypes.ModuleName: tokenFactoryMessenger,\n\t}\n\n\tmessengerDecoratorOpt := wasmkeeper.WithMessageHandlerDecorator(\n\t\ttypes.CustomMessageDecorator(\n\t\t\tmoduleMessengers,\n\t\t\tgraph,\n\t\t\tdmn,\n\t\t\tgrid,\n\t\t\tresources,\n\t\t\tbank,\n\t\t\ttokenFactory,\n\t\t),\n\t)\n\n\treturn []wasm.Option{\n\t\tqueryPluginOpt,\n\t\tmessengerDecoratorOpt,\n\t}\n}\n\nfunc RegisterStargateQueries(queryRouter baseapp.GRPCQueryRouter, codec codec.Codec) []wasmkeeper.Option {\n\tqueryPluginOpt := wasmkeeper.WithQueryPlugins(&wasmkeeper.QueryPlugins{\n\t\tStargate: pluginstypes.StargateQuerier(queryRouter, codec),\n\t})\n\n\treturn []wasmkeeper.Option{\n\t\tqueryPluginOpt,\n\t}\n}\n"
  },
  {
    "path": "proto/buf.gen.doc.yaml",
    "content": "version: v1\nplugins:\n  - name: doc\n    out: ../docs/proto\n    opt: ../docs/proto/protodoc-markdown.tmpl,proto-docs.md\n    strategy: all"
  },
  {
    "path": "proto/buf.gen.gogo.yaml",
    "content": "version: v1\nplugins:\n  - name: gocosmos\n    out: ..\n    opt: plugins=grpc,Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types\n  - name: grpc-gateway\n    out: ..\n    opt: logtostderr=true,allow_colon_final_segments=true"
  },
  {
    "path": "proto/buf.gen.swagger.yaml",
    "content": "version: v1\nplugins:\n  - name: swagger\n    out: ../tmp-swagger-gen\n    opt: logtostderr=true,fqn_for_swagger_name=true,simple_operation_ids=true"
  },
  {
    "path": "proto/buf.yaml",
    "content": "# Generated by \"buf config migrate-v1beta1\". Edit as necessary, and\n# remove this comment when you're finished.\n#\n# This module represents the \"proto\" root found in\n# the previous configuration.\nversion: v1\nname: buf.build/cybercongress/go-cyber\ndeps:\n  - buf.build/cosmos/cosmos-sdk:v0.47.0\n  - buf.build/cosmos/cosmos-proto:1935555c206d4afb9e94615dfd0fad31\n  - buf.build/cosmos/gogo-proto:a14993478f40695898ed8a86931094b6656e8a5d\n  - buf.build/googleapis/googleapis:8d7204855ec14631a499bd7393ce1970\n  - buf.build/cosmos/ics23:b1abd8678aab07165efd453c96796a179eb3131f\nbreaking:\n  use:\n    - FILE\nlint:\n  use:\n    - DEFAULT\n  except:\n    - UNARY_RPC\n    - COMMENT_FIELD\n    - SERVICE_SUFFIX\n    - PACKAGE_VERSION_SUFFIX\n    - COMMENTS\n    - RPC_RESPONSE_STANDARD_NAME\n    - RPC_REQUEST_RESPONSE_UNIQUE\n    - RPC_REQUEST_STANDARD_NAME\n    - PACKAGE_DIRECTORY_MATCH\n    - RPC_REQUEST_RESPONSE_UNIQUE\n    - COMMENTS\n    - RPC_RESPONSE_STANDARD_NAME\n    - FIELD_LOWER_SNAKE_CASE\n"
  },
  {
    "path": "proto/cyber/bandwidth/v1beta1/genesis.proto",
    "content": "syntax = \"proto3\";\npackage cyber.bandwidth.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\n\nimport \"cyber/bandwidth/v1beta1/types.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/bandwidth/types\";\n\nmessage GenesisState { Params params = 1 [ (gogoproto.nullable) = false ]; }"
  },
  {
    "path": "proto/cyber/bandwidth/v1beta1/query.proto",
    "content": "syntax = \"proto3\";\npackage cyber.bandwidth.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\nimport \"google/api/annotations.proto\";\n\nimport \"cyber/bandwidth/v1beta1/types.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/bandwidth/types\";\n\nservice Query {\n  rpc Load(QueryLoadRequest) returns (QueryLoadResponse) {\n    option (google.api.http).get = \"/cyber/bandwidth/v1beta1/bandwidth/load\";\n  }\n\n  rpc Price(QueryPriceRequest) returns (QueryPriceResponse) {\n    option (google.api.http).get = \"/cyber/bandwidth/v1beta1/bandwidth/price\";\n  }\n\n  rpc TotalBandwidth(QueryTotalBandwidthRequest)\n      returns (QueryTotalBandwidthResponse) {\n    option (google.api.http).get = \"/cyber/bandwidth/v1beta1/bandwidth/total\";\n  }\n\n  rpc NeuronBandwidth(QueryNeuronBandwidthRequest)\n      returns (QueryNeuronBandwidthResponse) {\n    option (google.api.http).get =\n        \"/cyber/bandwidth/v1beta1/bandwidth/neuron/{neuron}\";\n  }\n\n  rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {\n    option (google.api.http).get = \"/cyber/bandwidth/v1beta1/bandwidth/params\";\n  }\n}\n\nmessage QueryLoadRequest {}\n\nmessage QueryLoadResponse {\n  string load = 1 [\n    (gogoproto.customtype) = \"github.com/cosmos/cosmos-sdk/types.Dec\",\n    (gogoproto.nullable) = false\n  ];\n}\n\nmessage QueryPriceRequest {}\n\nmessage QueryPriceResponse {\n  string price = 1 [\n    (gogoproto.customtype) = \"github.com/cosmos/cosmos-sdk/types.Dec\",\n    (gogoproto.nullable) = false\n  ];\n}\n\nmessage QueryTotalBandwidthRequest {}\n\nmessage QueryTotalBandwidthResponse { uint64 total_bandwidth = 1; }\n\nmessage QueryNeuronBandwidthRequest { string neuron = 1; }\n\nmessage QueryNeuronBandwidthResponse {\n  NeuronBandwidth neuron_bandwidth = 1 [ (gogoproto.nullable) = false ];\n}\n\nmessage QueryParamsRequest {}\n\nmessage QueryParamsResponse {\n  Params params = 1 [ (gogoproto.nullable) = false ];\n}"
  },
  {
    "path": "proto/cyber/bandwidth/v1beta1/tx.proto",
    "content": "syntax = \"proto3\";\npackage cyber.bandwidth.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\nimport \"cosmos/msg/v1/msg.proto\";\nimport \"cosmos_proto/cosmos.proto\";\nimport \"cyber/bandwidth/v1beta1/types.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/bandwidth/types\";\n\nservice Msg {\n  rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse);\n}\n\nmessage MsgUpdateParams {\n  option (cosmos.msg.v1.signer) = \"authority\";\n\n  string authority = 1 [ (cosmos_proto.scalar) = \"cosmos.AddressString\" ];\n\n  Params params = 2 [ (gogoproto.nullable) = false ];\n}\n\nmessage MsgUpdateParamsResponse {}"
  },
  {
    "path": "proto/cyber/bandwidth/v1beta1/types.proto",
    "content": "syntax = \"proto3\";\npackage cyber.bandwidth.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/bandwidth/types\";\n\nmessage Params {\n  option (gogoproto.equal) = true;\n\n  uint64 recovery_period = 1;\n  uint64 adjust_price_period = 2;\n  string base_price = 3 [\n    (gogoproto.customtype) = \"github.com/cosmos/cosmos-sdk/types.Dec\",\n    (gogoproto.nullable) = false\n  ];\n  string base_load = 4 [\n    (gogoproto.customtype) = \"github.com/cosmos/cosmos-sdk/types.Dec\",\n    (gogoproto.nullable) = false\n  ];\n  uint64 max_block_bandwidth = 5;\n}\n\nmessage NeuronBandwidth {\n  option (gogoproto.equal) = false;\n  option (gogoproto.goproto_getters) = false;\n\n  string neuron = 1;\n  uint64 remained_value = 2;\n  uint64 last_updated_block = 3;\n  uint64 max_value = 4;\n}\n\nmessage Price {\n  option (gogoproto.equal) = false;\n  option (gogoproto.goproto_getters) = false;\n\n  string price = 1 [\n    (gogoproto.customtype) = \"github.com/cosmos/cosmos-sdk/types.Dec\",\n    (gogoproto.nullable) = false\n  ];\n}\n"
  },
  {
    "path": "proto/cyber/clock/v1/clock.proto",
    "content": "syntax = \"proto3\";\npackage cyber.clock.v1;\n\noption go_package = \"github.com/cybercongress/go-cyber/x/clock/types\";\n\n// This object is used to store the contract address and the\n// jail status of the contract.\nmessage ClockContract {\n  // The address of the contract.\n  string contract_address = 1;\n  // The jail status of the contract.\n  bool is_jailed = 2;\n}"
  },
  {
    "path": "proto/cyber/clock/v1/genesis.proto",
    "content": "syntax = \"proto3\";\npackage cyber.clock.v1;\n\nimport \"gogoproto/gogo.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/clock/types\";\n\n// GenesisState - initial state of module\nmessage GenesisState {\n  // Params of this module\n  Params params = 1 [\n    (gogoproto.nullable) = false,\n    (gogoproto.jsontag) = \"params,omitempty\"\n  ];\n}\n\n// Params defines the set of module parameters.\nmessage Params {\n  // contract_gas_limit defines the maximum amount of gas that can be used by a\n  // contract.\n  uint64 contract_gas_limit = 1 [\n    (gogoproto.jsontag) = \"contract_gas_limit,omitempty\",\n    (gogoproto.moretags) = \"yaml:\\\"contract_gas_limit\\\"\"\n  ];\n}\n"
  },
  {
    "path": "proto/cyber/clock/v1/query.proto",
    "content": "syntax = \"proto3\";\npackage cyber.clock.v1;\n\nimport \"cosmos/base/query/v1beta1/pagination.proto\";\nimport \"gogoproto/gogo.proto\";\nimport \"google/api/annotations.proto\";\nimport \"cyber/clock/v1/genesis.proto\";\nimport \"cyber/clock/v1/clock.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/clock/types\";\n\n// Query defines the gRPC querier service.\nservice Query {\n  // ClockContracts\n  rpc ClockContracts(QueryClockContracts)\n      returns (QueryClockContractsResponse) {\n    option (google.api.http).get = \"/cyber/clock/v1/contracts\";\n  }\n  // ClockContract\n  rpc ClockContract(QueryClockContract) returns (QueryClockContractResponse) {\n    option (google.api.http).get =\n        \"/cyber/clock/v1/contracts/{contract_address}\";\n  }\n  // Params\n  rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {\n    option (google.api.http).get = \"/cyber/clock/v1/params\";\n  }\n}\n\n// QueryClockContracts is the request type to get all contracts.\nmessage QueryClockContracts {\n  // pagination defines an optional pagination for the request.\n  cosmos.base.query.v1beta1.PageRequest pagination = 1;\n}\n\n// QueryClockContractsResponse is the response type for the Query/ClockContracts\n// RPC method.\nmessage QueryClockContractsResponse {\n  // clock_contracts are the clock contracts.\n  repeated ClockContract clock_contracts = 1 [ (gogoproto.nullable) = false ];\n  // pagination defines the pagination in the response.\n  cosmos.base.query.v1beta1.PageResponse pagination = 2;\n}\n\n// QueryClockContract is the request type to get a single contract.\nmessage QueryClockContract {\n  // contract_address is the address of the contract to query.\n  string contract_address = 1;\n}\n\n// QueryClockContractResponse is the response type for the Query/ClockContract\n// RPC method.\nmessage QueryClockContractResponse {\n  // contract is the clock contract.\n  ClockContract clock_contract = 1 [ (gogoproto.nullable) = false ];\n}\n\n// QueryParams is the request type to get all module params.\nmessage QueryParamsRequest {}\n\n// QueryClockContractsResponse is the response type for the Query/ClockContracts\n// RPC method.\nmessage QueryParamsResponse {\n  Params params = 1 [\n    (gogoproto.jsontag) = \"params\",\n    (gogoproto.moretags) = \"yaml:\\\"params\\\"\"\n  ];\n}\n"
  },
  {
    "path": "proto/cyber/clock/v1/tx.proto",
    "content": "syntax = \"proto3\";\npackage cyber.clock.v1;\n\noption go_package = \"github.com/cybercongress/go-cyber/x/clock/types\";\n\nimport \"google/api/annotations.proto\";\nimport \"cosmos/msg/v1/msg.proto\";\nimport \"cyber/clock/v1/genesis.proto\";\nimport \"gogoproto/gogo.proto\";\nimport \"cosmos_proto/cosmos.proto\";\n\n// Msg defines the Msg service.\nservice Msg {\n\n  // RegisterClockContract defines the endpoint for\n  // registering a new clock contract.\n  rpc RegisterClockContract(MsgRegisterClockContract)\n      returns (MsgRegisterClockContractResponse) {\n    option (google.api.http).post = \"/cyber/clock/v1/tx/register\";\n  };\n\n  // UnregisterClockContract defines the endpoint for\n  // unregistering a clock contract.\n  rpc UnregisterClockContract(MsgUnregisterClockContract)\n      returns (MsgUnregisterClockContractResponse) {\n    option (google.api.http).post = \"/cyber/clock/v1/tx/unregister\";\n  };\n\n  // UnjailClockContract defines the endpoint for\n  // unjailing a clock contract.\n  rpc UnjailClockContract(MsgUnjailClockContract)\n      returns (MsgUnjailClockContractResponse) {\n    option (google.api.http).post = \"/cyber/clock/v1/tx/unjail\";\n  };\n\n  // UpdateParams defines a governance operation for updating the x/clock module\n  // parameters. The authority is hard-coded to the x/gov module account.\n  //\n  // Since: cosmos-sdk 0.47\n  rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse);\n}\n\n// MsgRegisterClockContract is the Msg/RegisterClockContract request type.\nmessage MsgRegisterClockContract {\n  // The address of the sender.\n  string sender_address = 1;\n  // The address of the contract to register.\n  string contract_address = 2;\n}\n\n// MsgRegisterClockContractResponse defines the response structure for executing\n// a MsgRegisterClockContract message.\nmessage MsgRegisterClockContractResponse {}\n\n// MsgUnregisterClockContract is the Msg/UnregisterClockContract request type.\nmessage MsgUnregisterClockContract {\n  // The address of the sender.\n  string sender_address = 1;\n  // The address of the contract to unregister.\n  string contract_address = 2;\n}\n\n// MsgUnregisterClockContractResponse defines the response structure for\n// executing a MsgUnregisterClockContract message.\nmessage MsgUnregisterClockContractResponse {}\n\n// MsgUnjailClockContract is the Msg/UnjailClockContract request type.\nmessage MsgUnjailClockContract {\n  // The address of the sender.\n  string sender_address = 1;\n  // The address of the contract to unjail.\n  string contract_address = 2;\n}\n\n// MsgUnjailClockContractResponse defines the response structure for executing a\n// MsgUnjailClockContract message.\nmessage MsgUnjailClockContractResponse {}\n\n// MsgUpdateParams is the Msg/UpdateParams request type.\n//\n// Since: cosmos-sdk 0.47\nmessage MsgUpdateParams {\n  option (cosmos.msg.v1.signer) = \"authority\";\n\n  // authority is the address of the governance account.\n  string authority = 1 [ (cosmos_proto.scalar) = \"cosmos.AddressString\" ];\n\n  // params defines the x/clock parameters to update.\n  //\n  // NOTE: All parameters must be supplied.\n  Params params = 2 [ (gogoproto.nullable) = false ];\n}\n\n// MsgUpdateParamsResponse defines the response structure for executing a\n// MsgUpdateParams message.\n//\n// Since: cosmos-sdk 0.47\nmessage MsgUpdateParamsResponse {}\n"
  },
  {
    "path": "proto/cyber/dmn/v1beta1/genesis.proto",
    "content": "syntax = \"proto3\";\npackage cyber.dmn.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\n\nimport \"cyber/dmn/v1beta1/types.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/dmn/types\";\n\nmessage GenesisState { Params params = 1 [ (gogoproto.nullable) = false ]; }"
  },
  {
    "path": "proto/cyber/dmn/v1beta1/query.proto",
    "content": "syntax = \"proto3\";\npackage cyber.dmn.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\nimport \"google/api/annotations.proto\";\nimport \"cosmos/base/v1beta1/coin.proto\";\n\nimport \"cyber/dmn/v1beta1/types.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/dmn/types\";\n\nservice Query {\n  rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {\n    option (google.api.http).get = \"/cyber/dmn/v1beta1/dmn/params\";\n  }\n\n  rpc Thought(QueryThoughtParamsRequest) returns (QueryThoughtResponse) {\n    option (google.api.http).get = \"/cyber/dmn/v1beta1/dmn/thought\";\n  }\n\n  rpc ThoughtStats(QueryThoughtParamsRequest)\n      returns (QueryThoughtStatsResponse) {\n    option (google.api.http).get = \"/cyber/dmn/v1beta1/dmn/thought_stats\";\n  }\n\n  rpc Thoughts(QueryThoughtsRequest) returns (QueryThoughtsResponse) {\n    option (google.api.http).get = \"/cyber/dmn/v1beta1/dmn/thoughts\";\n  }\n\n  rpc ThoughtsStats(QueryThoughtsStatsRequest)\n      returns (QueryThoughtsStatsResponse) {\n    option (google.api.http).get = \"/cyber/dmn/v1beta1/dmn/thoughts_stats\";\n  }\n\n  rpc ThoughtsFees(QueryThoughtsFeesRequest)\n      returns (QueryThoughtsFeesResponse) {\n    option (google.api.http).get = \"/cyber/dmn/v1beta1/dmn/thoughts_fees\";\n  }\n}\n\nmessage QueryParamsRequest {}\n\nmessage QueryParamsResponse {\n  Params params = 1 [ (gogoproto.nullable) = false ];\n}\n\nmessage QueryThoughtParamsRequest {\n  string program = 1;\n  string name = 2;\n}\n\nmessage QueryThoughtResponse {\n  Thought thought = 1 [ (gogoproto.nullable) = false ];\n}\n\nmessage QueryThoughtStatsResponse {\n  ThoughtStats thought_stats = 1 [ (gogoproto.nullable) = false ];\n}\n\nmessage QueryThoughtsRequest {}\n\nmessage QueryThoughtsResponse {\n  repeated Thought thoughts = 1\n      [ (gogoproto.nullable) = false, (gogoproto.castrepeated) = \"Thoughts\" ];\n}\n\nmessage QueryThoughtsStatsRequest {}\n\nmessage QueryThoughtsStatsResponse {\n  repeated ThoughtStats thoughts_stats = 1 [\n    (gogoproto.nullable) = false,\n    (gogoproto.castrepeated) = \"ThoughtsStats\"\n  ];\n}\n\nmessage QueryThoughtsFeesRequest {}\n\nmessage QueryThoughtsFeesResponse {\n  repeated cosmos.base.v1beta1.Coin fees = 3 [\n    (gogoproto.nullable) = false,\n    (gogoproto.castrepeated) = \"github.com/cosmos/cosmos-sdk/types.Coins\"\n  ];\n}"
  },
  {
    "path": "proto/cyber/dmn/v1beta1/tx.proto",
    "content": "syntax = \"proto3\";\npackage cyber.dmn.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\nimport \"cosmos/msg/v1/msg.proto\";\nimport \"cosmos_proto/cosmos.proto\";\nimport \"cyber/dmn/v1beta1/types.proto\";\nimport \"cosmos/base/v1beta1/coin.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/dmn/types\";\n\nservice Msg {\n  rpc CreateThought(MsgCreateThought) returns (MsgCreateThoughtResponse);\n  rpc ForgetThought(MsgForgetThought) returns (MsgForgetThoughtResponse);\n  rpc ChangeThoughtParticle(MsgChangeThoughtParticle)\n      returns (MsgChangeThoughtParticleResponse);\n  rpc ChangeThoughtName(MsgChangeThoughtName)\n      returns (MsgChangeThoughtNameResponse);\n  rpc ChangeThoughtInput(MsgChangeThoughtInput)\n      returns (MsgChangeThoughtInputResponse);\n  rpc ChangeThoughtGasPrice(MsgChangeThoughtGasPrice)\n      returns (MsgChangeThoughtGasPriceResponse);\n  rpc ChangeThoughtPeriod(MsgChangeThoughtPeriod)\n      returns (MsgChangeThoughtPeriodResponse);\n  rpc ChangeThoughtBlock(MsgChangeThoughtBlock)\n      returns (MsgChangeThoughtBlockResponse);\n  rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse);\n}\n\nmessage MsgCreateThought {\n  string program = 1;\n  Trigger trigger = 2 [ (gogoproto.nullable) = false ];\n  Load load = 3 [ (gogoproto.nullable) = false ];\n  string name = 4;\n  string particle = 5;\n}\n\nmessage MsgForgetThought {\n  string program = 1;\n  string name = 2;\n}\n\nmessage MsgChangeThoughtParticle {\n  string program = 1;\n  string name = 2;\n  string particle = 3;\n}\n\nmessage MsgChangeThoughtName {\n  string program = 1;\n  string name = 2;\n  string new_name = 3;\n}\n\nmessage MsgChangeThoughtInput {\n  string program = 1;\n  string name = 2;\n  string input = 3;\n}\n\nmessage MsgChangeThoughtGasPrice {\n  string program = 1;\n  string name = 2;\n  cosmos.base.v1beta1.Coin gas_price = 3 [\n    (gogoproto.nullable) = false,\n    (gogoproto.casttype) = \"github.com/cosmos/cosmos-sdk/types.Coin\"\n  ];\n}\n\nmessage MsgChangeThoughtPeriod {\n  string program = 1;\n  string name = 2;\n  uint64 period = 3;\n}\n\nmessage MsgChangeThoughtBlock {\n  string program = 1;\n  string name = 2;\n  uint64 block = 3;\n}\n\nmessage MsgUpdateParams {\n  option (cosmos.msg.v1.signer) = \"authority\";\n\n  string authority = 1 [ (cosmos_proto.scalar) = \"cosmos.AddressString\" ];\n\n  Params params = 2 [ (gogoproto.nullable) = false ];\n}\n\nmessage MsgCreateThoughtResponse {}\nmessage MsgForgetThoughtResponse {}\nmessage MsgChangeThoughtParticleResponse {}\nmessage MsgChangeThoughtNameResponse {}\nmessage MsgChangeThoughtInputResponse {}\nmessage MsgChangeThoughtGasPriceResponse {}\nmessage MsgChangeThoughtPeriodResponse {}\nmessage MsgChangeThoughtBlockResponse {}\nmessage MsgUpdateParamsResponse {}"
  },
  {
    "path": "proto/cyber/dmn/v1beta1/types.proto",
    "content": "syntax = \"proto3\";\npackage cyber.dmn.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\n\nimport \"cosmos/base/v1beta1/coin.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/dmn/types\";\n\nmessage Params {\n  option (gogoproto.equal) = true;\n\n  uint32 max_slots = 1;\n  uint32 max_gas = 2;\n  uint32 fee_ttl = 3;\n}\n\nmessage Thought {\n  option (gogoproto.equal) = false;\n  option (gogoproto.goproto_getters) = false;\n\n  string program = 1;\n  Trigger trigger = 2 [ (gogoproto.nullable) = false ];\n  Load load = 3 [ (gogoproto.nullable) = false ];\n  string name = 4;\n  string particle = 5;\n}\n\nmessage Trigger {\n  option (gogoproto.equal) = false;\n  option (gogoproto.goproto_getters) = false;\n\n  uint64 period = 1;\n  uint64 block = 2;\n}\n\nmessage Load {\n  option (gogoproto.equal) = false;\n  option (gogoproto.goproto_getters) = false;\n\n  string input = 1;\n  cosmos.base.v1beta1.Coin gas_price = 2 [\n    (gogoproto.casttype) = \"github.com/cosmos/cosmos-sdk/types.Coin\",\n    (gogoproto.nullable) = false\n  ];\n}\n\nmessage ThoughtStats {\n  option (gogoproto.equal) = false;\n  option (gogoproto.goproto_getters) = false;\n\n  string program = 1;\n  string name = 2;\n  uint64 calls = 3;\n  uint64 fees = 4;\n  uint64 gas = 5;\n  uint64 last_block = 6;\n}\n"
  },
  {
    "path": "proto/cyber/graph/v1beta1/query.proto",
    "content": "syntax = \"proto3\";\npackage cyber.graph.v1beta1;\n\nimport \"google/api/annotations.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/graph/types\";\n\nservice Query {\n  rpc GraphStats(QueryGraphStatsRequest) returns (QueryGraphStatsResponse) {\n    option (google.api.http).get = \"/cyber/graph/v1beta1/graph_stats\";\n  }\n  rpc BurnStats(QueryBurnStatsRequest) returns (QueryBurnStatsResponse) {\n    option (google.api.http).get = \"/cyber/graph/v1beta1/burn_stats\";\n  }\n}\n\nmessage QueryGraphStatsRequest {}\n\nmessage QueryGraphStatsResponse {\n  uint64 cyberlinks = 1;\n  uint64 particles = 2;\n}\n\nmessage QueryBurnStatsRequest {}\n\nmessage QueryBurnStatsResponse {\n  uint64 millivolt = 1;\n  uint64 milliampere = 2;\n}"
  },
  {
    "path": "proto/cyber/graph/v1beta1/tx.proto",
    "content": "syntax = \"proto3\";\npackage cyber.graph.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\nimport \"cyber/graph/v1beta1/types.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/graph/types\";\n\nservice Msg { rpc Cyberlink(MsgCyberlink) returns (MsgCyberlinkResponse); }\n\nmessage MsgCyberlink {\n  option (gogoproto.equal) = false;\n  option (gogoproto.goproto_getters) = false;\n\n  string neuron = 1;\n  repeated cyber.graph.v1beta1.Link links = 2 [ (gogoproto.nullable) = false ];\n}\n\nmessage MsgCyberlinkResponse {}"
  },
  {
    "path": "proto/cyber/graph/v1beta1/types.proto",
    "content": "syntax = \"proto3\";\npackage cyber.graph.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/graph/types\";\n\nmessage Link {\n  option (gogoproto.equal) = false;\n  option (gogoproto.goproto_getters) = false;\n\n  string from = 1;\n  string to = 2;\n}\n"
  },
  {
    "path": "proto/cyber/grid/v1beta1/genesis.proto",
    "content": "syntax = \"proto3\";\npackage cyber.grid.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\n\nimport \"cyber/grid/v1beta1/types.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/grid/types\";\n\nmessage GenesisState {\n  Params params = 1 [ (gogoproto.nullable) = false ];\n  repeated Route routes = 2\n      [ (gogoproto.nullable) = false, (gogoproto.castrepeated) = \"Routes\" ];\n}"
  },
  {
    "path": "proto/cyber/grid/v1beta1/query.proto",
    "content": "syntax = \"proto3\";\npackage cyber.grid.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\nimport \"google/api/annotations.proto\";\n\nimport \"cyber/grid/v1beta1/types.proto\";\nimport \"cosmos/base/v1beta1/coin.proto\";\nimport \"cosmos/base/query/v1beta1/pagination.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/grid/types\";\n\nservice Query {\n  rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {\n    option (google.api.http).get = \"/cyber/grid/v1beta1/grid/params\";\n  }\n  rpc SourceRoutes(QuerySourceRequest) returns (QueryRoutesResponse) {\n    option (google.api.http).get = \"/cyber/grid/v1beta1/grid/source_routes\";\n  }\n  rpc DestinationRoutes(QueryDestinationRequest) returns (QueryRoutesResponse) {\n    option (google.api.http).get =\n        \"/cyber/grid/v1beta1/grid/destination_routes\";\n  }\n  rpc DestinationRoutedEnergy(QueryDestinationRequest)\n      returns (QueryRoutedEnergyResponse) {\n    option (google.api.http).get =\n        \"/cyber/grid/v1beta1/grid/destination_routed_energy\";\n  }\n  rpc SourceRoutedEnergy(QuerySourceRequest)\n      returns (QueryRoutedEnergyResponse) {\n    option (google.api.http).get =\n        \"/cyber/grid/v1beta1/grid/source_routed_energy\";\n  }\n  rpc Route(QueryRouteRequest) returns (QueryRouteResponse) {\n    option (google.api.http).get = \"/cyber/grid/v1beta1/grid/route\";\n  }\n  rpc Routes(QueryRoutesRequest) returns (QueryRoutesResponse) {\n    option (google.api.http).get = \"/cyber/grid/v1beta1/grid/routes\";\n  }\n}\n\nmessage QueryParamsRequest {}\n\nmessage QueryParamsResponse {\n  Params params = 1 [ (gogoproto.nullable) = false ];\n}\n\nmessage QuerySourceRequest { string source = 1; }\n\nmessage QueryDestinationRequest { string destination = 1; }\n\nmessage QueryRoutedEnergyResponse {\n  repeated cosmos.base.v1beta1.Coin value = 1 [\n    (gogoproto.nullable) = false,\n    (gogoproto.castrepeated) = \"github.com/cosmos/cosmos-sdk/types.Coins\"\n  ];\n}\n\nmessage QueryRouteRequest {\n  string source = 1;\n  string destination = 2;\n}\n\nmessage QueryRouteResponse { Route route = 1 [ (gogoproto.nullable) = false ]; }\n\nmessage QueryRoutesRequest {\n  cosmos.base.query.v1beta1.PageRequest pagination = 1;\n}\n\nmessage QueryRoutesResponse {\n  repeated Route routes = 1\n      [ (gogoproto.nullable) = false, (gogoproto.castrepeated) = \"Routes\" ];\n  cosmos.base.query.v1beta1.PageResponse pagination = 2;\n}"
  },
  {
    "path": "proto/cyber/grid/v1beta1/tx.proto",
    "content": "syntax = \"proto3\";\npackage cyber.grid.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\nimport \"cosmos/msg/v1/msg.proto\";\nimport \"cosmos_proto/cosmos.proto\";\nimport \"cyber/grid/v1beta1/types.proto\";\nimport \"cosmos/base/v1beta1/coin.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/grid/types\";\n\nservice Msg {\n  rpc CreateRoute(MsgCreateRoute) returns (MsgCreateRouteResponse);\n  rpc EditRoute(MsgEditRoute) returns (MsgEditRouteResponse);\n  rpc DeleteRoute(MsgDeleteRoute) returns (MsgDeleteRouteResponse);\n  rpc EditRouteName(MsgEditRouteName) returns (MsgEditRouteNameResponse);\n  rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse);\n}\n\nmessage MsgCreateRoute {\n  string source = 1;\n  string destination = 2;\n  string name = 3;\n}\n\nmessage MsgEditRoute {\n  string source = 1;\n  string destination = 2;\n  cosmos.base.v1beta1.Coin value = 3 [\n    (gogoproto.nullable) = false,\n    (gogoproto.casttype) = \"github.com/cosmos/cosmos-sdk/types.Coin\"\n  ];\n}\n\nmessage MsgDeleteRoute {\n  string source = 1;\n  string destination = 2;\n}\n\nmessage MsgEditRouteName {\n  string source = 1;\n  string destination = 2;\n  string name = 3;\n}\n\nmessage MsgUpdateParams {\n  option (cosmos.msg.v1.signer) = \"authority\";\n\n  string authority = 1 [ (cosmos_proto.scalar) = \"cosmos.AddressString\" ];\n\n  Params params = 2 [ (gogoproto.nullable) = false ];\n}\n\nmessage MsgCreateRouteResponse {}\nmessage MsgEditRouteResponse {}\nmessage MsgDeleteRouteResponse {}\nmessage MsgEditRouteNameResponse {}\nmessage MsgUpdateParamsResponse {}\n"
  },
  {
    "path": "proto/cyber/grid/v1beta1/types.proto",
    "content": "syntax = \"proto3\";\npackage cyber.grid.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\n\nimport \"cosmos/base/v1beta1/coin.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/grid/types\";\n\nmessage Params {\n  option (gogoproto.equal) = true;\n\n  uint32 max_routes = 1;\n}\n\nmessage Route {\n  option (gogoproto.equal) = false;\n  option (gogoproto.goproto_getters) = false;\n\n  string source = 1;\n  string destination = 2;\n  string name = 3;\n  repeated cosmos.base.v1beta1.Coin value = 4 [\n    (gogoproto.nullable) = false,\n    (gogoproto.castrepeated) = \"github.com/cosmos/cosmos-sdk/types.Coins\"\n  ];\n}\n\nmessage Value {\n  option (gogoproto.equal) = false;\n  option (gogoproto.goproto_getters) = false;\n\n  repeated cosmos.base.v1beta1.Coin value = 1 [\n    (gogoproto.nullable) = false,\n    (gogoproto.castrepeated) = \"github.com/cosmos/cosmos-sdk/types.Coins\"\n  ];\n}"
  },
  {
    "path": "proto/cyber/liquidity/v1beta1/genesis.proto",
    "content": "syntax = \"proto3\";\npackage cyber.liquidity.v1beta1;\n\nimport \"cyber/liquidity/v1beta1/liquidity.proto\";\nimport \"gogoproto/gogo.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/liquidity/types\";\n\n// records the state of each pool after genesis export or import, used to check\n// variables\nmessage PoolRecord {\n  Pool pool = 1\n      [ (gogoproto.nullable) = false, (gogoproto.moretags) = \"yaml:\\\"pool\\\"\" ];\n  PoolMetadata pool_metadata = 2 [\n    (gogoproto.nullable) = false,\n    (gogoproto.moretags) = \"yaml:\\\"pool_metadata\\\"\"\n  ];\n  PoolBatch pool_batch = 3 [\n    (gogoproto.nullable) = false,\n    (gogoproto.moretags) = \"yaml:\\\"pool_batch\\\"\"\n  ];\n  repeated DepositMsgState deposit_msg_states = 4 [\n    (gogoproto.nullable) = false,\n    (gogoproto.moretags) = \"yaml:\\\"deposit_msg_states\\\"\"\n  ];\n  repeated WithdrawMsgState withdraw_msg_states = 5 [\n    (gogoproto.nullable) = false,\n    (gogoproto.moretags) = \"yaml:\\\"withdraw_msg_states\\\"\"\n  ];\n  repeated SwapMsgState swap_msg_states = 6 [\n    (gogoproto.nullable) = false,\n    (gogoproto.moretags) = \"yaml:\\\"swap_msg_states\\\"\"\n  ];\n}\n\n// GenesisState defines the liquidity module's genesis state.\nmessage GenesisState {\n  option (gogoproto.equal) = false;\n  option (gogoproto.goproto_getters) = false;\n\n  // params defines all the parameters for the liquidity module.\n  Params params = 1 [ (gogoproto.nullable) = false ];\n  repeated PoolRecord pool_records = 2\n      [ (gogoproto.nullable) = false, (gogoproto.moretags) = \"yaml:\\\"pools\\\"\" ];\n}\n"
  },
  {
    "path": "proto/cyber/liquidity/v1beta1/liquidity.proto",
    "content": "syntax = \"proto3\";\npackage cyber.liquidity.v1beta1;\n\nimport \"cyber/liquidity/v1beta1/tx.proto\";\nimport \"gogoproto/gogo.proto\";\nimport \"cosmos/base/v1beta1/coin.proto\";\n// import \"google/api/annotations.proto\";\nimport \"cosmos_proto/cosmos.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/liquidity/types\";\noption (gogoproto.goproto_getters_all) = false;\n\n// Structure for the pool type to distinguish the characteristics of the reserve\n// pools.\nmessage PoolType {\n  option (gogoproto.equal) = true;\n\n  // This is the id of the pool_type that is used as pool_type_id for pool\n  // creation. In this version, only pool-type-id 1 is supported.\n  // {\"id\":1,\"name\":\"ConstantProductLiquidityPool\",\"min_reserve_coin_num\":2,\"max_reserve_coin_num\":2,\"description\":\"\"}\n  uint32 id = 1 [ (gogoproto.moretags) = \"yaml:\\\"id\\\"\" ];\n\n  // name of the pool type.\n  string name = 2 [ (gogoproto.moretags) = \"yaml:\\\"name\\\"\" ];\n\n  // minimum number of reserveCoins for LiquidityPoolType, only 2 reserve coins\n  // are supported.\n  uint32 min_reserve_coin_num = 3\n      [ (gogoproto.moretags) = \"yaml:\\\"min_reserve_coin_num\\\"\" ];\n\n  // maximum number of reserveCoins for LiquidityPoolType, only 2 reserve coins\n  // are supported.\n  uint32 max_reserve_coin_num = 4\n      [ (gogoproto.moretags) = \"yaml:\\\"max_reserve_coin_num\\\"\" ];\n\n  // description of the pool type.\n  string description = 5 [ (gogoproto.moretags) = \"yaml:\\\"description\\\"\" ];\n}\n\n// Params defines the parameters for the liquidity module.\nmessage Params {\n  option (gogoproto.equal) = true;\n  option (gogoproto.goproto_stringer) = false;\n\n  // list of available pool types\n  repeated PoolType pool_types = 1 [\n    (gogoproto.moretags) = \"yaml:\\\"pool_types\\\"\",\n    (gogoproto.nullable) = false\n  ];\n\n  // Minimum number of coins to be deposited to the liquidity pool on pool\n  // creation.\n  string min_init_deposit_amount = 2 [\n    (gogoproto.moretags) = \"yaml:\\\"min_init_deposit_amount\\\"\",\n    (cosmos_proto.scalar) = \"cosmos.Int\",\n    (gogoproto.customtype) = \"github.com/cosmos/cosmos-sdk/types.Int\",\n    (gogoproto.nullable) = false\n  ];\n\n  // Initial mint amount of pool coins upon pool creation.\n  string init_pool_coin_mint_amount = 3 [\n    (gogoproto.moretags) = \"yaml:\\\"init_pool_coin_mint_amount\\\"\",\n    (cosmos_proto.scalar) = \"cosmos.Int\",\n    (gogoproto.customtype) = \"github.com/cosmos/cosmos-sdk/types.Int\",\n    (gogoproto.nullable) = false\n  ];\n\n  // Limit the size of each liquidity pool to minimize risk. In development, set\n  // to 0 for no limit. In production, set a limit.\n  string max_reserve_coin_amount = 4 [\n    (gogoproto.moretags) = \"yaml:\\\"max_reserve_coin_amount\\\"\",\n    (cosmos_proto.scalar) = \"cosmos.Int\",\n    (gogoproto.customtype) = \"github.com/cosmos/cosmos-sdk/types.Int\",\n    (gogoproto.nullable) = false\n  ];\n\n  // Fee paid to create a Liquidity Pool. Set a fee to prevent spamming.\n  repeated cosmos.base.v1beta1.Coin pool_creation_fee = 5 [\n    (gogoproto.moretags) = \"yaml:\\\"pool_creation_fee\\\"\",\n    (gogoproto.nullable) = false,\n    (gogoproto.castrepeated) = \"github.com/cosmos/cosmos-sdk/types.Coins\"\n  ];\n\n  // Swap fee rate for every executed swap.\n  string swap_fee_rate = 6 [\n    (gogoproto.moretags) = \"yaml:\\\"swap_fee_rate\\\"\",\n    (cosmos_proto.scalar) = \"cosmos.Dec\",\n    (gogoproto.customtype) = \"github.com/cosmos/cosmos-sdk/types.Dec\",\n    (gogoproto.nullable) = false\n  ];\n\n  // Reserve coin withdrawal with less proportion by withdrawFeeRate.\n  string withdraw_fee_rate = 7 [\n    (gogoproto.moretags) = \"yaml:\\\"withdraw_fee_rate\\\"\",\n    (cosmos_proto.scalar) = \"cosmos.Dec\",\n    (gogoproto.customtype) = \"github.com/cosmos/cosmos-sdk/types.Dec\",\n    (gogoproto.nullable) = false\n  ];\n\n  // Maximum ratio of reserve coins that can be ordered at a swap order.\n  string max_order_amount_ratio = 8 [\n    (gogoproto.moretags) = \"yaml:\\\"max_order_amount_ratio\\\"\",\n    (cosmos_proto.scalar) = \"cosmos.Dec\",\n    (gogoproto.customtype) = \"github.com/cosmos/cosmos-sdk/types.Dec\",\n    (gogoproto.nullable) = false\n  ];\n\n  // The smallest unit batch height for every liquidity pool.\n  uint32 unit_batch_height = 9\n      [ (gogoproto.moretags) = \"yaml:\\\"unit_batch_height\\\"\" ];\n\n  // Circuit breaker enables or disables transaction messages in liquidity\n  // module.\n  bool circuit_breaker_enabled = 10\n      [ (gogoproto.moretags) = \"yaml:\\\"circuit_breaker_enabled\\\"\" ];\n}\n\n// Pool defines the liquidity pool that contains pool information.\nmessage Pool {\n  option (gogoproto.equal) = true;\n  option (gogoproto.goproto_stringer) = true;\n\n  // id of the pool\n  uint64 id = 1\n      [ (gogoproto.moretags) = \"yaml:\\\"id\\\"\", (gogoproto.jsontag) = \"id\" ];\n\n  // id of the pool_type\n  uint32 type_id = 2 [ (gogoproto.moretags) = \"yaml:\\\"type_id\\\"\" ];\n\n  // denoms of reserve coin pair of the pool\n  repeated string reserve_coin_denoms = 3\n      [ (gogoproto.moretags) = \"yaml:\\\"reserve_coin_denoms\\\"\" ];\n\n  // reserve account address of the pool\n  string reserve_account_address = 4 [\n    (gogoproto.moretags) = \"yaml:\\\"reserve_account_address\\\"\",\n    (cosmos_proto.scalar) = \"cosmos.AddressString\"\n  ];\n\n  // denom of pool coin of the pool\n  string pool_coin_denom = 5\n      [ (gogoproto.moretags) = \"yaml:\\\"pool_coin_denom\\\"\" ];\n}\n\n// Metadata for the state of each pool for invariant checking after genesis\n// export or import.\nmessage PoolMetadata {\n  option (gogoproto.equal) = true;\n  option (gogoproto.goproto_stringer) = true;\n\n  // id of the pool\n  uint64 pool_id = 1 [\n    (gogoproto.moretags) = \"yaml:\\\"pool_id\\\"\",\n    (gogoproto.jsontag) = \"pool_id\"\n  ];\n\n  // pool coin issued at the pool\n  cosmos.base.v1beta1.Coin pool_coin_total_supply = 2 [\n    (gogoproto.moretags) = \"yaml:\\\"pool_coin\\\"\",\n    (gogoproto.nullable) = false,\n    (gogoproto.castrepeated) = \"github.com/cosmos/cosmos-sdk/types.Coin\"\n  ];\n\n  // reserve coins deposited in the pool\n  repeated cosmos.base.v1beta1.Coin reserve_coins = 3 [\n    (gogoproto.moretags) = \"yaml:\\\"deposit_coins\\\"\",\n    (gogoproto.nullable) = false,\n    (gogoproto.castrepeated) = \"github.com/cosmos/cosmos-sdk/types.Coins\"\n  ];\n}\n\n// PoolBatch defines the batch or batches of a given liquidity pool that\n// contains indexes of deposit, withdraw, and swap messages. Index param\n// increments by 1 if the pool id is same.\nmessage PoolBatch {\n  option (gogoproto.equal) = true;\n  option (gogoproto.goproto_stringer) = true;\n\n  // id of the pool\n  uint64 pool_id = 1 [\n    (gogoproto.moretags) = \"yaml:\\\"pool_id\\\"\",\n    (gogoproto.jsontag) = \"pool_id\"\n  ];\n\n  // index of this batch\n  uint64 index = 2 [ (gogoproto.moretags) = \"yaml:\\\"index\\\"\" ];\n\n  // height where this batch is started\n  int64 begin_height = 3 [ (gogoproto.moretags) = \"yaml:\\\"begin_height\\\"\" ];\n\n  // last index of DepositMsgStates\n  uint64 deposit_msg_index = 4\n      [ (gogoproto.moretags) = \"yaml:\\\"deposit_msg_index\\\"\" ];\n\n  // last index of WithdrawMsgStates\n  uint64 withdraw_msg_index = 5\n      [ (gogoproto.moretags) = \"yaml:\\\"withdraw_msg_index\\\"\" ];\n\n  // last index of SwapMsgStates\n  uint64 swap_msg_index = 6\n      [ (gogoproto.moretags) = \"yaml:\\\"swap_msg_index\\\"\" ];\n\n  // true if executed, false if not executed\n  bool executed = 7 [ (gogoproto.moretags) = \"yaml:\\\"executed\\\"\" ];\n}\n\n// DepositMsgState defines the state of deposit message that contains state\n// information as it is processed in the next batch or batches.\nmessage DepositMsgState {\n\n  // height where this message is appended to the batch\n  int64 msg_height = 1 [ (gogoproto.moretags) = \"yaml:\\\"msg_height\\\"\" ];\n\n  // index of this deposit message in this liquidity pool\n  uint64 msg_index = 2 [ (gogoproto.moretags) = \"yaml:\\\"msg_index\\\"\" ];\n\n  // true if executed on this batch, false if not executed\n  bool executed = 3 [ (gogoproto.moretags) = \"yaml:\\\"executed\\\"\" ];\n\n  // true if executed successfully on this batch, false if failed\n  bool succeeded = 4 [ (gogoproto.moretags) = \"yaml:\\\"succeeded\\\"\" ];\n\n  // true if ready to be deleted on kvstore, false if not ready to be deleted\n  bool to_be_deleted = 5 [ (gogoproto.moretags) = \"yaml:\\\"to_be_deleted\\\"\" ];\n\n  // MsgDepositWithinBatch\n  MsgDepositWithinBatch msg = 6 [ (gogoproto.moretags) = \"yaml:\\\"msg\\\"\" ];\n}\n\n// WithdrawMsgState defines the state of the withdraw message that contains\n// state information as the message is processed in the next batch or batches.\nmessage WithdrawMsgState {\n\n  // height where this message is appended to the batch\n  int64 msg_height = 1 [ (gogoproto.moretags) = \"yaml:\\\"msg_height\\\"\" ];\n\n  // index of this withdraw message in this liquidity pool\n  uint64 msg_index = 2 [ (gogoproto.moretags) = \"yaml:\\\"msg_index\\\"\" ];\n\n  // true if executed on this batch, false if not executed\n  bool executed = 3 [ (gogoproto.moretags) = \"yaml:\\\"executed\\\"\" ];\n\n  // true if executed successfully on this batch, false if failed\n  bool succeeded = 4 [ (gogoproto.moretags) = \"yaml:\\\"succeeded\\\"\" ];\n\n  // true if ready to be deleted on kvstore, false if not ready to be deleted\n  bool to_be_deleted = 5 [ (gogoproto.moretags) = \"yaml:\\\"to_be_deleted\\\"\" ];\n\n  // MsgWithdrawWithinBatch\n  MsgWithdrawWithinBatch msg = 6 [ (gogoproto.moretags) = \"yaml:\\\"msg\\\"\" ];\n}\n\n// SwapMsgState defines the state of the swap message that contains state\n// information as the message is processed in the next batch or batches.\nmessage SwapMsgState {\n\n  // height where this message is appended to the batch\n  int64 msg_height = 1 [ (gogoproto.moretags) = \"yaml:\\\"msg_height\\\"\" ];\n\n  // index of this swap message in this liquidity pool\n  uint64 msg_index = 2 [ (gogoproto.moretags) = \"yaml:\\\"msg_index\\\"\" ];\n\n  // true if executed on this batch, false if not executed\n  bool executed = 3 [ (gogoproto.moretags) = \"yaml:\\\"executed\\\"\" ];\n\n  // true if executed successfully on this batch, false if failed\n  bool succeeded = 4 [ (gogoproto.moretags) = \"yaml:\\\"succeeded\\\"\" ];\n\n  // true if ready to be deleted on kvstore, false if not ready to be deleted\n  bool to_be_deleted = 5 [ (gogoproto.moretags) = \"yaml:\\\"to_be_deleted\\\"\" ];\n\n  // swap orders are cancelled when current height is equal to or higher than\n  // ExpiryHeight\n  int64 order_expiry_height = 6\n      [ (gogoproto.moretags) = \"yaml:\\\"order_expiry_height\\\"\" ];\n\n  // offer coin exchanged until now\n  cosmos.base.v1beta1.Coin exchanged_offer_coin = 7 [\n    (gogoproto.moretags) = \"yaml:\\\"exchanged_offer_coin\\\"\",\n    (gogoproto.nullable) = false,\n    (gogoproto.castrepeated) = \"github.com/cosmos/cosmos-sdk/types.Coin\"\n  ];\n\n  // offer coin currently remaining to be exchanged\n  cosmos.base.v1beta1.Coin remaining_offer_coin = 8 [\n    (gogoproto.moretags) = \"yaml:\\\"remaining_offer_coin\\\"\",\n    (gogoproto.nullable) = false,\n    (gogoproto.castrepeated) = \"github.com/cosmos/cosmos-sdk/types.Coin\"\n  ];\n\n  // reserve fee for pays fee in half offer coin\n  cosmos.base.v1beta1.Coin reserved_offer_coin_fee = 9 [\n    (gogoproto.moretags) = \"yaml:\\\"reserved_offer_coin_fee\\\"\",\n    (gogoproto.nullable) = false,\n    (gogoproto.castrepeated) = \"github.com/cosmos/cosmos-sdk/types.Coin\"\n  ];\n\n  // MsgSwapWithinBatch\n  MsgSwapWithinBatch msg = 10 [ (gogoproto.moretags) = \"yaml:\\\"msg\\\"\" ];\n}\n"
  },
  {
    "path": "proto/cyber/liquidity/v1beta1/query.proto",
    "content": "syntax = \"proto3\";\npackage cyber.liquidity.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\nimport \"cyber/liquidity/v1beta1/liquidity.proto\";\nimport \"google/api/annotations.proto\";\nimport \"cosmos/base/query/v1beta1/pagination.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/liquidity/types\";\n\n// Query defines the gRPC query service for the liquidity module.\nservice Query {\n  // Get existing liquidity pools.\n  rpc LiquidityPools(QueryLiquidityPoolsRequest)\n      returns (QueryLiquidityPoolsResponse) {\n    option (google.api.http).get = \"/cosmos/liquidity/v1beta1/pools\";\n  }\n\n  // Get specific liquidity pool.\n  rpc LiquidityPool(QueryLiquidityPoolRequest)\n      returns (QueryLiquidityPoolResponse) {\n    option (google.api.http).get = \"/cosmos/liquidity/v1beta1/pools/{pool_id}\";\n  }\n\n  // Get specific liquidity pool corresponding to the pool_coin_denom.\n  rpc LiquidityPoolByPoolCoinDenom(QueryLiquidityPoolByPoolCoinDenomRequest)\n      returns (QueryLiquidityPoolResponse) {\n    option (google.api.http).get =\n        \"/cosmos/liquidity/v1beta1/pools/pool_coin_denom/{pool_coin_denom}\";\n  }\n\n  // Get specific liquidity pool corresponding to the reserve account.\n  rpc LiquidityPoolByReserveAcc(QueryLiquidityPoolByReserveAccRequest)\n      returns (QueryLiquidityPoolResponse) {\n    option (google.api.http).get =\n        \"/cosmos/liquidity/v1beta1/pools/reserve_acc/{reserve_acc}\";\n  }\n\n  // Get the pool's current batch.\n  rpc LiquidityPoolBatch(QueryLiquidityPoolBatchRequest)\n      returns (QueryLiquidityPoolBatchResponse) {\n    option (google.api.http).get =\n        \"/cosmos/liquidity/v1beta1/pools/{pool_id}/batch\";\n  }\n\n  // Get all swap messages in the pool's current batch.\n  rpc PoolBatchSwapMsgs(QueryPoolBatchSwapMsgsRequest)\n      returns (QueryPoolBatchSwapMsgsResponse) {\n    option (google.api.http).get =\n        \"/cosmos/liquidity/v1beta1/pools/{pool_id}/batch/swaps\";\n  }\n\n  // Get a specific swap message in the pool's current batch.\n  rpc PoolBatchSwapMsg(QueryPoolBatchSwapMsgRequest)\n      returns (QueryPoolBatchSwapMsgResponse) {\n    option (google.api.http).get =\n        \"/cosmos/liquidity/v1beta1/pools/{pool_id}/batch/swaps/{msg_index}\";\n  }\n\n  // Get all deposit messages in the pool's current batch.\n  rpc PoolBatchDepositMsgs(QueryPoolBatchDepositMsgsRequest)\n      returns (QueryPoolBatchDepositMsgsResponse) {\n    option (google.api.http).get =\n        \"/cosmos/liquidity/v1beta1/pools/{pool_id}/batch/deposits\";\n  }\n\n  // Get a specific deposit message in the pool's current batch.\n  rpc PoolBatchDepositMsg(QueryPoolBatchDepositMsgRequest)\n      returns (QueryPoolBatchDepositMsgResponse) {\n    option (google.api.http).get =\n        \"/cosmos/liquidity/v1beta1/pools/{pool_id}/batch/deposits/{msg_index}\";\n  }\n\n  // Get all withdraw messages in the pool's current batch.\n  rpc PoolBatchWithdrawMsgs(QueryPoolBatchWithdrawMsgsRequest)\n      returns (QueryPoolBatchWithdrawMsgsResponse) {\n    option (google.api.http).get =\n        \"/cosmos/liquidity/v1beta1/pools/{pool_id}/batch/withdraws\";\n  }\n\n  // Get a specific withdraw message in the pool's current batch.\n  rpc PoolBatchWithdrawMsg(QueryPoolBatchWithdrawMsgRequest)\n      returns (QueryPoolBatchWithdrawMsgResponse) {\n    option (google.api.http).get =\n        \"/cosmos/liquidity/v1beta1/pools/{pool_id}/batch/withdraws/{msg_index}\";\n  }\n\n  // Get all parameters of the liquidity module.\n  rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {\n    option (google.api.http).get = \"/cosmos/liquidity/v1beta1/params\";\n  }\n}\n\n// the request type for the QueryLiquidityPool RPC method. requestable specified\n// pool_id.\nmessage QueryLiquidityPoolRequest { uint64 pool_id = 1; }\n\n// the response type for the QueryLiquidityPoolResponse RPC method. Returns the\n// liquidity pool that corresponds to the requested pool_id.\nmessage QueryLiquidityPoolResponse {\n  Pool pool = 1 [ (gogoproto.nullable) = false ];\n}\n\n// the request type for the QueryLiquidityByPoolCoinDenomPool RPC method.\n// Requestable specified pool_coin_denom.\nmessage QueryLiquidityPoolByPoolCoinDenomRequest { string pool_coin_denom = 1; }\n\n// the request type for the QueryLiquidityByReserveAcc RPC method. Requestable\n// specified reserve_acc.\nmessage QueryLiquidityPoolByReserveAccRequest { string reserve_acc = 1; }\n\n// the request type for the QueryLiquidityPoolBatch RPC method. requestable\n// including specified pool_id.\nmessage QueryLiquidityPoolBatchRequest {\n  // id of the target pool for query\n  uint64 pool_id = 1;\n}\n\n// the response type for the QueryLiquidityPoolBatchResponse RPC method. Returns\n// the liquidity pool batch that corresponds to the requested pool_id.\nmessage QueryLiquidityPoolBatchResponse {\n  PoolBatch batch = 1 [ (gogoproto.nullable) = false ];\n}\n\n// the request type for the QueryLiquidityPools RPC method. Requestable\n// including pagination offset, limit, key.\nmessage QueryLiquidityPoolsRequest {\n  // pagination defines an optional pagination for the request.\n  cosmos.base.query.v1beta1.PageRequest pagination = 1;\n}\n\n// the response type for the QueryLiquidityPoolsResponse RPC method. This\n// includes a list of all existing liquidity pools and paging results that\n// contain next_key and total count.\nmessage QueryLiquidityPoolsResponse {\n  repeated Pool pools = 1 [ (gogoproto.nullable) = false ];\n  // pagination defines the pagination in the response. not working on this\n  // version.\n  cosmos.base.query.v1beta1.PageResponse pagination = 2;\n}\n\n// QueryParamsRequest is request type for the QueryParams RPC method.\nmessage QueryParamsRequest {}\n\n// the response type for the QueryParamsResponse RPC method. This includes\n// current parameter of the liquidity module.\nmessage QueryParamsResponse {\n  // params holds all the parameters of this module.\n  Params params = 1 [ (gogoproto.nullable) = false ];\n}\n\n// the request type for the QueryPoolBatchSwapMsgs RPC method. Requestable\n// including specified pool_id and pagination offset, limit, key.\nmessage QueryPoolBatchSwapMsgsRequest {\n  // id of the target pool for query\n  uint64 pool_id = 1;\n  // pagination defines an optional pagination for the request.\n  cosmos.base.query.v1beta1.PageRequest pagination = 2;\n}\n\n// the request type for the QueryPoolBatchSwap RPC method. Requestable including\n// specified pool_id and msg_index.\nmessage QueryPoolBatchSwapMsgRequest {\n  // id of the target pool for query\n  uint64 pool_id = 1;\n  // target msg_index of the pool\n  uint64 msg_index = 2;\n}\n\n// the response type for the QueryPoolBatchSwapMsgs RPC method. This includes\n// list of all currently existing swap messages of the batch and paging results\n// that contain next_key and total count.\nmessage QueryPoolBatchSwapMsgsResponse {\n  repeated SwapMsgState swaps = 1 [ (gogoproto.nullable) = false ];\n  // pagination defines the pagination in the response. not working on this\n  // version.\n  cosmos.base.query.v1beta1.PageResponse pagination = 2;\n}\n\n// the response type for the QueryPoolBatchSwapMsg RPC method. This includes a\n// batch swap message of the batch.\nmessage QueryPoolBatchSwapMsgResponse {\n  SwapMsgState swap = 1 [ (gogoproto.nullable) = false ];\n}\n\n// the request type for the QueryPoolBatchDeposit RPC method. Requestable\n// including specified pool_id and pagination offset, limit, key.\nmessage QueryPoolBatchDepositMsgsRequest {\n  // id of the target pool for query\n  uint64 pool_id = 1;\n  // pagination defines an optional pagination for the request.\n  cosmos.base.query.v1beta1.PageRequest pagination = 2;\n}\n\n// the request type for the QueryPoolBatchDeposit RPC method. requestable\n// including specified pool_id and msg_index.\nmessage QueryPoolBatchDepositMsgRequest {\n  // id of the target pool for query\n  uint64 pool_id = 1;\n  // target msg_index of the pool\n  uint64 msg_index = 2;\n}\n\n// the response type for the QueryPoolBatchDeposit RPC method. This includes a\n// list of all currently existing deposit messages of the batch and paging\n// results that contain next_key and total count.\nmessage QueryPoolBatchDepositMsgsResponse {\n  repeated DepositMsgState deposits = 1 [ (gogoproto.nullable) = false ];\n  // pagination defines the pagination in the response. not working on this\n  // version.\n  cosmos.base.query.v1beta1.PageResponse pagination = 2;\n}\n\n// the response type for the QueryPoolBatchDepositMsg RPC method. This includes\n// a batch swap message of the batch.\nmessage QueryPoolBatchDepositMsgResponse {\n  DepositMsgState deposit = 1 [ (gogoproto.nullable) = false ];\n}\n\n// the request type for the QueryPoolBatchWithdraw RPC method. Requestable\n// including specified pool_id and pagination offset, limit, key.\nmessage QueryPoolBatchWithdrawMsgsRequest {\n  // id of the target pool for query\n  uint64 pool_id = 1;\n  // pagination defines an optional pagination for the request.\n  cosmos.base.query.v1beta1.PageRequest pagination = 2;\n}\n\n// the request type for the QueryPoolBatchWithdraw RPC method. requestable\n// including specified pool_id and msg_index.\nmessage QueryPoolBatchWithdrawMsgRequest {\n  // id of the target pool for query\n  uint64 pool_id = 1;\n  // target msg_index of the pool\n  uint64 msg_index = 2;\n}\n\n// the response type for the QueryPoolBatchWithdraw RPC method. This includes a\n// list of all currently existing withdraw messages of the batch and paging\n// results that contain next_key and total count.\nmessage QueryPoolBatchWithdrawMsgsResponse {\n  repeated WithdrawMsgState withdraws = 1 [ (gogoproto.nullable) = false ];\n  // pagination defines the pagination in the response. Not supported on this\n  // version.\n  cosmos.base.query.v1beta1.PageResponse pagination = 2;\n}\n\n// the response type for the QueryPoolBatchWithdrawMsg RPC method. This includes\n// a batch swap message of the batch.\nmessage QueryPoolBatchWithdrawMsgResponse {\n  WithdrawMsgState withdraw = 1 [ (gogoproto.nullable) = false ];\n}\n"
  },
  {
    "path": "proto/cyber/liquidity/v1beta1/tx.proto",
    "content": "syntax = \"proto3\";\npackage cyber.liquidity.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\nimport \"cosmos/base/v1beta1/coin.proto\";\n// import \"google/api/annotations.proto\";\n// import \"cosmos/msg/v1/msg.proto\";\nimport \"cosmos_proto/cosmos.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/liquidity/types\";\n\n// Msg defines the liquidity Msg service.\nservice Msg {\n\n  // Submit a create liquidity pool message.\n  rpc CreatePool(MsgCreatePool) returns (MsgCreatePoolResponse);\n\n  // Submit a deposit to the liquidity pool batch.\n  rpc DepositWithinBatch(MsgDepositWithinBatch)\n      returns (MsgDepositWithinBatchResponse);\n\n  // Submit a withdraw from the liquidity pool batch.\n  rpc WithdrawWithinBatch(MsgWithdrawWithinBatch)\n      returns (MsgWithdrawWithinBatchResponse);\n\n  // Submit a swap to the liquidity pool batch.\n  rpc Swap(MsgSwapWithinBatch) returns (MsgSwapWithinBatchResponse);\n\n  //  rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse);\n}\n\n// MsgCreatePool defines an sdk.Msg type that supports submitting a create\n// liquidity pool tx.\n//\n// See:\n// https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\nmessage MsgCreatePool {\n  option (gogoproto.equal) = false;\n  option (gogoproto.goproto_getters) = false;\n\n  string pool_creator_address = 1 [\n    (gogoproto.moretags) = \"yaml:\\\"pool_creator_address\\\"\",\n    (cosmos_proto.scalar) = \"cosmos.AddressString\"\n  ];\n\n  // id of the target pool type, must match the value in the pool. Only\n  // pool-type-id 1 is supported.\n  uint32 pool_type_id = 2 [ (gogoproto.moretags) = \"yaml:\\\"pool_type_id\\\"\" ];\n\n  // reserve coin pair of the pool to deposit.\n  repeated cosmos.base.v1beta1.Coin deposit_coins = 4 [\n    (gogoproto.moretags) = \"yaml:\\\"deposit_coins\\\"\",\n    (gogoproto.nullable) = false,\n    (gogoproto.castrepeated) = \"github.com/cosmos/cosmos-sdk/types.Coins\"\n  ];\n}\n\n// MsgCreatePoolResponse defines the Msg/CreatePool response type.\nmessage MsgCreatePoolResponse {}\n\n// `MsgDepositWithinBatch defines` an `sdk.Msg` type that supports submitting\n// a deposit request to the batch of the liquidity pool.\n// Deposit is submitted to the batch of the Liquidity pool with the specified\n// `pool_id`, `deposit_coins` for reserve.\n// This request is stacked in the batch of the liquidity pool, is not processed\n// immediately, and is processed in the `endblock` at the same time as other\n// requests.\n//\n// See:\n// https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\nmessage MsgDepositWithinBatch {\n  option (gogoproto.equal) = false;\n  option (gogoproto.goproto_getters) = false;\n\n  string depositor_address = 1 [\n    (cosmos_proto.scalar) = \"cosmos.AddressString\",\n    (gogoproto.moretags) = \"yaml:\\\"depositor_address\\\"\"\n  ];\n\n  // id of the target pool\n  uint64 pool_id = 2 [ (gogoproto.moretags) = \"yaml:\\\"pool_id\\\"\" ];\n\n  // reserve coin pair of the pool to deposit\n  repeated cosmos.base.v1beta1.Coin deposit_coins = 3 [\n    (gogoproto.moretags) = \"yaml:\\\"deposit_coins\\\"\",\n    (gogoproto.nullable) = false,\n    (gogoproto.castrepeated) = \"github.com/cosmos/cosmos-sdk/types.Coins\"\n  ];\n}\n\n// MsgDepositWithinBatchResponse defines the Msg/DepositWithinBatch response\n// type.\nmessage MsgDepositWithinBatchResponse {}\n\n// `MsgWithdrawWithinBatch` defines an `sdk.Msg` type that supports submitting\n// a withdraw request to the batch of the liquidity pool.\n// Withdraw is submitted to the batch from the Liquidity pool with the\n// specified `pool_id`, `pool_coin` of the pool.\n// This request is stacked in the batch of the liquidity pool, is not processed\n// immediately, and is processed in the `endblock` at the same time as other\n// requests.\n//\n// See:\n// https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\nmessage MsgWithdrawWithinBatch {\n  option (gogoproto.equal) = false;\n  option (gogoproto.goproto_getters) = false;\n\n  string withdrawer_address = 1 [\n    (gogoproto.moretags) = \"yaml:\\\"withdrawer_address\\\"\",\n    (cosmos_proto.scalar) = \"cosmos.AddressString\"\n  ];\n  // id of the target pool\n  uint64 pool_id = 2 [ (gogoproto.moretags) = \"yaml:\\\"pool_id\\\"\" ];\n\n  cosmos.base.v1beta1.Coin pool_coin = 3 [\n    (gogoproto.moretags) = \"yaml:\\\"pool_coin\\\"\",\n    (gogoproto.nullable) = false,\n    (gogoproto.castrepeated) = \"github.com/cosmos/cosmos-sdk/types.Coin\"\n  ];\n}\n\n// MsgWithdrawWithinBatchResponse defines the Msg/WithdrawWithinBatch response\n// type.\nmessage MsgWithdrawWithinBatchResponse {}\n\n// `MsgSwapWithinBatch` defines an sdk.Msg type that supports submitting a swap\n// offer request to the batch of the liquidity pool. Submit swap offer to the\n// liquidity pool batch with the specified the `pool_id`, `swap_type_id`,\n// `demand_coin_denom` with the coin and the price you're offering\n// and `offer_coin_fee` must be half of offer coin amount * current\n// `params.swap_fee_rate` and ceil for reservation to pay fees. This request is\n// stacked in the batch of the liquidity pool, is not processed immediately, and\n// is processed in the `endblock` at the same time as other requests. You must\n// request the same fields as the pool. Only the default `swap_type_id` 1 is\n// supported.\n//\n// See: https://github.com/gravity-devs/liquidity/tree/develop/doc\n// https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\nmessage MsgSwapWithinBatch {\n  option (gogoproto.equal) = false;\n  option (gogoproto.goproto_getters) = false;\n  // address of swap requester\n  string swap_requester_address = 1 [\n    (gogoproto.moretags) = \"yaml:\\\"swap_requester_address\\\"\",\n    (cosmos_proto.scalar) = \"cosmos.AddressString\"\n  ];\n  // id of swap type, must match the value in the pool. Only `swap_type_id` 1 is\n  // supported.\n  uint64 pool_id = 2 [ (gogoproto.moretags) = \"yaml:\\\"pool_id\\\"\" ];\n\n  // id of swap type. Must match the value in the pool.\n  uint32 swap_type_id = 3 [ (gogoproto.moretags) = \"yaml:\\\"swap_type_id\\\"\" ];\n\n  // offer sdk.coin for the swap request, must match the denom in the pool.\n  cosmos.base.v1beta1.Coin offer_coin = 4 [\n    (gogoproto.moretags) = \"yaml:\\\"offer_coin\\\"\",\n    (gogoproto.nullable) = false,\n    (gogoproto.castrepeated) = \"github.com/cosmos/cosmos-sdk/types.Coin\"\n  ];\n\n  // denom of demand coin to be exchanged on the swap request, must match the\n  // denom in the pool.\n  string demand_coin_denom = 5\n      [ (gogoproto.moretags) = \"yaml:\\\"demand_coin_denom\\\"\" ];\n\n  // half of offer coin amount * params.swap_fee_rate and ceil for reservation\n  // to pay fees.\n  cosmos.base.v1beta1.Coin offer_coin_fee = 6 [\n    (gogoproto.moretags) = \"yaml:\\\"offer_coin_fee\\\"\",\n    (gogoproto.nullable) = false,\n    (gogoproto.castrepeated) = \"github.com/cosmos/cosmos-sdk/types.Coin\"\n  ];\n\n  // limit order price for the order, the price is the exchange ratio of X/Y\n  // where X is the amount of the first coin and Y is the amount\n  // of the second coin when their denoms are sorted alphabetically.\n  string order_price = 7 [\n    (gogoproto.moretags) = \"yaml:\\\"order_price\\\"\",\n    (cosmos_proto.scalar) = \"cosmos.Dec\",\n    (gogoproto.customtype) = \"github.com/cosmos/cosmos-sdk/types.Dec\",\n    (gogoproto.nullable) = false\n  ];\n}\n\n// MsgSwapWithinBatchResponse defines the Msg/Swap response type.\nmessage MsgSwapWithinBatchResponse {}\n\n// TODO revisit this and apply, there is issue with cyclic dependency with\n// Params import message MsgUpdateParams {\n//   option (cosmos.msg.v1.signer) = \"authority\";\n//\n//   string authority = 1 [ (cosmos_proto.scalar) = \"cosmos.AddressString\" ];\n//\n//   Params params = 2 [ (gogoproto.nullable) = false ];\n// }\n//\n// message MsgUpdateParamsResponse {}\n"
  },
  {
    "path": "proto/cyber/rank/v1beta1/genesis.proto",
    "content": "syntax = \"proto3\";\npackage cyber.rank.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\nimport \"cyber/rank/v1beta1/types.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/rank/types\";\n\nmessage GenesisState { Params params = 1 [ (gogoproto.nullable) = false ]; }"
  },
  {
    "path": "proto/cyber/rank/v1beta1/pagination.proto",
    "content": "syntax = \"proto3\";\npackage cyber.rank.v1beta1;\n\noption go_package = \"github.com/cybercongress/go-cyber/x/rank/types\";\n\nmessage PageRequest {\n  uint32 page = 1;\n  uint32 per_page = 2;\n}\n\nmessage PageResponse { uint32 total = 1; }\n"
  },
  {
    "path": "proto/cyber/rank/v1beta1/query.proto",
    "content": "syntax = \"proto3\";\npackage cyber.rank.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\nimport \"google/api/annotations.proto\";\n\nimport \"cyber/rank/v1beta1/types.proto\";\nimport \"cyber/rank/v1beta1/pagination.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/rank/types\";\n\nservice Query {\n  rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {\n    option (google.api.http).get = \"/cyber/rank/v1beta1/rank/params\";\n  }\n\n  rpc Rank(QueryRankRequest) returns (QueryRankResponse) {\n    option (google.api.http).get = \"/cyber/rank/v1beta1/rank/rank/{particle}\";\n  }\n\n  rpc Search(QuerySearchRequest) returns (QuerySearchResponse) {\n    option (google.api.http).get = \"/cyber/rank/v1beta1/rank/search/{particle}\";\n  }\n\n  rpc Backlinks(QuerySearchRequest) returns (QuerySearchResponse) {\n    option (google.api.http).get =\n        \"/cyber/rank/v1beta1/rank/backlinks/{particle}\";\n  }\n\n  rpc Top(QueryTopRequest) returns (QuerySearchResponse) {\n    option (google.api.http).get = \"/cyber/rank/v1beta1/rank/top\";\n  }\n\n  rpc IsLinkExist(QueryIsLinkExistRequest) returns (QueryLinkExistResponse) {\n    option (google.api.http).get = \"/cyber/rank/v1beta1/is_link_exist\";\n  }\n\n  rpc IsAnyLinkExist(QueryIsAnyLinkExistRequest)\n      returns (QueryLinkExistResponse) {\n    option (google.api.http).get = \"/cyber/rank/v1beta1/is_any_link_exist\";\n  }\n\n  // Per-particle focus entropy: -pi*log2(pi) from the rank distribution.\n  // Computed at query time, no state stored.\n  rpc ParticleNegentropy(QueryNegentropyPartilceRequest)\n      returns (QueryNegentropyParticleResponse) {\n    option (google.api.http).get = \"/cyber/rank/v1beta1/negentropy/{particle}\";\n  }\n\n  // System-wide negentropy: J(pi) = log2(n) - H(pi).\n  // Measures how far the focus distribution deviates from uniform.\n  // Computed at query time from current rank values, no state stored.\n  rpc Negentropy(QueryNegentropyRequest) returns (QueryNegentropyResponse) {\n    option (google.api.http).get = \"/cyber/rank/v1beta1/negentropy\";\n  }\n\n  // Deprecated: karma removed. Stub kept for wire compatibility.\n  rpc Karma(QueryKarmaRequest) returns (QueryKarmaResponse) {\n    option (google.api.http).get = \"/cyber/rank/v1beta1/karma/{neuron}\";\n  }\n}\n\nmessage QueryParamsRequest {}\n\nmessage QueryParamsResponse {\n  cyber.rank.v1beta1.Params params = 1 [ (gogoproto.nullable) = false ];\n}\n\nmessage QueryRankRequest { string particle = 1; }\n\nmessage QueryRankResponse { uint64 rank = 1; }\n\nmessage QuerySearchRequest {\n  string particle = 1;\n  cyber.rank.v1beta1.PageRequest pagination = 2;\n}\n\nmessage QuerySearchResponse {\n  repeated RankedParticle result = 1 [ (gogoproto.nullable) = false ];\n  cyber.rank.v1beta1.PageResponse pagination = 2;\n}\n\nmessage QueryTopRequest { cyber.rank.v1beta1.PageRequest pagination = 1; }\n\nmessage QueryIsLinkExistRequest {\n  string from = 1;\n  string to = 2;\n  string address = 3;\n}\n\nmessage QueryIsAnyLinkExistRequest {\n  string from = 1;\n  string to = 2;\n}\n\nmessage QueryLinkExistResponse { bool exist = 1; }\n\nmessage QueryNegentropyPartilceRequest { string particle = 1; }\nmessage QueryNegentropyParticleResponse { uint64 entropy = 1; }\nmessage QueryNegentropyRequest {}\nmessage QueryNegentropyResponse { uint64 negentropy = 1; }\n// Deprecated: karma removed\nmessage QueryKarmaRequest { string neuron = 1; }\nmessage QueryKarmaResponse { uint64 karma = 1; }"
  },
  {
    "path": "proto/cyber/rank/v1beta1/tx.proto",
    "content": "syntax = \"proto3\";\npackage cyber.rank.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\nimport \"cosmos/msg/v1/msg.proto\";\nimport \"cosmos_proto/cosmos.proto\";\nimport \"cyber/rank/v1beta1/types.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/rank/types\";\n\nservice Msg {\n  rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse);\n}\n\nmessage MsgUpdateParams {\n  option (cosmos.msg.v1.signer) = \"authority\";\n\n  string authority = 1 [ (cosmos_proto.scalar) = \"cosmos.AddressString\" ];\n\n  Params params = 2 [ (gogoproto.nullable) = false ];\n}\n\nmessage MsgUpdateParamsResponse {}"
  },
  {
    "path": "proto/cyber/rank/v1beta1/types.proto",
    "content": "syntax = \"proto3\";\npackage cyber.rank.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/rank/types\";\n\nmessage Params {\n  int64 calculation_period = 1;\n\n  string damping_factor = 2 [\n    (gogoproto.customtype) = \"github.com/cosmos/cosmos-sdk/types.Dec\",\n    (gogoproto.nullable) = false\n  ];\n\n  string tolerance = 3 [\n    (gogoproto.customtype) = \"github.com/cosmos/cosmos-sdk/types.Dec\",\n    (gogoproto.nullable) = false\n  ];\n}\n\nmessage RankedParticle {\n  string particle = 1;\n  uint64 rank = 2;\n}"
  },
  {
    "path": "proto/cyber/resources/v1beta1/genesis.proto",
    "content": "syntax = \"proto3\";\npackage cyber.resources.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\nimport \"cyber/resources/v1beta1/types.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/resources/types\";\n\nmessage GenesisState { Params params = 1 [ (gogoproto.nullable) = false ]; }"
  },
  {
    "path": "proto/cyber/resources/v1beta1/query.proto",
    "content": "syntax = \"proto3\";\npackage cyber.resources.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\nimport \"google/api/annotations.proto\";\n\nimport \"cyber/resources/v1beta1/types.proto\";\nimport \"cosmos/base/v1beta1/coin.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/resources/types\";\n\nservice Query {\n  rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {\n    option (google.api.http).get = \"/cyber/resources/v1beta1/resources/params\";\n  }\n  rpc Investmint(QueryInvestmintRequest) returns (QueryInvestmintResponse) {\n    option (google.api.http).get =\n        \"/cyber/resources/v1beta1/resources/investmint\";\n  }\n  rpc AdjustedPrice(QueryAdjustedPriceRequest)\n      returns (QueryAdjustedPriceResponse) {\n    option (google.api.http).get =\n        \"/cyber/resources/v1beta1/resources/adjusted_price\";\n  }\n}\n\nmessage QueryParamsRequest {}\n\nmessage QueryParamsResponse {\n  Params params = 1 [ (gogoproto.nullable) = false ];\n}\n\nmessage QueryInvestmintRequest {\n  cosmos.base.v1beta1.Coin amount = 1 [ (gogoproto.nullable) = false ];\n  string resource = 2;\n  uint64 length = 3;\n}\n\nmessage QueryInvestmintResponse {\n  cosmos.base.v1beta1.Coin amount = 1 [ (gogoproto.nullable) = false ];\n}\n\nmessage QueryAdjustedPriceRequest {\n  cosmos.base.v1beta1.Coin base = 1 [ (gogoproto.nullable) = false ];\n  string resource = 2;\n}\n\nmessage QueryAdjustedPriceResponse {\n  cosmos.base.v1beta1.Coin adjusted = 1 [ (gogoproto.nullable) = false ];\n}\n"
  },
  {
    "path": "proto/cyber/resources/v1beta1/tx.proto",
    "content": "syntax = \"proto3\";\npackage cyber.resources.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\nimport \"cosmos/msg/v1/msg.proto\";\nimport \"cosmos_proto/cosmos.proto\";\nimport \"cyber/resources/v1beta1/types.proto\";\nimport \"cosmos/base/v1beta1/coin.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/resources/types\";\n\nservice Msg {\n  rpc Investmint(MsgInvestmint) returns (MsgInvestmintResponse);\n  rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse);\n}\n\nmessage MsgInvestmint {\n  option (gogoproto.equal) = false;\n  option (gogoproto.goproto_getters) = false;\n\n  string neuron = 1;\n  cosmos.base.v1beta1.Coin amount = 2 [\n    (gogoproto.nullable) = false,\n    (gogoproto.casttype) = \"github.com/cosmos/cosmos-sdk/types.Coin\"\n  ];\n  string resource = 3;\n  uint64 length = 4;\n}\n\nmessage MsgUpdateParams {\n  option (cosmos.msg.v1.signer) = \"authority\";\n\n  string authority = 1 [ (cosmos_proto.scalar) = \"cosmos.AddressString\" ];\n\n  Params params = 2 [ (gogoproto.nullable) = false ];\n}\n\nmessage MsgInvestmintResponse {}\nmessage MsgUpdateParamsResponse {}"
  },
  {
    "path": "proto/cyber/resources/v1beta1/types.proto",
    "content": "syntax = \"proto3\";\npackage cyber.resources.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\n\nimport \"cosmos/base/v1beta1/coin.proto\";\n\noption go_package = \"github.com/cybercongress/go-cyber/x/resources/types\";\n\nmessage Params {\n  uint32 max_slots = 1;\n  uint32 halving_period_volt_blocks = 2;\n  uint32 halving_period_ampere_blocks = 3;\n  uint32 base_investmint_period_volt = 4;\n  uint32 base_investmint_period_ampere = 5;\n  uint32 min_investmint_period = 6;\n  cosmos.base.v1beta1.Coin base_investmint_amount_volt = 7 [\n    (gogoproto.casttype) = \"github.com/cosmos/cosmos-sdk/types.Coin\",\n    (gogoproto.nullable) = false\n  ];\n  cosmos.base.v1beta1.Coin base_investmint_amount_ampere = 8 [\n    (gogoproto.casttype) = \"github.com/cosmos/cosmos-sdk/types.Coin\",\n    (gogoproto.nullable) = false\n  ];\n}"
  },
  {
    "path": "proto/osmosis/tokenfactory/v1beta1/authority_metadata.proto",
    "content": "syntax = \"proto3\";\npackage osmosis.tokenfactory.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\n// import \"cosmos/base/v1beta1/coin.proto\";\n\noption go_package = \"github.com/CosmosContracts/juno/x/tokenfactory/types\";\n\n// DenomAuthorityMetadata specifies metadata for addresses that have specific\n// capabilities over a token factory denom. Right now there is only one Admin\n// permission, but is planned to be extended to the future.\nmessage DenomAuthorityMetadata {\n  option (gogoproto.equal) = true;\n\n  // Can be empty for no admin, or a valid osmosis address\n  string admin = 1 [ (gogoproto.moretags) = \"yaml:\\\"admin\\\"\" ];\n}"
  },
  {
    "path": "proto/osmosis/tokenfactory/v1beta1/genesis.proto",
    "content": "syntax = \"proto3\";\npackage osmosis.tokenfactory.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\nimport \"osmosis/tokenfactory/v1beta1/authority_metadata.proto\";\nimport \"osmosis/tokenfactory/v1beta1/params.proto\";\n\noption go_package = \"github.com/CosmosContracts/juno/x/tokenfactory/types\";\n\n// GenesisState defines the tokenfactory module's genesis state.\nmessage GenesisState {\n  // params defines the parameters of the module.\n  Params params = 1 [ (gogoproto.nullable) = false ];\n\n  repeated GenesisDenom factory_denoms = 2 [\n    (gogoproto.moretags) = \"yaml:\\\"factory_denoms\\\"\",\n    (gogoproto.nullable) = false\n  ];\n}\n\n// GenesisDenom defines a tokenfactory denom that is defined within genesis\n// state. The structure contains DenomAuthorityMetadata which defines the\n// denom's admin.\nmessage GenesisDenom {\n  option (gogoproto.equal) = true;\n\n  string denom = 1 [ (gogoproto.moretags) = \"yaml:\\\"denom\\\"\" ];\n  DenomAuthorityMetadata authority_metadata = 2 [\n    (gogoproto.moretags) = \"yaml:\\\"authority_metadata\\\"\",\n    (gogoproto.nullable) = false\n  ];\n}"
  },
  {
    "path": "proto/osmosis/tokenfactory/v1beta1/params.proto",
    "content": "syntax = \"proto3\";\npackage osmosis.tokenfactory.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\nimport \"cosmos/base/v1beta1/coin.proto\";\n\noption go_package = \"github.com/CosmosContracts/juno/x/tokenfactory/types\";\n\n// Params defines the parameters for the tokenfactory module.\nmessage Params {\n  repeated cosmos.base.v1beta1.Coin denom_creation_fee = 1 [\n    (gogoproto.castrepeated) = \"github.com/cosmos/cosmos-sdk/types.Coins\",\n    (gogoproto.moretags) = \"yaml:\\\"denom_creation_fee\\\"\",\n    (gogoproto.nullable) = false\n  ];\n\n  // if denom_creation_fee is an empty array, then this field is used to add\n  // more gas consumption to the base cost.\n  // https://github.com/CosmWasm/token-factory/issues/11\n  uint64 denom_creation_gas_consume = 2 [\n    (gogoproto.moretags) = \"yaml:\\\"denom_creation_gas_consume\\\"\",\n    (gogoproto.nullable) = true\n  ];\n}"
  },
  {
    "path": "proto/osmosis/tokenfactory/v1beta1/query.proto",
    "content": "syntax = \"proto3\";\npackage osmosis.tokenfactory.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\nimport \"google/api/annotations.proto\";\nimport \"osmosis/tokenfactory/v1beta1/authority_metadata.proto\";\nimport \"osmosis/tokenfactory/v1beta1/params.proto\";\n\noption go_package = \"github.com/CosmosContracts/juno/x/tokenfactory/types\";\n\n// Query defines the gRPC querier service.\nservice Query {\n  // Params defines a gRPC query method that returns the tokenfactory module's\n  // parameters.\n  rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {\n    option (google.api.http).get = \"/osmosis/tokenfactory/v1beta1/params\";\n  }\n\n  // DenomAuthorityMetadata defines a gRPC query method for fetching\n  // DenomAuthorityMetadata for a particular denom.\n  rpc DenomAuthorityMetadata(QueryDenomAuthorityMetadataRequest)\n      returns (QueryDenomAuthorityMetadataResponse) {\n    option (google.api.http).get =\n        \"/osmosis/tokenfactory/v1beta1/denoms/{denom}/authority_metadata\";\n  }\n\n  // DenomsFromCreator defines a gRPC query method for fetching all\n  // denominations created by a specific admin/creator.\n  rpc DenomsFromCreator(QueryDenomsFromCreatorRequest)\n      returns (QueryDenomsFromCreatorResponse) {\n    option (google.api.http).get =\n        \"/osmosis/tokenfactory/v1beta1/denoms_from_creator/{creator}\";\n  }\n}\n\n// QueryParamsRequest is the request type for the Query/Params RPC method.\nmessage QueryParamsRequest {}\n\n// QueryParamsResponse is the response type for the Query/Params RPC method.\nmessage QueryParamsResponse {\n  // params defines the parameters of the module.\n  Params params = 1 [ (gogoproto.nullable) = false ];\n}\n\n// QueryDenomAuthorityMetadataRequest defines the request structure for the\n// DenomAuthorityMetadata gRPC query.\nmessage QueryDenomAuthorityMetadataRequest {\n  string denom = 1 [ (gogoproto.moretags) = \"yaml:\\\"denom\\\"\" ];\n}\n\n// QueryDenomAuthorityMetadataResponse defines the response structure for the\n// DenomAuthorityMetadata gRPC query.\nmessage QueryDenomAuthorityMetadataResponse {\n  DenomAuthorityMetadata authority_metadata = 1 [\n    (gogoproto.moretags) = \"yaml:\\\"authority_metadata\\\"\",\n    (gogoproto.nullable) = false\n  ];\n}\n\n// QueryDenomsFromCreatorRequest defines the request structure for the\n// DenomsFromCreator gRPC query.\nmessage QueryDenomsFromCreatorRequest {\n  string creator = 1 [ (gogoproto.moretags) = \"yaml:\\\"creator\\\"\" ];\n}\n\n// QueryDenomsFromCreatorRequest defines the response structure for the\n// DenomsFromCreator gRPC query.\nmessage QueryDenomsFromCreatorResponse {\n  repeated string denoms = 1 [ (gogoproto.moretags) = \"yaml:\\\"denoms\\\"\" ];\n}\n"
  },
  {
    "path": "proto/osmosis/tokenfactory/v1beta1/tx.proto",
    "content": "syntax = \"proto3\";\npackage osmosis.tokenfactory.v1beta1;\n\nimport \"gogoproto/gogo.proto\";\nimport \"cosmos/base/v1beta1/coin.proto\";\nimport \"cosmos/bank/v1beta1/bank.proto\";\nimport \"osmosis/tokenfactory/v1beta1/params.proto\";\nimport \"cosmos/msg/v1/msg.proto\";\nimport \"cosmos_proto/cosmos.proto\";\n\noption go_package = \"github.com/CosmosContracts/juno/x/tokenfactory/types\";\n\n// Msg defines the tokefactory module's gRPC message service.\nservice Msg {\n  rpc CreateDenom(MsgCreateDenom) returns (MsgCreateDenomResponse);\n  rpc Mint(MsgMint) returns (MsgMintResponse);\n  rpc Burn(MsgBurn) returns (MsgBurnResponse);\n  rpc ChangeAdmin(MsgChangeAdmin) returns (MsgChangeAdminResponse);\n  rpc SetDenomMetadata(MsgSetDenomMetadata)\n      returns (MsgSetDenomMetadataResponse);\n  rpc ForceTransfer(MsgForceTransfer) returns (MsgForceTransferResponse);\n\n  // UpdateParams defines a governance operation for updating the x/mint module\n  // parameters. The authority is hard-coded to the x/gov module account.\n  //\n  // Since: cosmos-sdk 0.47\n  rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse);\n}\n\n// MsgCreateDenom defines the message structure for the CreateDenom gRPC service\n// method. It allows an account to create a new denom. It requires a sender\n// address and a sub denomination. The (sender_address, sub_denomination) tuple\n// must be unique and cannot be re-used.\n//\n// The resulting denom created is defined as\n// <factory/{creatorAddress}/{subdenom}>. The resulting denom's admin is\n// originally set to be the creator, but this can be changed later. The token\n// denom does not indicate the current admin.\nmessage MsgCreateDenom {\n  string sender = 1 [ (gogoproto.moretags) = \"yaml:\\\"sender\\\"\" ];\n  // subdenom can be up to 44 \"alphanumeric\" characters long.\n  string subdenom = 2 [ (gogoproto.moretags) = \"yaml:\\\"subdenom\\\"\" ];\n}\n\n// MsgCreateDenomResponse is the return value of MsgCreateDenom\n// It returns the full string of the newly created denom\nmessage MsgCreateDenomResponse {\n  string new_token_denom = 1\n      [ (gogoproto.moretags) = \"yaml:\\\"new_token_denom\\\"\" ];\n}\n\n// MsgMint is the sdk.Msg type for allowing an admin account to mint\n// more of a token.  For now, we only support minting to the sender account\nmessage MsgMint {\n  string sender = 1 [ (gogoproto.moretags) = \"yaml:\\\"sender\\\"\" ];\n  cosmos.base.v1beta1.Coin amount = 2 [\n    (gogoproto.moretags) = \"yaml:\\\"amount\\\"\",\n    (gogoproto.nullable) = false\n  ];\n  string mintToAddress = 3\n      [ (gogoproto.moretags) = \"yaml:\\\"mint_to_address\\\"\" ];\n}\n\nmessage MsgMintResponse {}\n\n// MsgBurn is the sdk.Msg type for allowing an admin account to burn\n// a token.  For now, we only support burning from the sender account.\nmessage MsgBurn {\n  string sender = 1 [ (gogoproto.moretags) = \"yaml:\\\"sender\\\"\" ];\n  cosmos.base.v1beta1.Coin amount = 2 [\n    (gogoproto.moretags) = \"yaml:\\\"amount\\\"\",\n    (gogoproto.nullable) = false\n  ];\n  string burnFromAddress = 3\n      [ (gogoproto.moretags) = \"yaml:\\\"burn_from_address\\\"\" ];\n}\n\nmessage MsgBurnResponse {}\n\n// MsgChangeAdmin is the sdk.Msg type for allowing an admin account to reassign\n// adminship of a denom to a new account\nmessage MsgChangeAdmin {\n  string sender = 1 [ (gogoproto.moretags) = \"yaml:\\\"sender\\\"\" ];\n  string denom = 2 [ (gogoproto.moretags) = \"yaml:\\\"denom\\\"\" ];\n  string new_admin = 3 [ (gogoproto.moretags) = \"yaml:\\\"new_admin\\\"\" ];\n}\n\n// MsgChangeAdminResponse defines the response structure for an executed\n// MsgChangeAdmin message.\nmessage MsgChangeAdminResponse {}\n\n// MsgSetDenomMetadata is the sdk.Msg type for allowing an admin account to set\n// the denom's bank metadata\nmessage MsgSetDenomMetadata {\n  string sender = 1 [ (gogoproto.moretags) = \"yaml:\\\"sender\\\"\" ];\n  cosmos.bank.v1beta1.Metadata metadata = 2 [\n    (gogoproto.moretags) = \"yaml:\\\"metadata\\\"\",\n    (gogoproto.nullable) = false\n  ];\n}\n\n// MsgSetDenomMetadataResponse defines the response structure for an executed\n// MsgSetDenomMetadata message.\nmessage MsgSetDenomMetadataResponse {}\n\nmessage MsgForceTransfer {\n  string sender = 1 [ (gogoproto.moretags) = \"yaml:\\\"sender\\\"\" ];\n  cosmos.base.v1beta1.Coin amount = 2 [\n    (gogoproto.moretags) = \"yaml:\\\"amount\\\"\",\n    (gogoproto.nullable) = false\n  ];\n  string transferFromAddress = 3\n      [ (gogoproto.moretags) = \"yaml:\\\"transfer_from_address\\\"\" ];\n  string transferToAddress = 4\n      [ (gogoproto.moretags) = \"yaml:\\\"transfer_to_address\\\"\" ];\n}\n\nmessage MsgForceTransferResponse {}\n\n// MsgUpdateParams is the Msg/UpdateParams request type.\n//\n// Since: cosmos-sdk 0.47\nmessage MsgUpdateParams {\n  option (cosmos.msg.v1.signer) = \"authority\";\n\n  // authority is the address of the governance account.\n  string authority = 1 [ (cosmos_proto.scalar) = \"cosmos.AddressString\" ];\n\n  // params defines the x/mint parameters to update.\n  //\n  // NOTE: All parameters must be supplied.\n  Params params = 2 [ (gogoproto.nullable) = false ];\n}\n\n// MsgUpdateParamsResponse defines the response structure for executing a\n// MsgUpdateParams message.\n//\n// Since: cosmos-sdk 0.47\nmessage MsgUpdateParamsResponse {}\n"
  },
  {
    "path": "scripts/install_cyber.sh",
    "content": "#!/bin/sh\n# Installation script for cyber. It tries to move $bin in one of the\n# directories stored in $binpaths.\n\nbinpaths=\"/usr/local/bin /usr/bin\"\nlibpaths=\"/usr/lib /usr/local/lib\"\n\n\n# This variable contains a nonzero length string in case the script fails\n# because of missing write permissions.\nis_write_perm_missing=\"\"\n\n# Download archive with cyber binaries according to platform type\nPLATFORM=$(uname)\ncase \"$PLATFORM\" in\n  \"Darwin\")\n    # macOS\n    curl -OL  https://github.com/cybercongress/go-cyber/releases/download/v0.2.0/cyber_v0.2.0_darwin-amd64.tar.gz\n    tar -xzf cyber_v0.2.0_darwin-amd64.tar.gz\n    for binpath in $binpaths; do\n      if cp build_v0.2.0_darwin_amd64/cyber \"$binpath\"; then\n        for libpath in $libpaths; do\n          if cp build_v0.2.0_darwin_amd64/libwasmvm.dylib  \"$libpath\"; then\n            cp build_v0.2.0_darwin_amd64/libwasmvm.so  \"$libpath\"\n            echo \"Moved libwasmvm to $libpath\"\n            break\n          else\n          if [ -d \"$libpath\" ] && [ ! -w \"$libpath\" ]; then\n            is_write_perm_missing=1\n          fi\n          fi\n        done\n        echo \"Moved $bin to $binpath\"\n        echo \"Enjoy your cyber experience!\"\n        rm cyber_v0.2.0_darwin-amd64.tar.gz\n        rm -rf build_v0.2.0_darwin_amd64\n        exit 0\n      else\n      if [ -d \"$binpath\" ] && [ ! -w \"$binpath\" ]; then\n        is_write_perm_missing=1\n        rm cyber_v0.2.0_darwin-amd64.tar.gz\n        rm -rf build_v0.2.0_darwin_amd64\n      fi\n      fi\n    done\n    ;;\n      \"Linux\")\n    # Linux distro,\n    curl -OL https://github.com/cybercongress/go-cyber/releases/download/v0.2.0/cyber_v0.2.0_linux-amd64.tar.gz\n    tar -xzf cyber_v0.2.0_linux-amd64.tar.gz -C ./\n    for binpath in $binpaths; do\n      if cp build_v0.2.0_linux_amd64/cyber \"$binpath\"; then\n        for libpath in $libpaths; do\n          if cp build_v0.2.0_linux_amd64/libwasmvm.dylib  \"$libpath\"; then\n            cp build_v0.2.0_linux_amd64/libwasmvm.so  \"$libpath\"\n            echo \"Moved libwasmvm to $libpath\"\n            break\n          else\n          if [ -d \"$libpath\" ] && [ ! -w \"$libpath\" ]; then\n            is_write_perm_missing=1\n          fi\n          fi\n        done\n        echo \"Moved $bin to $binpath\"\n        echo \"Enjoy your cyber experience!\"\n        rm cyber_v0.2.0_linux-amd64.tar.gz\n        rm -rf build_v0.2.0_linux_amd64\n        exit 0\n      else\n      if [ -d \"$binpath\" ] && [ ! -w \"$binpath\" ]; then\n        is_write_perm_missing=1\n        rm cyber_v0.2.0_linux-amd64.tar.gz\n        rm -rf build_v0.2.0_linux_amd64\n      fi\n      fi\n    done\n    ;;\nesac\n\n\necho \"We cannot install $bin in one of the directories $binpaths\"\n\nif [ -n \"$is_write_perm_missing\" ]; then\n  echo \"It seems that we do not have the necessary write permissions.\"\n  echo \"Perhaps try running this script as a privileged user:\"\n  echo \"Or check that you using default library path.\"\n  echo \"    sudo $0\"\n  echo\nfi\n\nexit 1\n"
  },
  {
    "path": "scripts/merge_protoc.py",
    "content": "#!/usr/bin/env python3\n\n# Call this from the ./scripts/protoc_swagger_openapi_gen.sh script\n\n# merged protoc definitions together into 1 JSON file without duplicate keys\n# this is done AFTER swagger-merger has been run, merging the multiple name-#.json files into 1.\n\nimport json\nimport os\nimport random\nimport string\n\ncurrent_dir = os.path.dirname(os.path.realpath(__file__))\nproject_root = os.path.dirname(current_dir)\n\nall_dir = os.path.join(project_root, \"tmp-swagger-gen\", \"_all\")\n\n# get the go.mod file Version\nversion = \"\"\nwith open(os.path.join(project_root, \"go.mod\"), \"r\") as f:\n    for line in f.readlines():\n        if line.startswith(\"module\"):\n            version = line.split(\"/\")[-1].strip()\n            break\n\nif not version:\n    print(\"Could not find version in go.mod\")\n    exit(1)\n\n# What we will save when all combined\noutput: dict\noutput = {\n    \"swagger\": \"2.0\",\n    \"info\": {\"title\": \"Bostrom network\", \"version\": version},\n    \"consumes\": [\"application/json\"],\n    \"produces\": [\"application/json\"],\n    \"paths\": {},\n    \"definitions\": {},\n}\n\n# Combine all individual files calls into 1 massive file.\nfor file in os.listdir(all_dir):\n    if not file.endswith(\".json\"):\n        continue\n\n    # read file all_dir / file\n    with open(os.path.join(all_dir, file), \"r\") as f:\n        data = json.load(f)\n\n    for key in data[\"paths\"]:\n        output[\"paths\"][key] = data[\"paths\"][key]\n\n    for key in data[\"definitions\"]:\n        output[\"definitions\"][key] = data[\"definitions\"][key]\n\n\n# loop through all paths, then alter any keys which are \"operationId\" to be a random string of 20 characters\n# this is done to avoid duplicate keys in the final output (which opens 2 tabs in swagger-ui)\n# current-random\nfor path in output[\"paths\"]:\n    for method in output[\"paths\"][path]:\n        if \"operationId\" in output[\"paths\"][path][method]:\n            output[\"paths\"][path][method][\n                \"operationId\"\n            ] = f'{output[\"paths\"][path][method][\"operationId\"]}_' + \"\".join(\n                random.choices(string.ascii_uppercase + string.digits, k=5)\n            )\n\n\n# save output into 1 big json file\nwith open(\n    os.path.join(project_root, \"tmp-swagger-gen\", \"_all\", \"FINAL.json\"), \"w\"\n) as f:\n    json.dump(output, f, indent=2)\n"
  },
  {
    "path": "scripts/protoc_swagger_openapi_gen.sh",
    "content": "#!/usr/bin/env bash\n\n# Run from the project root directory\n# This script generates the swagger & openapi.yaml documentation for the rest API on port 1317\n#\n# Install the following::\n# sudo npm install -g swagger2openapi swagger-merger swagger-combine\n# go install github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger@v1.16.0\n\nset -eo pipefail\n\nmkdir -p ./tmp-swagger-gen\ncd proto\n\ncosmos_sdk_dir=$(go list -f '{{ .Dir }}' -m github.com/cosmos/cosmos-sdk)\nibc_go=$(go list -f '{{ .Dir }}' -m github.com/cosmos/ibc-go/v7)\nwasmd=$(go list -f '{{ .Dir }}' -m github.com/CosmWasm/wasmd)\n\nproto_dirs=$(find ./cyber \"$cosmos_sdk_dir\"/proto \"$ibc_go\"/proto \"$wasmd\"/proto -path -prune -o -name '*.proto' -print0 | xargs -0 -n1 dirname | sort | uniq)\nfor dir in $proto_dirs; do\n  # generate swagger files (filter query files)\n  query_file=$(find \"${dir}\" -maxdepth 1 \\( -name 'query.proto' -o -name 'service.proto' \\))\n  if [[ ! -z \"$query_file\" ]]; then\n    buf generate --template buf.gen.swagger.yaml $query_file\n  fi\ndone\n\ncd ..\n# combine swagger files\n# uses nodejs package `swagger-combine`.\n\n# Fix circular definition in cosmos/tx/v1beta1/service.swagger.json\njq 'del(.definitions[\"cosmos.tx.v1beta1.ModeInfo.Multi\"].properties.mode_infos.items[\"$ref\"])' ./tmp-swagger-gen/cosmos/tx/v1beta1/service.swagger.json > ./tmp-swagger-gen/cosmos/tx/v1beta1/fixed-service.swagger.json\njq 'del(.definitions[\"cosmos.autocli.\"].properties.mode_infos.items[\"$ref\"])' ./tmp-swagger-gen/cosmos/tx/v1beta1/fixed-service.swagger.json > ./tmp-swagger-gen/cosmos/tx/v1beta1/fixed-service2.swagger.json\n\nrm ./tmp-swagger-gen/cosmos/tx/v1beta1/service.swagger.json\nrm ./tmp-swagger-gen/cosmos/orm/query/v1alpha1/query.swagger.json\nrm ./tmp-swagger-gen/cosmos/nft/v1beta1/query.swagger.json # TODO enable later when nfts will be added\nrm ./tmp-swagger-gen/cosmos/group/v1/query.swagger.json\nrm ./tmp-swagger-gen/cosmos/autocli/v1/query.swagger.json # this one brokes the script\nrm ./tmp-swagger-gen/ibc/applications/interchain_accounts/host/v1/query.swagger.json\nrm ./tmp-swagger-gen/ibc/applications/interchain_accounts/controller/v1/query.swagger.json\n\n\n# Tag everything as \"gRPC Gateway API\"\nperl -i -pe 's/\"(Query|Service)\"/\"gRPC Gateway API\"/' $(find ./tmp-swagger-gen -name '*.swagger.json' -print0 | xargs -0)\n\n# Convert all *.swagger.json files into a single folder _all\nfiles=$(find ./tmp-swagger-gen -name '*.swagger.json' -print0 | xargs -0)\nmkdir -p ./tmp-swagger-gen/_all\ncounter=0\nfor f in $files; do\n  echo \"[+] $f\"\n\n  if [[ \"$f\" =~ \"cyber\" ]]; then\n    cp $f ./tmp-swagger-gen/_all/cyber-$counter.json\n  elif [[ \"$f\" =~ \"cosmwasm\" ]]; then\n    cp $f ./tmp-swagger-gen/_all/cosmwasm-$counter.json\n  elif [[ \"$f\" =~ \"cosmos\" ]]; then\n    cp $f ./tmp-swagger-gen/_all/cosmos-$counter.json\n  else\n    cp $f ./tmp-swagger-gen/_all/other-$counter.json\n  fi\n  ((counter++))\ndone\n\n# merges all the above into FINAL.json\npython3 ./scripts/merge_protoc.py\n\n# Makes a swagger temp file with reference pointers\nswagger-combine ./tmp-swagger-gen/_all/FINAL.json -o ./client/docs/_tmp_swagger.yaml -f yaml --continueOnConflictingPaths --includeDefinitions\n\n# extends out the *ref instances to their full value\nswagger-merger --input ./client/docs/_tmp_swagger.yaml -o ./client/docs/swagger.yaml\n\n# Derive openapi from swagger docs\nswagger2openapi --patch ./client/docs/swagger.yaml --outfile ./client/docs/static/openapi.yml --yaml\n\n# clean swagger tmp files\nrm ./client/docs/_tmp_swagger.yaml\nrm -rf ./tmp-swagger-gen"
  },
  {
    "path": "scripts/protocgen.sh",
    "content": "#!/usr/bin/env bash\n\nset -eo pipefail\n\nprotoc_install_proto_gen_doc() {\n  echo \"Installing protobuf protoc-gen-doc plugin\"\n  (go install github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc@latest 2> /dev/null)\n}\n\necho \"Generating gogo proto code\"\ncd proto\nproto_dirs=$(find ./cyber -path -prune -o -name '*.proto' -print0 | xargs -0 -n1 dirname | sort | uniq)\nfor dir in $proto_dirs; do\n  echo ${dir}\n  for file in $(find \"${dir}\" -maxdepth 1 -name '*.proto'); do\n    if grep \"option go_package\" $file &> /dev/null ; then\n      buf generate --template buf.gen.gogo.yaml $file\n    fi\n  done\ndone\n\nprotoc_install_proto_gen_doc\n\necho \"Generating proto docs\"\nbuf generate --template buf.gen.doc.yaml\n\ncd ..\n\n# move proto files to the right places\ncp -r github.com/cybercongress/go-cyber/* ./\nrm -rf github.com\n"
  },
  {
    "path": "start_script.sh",
    "content": "#!/bin/sh\n\nulimit -n 4096 &\n\nexport DAEMON_LOG_BUFFER_SIZE=700\nexport DAEMON_HOME=/root/.cyber\nexport DAEMON_NAME=cyber\nexport DAEMON_ALLOW_DOWNLOAD_BINARIES=false\nexport DAEMON_RESTART_AFTER_UPGRADE=true\nexport UNSAFE_SKIP_BACKUP=true\n\n# Start cyber process\n\n/usr/bin/cosmovisor run start --compute-gpu true --search-api $ALLOW_SEARCH --home /root/.cyber"
  },
  {
    "path": "types/account.go",
    "content": "package types\n\ntype AccNumber uint64\n"
  },
  {
    "path": "types/coins.go",
    "content": "package types\n\nimport sdk \"github.com/cosmos/cosmos-sdk/types\"\n\nconst (\n\tCYB    = \"boot\"\n\tVOLT   = \"millivolt\"\n\tAMPERE = \"milliampere\"\n\tSCYB   = \"hydrogen\"\n)\n\nconst (\n\tDeca int64 = 1\n\tKilo       = Deca * 1000\n\tMega       = Kilo * 1000\n\tGiga       = Mega * 1000\n\tTera       = Giga * 1000\n\tPeta       = Tera * 1000\n)\n\nfunc NewCybCoin(amount int64) sdk.Coin {\n\treturn sdk.NewInt64Coin(CYB, amount)\n}\n\nfunc NewSCybCoin(amount int64) sdk.Coin {\n\treturn sdk.NewInt64Coin(SCYB, amount)\n}\n\nfunc NewVoltCoin(amount int64) sdk.Coin {\n\treturn sdk.NewInt64Coin(VOLT, amount)\n}\n\nfunc NewAmpereCoin(amount int64) sdk.Coin {\n\treturn sdk.NewInt64Coin(AMPERE, amount)\n}\n"
  },
  {
    "path": "utils/context.go",
    "content": "package utils\n\nimport (\n\tdb \"github.com/cometbft/cometbft-db\"\n\ttmproto \"github.com/cometbft/cometbft/proto/tendermint/types\"\n\t\"github.com/cosmos/cosmos-sdk/store\"\n\tstoretypes \"github.com/cosmos/cosmos-sdk/store/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tconsensustypes \"github.com/cosmos/cosmos-sdk/x/consensus/types\"\n\tcrisistypes \"github.com/cosmos/cosmos-sdk/x/crisis/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/nft\"\n\tpacketforwardtypes \"github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types\"\n\ticqtypes \"github.com/cosmos/ibc-apps/modules/async-icq/v7/types\"\n\tibchookstypes \"github.com/cosmos/ibc-apps/modules/ibc-hooks/v7/types\"\n\ticacontrollertypes \"github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types\"\n\ticahosttypes \"github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types\"\n\tibcfeetypes \"github.com/cosmos/ibc-go/v7/modules/apps/29-fee/types\"\n\tclocktypes \"github.com/cybercongress/go-cyber/v7/x/clock/types\"\n\tresourcestypes \"github.com/cybercongress/go-cyber/v7/x/resources/types\"\n\ttokenfactorytypes \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\nfunc NewContextWithMSVersion(db db.DB, version int64, keys map[string]*storetypes.KVStoreKey) (sdk.Context, error) {\n\tms := store.NewCommitMultiStore(db)\n\n\tdelete(keys, ibcfeetypes.ModuleName)\n\tdelete(keys, consensustypes.ModuleName)\n\tdelete(keys, resourcestypes.ModuleName)\n\tdelete(keys, crisistypes.ModuleName)\n\tdelete(keys, tokenfactorytypes.ModuleName)\n\tdelete(keys, clocktypes.ModuleName)\n\tdelete(keys, nft.ModuleName)\n\tdelete(keys, icahosttypes.StoreKey)\n\tdelete(keys, icacontrollertypes.StoreKey)\n\tdelete(keys, ibchookstypes.StoreKey)\n\tdelete(keys, packetforwardtypes.StoreKey)\n\tdelete(keys, icqtypes.StoreKey)\n\n\tfor _, key := range keys {\n\t\tms.MountStoreWithDB(key, storetypes.StoreTypeIAVL, nil)\n\t}\n\n\terr := ms.LoadVersion(version)\n\tif err != nil {\n\t\t// TODO put comment here because when added new module during migration this module have 0 store's version\n\t\treturn sdk.Context{}, err\n\t}\n\n\treturn sdk.NewContext(ms, tmproto.Header{Height: version}, false, nil), nil\n}\n"
  },
  {
    "path": "utils/io.go",
    "content": "package utils\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"path/filepath\"\n\n\t\"github.com/cometbft/cometbft/libs/cli\"\n\t\"github.com/spf13/viper\"\n)\n\nfunc RootifyPath(path string) string {\n\tif filepath.IsAbs(path) {\n\t\treturn path\n\t}\n\trootDir := viper.GetString(cli.HomeFlag)\n\treturn filepath.Join(rootDir, path)\n}\n\nfunc ReadExactlyNBytes(reader io.Reader, n uint64) ([]byte, error) {\n\tdata := make([]byte, n)\n\tcurrentlyReadedBytes := uint64(0)\n\tfor currentlyReadedBytes < n {\n\t\treadedBytes, err := reader.Read(data[currentlyReadedBytes:n])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif readedBytes == 0 {\n\t\t\treturn nil, errors.New(\"not enough bytes tor read\")\n\t\t}\n\t\tcurrentlyReadedBytes += uint64(readedBytes)\n\t}\n\n\treturn data, nil\n}\n"
  },
  {
    "path": "x/bandwidth/abci.go",
    "content": "package bandwidth\n\nimport (\n\t\"time\"\n\n\t\"github.com/cosmos/cosmos-sdk/telemetry\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/bandwidth/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/bandwidth/types\"\n)\n\nfunc EndBlocker(ctx sdk.Context, bm *keeper.BandwidthMeter) {\n\tdefer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyEndBlocker)\n\n\tparams := bm.GetParams(ctx)\n\tif ctx.BlockHeight() != 0 && uint64(ctx.BlockHeight())%params.AdjustPricePeriod == 0 {\n\t\tbm.AdjustPrice(ctx) // TODO Add block event for price and load\n\t}\n\n\tbm.CommitBlockBandwidth(ctx) // TODO add block event for committed bandwidth\n}\n"
  },
  {
    "path": "x/bandwidth/client/cli/query.go",
    "content": "package cli\n\nimport (\n\t\"context\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/cosmos/cosmos-sdk/client/flags\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t// sdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/bandwidth/types\"\n)\n\nfunc GetQueryCmd() *cobra.Command {\n\tqueryCmd := &cobra.Command{\n\t\tUse:                        types.ModuleName,\n\t\tShort:                      \"Querying commands for the bandwidth module\",\n\t\tDisableFlagParsing:         true,\n\t\tSuggestionsMinimumDistance: 2,\n\t\tRunE:                       client.ValidateCmd,\n\t}\n\n\tqueryCmd.AddCommand(\n\t\tGetCmdQueryParams(),\n\t\tGetCmdQueryPrice(),\n\t\tGetCmdQueryLoad(),\n\t\tGetCmdQueryTotalBandwidth(),\n\t\tGetCmdQueryNeuron(),\n\t)\n\n\treturn queryCmd\n}\n\nfunc GetCmdQueryParams() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"params\",\n\t\tShort: \"Query the current bandwidth module parameters information\",\n\t\tArgs:  cobra.NoArgs,\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tres, err := queryClient.Params(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryParamsRequest{},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryLoad() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"load\",\n\t\tShort: \"Query the bandwidth load\",\n\t\tArgs:  cobra.NoArgs,\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tres, err := queryClient.Load(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryLoadRequest{},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryPrice() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"price\",\n\t\tShort: \"Query the bandwidth price\",\n\t\tArgs:  cobra.NoArgs,\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tres, err := queryClient.Price(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryPriceRequest{},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryTotalBandwidth() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"total\",\n\t\tShort: \"Query the total bandwidth\",\n\t\tArgs:  cobra.NoArgs,\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tres, err := queryClient.TotalBandwidth(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryTotalBandwidthRequest{},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryNeuron() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"neuron [address]\",\n\t\tShort: \"Query the neuron bandwidth [address]\",\n\t\tArgs:  cobra.ExactArgs(1),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\taddr, err := sdk.AccAddressFromBech32(args[0])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tres, err := queryClient.NeuronBandwidth(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryNeuronBandwidthRequest{Neuron: addr.String()},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n"
  },
  {
    "path": "x/bandwidth/exported/exported.go",
    "content": "package exported\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tparamtypes \"github.com/cosmos/cosmos-sdk/x/params/types\"\n)\n\ntype (\n\tParamSet = paramtypes.ParamSet\n\n\t// Subspace defines an interface that implements the legacy x/params Subspace\n\t// type.\n\t//\n\t// NOTE: This is used solely for migration of x/params managed parameters.\n\tSubspace interface {\n\t\tGetParamSet(ctx sdk.Context, ps ParamSet)\n\t}\n)\n"
  },
  {
    "path": "x/bandwidth/keeper/blocks.go",
    "content": "package keeper\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/bandwidth/types\"\n)\n\nfunc (bm BandwidthMeter) SetBlockBandwidth(ctx sdk.Context, blockNumber uint64, value uint64) {\n\tstore := ctx.KVStore(bm.storeKey)\n\tstore.Set(types.BlockStoreKey(blockNumber), sdk.Uint64ToBigEndian(value))\n}\n\nfunc (bm BandwidthMeter) GetValuesForPeriod(ctx sdk.Context, period uint64) map[uint64]uint64 {\n\tstore := ctx.KVStore(bm.storeKey)\n\n\twindowStart := ctx.BlockHeight() - int64(period) + 1\n\tif windowStart <= 0 {\n\t\twindowStart = 1\n\t}\n\n\tresult := make(map[uint64]uint64)\n\tfor blockNumber := uint64(windowStart); blockNumber <= uint64(ctx.BlockHeight()); blockNumber++ {\n\t\tresult[blockNumber] = sdk.BigEndianToUint64(store.Get(types.BlockStoreKey(blockNumber)))\n\t}\n\treturn result\n}\n"
  },
  {
    "path": "x/bandwidth/keeper/genesis.go",
    "content": "package keeper\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tauthkeeper \"github.com/cosmos/cosmos-sdk/x/auth/keeper\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/bandwidth/types\"\n)\n\nfunc InitGenesis(ctx sdk.Context, bm *BandwidthMeter, _ authkeeper.AccountKeeper, data types.GenesisState) {\n\tif err := bm.SetParams(ctx, data.Params); err != nil {\n\t\tpanic(err)\n\t}\n\n\tbm.currentCreditPrice = bm.GetBandwidthPrice(ctx, data.Params.BasePrice)\n}\n\nfunc ExportGenesis(ctx sdk.Context, bm *BandwidthMeter) *types.GenesisState {\n\treturn types.NewGenesisState(bm.GetParams(ctx))\n}\n"
  },
  {
    "path": "x/bandwidth/keeper/grpc_query.go",
    "content": "package keeper\n\nimport (\n\t\"context\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/status\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/bandwidth/types\"\n)\n\nvar _ types.QueryServer = &BandwidthMeter{}\n\nfunc (bm BandwidthMeter) Params(goCtx context.Context, request *types.QueryParamsRequest) (*types.QueryParamsResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\tparams := bm.GetParams(ctx)\n\n\treturn &types.QueryParamsResponse{Params: params}, nil\n}\n\nfunc (bm *BandwidthMeter) Load(goCtx context.Context, request *types.QueryLoadRequest) (*types.QueryLoadResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\tload := bm.GetCurrentNetworkLoad(ctx)\n\n\treturn &types.QueryLoadResponse{Load: load}, nil\n}\n\nfunc (bm *BandwidthMeter) Price(_ context.Context, _ *types.QueryPriceRequest) (*types.QueryPriceResponse, error) {\n\tprice := bm.GetCurrentCreditPrice()\n\n\treturn &types.QueryPriceResponse{Price: price}, nil\n}\n\nfunc (bm *BandwidthMeter) TotalBandwidth(goCtx context.Context, _ *types.QueryTotalBandwidthRequest) (*types.QueryTotalBandwidthResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\ttotalBandwidth := bm.GetDesirableBandwidth(ctx)\n\n\treturn &types.QueryTotalBandwidthResponse{TotalBandwidth: totalBandwidth}, nil\n}\n\nfunc (bm *BandwidthMeter) NeuronBandwidth(goCtx context.Context, request *types.QueryNeuronBandwidthRequest) (*types.QueryNeuronBandwidthResponse, error) {\n\tif request == nil {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tif request.Neuron == \"\" {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"source address cannot be empty\")\n\t}\n\n\taddr, err := sdk.AccAddressFromBech32(request.Neuron)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tneuronBandwidth := bm.GetCurrentVoltsAccountBandwidth(ctx, addr)\n\n\treturn &types.QueryNeuronBandwidthResponse{NeuronBandwidth: neuronBandwidth}, nil\n}\n"
  },
  {
    "path": "x/bandwidth/keeper/keeper.go",
    "content": "package keeper\n\nimport (\n\tsdkmath \"cosmossdk.io/math\"\n\t\"fmt\"\n\tstoretypes \"github.com/cosmos/cosmos-sdk/store/types\"\n\tctypes \"github.com/cybercongress/go-cyber/v7/types\"\n\n\t\"github.com/cometbft/cometbft/libs/log\"\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\t\"github.com/cosmos/cosmos-sdk/telemetry\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/bandwidth/types\"\n\tgtypes \"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n)\n\ntype BandwidthMeter struct {\n\tstakeProvider types.AccountStakeProvider\n\tcdc           codec.BinaryCodec\n\tstoreKey      storetypes.StoreKey\n\ttkey          *storetypes.TransientStoreKey\n\n\tcurrentCreditPrice         sdk.Dec\n\tbandwidthSpentByBlock      map[uint64]uint64\n\ttotalSpentForSlidingWindow uint64\n\n\tauthority string\n}\n\nfunc NewBandwidthMeter(\n\tcdc codec.BinaryCodec,\n\tkey storetypes.StoreKey,\n\ttkey *storetypes.TransientStoreKey,\n\tasp types.AccountStakeProvider,\n\tauthority string,\n) *BandwidthMeter {\n\treturn &BandwidthMeter{\n\t\tcdc:                   cdc,\n\t\tstoreKey:              key,\n\t\ttkey:                  tkey,\n\t\tstakeProvider:         asp,\n\t\tbandwidthSpentByBlock: make(map[uint64]uint64),\n\t\tauthority:             authority,\n\t}\n}\n\nfunc (bm BandwidthMeter) GetAuthority() string { return bm.authority }\n\nfunc (bm BandwidthMeter) Logger(ctx sdk.Context) log.Logger {\n\treturn ctx.Logger().With(\"module\", fmt.Sprintf(\"x/%s\", types.ModuleName))\n}\n\nfunc (bm BandwidthMeter) SetParams(ctx sdk.Context, p types.Params) error {\n\tif err := p.Validate(); err != nil {\n\t\treturn err\n\t}\n\n\tstore := ctx.KVStore(bm.storeKey)\n\tbz := bm.cdc.MustMarshal(&p)\n\tstore.Set(types.ParamsKey, bz)\n\n\treturn nil\n}\n\nfunc (bm BandwidthMeter) GetParams(ctx sdk.Context) (p types.Params) {\n\tstore := ctx.KVStore(bm.storeKey)\n\tbz := store.Get(types.ParamsKey)\n\tif bz == nil {\n\t\treturn p\n\t}\n\n\tbm.cdc.MustUnmarshal(bz, &p)\n\treturn p\n}\n\nfunc (bm *BandwidthMeter) LoadState(ctx sdk.Context) {\n\tparams := bm.GetParams(ctx)\n\tbm.totalSpentForSlidingWindow = 0\n\t// TODO test case when period parameter is increased\n\tbm.bandwidthSpentByBlock = bm.GetValuesForPeriod(ctx, params.RecoveryPeriod)\n\tfor _, spentBandwidth := range bm.bandwidthSpentByBlock {\n\t\tbm.totalSpentForSlidingWindow += spentBandwidth\n\t}\n\tbm.currentCreditPrice = bm.GetBandwidthPrice(ctx, params.BasePrice)\n}\n\nfunc (bm *BandwidthMeter) InitState() {\n\tbm.totalSpentForSlidingWindow = 0\n\n\twindow := make(map[uint64]uint64)\n\twindow[1] = 0\n\tbm.bandwidthSpentByBlock = window\n}\n\nfunc (bm BandwidthMeter) GetBandwidthPrice(ctx sdk.Context, basePrice sdk.Dec) sdk.Dec {\n\tstore := ctx.KVStore(bm.storeKey)\n\tpriceAsBytes := store.Get(types.LastBandwidthPrice)\n\tif priceAsBytes == nil {\n\t\treturn basePrice\n\t}\n\tvar price types.Price\n\tbm.cdc.MustUnmarshal(priceAsBytes, &price)\n\treturn price.Price\n}\n\nfunc (bm BandwidthMeter) StoreBandwidthPrice(ctx sdk.Context, price sdk.Dec) {\n\tstore := ctx.KVStore(bm.storeKey)\n\tstore.Set(types.LastBandwidthPrice, bm.cdc.MustMarshal(&types.Price{Price: price}))\n}\n\nfunc (bm BandwidthMeter) GetDesirableBandwidth(ctx sdk.Context) uint64 {\n\tstore := ctx.KVStore(bm.storeKey)\n\tbandwidthAsBytes := store.Get(types.TotalBandwidth)\n\tif bandwidthAsBytes == nil {\n\t\treturn 0\n\t}\n\treturn sdk.BigEndianToUint64(bandwidthAsBytes)\n}\n\nfunc (bm BandwidthMeter) AddToDesirableBandwidth(ctx sdk.Context, toAdd uint64) {\n\tcurrent := bm.GetDesirableBandwidth(ctx)\n\tstore := ctx.KVStore(bm.storeKey)\n\tstore.Set(types.TotalBandwidth, sdk.Uint64ToBigEndian(current+toAdd))\n}\n\nfunc (bm BandwidthMeter) SetDesirableBandwidth(ctx sdk.Context, value uint64) {\n\tstore := ctx.KVStore(bm.storeKey)\n\tstore.Set(types.TotalBandwidth, sdk.Uint64ToBigEndian(value))\n}\n\nfunc (bm *BandwidthMeter) AddToBlockBandwidth(ctx sdk.Context, value uint64) {\n\tstore := ctx.TransientStore(bm.tkey)\n\n\tcurrent := uint64(0)\n\tblockBandwidth := store.Get(types.BlockBandwidth)\n\tif blockBandwidth != nil {\n\t\tcurrent = sdk.BigEndianToUint64(blockBandwidth)\n\t}\n\n\tstore.Set(types.BlockBandwidth, sdk.Uint64ToBigEndian(current+value))\n}\n\n// Here we move bandwidth window:\n// Remove first block of window and add new block to window end\nfunc (bm *BandwidthMeter) CommitBlockBandwidth(ctx sdk.Context) {\n\tparams := bm.GetParams(ctx)\n\n\ttStore := ctx.TransientStore(bm.tkey)\n\tcurrentBlockSpentBandwidth := sdk.BigEndianToUint64(tStore.Get(types.BlockBandwidth))\n\n\tdefer func() {\n\t\tif currentBlockSpentBandwidth > 0 {\n\t\t\tbm.Logger(ctx).Info(\"Block\", \"bandwidth\", currentBlockSpentBandwidth)\n\t\t\tbm.Logger(ctx).Info(\"Window\", \"bandwidth\", bm.totalSpentForSlidingWindow)\n\t\t}\n\n\t\ttelemetry.SetGauge(float32(currentBlockSpentBandwidth), types.ModuleName, \"block_bandwidth\")\n\t\ttelemetry.SetGauge(float32(bm.totalSpentForSlidingWindow), types.ModuleName, \"window_bandwidth\")\n\t\ttStore.Set(types.BlockBandwidth, sdk.Uint64ToBigEndian(0))\n\t}()\n\n\tbm.totalSpentForSlidingWindow += currentBlockSpentBandwidth\n\n\tnewWindowEnd := ctx.BlockHeight()\n\twindowStart := newWindowEnd - int64(params.RecoveryPeriod)\n\tif windowStart < 0 {\n\t\twindowStart = 0\n\t}\n\n\t// clean window slot in in-memory\n\twindowStartValue, exists := bm.bandwidthSpentByBlock[uint64(windowStart)]\n\tif exists {\n\t\tbm.totalSpentForSlidingWindow -= windowStartValue\n\t\tdelete(bm.bandwidthSpentByBlock, uint64(windowStart))\n\t}\n\n\t// clean window slot in storage\n\t// TODO will be removed, need to index blocks bandwidth\n\tstore := ctx.KVStore(bm.storeKey)\n\tif store.Has(types.BlockStoreKey(uint64(windowStart))) {\n\t\tstore.Delete(types.BlockStoreKey(uint64(windowStart)))\n\t}\n\n\tbm.SetBlockBandwidth(ctx, uint64(ctx.BlockHeight()), currentBlockSpentBandwidth)\n\tbm.bandwidthSpentByBlock[uint64(newWindowEnd)] = currentBlockSpentBandwidth\n}\n\nfunc (bm *BandwidthMeter) GetCurrentBlockSpentBandwidth(ctx sdk.Context) uint64 {\n\ttstore := ctx.TransientStore(bm.tkey)\n\treturn sdk.BigEndianToUint64(tstore.Get(types.BlockBandwidth))\n}\n\nfunc (bm *BandwidthMeter) GetCurrentNetworkLoad(ctx sdk.Context) sdk.Dec {\n\treturn sdk.NewDec(int64(bm.totalSpentForSlidingWindow)).QuoInt64(int64(bm.GetDesirableBandwidth(ctx)))\n}\n\nfunc (bm *BandwidthMeter) GetMaxBlockBandwidth(ctx sdk.Context) uint64 {\n\tparams := bm.GetParams(ctx)\n\tmaxBlockBandwidth := params.MaxBlockBandwidth\n\treturn maxBlockBandwidth\n}\n\nfunc (bm *BandwidthMeter) GetCurrentCreditPrice() sdk.Dec {\n\treturn bm.currentCreditPrice\n}\n\n// Adjusting of bandwidth price is disabled after the upgrade to v6, set to base price and never changes\nfunc (bm *BandwidthMeter) AdjustPrice(ctx sdk.Context) {\n\tparams := bm.GetParams(ctx)\n\n\tdesirableBandwidth := bm.GetDesirableBandwidth(ctx)\n\tbaseBandwidth := params.BaseLoad.MulInt64(int64(desirableBandwidth)).RoundInt64()\n\tif baseBandwidth != 0 {\n\t\ttelemetry.SetGauge(float32(bm.totalSpentForSlidingWindow)/float32(baseBandwidth), types.ModuleName, \"load\")\n\n\t\tload := sdk.NewDec(int64(bm.totalSpentForSlidingWindow)).QuoInt64(baseBandwidth)\n\t\tbm.Logger(ctx).Info(\"Load\", \"value\", load.String())\n\n\t\tnewPrice := params.BasePrice\n\t\tbm.Logger(ctx).Info(\"Price\", \"value\", newPrice.String())\n\t\ttelemetry.SetGauge(float32(newPrice.MulInt64(1000).RoundInt64()), types.ModuleName, \"price\")\n\n\t\tbm.currentCreditPrice = newPrice\n\t\tbm.StoreBandwidthPrice(ctx, newPrice)\n\t}\n}\n\nfunc (bm *BandwidthMeter) GetTotalCyberlinksCost(ctx sdk.Context, tx sdk.Tx) uint64 {\n\tbandwidthForTx := uint64(0)\n\tfor _, msg := range tx.GetMsgs() {\n\t\tlinkMsg := msg.(*gtypes.MsgCyberlink)\n\t\tbandwidthForTx += uint64(len(linkMsg.Links)) * 1000\n\t}\n\treturn bandwidthForTx\n}\n\nfunc (bm *BandwidthMeter) BurnAccountBandwidthVolt(ctx sdk.Context, amt uint64, address sdk.AccAddress) error {\n\tcoin := sdk.NewCoin(ctypes.VOLT, sdkmath.NewIntFromUint64(amt))\n\tif err := bm.stakeProvider.SendCoinsFromAccountToModule(ctx, address, types.BandwidthName, sdk.NewCoins(coin)); err != nil {\n\t\treturn err\n\t}\n\tif err := bm.stakeProvider.BurnCoins(ctx, types.BandwidthName, sdk.NewCoins(coin)); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (bm *BandwidthMeter) GetCurrentVoltsAccountBandwidth(ctx sdk.Context, address sdk.AccAddress) types.NeuronBandwidth {\n\tbalance := bm.stakeProvider.GetAccountStakeVolt(ctx, address)\n\treturn types.NeuronBandwidth{\n\t\tNeuron:           address.String(),\n\t\tRemainedValue:    uint64(balance),\n\t\tMaxValue:         uint64(balance),\n\t\tLastUpdatedBlock: uint64(ctx.BlockHeight()),\n\t}\n}\n\nfunc (bm *BandwidthMeter) SetZeroAccountBandwidth(ctx sdk.Context, address sdk.AccAddress) {\n\tbw := types.NeuronBandwidth{\n\t\tNeuron:           address.String(),\n\t\tRemainedValue:    0,\n\t\tMaxValue:         0,\n\t\tLastUpdatedBlock: uint64(ctx.BlockHeight()),\n\t}\n\n\tctx.KVStore(bm.storeKey).Set(types.AccountStoreKey(bw.Neuron), bm.cdc.MustMarshal(&bw))\n}\n\nfunc (bm *BandwidthMeter) HasEnoughAccountBandwidthVolt(ctx sdk.Context, toConsume uint64, address sdk.AccAddress) bool {\n\treturn uint64(bm.stakeProvider.GetAccountStakeVolt(ctx, address)) >= toConsume\n}\n"
  },
  {
    "path": "x/bandwidth/keeper/migrator.go",
    "content": "package keeper\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/bandwidth/exported\"\n\tv2 \"github.com/cybercongress/go-cyber/v7/x/bandwidth/migrations/v2\"\n)\n\n// Migrator is a struct for handling in-place state migrations.\ntype Migrator struct {\n\tmeter          BandwidthMeter\n\tlegacySubspace exported.Subspace\n}\n\nfunc NewMigrator(bm BandwidthMeter, ss exported.Subspace) Migrator {\n\treturn Migrator{\n\t\tmeter:          bm,\n\t\tlegacySubspace: ss,\n\t}\n}\n\nfunc (m Migrator) Migrate1to2(ctx sdk.Context) error {\n\treturn v2.Migrate(ctx, ctx.KVStore(m.meter.storeKey), m.legacySubspace, m.meter.cdc)\n}\n"
  },
  {
    "path": "x/bandwidth/keeper/msg_server.go",
    "content": "package keeper\n\nimport (\n\t\"context\"\n\n\tgovtypes \"github.com/cosmos/cosmos-sdk/x/gov/types\"\n\n\t\"cosmossdk.io/errors\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/bandwidth/types\"\n)\n\ntype msgServer struct {\n\tBandwidthMeter\n}\n\nfunc NewMsgServerImpl(meter BandwidthMeter) types.MsgServer {\n\treturn &msgServer{BandwidthMeter: meter}\n}\n\nvar _ types.MsgServer = msgServer{}\n\nfunc (server msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) {\n\tif server.authority != req.Authority {\n\t\treturn nil, errors.Wrapf(govtypes.ErrInvalidSigner, \"invalid authority; expected %s, got %s\", server.authority, req.Authority)\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\tif err := server.SetParams(ctx, req.Params); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &types.MsgUpdateParamsResponse{}, nil\n}\n"
  },
  {
    "path": "x/bandwidth/keeper/snapshotter.go",
    "content": "package keeper\n\nimport (\n\t\"github.com/cometbft/cometbft/libs/log\"\n\ttmproto \"github.com/cometbft/cometbft/proto/tendermint/types\"\n\tsnapshot \"github.com/cosmos/cosmos-sdk/snapshots/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cybercongress/go-cyber/v7/x/bandwidth/types\"\n)\n\nvar _ snapshot.ExtensionSnapshotter = &BandwidthSnapshotter{}\n\nconst SnapshotFormat = 1\n\ntype BandwidthSnapshotter struct {\n\tkeeper *BandwidthMeter\n\tcms    sdk.MultiStore\n}\n\nfunc NewBandwidthSnapshotter(cms sdk.MultiStore, keeper *BandwidthMeter) *BandwidthSnapshotter {\n\treturn &BandwidthSnapshotter{\n\t\tkeeper: keeper,\n\t\tcms:    cms,\n\t}\n}\n\nfunc (bs *BandwidthSnapshotter) SnapshotName() string {\n\treturn types.ModuleName\n}\n\nfunc (bs *BandwidthSnapshotter) SnapshotFormat() uint32 {\n\treturn SnapshotFormat\n}\n\nfunc (bs *BandwidthSnapshotter) SupportedFormats() []uint32 {\n\t// If we support older formats, add them here and handle them in Restore\n\treturn []uint32{SnapshotFormat}\n}\n\nfunc (bs *BandwidthSnapshotter) SnapshotExtension(_ uint64, _ snapshot.ExtensionPayloadWriter) error {\n\treturn nil\n}\n\nfunc (bs *BandwidthSnapshotter) RestoreExtension(height uint64, format uint32, _ snapshot.ExtensionPayloadReader) error {\n\tif format == SnapshotFormat {\n\t\tctx := sdk.NewContext(bs.cms, tmproto.Header{Height: int64(height)}, false, log.NewNopLogger())\n\t\tbs.keeper.LoadState(ctx)\n\n\t\treturn nil\n\t}\n\treturn snapshot.ErrUnknownFormat\n}\n"
  },
  {
    "path": "x/bandwidth/migrations/v2/migrate.go",
    "content": "package v2\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/bandwidth/exported\"\n\t\"github.com/cybercongress/go-cyber/v7/x/bandwidth/types\"\n)\n\nfunc Migrate(\n\tctx sdk.Context,\n\tstore sdk.KVStore,\n\tlegacySubspace exported.Subspace,\n\tcdc codec.BinaryCodec,\n) error {\n\tvar currParams types.Params\n\tlegacySubspace.GetParamSet(ctx, &currParams)\n\n\tif err := currParams.Validate(); err != nil {\n\t\treturn err\n\t}\n\n\tbz := cdc.MustMarshal(&currParams)\n\tstore.Set(types.ParamsKey, bz)\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/bandwidth/module.go",
    "content": "package bandwidth\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tcodectypes \"github.com/cosmos/cosmos-sdk/codec/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/module\"\n\tauthkeeper \"github.com/cosmos/cosmos-sdk/x/auth/keeper\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/runtime\"\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/bandwidth/client/cli\"\n\t\"github.com/cybercongress/go-cyber/v7/x/bandwidth/exported\"\n\t\"github.com/cybercongress/go-cyber/v7/x/bandwidth/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/bandwidth/types\"\n\n\tabci \"github.com/cometbft/cometbft/abci/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\nvar (\n\t_ module.AppModule      = AppModule{}\n\t_ module.AppModuleBasic = AppModuleBasic{}\n)\n\ntype AppModuleBasic struct {\n\tcdc codec.Codec\n}\n\n// Name returns the wasm module's name.\nfunc (AppModuleBasic) Name() string { return types.ModuleName }\n\nfunc (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {\n\ttypes.RegisterLegacyAminoCodec(cdc)\n}\n\nfunc (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage {\n\treturn cdc.MustMarshalJSON(&types.GenesisState{\n\t\tParams: types.DefaultParams(),\n\t})\n}\n\nfunc (b AppModuleBasic) ValidateGenesis(marshaler codec.JSONCodec, _ client.TxEncodingConfig, message json.RawMessage) error {\n\tvar data types.GenesisState\n\terr := marshaler.UnmarshalJSON(message, &data)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn types.ValidateGenesis(data)\n}\n\nfunc (b AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, serveMux *runtime.ServeMux) {\n\terr := types.RegisterQueryHandlerClient(context.Background(), serveMux, types.NewQueryClient(clientCtx))\n\tif err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc (AppModuleBasic) GetTxCmd() *cobra.Command { return nil }\n\nfunc (AppModuleBasic) GetQueryCmd() *cobra.Command {\n\treturn cli.GetQueryCmd()\n}\n\nfunc (AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) {\n\ttypes.RegisterInterfaces(registry)\n}\n\ntype AppModule struct {\n\tAppModuleBasic\n\tcdc            codec.Codec\n\tak             authkeeper.AccountKeeper\n\tbm             *keeper.BandwidthMeter\n\tlegacySubspace exported.Subspace\n}\n\nfunc NewAppModule(\n\tcdc codec.Codec,\n\tak authkeeper.AccountKeeper,\n\tbm *keeper.BandwidthMeter,\n\tss exported.Subspace,\n) AppModule {\n\treturn AppModule{\n\t\tAppModuleBasic: AppModuleBasic{cdc: cdc},\n\t\tcdc:            cdc,\n\t\tak:             ak,\n\t\tbm:             bm,\n\t\tlegacySubspace: ss,\n\t}\n}\n\nfunc (AppModule) Name() string { return types.ModuleName }\n\nfunc (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {}\n\nfunc (am AppModule) RegisterServices(cfg module.Configurator) {\n\ttypes.RegisterQueryServer(cfg.QueryServer(), am.bm)\n\ttypes.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(*am.bm))\n\n\tm := keeper.NewMigrator(*am.bm, am.legacySubspace)\n\tif err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil {\n\t\tpanic(fmt.Sprintf(\"failed to migrate x/%s from version 1 to 2: %v\", types.ModuleName, err))\n\t}\n}\n\nfunc (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate {\n\tvar genesisState types.GenesisState\n\tcdc.MustUnmarshalJSON(data, &genesisState)\n\tkeeper.InitGenesis(ctx, am.bm, am.ak, genesisState)\n\treturn []abci.ValidatorUpdate{}\n}\n\nfunc (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage {\n\tgs := keeper.ExportGenesis(ctx, am.bm)\n\treturn cdc.MustMarshalJSON(gs)\n}\n\nfunc (am AppModule) ConsensusVersion() uint64 {\n\treturn 2\n}\n\nfunc (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {}\n\nfunc (am AppModule) EndBlock(ctx sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate {\n\tEndBlocker(ctx, am.bm)\n\treturn []abci.ValidatorUpdate{}\n}\n"
  },
  {
    "path": "x/bandwidth/spec/00_concepts.md",
    "content": "## Bandwidth model\nBandwidth is used for billing for cyberlinks creation instead of fee billing based on gas.\nUsing the bandwidth model removes the cognitive gap for cyberlinks creation because not force neurons to pay a fee.\nHolding 1 volt represents the possibility to create 1 cyberlinks per ```RecoveryPeriod``` blocks. (example 1 cyberlink per day holding 1 Volt)\nTotal supply of VOLTs (volts' holdings of all neurons)  it's desirable network bandwidth. By investminting of HYDROGEN to VOLT then neuron increase personal bandwidth and desirable bandwidth of network.\nIf the network has low bandwidth consumption, then the network provides a discount using ```BasePrice``` multiplier for neurons.\n\n## Personal Bandwidth\nThe volt's stake of the given neuron are easy to understand as the size of his battery.\nThe creation of cyberlinks will consume battery charge, and the battery will be fully recharged during ```RecoveryPeriod``` blocks period. If a neuron consumes half of its bandwidth, its battery will be fully charged in the ```RecoveryPeriod/2``` blocks period. If a neuron act when network bandwidth consumption is low, then he will consume less personal bandwidth.\n\n## Bandwidth Load\nThe network keeps track of total consumed bandwidth during ```RecoveryPeriod``` and weights this window aggregated value to desirable bandwidth. If the current load is more than ```BasePrice```, the price value will be set.\n\n## Bandwidth Price\nBandwidth price it's a multiplier for default bandwidth price. As 1 VOLT allows creating 1 cyberlink per given period, if the price is lower than 1, the network will consume less of bandwidth, allowing neurons to generate more cyberlinks.\n\n## Accounting of bandwidth\nInternally 1 Volt represents 1000 millivolts, and 1 cyberlink cost is 1000 bandwidth units. Neurons holdings of 5 Volts means 5000 personal bandwidth units. When the current load is less than BasePrice amount (e.g 0.25), then the network will make the discount for bandwidth bill 4X allowing neurons to create 4X more cyberlinks, 20 cyberlinks in such case.\n\n## Transaction's mempool\nFor transactions that consist of cyberlinks, a fee check will not apply. But correct required gas amount should be provided.\n\n## Network capacity\nThe total amount of minted (with investmint) VOLTs represents the demand of bandwidth from neurons. Validators need to keep tracking investments in VOLTs resources to provide great service at scale.\nTo dynamically adjust available peek load community may adjust maximum bandwidth ```MaxBlockBandwidth``` and gas ```MaxGas``` consumable at block.\n"
  },
  {
    "path": "x/bandwidth/spec/01_api.md",
    "content": "# API\n\n# REST\n\n| Path                                  | Parameters           | Description                                |\n| --------------------------------------| -------------------- | ------------------------------------------ |\n| /bandwidth/parameters                 |                      | get module params                          |\n| /bandwidth/load                       |                      | get bandwidth load                         |\n| /bandwidth/price                      |                      | get bandwidth price                        |\n| /bandwidth/desirable                  |                      | get desirable bandwidth                    |\n| /bandwidth/account/{address}          | {address}            | get bandwidth of give account address      |\n\n# GRPC\n\n| Path                                                  | Parameters           | Description                                |\n| ----------------------------------------------------- | -------------------- | ------------------------------------------ |\n| /cyber/bandwidth/v1beta1/bandwidth/parameters         |                      | get module params                          |\n| /cyber/bandwidth/v1beta1/bandwidth/load               |                      | get bandwidth load                         |\n| /cyber/bandwidth/v1beta1/bandwidth/price              |                      | get bandwidth price                        |\n| /cyber/bandwidth/v1beta1/bandwidth/desirable          |                      | get desirable bandwidth                    |\n| /cyber/bandwidth/v1beta1/bandwidth/account/{address}  | {address}            | get bandwidth of give account address      |\n      "
  },
  {
    "path": "x/bandwidth/spec/02_state.md",
    "content": "# State\n\n## Account Bandwidth\n\nAccountBandwidth is used for tracking bandwidth of accounts in the network.\n\nAccountBandwidth type has the following structure:\n```\ntype AccountBandwidth struct {\n    address          string     // address of neuron\n\tremainedValue    uint64     // current bandwidth value \n\tlastUpdatedBlock uint64     // last block when last time updated\n\tmaxValue         uint64     // max current bandwidth value of neuron\n}\n```\n\n\n## Last price\nValue is used to store up-to-date price of bandwidth.\n\n```\ntype Price struct {\n    price          sdk.Dec   // current multiplier for bandwidth billing\n}\n```\n\n## Block bandwidth\nStoring used bandwidth for each block. Used for calculation of load using sum of used bandwidth in blocks at recovery period window.\nUsed for reverting transactions with cyberlinks if rise more than ```MaxBlockBandwidth```\n\n```\nsdk.Uint64ToBigEndian(value) // where value is amount of bandwidth used by all neurons in given block\n```\n\n## Desirable bandwidth\nDesirable bandwidth represents amount of cyberlinks that network would like to process.\n\n```\nsdk.Uint64ToBigEndian(value) // where value is total current supply of mvolt (uint64)\n```\n\n-------\n\n## Keys\n\n- Account bandwidth: `0x01 | []byte(address) -> ProtocolBuffer(AccountBandwidth)`\n- Block bandwidth: `0x02 | sdk.Uint64ToBigEndian(blockNumber) -> sdk.Uint64ToBigEndian(value)`\n- Last bandwidth price: `0x00 | []byte(\"lastBandwidthPrice\") -> ProtocolBuffer(Price)`\n- Desirable bandwidth: `0x00 | []byte(\"desirableBandwidth\") -> sdk.Uint64ToBigEndian(value)`\n- ModuleName, StoreKey: `bandwidth`"
  },
  {
    "path": "x/bandwidth/spec/03_state_transitions.md",
    "content": "# State Transitions [WIP]\n\nBandwidth module doesn't have own messages that trigger state transition.\nState transition is happen in such cases:\n\n## Processing of transaction with cyberlinks messages in transaction middleware (ante handler)\n1. calculate total bandwidth amount for all cyberlinks messages in transaction using current price and consume neuron's bandwidth\n2. add consumed bandwidth to block bandwidth (in-memory)\n\n## Processing of cyberlink message created by VM contract (graph module)\n1. calculate bandwidth for message using current price and consume neuron's bandwidth\n2. add consumed bandwidth to block bandwidth (in-memory)\n\nNote: billing happens in the graph module for contracts because contracts creates messages not grouped into transactions (ante handler are not processing them)\n\n## Transfers of Volts (EndBlocker)\n1. Update account's bandwidth for an account with changed stake collected by ```CollectAddressesWithStakeChange``` hook (e.g transfer of investmint).\n\nNote: minting of new volts (using investmint) will trigger the account's bandwidth update with an increased max bandwidth value\n\n## Save consumed bandwidth by block (EndBlocker)\n1. Save the total amount (sum aggregated in-memory before) of consumed bandwidth by all neurons on a given block (to storage & in-memory).\n2. Remove value for a block that is out of ```RecoveryWindow``` block period and not perform in bandwidth load calculation (to storage & in-memory).\n\n## Adjust bandwidth price (EndBlocker)\n1. If block height number's remainder of division by ```AdjustPrice``` parameter is equal to zero\n   - calculate and save price based on current load (or apply ```BasePrice``` if load less than ```BasePrice```).\n\n## Genesis\n1. If neuron have volts in genesis \n   - initialize and save account bandwidth with max value\n"
  },
  {
    "path": "x/bandwidth/spec/06_params.md",
    "content": "# Parameters\n\nThe energy module contains the following parameters:\n\n| Key                     | Type           | Example                |\n| ----------------------- | -------------- | ---------------------- |\n| RecoveryPeriod          | uint64         | 16000                  |\n| AdjustPricePeriod       | uint64         | 5                      |\n| BasePrice               | sdk.Dec        | 0.25                   |\n| MaxBlockBandwidth       | uint64         | 100000                 |\n\n## Recovery Period\nRecovery period is amount of blocks that bandwidth of any neuron will be fully recovered (from zero to max value).\n\n## Adjust Price Period\nAdjust price period is amount of blocks that form period of bandwidth price recalculation adapting to current load.\n\n## Base Price\nBase price is multiplier for bandwidth billing, bandwidth discount for moments of low neurons' activity.\nIf load rise more than value of base price than current price will be applied.\n\n## Max Block Bandwidth\nMax block bandwidth is amount of bandwidth from neurons that network can process for one block."
  },
  {
    "path": "x/bandwidth/spec/07_wasm.md",
    "content": "# WASM LINE\n\nIn addition to the core CosmWasm functionality, the bandwidth module bindings include\n\n## Query support\n- Price\n- Load\n- DesirableBandwidth\n- AccountBandwidth\n\n--------\n\nHack with [cw-cyber](https://github.com/cybercongress/cw-cyber) library\n"
  },
  {
    "path": "x/bandwidth/spec/08_errors.md",
    "content": "# Errors\n\nThe bandwidth module may return the following errors:\n\n| Type                         | Code  | Description                    |\n| ---------------------------- | ------| ------------------------------ |\n| ErrNotEnoughBandwidth        | 2     | not enough personal bandwidth  |\n| ErrExceededMaxBlockBandwidth | 3     | exceeded max block bandwidth   |"
  },
  {
    "path": "x/bandwidth/spec/09_cli.md",
    "content": "# CLI\n\n## Queries\n\nQuery the current bandwidth module parameters information:\n```bash\ncyber query bandwidth params\n```\n\nQuery the bandwidth load:\n```bash\ncyber query bandwidth load\n```\n\nQuery the bandwidth price:\n```bash\ncyber query bandwidth price\n```\n\nQuery the desirable bandwidth:\n```bash\ncyber query bandwidth desirable\n```\n\nQuery the account's bandwidth:\n```bash\ncyber query bandwidth account [address]\n```"
  },
  {
    "path": "x/bandwidth/spec/README.md",
    "content": "# `bandwidth`\n\n## Abstract\n\nThe bandwidth module process and stores neuron's bandwidth in the network, dynamically adjust bandwidth price to network load.\nNeurons use bandwidth to add cyberlinks to the network and not need to pay gas fees.\n\n## Contents\n\n1. **[Concepts](00_concepts.md)**\n2. **[API](01_api.md)**\n3. **[State](02_state.md)**\n4. **[State Transitions](03_state_transitions.md)**\n5. **[Parameters](06_params.md)**\n6. **[WASM](07_wasm.md)**\n7. **[Errors](08_errors.md)**\n8. **[CLI](09_cli.md)**"
  },
  {
    "path": "x/bandwidth/types/codec.go",
    "content": "package types\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\t\"github.com/cosmos/cosmos-sdk/codec/legacy\"\n\t\"github.com/cosmos/cosmos-sdk/codec/types\"\n\tcryptocodec \"github.com/cosmos/cosmos-sdk/crypto/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/msgservice\"\n\tauthzcodec \"github.com/cosmos/cosmos-sdk/x/authz/codec\"\n\tgovcodec \"github.com/cosmos/cosmos-sdk/x/gov/codec\"\n)\n\nfunc RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {\n\tlegacy.RegisterAminoMsg(cdc, &MsgUpdateParams{}, \"cyber/bandwidth/MsgUpdateParams\")\n\n\tcdc.RegisterConcrete(Params{}, \"cyber/bandwidth/Params\", nil)\n}\n\nfunc RegisterInterfaces(registry types.InterfaceRegistry) {\n\tregistry.RegisterImplementations((*sdk.Msg)(nil),\n\t\t&MsgUpdateParams{},\n\t)\n\n\tmsgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc)\n}\n\nvar (\n\tamino     = codec.NewLegacyAmino()\n\tModuleCdc = codec.NewAminoCodec(amino)\n)\n\nfunc init() {\n\tRegisterLegacyAminoCodec(amino)\n\tcryptocodec.RegisterCrypto(amino)\n\tsdk.RegisterLegacyAminoCodec(amino)\n\n\tRegisterLegacyAminoCodec(authzcodec.Amino)\n\tRegisterLegacyAminoCodec(govcodec.Amino)\n}\n"
  },
  {
    "path": "x/bandwidth/types/errors.go",
    "content": "package types\n\nimport (\n\terrorsmod \"cosmossdk.io/errors\"\n)\n\nvar (\n\tErrNotEnoughBandwidth        = errorsmod.Register(ModuleName, 2, \"not enough personal bandwidth\")\n\tErrExceededMaxBlockBandwidth = errorsmod.Register(ModuleName, 3, \"exceeded max block bandwidth\")\n)\n"
  },
  {
    "path": "x/bandwidth/types/expected_keepers.go",
    "content": "package types\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\ntype AccountStakeProvider interface {\n\tGetAccountStakeVolt(ctx sdk.Context, addr sdk.AccAddress) int64\n\tSendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error\n\tBurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error\n}\n"
  },
  {
    "path": "x/bandwidth/types/genesis.go",
    "content": "package types\n\nfunc NewGenesisState(params Params) *GenesisState {\n\treturn &GenesisState{\n\t\tParams: params,\n\t}\n}\n\nfunc DefaultGenesisState() *GenesisState {\n\treturn NewGenesisState(DefaultParams())\n}\n\nfunc ValidateGenesis(data GenesisState) error {\n\tif err := data.Params.Validate(); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "x/bandwidth/types/genesis.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/bandwidth/v1beta1/genesis.proto\n\npackage types\n\nimport (\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype GenesisState struct {\n\tParams Params `protobuf:\"bytes,1,opt,name=params,proto3\" json:\"params\"`\n}\n\nfunc (m *GenesisState) Reset()         { *m = GenesisState{} }\nfunc (m *GenesisState) String() string { return proto.CompactTextString(m) }\nfunc (*GenesisState) ProtoMessage()    {}\nfunc (*GenesisState) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_3fe039025849c89e, []int{0}\n}\n\nfunc (m *GenesisState) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_GenesisState.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *GenesisState) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GenesisState.Merge(m, src)\n}\n\nfunc (m *GenesisState) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *GenesisState) XXX_DiscardUnknown() {\n\txxx_messageInfo_GenesisState.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GenesisState proto.InternalMessageInfo\n\nfunc (m *GenesisState) GetParams() Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn Params{}\n}\n\nfunc init() {\n\tproto.RegisterType((*GenesisState)(nil), \"cyber.bandwidth.v1beta1.GenesisState\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"cyber/bandwidth/v1beta1/genesis.proto\", fileDescriptor_3fe039025849c89e)\n}\n\nvar fileDescriptor_3fe039025849c89e = []byte{\n\t// 211 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4d, 0xae, 0x4c, 0x4a,\n\t0x2d, 0xd2, 0x4f, 0x4a, 0xcc, 0x4b, 0x29, 0xcf, 0x4c, 0x29, 0xc9, 0xd0, 0x2f, 0x33, 0x4c, 0x4a,\n\t0x2d, 0x49, 0x34, 0xd4, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f,\n\t0xc9, 0x17, 0x12, 0x07, 0x2b, 0xd3, 0x83, 0x2b, 0xd3, 0x83, 0x2a, 0x93, 0x12, 0x49, 0xcf, 0x4f,\n\t0xcf, 0x07, 0xab, 0xd1, 0x07, 0xb1, 0x20, 0xca, 0xa5, 0x94, 0x71, 0x99, 0x5a, 0x52, 0x59, 0x90,\n\t0x0a, 0x35, 0x53, 0xc9, 0x97, 0x8b, 0xc7, 0x1d, 0x62, 0x49, 0x70, 0x49, 0x62, 0x49, 0xaa, 0x90,\n\t0x2d, 0x17, 0x5b, 0x41, 0x62, 0x51, 0x62, 0x6e, 0xb1, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0xb7, 0x91,\n\t0xbc, 0x1e, 0x0e, 0x4b, 0xf5, 0x02, 0xc0, 0xca, 0x9c, 0x58, 0x4e, 0xdc, 0x93, 0x67, 0x08, 0x82,\n\t0x6a, 0x72, 0xf2, 0x3d, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18,\n\t0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xe3, 0xf4,\n\t0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0x7d, 0xb0, 0x91, 0xc9, 0xf9, 0x79, 0xe9,\n\t0x45, 0xa9, 0xc5, 0xc5, 0xfa, 0xe9, 0xf9, 0xba, 0x10, 0x97, 0x56, 0x20, 0xb9, 0x15, 0xec, 0xc6,\n\t0x24, 0x36, 0xb0, 0x23, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xa3, 0xf4, 0x54, 0xd0, 0x21,\n\t0x01, 0x00, 0x00,\n}\n\nfunc (m *GenesisState) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *GenesisState) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintGenesis(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintGenesis(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovGenesis(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *GenesisState) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Params.Size()\n\tn += 1 + l + sovGenesis(uint64(l))\n\treturn n\n}\n\nfunc sovGenesis(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozGenesis(x uint64) (n int) {\n\treturn sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *GenesisState) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: GenesisState: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: GenesisState: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipGenesis(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipGenesis(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupGenesis\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthGenesis\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthGenesis        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowGenesis          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupGenesis = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/bandwidth/types/keys.go",
    "content": "package types\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\nconst (\n\tModuleName    = \"bandwidth\"\n\tStoreKey      = ModuleName\n\tTStoreKey     = \"transient_bandwidth\"\n\tBandwidthName = \"bandwidth\"\n)\n\nvar (\n\tGlobalStoreKeyPrefix  = []byte{0x00}\n\tAccountStoreKeyPrefix = []byte{0x01}\n\tBlockStoreKeyPrefix   = []byte{0x02}\n\tParamsKey             = []byte{0x02}\n\n\tLastBandwidthPrice = append(GlobalStoreKeyPrefix, []byte(\"lastBandwidthPrice\")...)\n\tTotalBandwidth     = append(GlobalStoreKeyPrefix, []byte(\"totalBandwidth\")...)\n\tBlockBandwidth     = append(GlobalStoreKeyPrefix, []byte(\"blockBandwidth\")...)\n)\n\nfunc AccountStoreKey(addr string) []byte {\n\treturn append(AccountStoreKeyPrefix, []byte(addr)...)\n}\n\nfunc BlockStoreKey(blockNumber uint64) []byte {\n\treturn append(BlockStoreKeyPrefix, sdk.Uint64ToBigEndian(blockNumber)...)\n}\n"
  },
  {
    "path": "x/bandwidth/types/msgs.go",
    "content": "package types\n\nimport (\n\terrorsmod \"cosmossdk.io/errors\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\nvar _ sdk.Msg = &MsgUpdateParams{}\n\n// GetSignBytes implements the LegacyMsg interface.\nfunc (m MsgUpdateParams) GetSignBytes() []byte {\n\treturn sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))\n}\n\n// GetSigners returns the expected signers for a MsgUpdateParams message.\nfunc (m *MsgUpdateParams) GetSigners() []sdk.AccAddress {\n\taddr, _ := sdk.AccAddressFromBech32(m.Authority)\n\treturn []sdk.AccAddress{addr}\n}\n\n// ValidateBasic does a sanity check on the provided data.\nfunc (m *MsgUpdateParams) ValidateBasic() error {\n\tif _, err := sdk.AccAddressFromBech32(m.Authority); err != nil {\n\t\treturn errorsmod.Wrap(err, \"invalid authority address\")\n\t}\n\n\treturn m.Params.Validate()\n}\n"
  },
  {
    "path": "x/bandwidth/types/params.go",
    "content": "package types\n\nimport (\n\t\"fmt\"\n\n\tsdkmath \"cosmossdk.io/math\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\nfunc DefaultParams() Params {\n\treturn Params{\n\t\tRecoveryPeriod:    uint64(100),\n\t\tAdjustPricePeriod: uint64(5),\n\t\tBasePrice:         sdk.NewDecWithPrec(25, 2),\n\t\tBaseLoad:          sdk.NewDecWithPrec(10, 2),\n\t\tMaxBlockBandwidth: uint64(10000),\n\t}\n}\n\nfunc NewParams(\n\trecoveryPeriod uint64,\n\tadjustPricePeriod uint64,\n\tbasePrice sdkmath.LegacyDec,\n\tbaseLoad sdkmath.LegacyDec,\n\tmaxBlockBandwidth uint64,\n) Params {\n\treturn Params{\n\t\tRecoveryPeriod:    recoveryPeriod,\n\t\tAdjustPricePeriod: adjustPricePeriod,\n\t\tBasePrice:         basePrice,\n\t\tBaseLoad:          baseLoad,\n\t\tMaxBlockBandwidth: maxBlockBandwidth,\n\t}\n}\n\nfunc (p Params) Validate() error {\n\tif err := validateRecoveryPeriod(p.RecoveryPeriod); err != nil {\n\t\treturn err\n\t}\n\tif err := validateAdjustPricePeriod(p.AdjustPricePeriod); err != nil {\n\t\treturn err\n\t}\n\tif err := validateBasePrice(p.BasePrice); err != nil {\n\t\treturn err\n\t}\n\tif err := validateBaseLoad(p.BaseLoad); err != nil {\n\t\treturn err\n\t}\n\tif err := validateMaxBlockBandwidth(p.MaxBlockBandwidth); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc validateRecoveryPeriod(i interface{}) error {\n\tv, ok := i.(uint64)\n\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v <= uint64(50) {\n\t\treturn fmt.Errorf(\"recovery period is too low: %d\", v)\n\t}\n\n\treturn nil\n}\n\nfunc validateAdjustPricePeriod(i interface{}) error {\n\tv, ok := i.(uint64)\n\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v < uint64(5) {\n\t\treturn fmt.Errorf(\"adjust price period is too low: %d\", v)\n\t}\n\n\treturn nil\n}\n\nfunc validateBasePrice(i interface{}) error {\n\tv, ok := i.(sdk.Dec)\n\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif !v.IsPositive() {\n\t\treturn fmt.Errorf(\"base price is not positive: %s\", v)\n\t}\n\n\tif v.GT(sdk.OneDec()) {\n\t\treturn fmt.Errorf(\"base price is more than one: %s\", v)\n\t}\n\n\treturn nil\n}\n\nfunc validateBaseLoad(i interface{}) error {\n\tv, ok := i.(sdk.Dec)\n\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif !v.IsPositive() {\n\t\treturn fmt.Errorf(\"base load is not positive: %s\", v)\n\t}\n\n\tif v.GT(sdk.OneDec()) {\n\t\treturn fmt.Errorf(\"base load is more than one: %s\", v)\n\t}\n\n\tif v.LT(sdk.NewDecWithPrec(1, 2)) {\n\t\treturn fmt.Errorf(\"base price is less than one hundredth: %s\", v)\n\t}\n\n\treturn nil\n}\n\nfunc validateMaxBlockBandwidth(i interface{}) error {\n\tv, ok := i.(uint64)\n\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v <= uint64(1000) {\n\t\treturn fmt.Errorf(\"max block bandwidth is too low: %d\", v)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/bandwidth/types/params_legacy.go",
    "content": "package types\n\nimport paramstypes \"github.com/cosmos/cosmos-sdk/x/params/types\"\n\nvar (\n\tKeyRecoveryPeriod    = []byte(\"RecoveryPeriod\")\n\tKeyAdjustPricePeriod = []byte(\"AdjustPricePeriod\")\n\tKeyBasePrice         = []byte(\"BasePrice\")\n\tKeyBaseLoad          = []byte(\"BaseLoad\")\n\tKeyMaxBlockBandwidth = []byte(\"MaxBlockBandwidth\")\n)\n\n// Deprecated: Type declaration for parameters\nfunc ParamKeyTable() paramstypes.KeyTable {\n\treturn paramstypes.NewKeyTable().RegisterParamSet(&Params{})\n}\n\nfunc (p *Params) ParamSetPairs() paramstypes.ParamSetPairs {\n\treturn paramstypes.ParamSetPairs{\n\t\tparamstypes.NewParamSetPair(KeyRecoveryPeriod, &p.RecoveryPeriod, validateRecoveryPeriod),\n\t\tparamstypes.NewParamSetPair(KeyAdjustPricePeriod, &p.AdjustPricePeriod, validateAdjustPricePeriod),\n\t\tparamstypes.NewParamSetPair(KeyBasePrice, &p.BasePrice, validateBasePrice),\n\t\tparamstypes.NewParamSetPair(KeyBaseLoad, &p.BaseLoad, validateBaseLoad),\n\t\tparamstypes.NewParamSetPair(KeyMaxBlockBandwidth, &p.MaxBlockBandwidth, validateMaxBlockBandwidth),\n\t}\n}\n"
  },
  {
    "path": "x/bandwidth/types/query.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/bandwidth/v1beta1/query.proto\n\npackage types\n\nimport (\n\tcontext \"context\"\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\tgithub_com_cosmos_cosmos_sdk_types \"github.com/cosmos/cosmos-sdk/types\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tgrpc1 \"github.com/cosmos/gogoproto/grpc\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype QueryLoadRequest struct{}\n\nfunc (m *QueryLoadRequest) Reset()         { *m = QueryLoadRequest{} }\nfunc (m *QueryLoadRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryLoadRequest) ProtoMessage()    {}\nfunc (*QueryLoadRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_bccaa873af5af46c, []int{0}\n}\n\nfunc (m *QueryLoadRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryLoadRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryLoadRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryLoadRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryLoadRequest.Merge(m, src)\n}\n\nfunc (m *QueryLoadRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryLoadRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryLoadRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryLoadRequest proto.InternalMessageInfo\n\ntype QueryLoadResponse struct {\n\tLoad github_com_cosmos_cosmos_sdk_types.Dec `protobuf:\"bytes,1,opt,name=load,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec\" json:\"load\"`\n}\n\nfunc (m *QueryLoadResponse) Reset()         { *m = QueryLoadResponse{} }\nfunc (m *QueryLoadResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryLoadResponse) ProtoMessage()    {}\nfunc (*QueryLoadResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_bccaa873af5af46c, []int{1}\n}\n\nfunc (m *QueryLoadResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryLoadResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryLoadResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryLoadResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryLoadResponse.Merge(m, src)\n}\n\nfunc (m *QueryLoadResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryLoadResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryLoadResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryLoadResponse proto.InternalMessageInfo\n\ntype QueryPriceRequest struct{}\n\nfunc (m *QueryPriceRequest) Reset()         { *m = QueryPriceRequest{} }\nfunc (m *QueryPriceRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryPriceRequest) ProtoMessage()    {}\nfunc (*QueryPriceRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_bccaa873af5af46c, []int{2}\n}\n\nfunc (m *QueryPriceRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryPriceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryPriceRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryPriceRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryPriceRequest.Merge(m, src)\n}\n\nfunc (m *QueryPriceRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryPriceRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryPriceRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryPriceRequest proto.InternalMessageInfo\n\ntype QueryPriceResponse struct {\n\tPrice github_com_cosmos_cosmos_sdk_types.Dec `protobuf:\"bytes,1,opt,name=price,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec\" json:\"price\"`\n}\n\nfunc (m *QueryPriceResponse) Reset()         { *m = QueryPriceResponse{} }\nfunc (m *QueryPriceResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryPriceResponse) ProtoMessage()    {}\nfunc (*QueryPriceResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_bccaa873af5af46c, []int{3}\n}\n\nfunc (m *QueryPriceResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryPriceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryPriceResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryPriceResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryPriceResponse.Merge(m, src)\n}\n\nfunc (m *QueryPriceResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryPriceResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryPriceResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryPriceResponse proto.InternalMessageInfo\n\ntype QueryTotalBandwidthRequest struct{}\n\nfunc (m *QueryTotalBandwidthRequest) Reset()         { *m = QueryTotalBandwidthRequest{} }\nfunc (m *QueryTotalBandwidthRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryTotalBandwidthRequest) ProtoMessage()    {}\nfunc (*QueryTotalBandwidthRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_bccaa873af5af46c, []int{4}\n}\n\nfunc (m *QueryTotalBandwidthRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryTotalBandwidthRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryTotalBandwidthRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryTotalBandwidthRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryTotalBandwidthRequest.Merge(m, src)\n}\n\nfunc (m *QueryTotalBandwidthRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryTotalBandwidthRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryTotalBandwidthRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryTotalBandwidthRequest proto.InternalMessageInfo\n\ntype QueryTotalBandwidthResponse struct {\n\tTotalBandwidth uint64 `protobuf:\"varint,1,opt,name=total_bandwidth,json=totalBandwidth,proto3\" json:\"total_bandwidth,omitempty\"`\n}\n\nfunc (m *QueryTotalBandwidthResponse) Reset()         { *m = QueryTotalBandwidthResponse{} }\nfunc (m *QueryTotalBandwidthResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryTotalBandwidthResponse) ProtoMessage()    {}\nfunc (*QueryTotalBandwidthResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_bccaa873af5af46c, []int{5}\n}\n\nfunc (m *QueryTotalBandwidthResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryTotalBandwidthResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryTotalBandwidthResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryTotalBandwidthResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryTotalBandwidthResponse.Merge(m, src)\n}\n\nfunc (m *QueryTotalBandwidthResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryTotalBandwidthResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryTotalBandwidthResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryTotalBandwidthResponse proto.InternalMessageInfo\n\nfunc (m *QueryTotalBandwidthResponse) GetTotalBandwidth() uint64 {\n\tif m != nil {\n\t\treturn m.TotalBandwidth\n\t}\n\treturn 0\n}\n\ntype QueryNeuronBandwidthRequest struct {\n\tNeuron string `protobuf:\"bytes,1,opt,name=neuron,proto3\" json:\"neuron,omitempty\"`\n}\n\nfunc (m *QueryNeuronBandwidthRequest) Reset()         { *m = QueryNeuronBandwidthRequest{} }\nfunc (m *QueryNeuronBandwidthRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryNeuronBandwidthRequest) ProtoMessage()    {}\nfunc (*QueryNeuronBandwidthRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_bccaa873af5af46c, []int{6}\n}\n\nfunc (m *QueryNeuronBandwidthRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryNeuronBandwidthRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryNeuronBandwidthRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryNeuronBandwidthRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryNeuronBandwidthRequest.Merge(m, src)\n}\n\nfunc (m *QueryNeuronBandwidthRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryNeuronBandwidthRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryNeuronBandwidthRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryNeuronBandwidthRequest proto.InternalMessageInfo\n\nfunc (m *QueryNeuronBandwidthRequest) GetNeuron() string {\n\tif m != nil {\n\t\treturn m.Neuron\n\t}\n\treturn \"\"\n}\n\ntype QueryNeuronBandwidthResponse struct {\n\tNeuronBandwidth NeuronBandwidth `protobuf:\"bytes,1,opt,name=neuron_bandwidth,json=neuronBandwidth,proto3\" json:\"neuron_bandwidth\"`\n}\n\nfunc (m *QueryNeuronBandwidthResponse) Reset()         { *m = QueryNeuronBandwidthResponse{} }\nfunc (m *QueryNeuronBandwidthResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryNeuronBandwidthResponse) ProtoMessage()    {}\nfunc (*QueryNeuronBandwidthResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_bccaa873af5af46c, []int{7}\n}\n\nfunc (m *QueryNeuronBandwidthResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryNeuronBandwidthResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryNeuronBandwidthResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryNeuronBandwidthResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryNeuronBandwidthResponse.Merge(m, src)\n}\n\nfunc (m *QueryNeuronBandwidthResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryNeuronBandwidthResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryNeuronBandwidthResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryNeuronBandwidthResponse proto.InternalMessageInfo\n\nfunc (m *QueryNeuronBandwidthResponse) GetNeuronBandwidth() NeuronBandwidth {\n\tif m != nil {\n\t\treturn m.NeuronBandwidth\n\t}\n\treturn NeuronBandwidth{}\n}\n\ntype QueryParamsRequest struct{}\n\nfunc (m *QueryParamsRequest) Reset()         { *m = QueryParamsRequest{} }\nfunc (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryParamsRequest) ProtoMessage()    {}\nfunc (*QueryParamsRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_bccaa873af5af46c, []int{8}\n}\n\nfunc (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryParamsRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryParamsRequest.Merge(m, src)\n}\n\nfunc (m *QueryParamsRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryParamsRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryParamsRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo\n\ntype QueryParamsResponse struct {\n\tParams Params `protobuf:\"bytes,1,opt,name=params,proto3\" json:\"params\"`\n}\n\nfunc (m *QueryParamsResponse) Reset()         { *m = QueryParamsResponse{} }\nfunc (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryParamsResponse) ProtoMessage()    {}\nfunc (*QueryParamsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_bccaa873af5af46c, []int{9}\n}\n\nfunc (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryParamsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryParamsResponse.Merge(m, src)\n}\n\nfunc (m *QueryParamsResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryParamsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryParamsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo\n\nfunc (m *QueryParamsResponse) GetParams() Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn Params{}\n}\n\nfunc init() {\n\tproto.RegisterType((*QueryLoadRequest)(nil), \"cyber.bandwidth.v1beta1.QueryLoadRequest\")\n\tproto.RegisterType((*QueryLoadResponse)(nil), \"cyber.bandwidth.v1beta1.QueryLoadResponse\")\n\tproto.RegisterType((*QueryPriceRequest)(nil), \"cyber.bandwidth.v1beta1.QueryPriceRequest\")\n\tproto.RegisterType((*QueryPriceResponse)(nil), \"cyber.bandwidth.v1beta1.QueryPriceResponse\")\n\tproto.RegisterType((*QueryTotalBandwidthRequest)(nil), \"cyber.bandwidth.v1beta1.QueryTotalBandwidthRequest\")\n\tproto.RegisterType((*QueryTotalBandwidthResponse)(nil), \"cyber.bandwidth.v1beta1.QueryTotalBandwidthResponse\")\n\tproto.RegisterType((*QueryNeuronBandwidthRequest)(nil), \"cyber.bandwidth.v1beta1.QueryNeuronBandwidthRequest\")\n\tproto.RegisterType((*QueryNeuronBandwidthResponse)(nil), \"cyber.bandwidth.v1beta1.QueryNeuronBandwidthResponse\")\n\tproto.RegisterType((*QueryParamsRequest)(nil), \"cyber.bandwidth.v1beta1.QueryParamsRequest\")\n\tproto.RegisterType((*QueryParamsResponse)(nil), \"cyber.bandwidth.v1beta1.QueryParamsResponse\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"cyber/bandwidth/v1beta1/query.proto\", fileDescriptor_bccaa873af5af46c)\n}\n\nvar fileDescriptor_bccaa873af5af46c = []byte{\n\t// 585 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x41, 0x6b, 0x13, 0x4d,\n\t0x18, 0xce, 0x7c, 0x24, 0x81, 0xef, 0x15, 0x9a, 0x3a, 0x2d, 0x2a, 0x6b, 0xd8, 0xc8, 0x0a, 0x36,\n\t0x69, 0xed, 0x8e, 0x49, 0xda, 0x8b, 0xe0, 0x25, 0x14, 0x4f, 0x2a, 0x1a, 0x0a, 0x62, 0x2f, 0x32,\n\t0xd9, 0x0c, 0xdb, 0x60, 0xb2, 0xb3, 0xdd, 0x99, 0xa8, 0x41, 0xbc, 0xf8, 0x03, 0x44, 0x14, 0xfc,\n\t0x17, 0x9e, 0xbc, 0xf9, 0x0b, 0x7a, 0x2c, 0x78, 0x11, 0x0f, 0x45, 0x12, 0x7f, 0x88, 0xec, 0xcc,\n\t0xa4, 0x6e, 0x42, 0xd6, 0x6c, 0x7b, 0xda, 0xe4, 0x9d, 0xe7, 0x7d, 0x9e, 0x67, 0xdf, 0x7d, 0xde,\n\t0x81, 0x9b, 0xde, 0xa8, 0xc3, 0x22, 0xd2, 0xa1, 0x41, 0xf7, 0x55, 0xaf, 0x2b, 0x0f, 0xc9, 0xcb,\n\t0x7a, 0x87, 0x49, 0x5a, 0x27, 0x47, 0x43, 0x16, 0x8d, 0xdc, 0x30, 0xe2, 0x92, 0xe3, 0xab, 0x0a,\n\t0xe4, 0x9e, 0x81, 0x5c, 0x03, 0xb2, 0xd6, 0x7d, 0xee, 0x73, 0x85, 0x21, 0xf1, 0x2f, 0x0d, 0xb7,\n\t0xca, 0x3e, 0xe7, 0x7e, 0x9f, 0x11, 0x1a, 0xf6, 0x08, 0x0d, 0x02, 0x2e, 0xa9, 0xec, 0xf1, 0x40,\n\t0x98, 0xd3, 0x54, 0x45, 0x39, 0x0a, 0x99, 0x01, 0x39, 0x18, 0x56, 0x9f, 0xc4, 0x06, 0x1e, 0x70,\n\t0xda, 0x6d, 0xb3, 0xa3, 0x21, 0x13, 0xd2, 0x79, 0x0a, 0x97, 0x13, 0x35, 0x11, 0xf2, 0x40, 0x30,\n\t0xdc, 0x82, 0x7c, 0x9f, 0xd3, 0xee, 0x35, 0x74, 0x03, 0x55, 0xff, 0x6f, 0xb9, 0xc7, 0xa7, 0x95,\n\t0xdc, 0xcf, 0xd3, 0xca, 0x2d, 0xbf, 0x27, 0x0f, 0x87, 0x1d, 0xd7, 0xe3, 0x03, 0xe2, 0x71, 0x31,\n\t0xe0, 0xc2, 0x3c, 0xb6, 0x45, 0xf7, 0x85, 0x11, 0xda, 0x63, 0x5e, 0x5b, 0xf5, 0x3a, 0x6b, 0x86,\n\t0xf8, 0x71, 0xd4, 0xf3, 0xd8, 0x54, 0xed, 0x00, 0x70, 0xb2, 0x68, 0xe4, 0xf6, 0xa0, 0x10, 0xc6,\n\t0x85, 0x0b, 0xea, 0xe9, 0x66, 0xa7, 0x0c, 0x96, 0xe2, 0xde, 0xe7, 0x92, 0xf6, 0x5b, 0xd3, 0x41,\n\t0x4c, 0x95, 0xef, 0xc3, 0xf5, 0x85, 0xa7, 0xc6, 0xc2, 0x06, 0x94, 0x64, 0x7c, 0xf2, 0xfc, 0x6c,\n\t0x82, 0xca, 0x4c, 0xbe, 0xbd, 0x22, 0x67, 0x1a, 0x9c, 0x5d, 0xc3, 0xf3, 0x88, 0x0d, 0x23, 0x1e,\n\t0xcc, 0xcb, 0xe0, 0x2b, 0x50, 0x0c, 0xd4, 0x89, 0x7e, 0x97, 0xb6, 0xf9, 0xe7, 0x8c, 0xa0, 0xbc,\n\t0xb8, 0xcd, 0xe8, 0x3f, 0x83, 0x55, 0x8d, 0x9c, 0x33, 0x70, 0xa9, 0x51, 0x75, 0x53, 0x72, 0xe2,\n\t0xce, 0x71, 0xb5, 0xf2, 0xf1, 0xdc, 0xda, 0xa5, 0x60, 0xb6, 0xec, 0xac, 0x4f, 0x67, 0x4e, 0x23,\n\t0x3a, 0x10, 0xd3, 0x79, 0xec, 0xc3, 0xda, 0x4c, 0xd5, 0xf8, 0xb8, 0x07, 0xc5, 0x50, 0x55, 0x8c,\n\t0x7a, 0x25, 0x55, 0x5d, 0x37, 0x1a, 0x51, 0xd3, 0xd4, 0xf8, 0x5a, 0x84, 0x82, 0xa2, 0xc5, 0xef,\n\t0x11, 0xe4, 0xe3, 0x4c, 0xe1, 0x5a, 0x2a, 0xc3, 0x7c, 0x16, 0xad, 0xcd, 0x2c, 0x50, 0x6d, 0xd4,\n\t0x21, 0xef, 0xbe, 0xff, 0xfe, 0xf4, 0x5f, 0x0d, 0x6f, 0x90, 0xb4, 0xe4, 0xff, 0xad, 0xc4, 0x79,\n\t0xc4, 0x1f, 0x11, 0x14, 0x54, 0xec, 0xf0, 0x12, 0x99, 0x64, 0x60, 0xad, 0xad, 0x4c, 0x58, 0xe3,\n\t0xe9, 0x8e, 0xf2, 0xb4, 0x89, 0xab, 0x19, 0x3c, 0xa9, 0xcc, 0xe2, 0x2f, 0x08, 0x56, 0x66, 0x13,\n\t0x89, 0x9b, 0xff, 0x56, 0x5c, 0x98, 0x6e, 0x6b, 0xe7, 0x7c, 0x4d, 0x17, 0xf0, 0xab, 0xd6, 0x00,\n\t0x7f, 0x43, 0x50, 0x9a, 0x8b, 0x1d, 0x5e, 0xa2, 0xbd, 0x78, 0x51, 0xac, 0xdd, 0x73, 0x76, 0x19,\n\t0xcb, 0x77, 0x95, 0xe5, 0x1d, 0xdc, 0xc8, 0x60, 0x59, 0x2f, 0x02, 0x79, 0xa3, 0x9f, 0x6f, 0xf1,\n\t0x67, 0x04, 0x45, 0x9d, 0x5a, 0xbc, 0xec, 0xb3, 0x26, 0x57, 0xc5, 0xba, 0x9d, 0x0d, 0x6c, 0x1c,\n\t0xd6, 0x95, 0xc3, 0x2d, 0x5c, 0xcb, 0x12, 0x02, 0xbd, 0x43, 0x0f, 0x8f, 0xc7, 0x36, 0x3a, 0x19,\n\t0xdb, 0xe8, 0xd7, 0xd8, 0x46, 0x1f, 0x26, 0x76, 0xee, 0x64, 0x62, 0xe7, 0x7e, 0x4c, 0xec, 0xdc,\n\t0x41, 0x33, 0x79, 0x05, 0xc6, 0x74, 0x1e, 0x0f, 0xfc, 0x88, 0x09, 0x41, 0x7c, 0xbe, 0xad, 0xf9,\n\t0x5f, 0x27, 0x3f, 0x52, 0x7c, 0x27, 0x76, 0x8a, 0xea, 0xb6, 0x6f, 0xfe, 0x09, 0x00, 0x00, 0xff,\n\t0xff, 0xca, 0x34, 0x64, 0x66, 0x86, 0x06, 0x00, 0x00,\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ context.Context\n\t_ grpc.ClientConn\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// QueryClient is the client API for Query service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype QueryClient interface {\n\tLoad(ctx context.Context, in *QueryLoadRequest, opts ...grpc.CallOption) (*QueryLoadResponse, error)\n\tPrice(ctx context.Context, in *QueryPriceRequest, opts ...grpc.CallOption) (*QueryPriceResponse, error)\n\tTotalBandwidth(ctx context.Context, in *QueryTotalBandwidthRequest, opts ...grpc.CallOption) (*QueryTotalBandwidthResponse, error)\n\tNeuronBandwidth(ctx context.Context, in *QueryNeuronBandwidthRequest, opts ...grpc.CallOption) (*QueryNeuronBandwidthResponse, error)\n\tParams(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error)\n}\n\ntype queryClient struct {\n\tcc grpc1.ClientConn\n}\n\nfunc NewQueryClient(cc grpc1.ClientConn) QueryClient {\n\treturn &queryClient{cc}\n}\n\nfunc (c *queryClient) Load(ctx context.Context, in *QueryLoadRequest, opts ...grpc.CallOption) (*QueryLoadResponse, error) {\n\tout := new(QueryLoadResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.bandwidth.v1beta1.Query/Load\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) Price(ctx context.Context, in *QueryPriceRequest, opts ...grpc.CallOption) (*QueryPriceResponse, error) {\n\tout := new(QueryPriceResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.bandwidth.v1beta1.Query/Price\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) TotalBandwidth(ctx context.Context, in *QueryTotalBandwidthRequest, opts ...grpc.CallOption) (*QueryTotalBandwidthResponse, error) {\n\tout := new(QueryTotalBandwidthResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.bandwidth.v1beta1.Query/TotalBandwidth\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) NeuronBandwidth(ctx context.Context, in *QueryNeuronBandwidthRequest, opts ...grpc.CallOption) (*QueryNeuronBandwidthResponse, error) {\n\tout := new(QueryNeuronBandwidthResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.bandwidth.v1beta1.Query/NeuronBandwidth\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) {\n\tout := new(QueryParamsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.bandwidth.v1beta1.Query/Params\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// QueryServer is the server API for Query service.\ntype QueryServer interface {\n\tLoad(context.Context, *QueryLoadRequest) (*QueryLoadResponse, error)\n\tPrice(context.Context, *QueryPriceRequest) (*QueryPriceResponse, error)\n\tTotalBandwidth(context.Context, *QueryTotalBandwidthRequest) (*QueryTotalBandwidthResponse, error)\n\tNeuronBandwidth(context.Context, *QueryNeuronBandwidthRequest) (*QueryNeuronBandwidthResponse, error)\n\tParams(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error)\n}\n\n// UnimplementedQueryServer can be embedded to have forward compatible implementations.\ntype UnimplementedQueryServer struct{}\n\nfunc (*UnimplementedQueryServer) Load(ctx context.Context, req *QueryLoadRequest) (*QueryLoadResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Load not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) Price(ctx context.Context, req *QueryPriceRequest) (*QueryPriceResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Price not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) TotalBandwidth(ctx context.Context, req *QueryTotalBandwidthRequest) (*QueryTotalBandwidthResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method TotalBandwidth not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) NeuronBandwidth(ctx context.Context, req *QueryNeuronBandwidthRequest) (*QueryNeuronBandwidthResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method NeuronBandwidth not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Params not implemented\")\n}\n\nfunc RegisterQueryServer(s grpc1.Server, srv QueryServer) {\n\ts.RegisterService(&_Query_serviceDesc, srv)\n}\n\nfunc _Query_Load_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryLoadRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).Load(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.bandwidth.v1beta1.Query/Load\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).Load(ctx, req.(*QueryLoadRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_Price_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryPriceRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).Price(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.bandwidth.v1beta1.Query/Price\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).Price(ctx, req.(*QueryPriceRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_TotalBandwidth_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryTotalBandwidthRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).TotalBandwidth(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.bandwidth.v1beta1.Query/TotalBandwidth\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).TotalBandwidth(ctx, req.(*QueryTotalBandwidthRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_NeuronBandwidth_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryNeuronBandwidthRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).NeuronBandwidth(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.bandwidth.v1beta1.Query/NeuronBandwidth\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).NeuronBandwidth(ctx, req.(*QueryNeuronBandwidthRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryParamsRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).Params(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.bandwidth.v1beta1.Query/Params\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _Query_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"cyber.bandwidth.v1beta1.Query\",\n\tHandlerType: (*QueryServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Load\",\n\t\t\tHandler:    _Query_Load_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Price\",\n\t\t\tHandler:    _Query_Price_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"TotalBandwidth\",\n\t\t\tHandler:    _Query_TotalBandwidth_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"NeuronBandwidth\",\n\t\t\tHandler:    _Query_NeuronBandwidth_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Params\",\n\t\t\tHandler:    _Query_Params_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"cyber/bandwidth/v1beta1/query.proto\",\n}\n\nfunc (m *QueryLoadRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryLoadRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryLoadRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryLoadResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryLoadResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryLoadResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize := m.Load.Size()\n\t\ti -= size\n\t\tif _, err := m.Load.MarshalTo(dAtA[i:]); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryPriceRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryPriceRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryPriceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryPriceResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryPriceResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryPriceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize := m.Price.Size()\n\t\ti -= size\n\t\tif _, err := m.Price.MarshalTo(dAtA[i:]); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryTotalBandwidthRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryTotalBandwidthRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryTotalBandwidthRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryTotalBandwidthResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryTotalBandwidthResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryTotalBandwidthResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.TotalBandwidth != 0 {\n\t\ti = encodeVarintQuery(dAtA, i, uint64(m.TotalBandwidth))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryNeuronBandwidthRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryNeuronBandwidthRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryNeuronBandwidthRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Neuron) > 0 {\n\t\ti -= len(m.Neuron)\n\t\tcopy(dAtA[i:], m.Neuron)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.Neuron)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryNeuronBandwidthResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryNeuronBandwidthResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryNeuronBandwidthResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.NeuronBandwidth.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintQuery(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovQuery(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *QueryLoadRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *QueryLoadResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Load.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc (m *QueryPriceRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *QueryPriceResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Price.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc (m *QueryTotalBandwidthRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *QueryTotalBandwidthResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.TotalBandwidth != 0 {\n\t\tn += 1 + sovQuery(uint64(m.TotalBandwidth))\n\t}\n\treturn n\n}\n\nfunc (m *QueryNeuronBandwidthRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Neuron)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryNeuronBandwidthResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.NeuronBandwidth.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc (m *QueryParamsRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *QueryParamsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Params.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc sovQuery(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozQuery(x uint64) (n int) {\n\treturn sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *QueryLoadRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLoadRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLoadRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryLoadResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLoadResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLoadResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Load\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Load.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryPriceRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPriceRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPriceRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryPriceResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPriceResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPriceResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Price\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Price.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryTotalBandwidthRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryTotalBandwidthRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryTotalBandwidthRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryTotalBandwidthResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryTotalBandwidthResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryTotalBandwidthResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field TotalBandwidth\", wireType)\n\t\t\t}\n\t\t\tm.TotalBandwidth = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.TotalBandwidth |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryNeuronBandwidthRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryNeuronBandwidthRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryNeuronBandwidthRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Neuron\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Neuron = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryNeuronBandwidthResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryNeuronBandwidthResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryNeuronBandwidthResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field NeuronBandwidth\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.NeuronBandwidth.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryParamsRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryParamsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipQuery(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupQuery\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthQuery\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthQuery        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowQuery          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupQuery = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/bandwidth/types/query.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: cyber/bandwidth/v1beta1/query.proto\n\n/*\nPackage types is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage types\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/golang/protobuf/descriptor\"\n\t\"github.com/golang/protobuf/proto\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = descriptor.ForMessage\n\t_ = metadata.Join\n)\n\nfunc request_Query_Load_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryLoadRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := client.Load(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_Load_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryLoadRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := server.Load(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_Query_Price_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryPriceRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := client.Price(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_Price_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryPriceRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := server.Price(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_Query_TotalBandwidth_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryTotalBandwidthRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := client.TotalBandwidth(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_TotalBandwidth_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryTotalBandwidthRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := server.TotalBandwidth(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_Query_NeuronBandwidth_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryNeuronBandwidthRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"neuron\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"neuron\")\n\t}\n\n\tprotoReq.Neuron, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"neuron\", err)\n\t}\n\n\tmsg, err := client.NeuronBandwidth(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_NeuronBandwidth_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryNeuronBandwidthRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"neuron\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"neuron\")\n\t}\n\n\tprotoReq.Neuron, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"neuron\", err)\n\t}\n\n\tmsg, err := server.NeuronBandwidth(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryParamsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryParamsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := server.Params(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterQueryHandlerServer registers the http handlers for service Query to \"mux\".\n// UnaryRPC     :call QueryServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead.\nfunc RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error {\n\tmux.Handle(\"GET\", pattern_Query_Load_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_Load_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Load_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Price_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_Price_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Price_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_TotalBandwidth_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_TotalBandwidth_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_TotalBandwidth_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_NeuronBandwidth_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_NeuronBandwidth_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_NeuronBandwidth_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.Dial(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Infof(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Infof(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\n\treturn RegisterQueryHandler(ctx, mux, conn)\n}\n\n// RegisterQueryHandler registers the http handlers for service Query to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn))\n}\n\n// RegisterQueryHandlerClient registers the http handlers for service Query\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"QueryClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"QueryClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"QueryClient\" to call the correct interceptors.\nfunc RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error {\n\tmux.Handle(\"GET\", pattern_Query_Load_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_Load_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Load_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Price_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_Price_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Price_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_TotalBandwidth_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_TotalBandwidth_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_TotalBandwidth_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_NeuronBandwidth_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_NeuronBandwidth_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_NeuronBandwidth_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\nvar (\n\tpattern_Query_Load_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"bandwidth\", \"v1beta1\", \"load\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_Price_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"bandwidth\", \"v1beta1\", \"price\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_TotalBandwidth_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"bandwidth\", \"v1beta1\", \"total\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_NeuronBandwidth_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3, 1, 0, 4, 1, 5, 3}, []string{\"cyber\", \"bandwidth\", \"v1beta1\", \"neuron\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"bandwidth\", \"v1beta1\", \"params\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n)\n\nvar (\n\tforward_Query_Load_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_Price_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_TotalBandwidth_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_NeuronBandwidth_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_Params_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "x/bandwidth/types/tx.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/bandwidth/v1beta1/tx.proto\n\npackage types\n\nimport (\n\tcontext \"context\"\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\t_ \"github.com/cosmos/cosmos-proto\"\n\t_ \"github.com/cosmos/cosmos-sdk/types/msgservice\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tgrpc1 \"github.com/cosmos/gogoproto/grpc\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype MsgUpdateParams struct {\n\tAuthority string `protobuf:\"bytes,1,opt,name=authority,proto3\" json:\"authority,omitempty\"`\n\tParams    Params `protobuf:\"bytes,2,opt,name=params,proto3\" json:\"params\"`\n}\n\nfunc (m *MsgUpdateParams) Reset()         { *m = MsgUpdateParams{} }\nfunc (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) }\nfunc (*MsgUpdateParams) ProtoMessage()    {}\nfunc (*MsgUpdateParams) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_b2467dc10018517b, []int{0}\n}\n\nfunc (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgUpdateParams.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgUpdateParams) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgUpdateParams.Merge(m, src)\n}\n\nfunc (m *MsgUpdateParams) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgUpdateParams) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgUpdateParams.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo\n\nfunc (m *MsgUpdateParams) GetAuthority() string {\n\tif m != nil {\n\t\treturn m.Authority\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgUpdateParams) GetParams() Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn Params{}\n}\n\ntype MsgUpdateParamsResponse struct{}\n\nfunc (m *MsgUpdateParamsResponse) Reset()         { *m = MsgUpdateParamsResponse{} }\nfunc (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgUpdateParamsResponse) ProtoMessage()    {}\nfunc (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_b2467dc10018517b, []int{1}\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgUpdateParamsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src)\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo\n\nfunc init() {\n\tproto.RegisterType((*MsgUpdateParams)(nil), \"cyber.bandwidth.v1beta1.MsgUpdateParams\")\n\tproto.RegisterType((*MsgUpdateParamsResponse)(nil), \"cyber.bandwidth.v1beta1.MsgUpdateParamsResponse\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/bandwidth/v1beta1/tx.proto\", fileDescriptor_b2467dc10018517b) }\n\nvar fileDescriptor_b2467dc10018517b = []byte{\n\t// 327 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x48, 0xae, 0x4c, 0x4a,\n\t0x2d, 0xd2, 0x4f, 0x4a, 0xcc, 0x4b, 0x29, 0xcf, 0x4c, 0x29, 0xc9, 0xd0, 0x2f, 0x33, 0x4c, 0x4a,\n\t0x2d, 0x49, 0x34, 0xd4, 0x2f, 0xa9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x07, 0xab,\n\t0xd0, 0x83, 0xab, 0xd0, 0x83, 0xaa, 0x90, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0xab, 0xd1, 0x07,\n\t0xb1, 0x20, 0xca, 0xa5, 0xc4, 0x93, 0xf3, 0x8b, 0x73, 0xf3, 0x8b, 0xf5, 0x73, 0x8b, 0xd3, 0xf5,\n\t0xcb, 0x0c, 0x41, 0x14, 0x54, 0x42, 0x12, 0x22, 0x11, 0x0f, 0xd1, 0x01, 0xe1, 0x40, 0xa5, 0x94,\n\t0x71, 0x3a, 0xa2, 0xb2, 0x20, 0x15, 0xaa, 0x48, 0x69, 0x06, 0x23, 0x17, 0xbf, 0x6f, 0x71, 0x7a,\n\t0x68, 0x41, 0x4a, 0x62, 0x49, 0x6a, 0x40, 0x62, 0x51, 0x62, 0x6e, 0xb1, 0x90, 0x19, 0x17, 0x67,\n\t0x62, 0x69, 0x49, 0x46, 0x7e, 0x51, 0x66, 0x49, 0xa5, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0xa7, 0x93,\n\t0xc4, 0xa5, 0x2d, 0xba, 0x22, 0x50, 0xd3, 0x1d, 0x53, 0x52, 0x8a, 0x52, 0x8b, 0x8b, 0x83, 0x4b,\n\t0x8a, 0x32, 0xf3, 0xd2, 0x83, 0x10, 0x4a, 0x85, 0x6c, 0xb9, 0xd8, 0x0a, 0xc0, 0x26, 0x48, 0x30,\n\t0x29, 0x30, 0x6a, 0x70, 0x1b, 0xc9, 0xeb, 0xe1, 0xf0, 0xa4, 0x1e, 0xc4, 0x22, 0x27, 0x96, 0x13,\n\t0xf7, 0xe4, 0x19, 0x82, 0xa0, 0x9a, 0xac, 0xf8, 0x9a, 0x9e, 0x6f, 0xd0, 0x42, 0x18, 0xa7, 0x24,\n\t0xc9, 0x25, 0x8e, 0xe6, 0xb2, 0xa0, 0xd4, 0xe2, 0x82, 0xfc, 0xbc, 0xe2, 0x54, 0xa3, 0x42, 0x2e,\n\t0x66, 0xdf, 0xe2, 0x74, 0xa1, 0x2c, 0x2e, 0x1e, 0x14, 0x87, 0x6b, 0xe0, 0xb4, 0x10, 0xcd, 0x20,\n\t0x29, 0x03, 0x62, 0x55, 0xc2, 0xac, 0x74, 0xf2, 0x3d, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39,\n\t0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63,\n\t0x39, 0x86, 0x28, 0xe3, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0x7d, 0xb0,\n\t0xa9, 0xc9, 0xf9, 0x79, 0xe9, 0xa0, 0x10, 0xd2, 0x4f, 0xcf, 0xd7, 0x85, 0xc4, 0x41, 0x05, 0x52,\n\t0x2c, 0x80, 0x43, 0x3f, 0x89, 0x0d, 0x1c, 0xfc, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe5,\n\t0xc3, 0xa3, 0xaa, 0x2a, 0x02, 0x00, 0x00,\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ context.Context\n\t_ grpc.ClientConn\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// MsgClient is the client API for Msg service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype MsgClient interface {\n\tUpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error)\n}\n\ntype msgClient struct {\n\tcc grpc1.ClientConn\n}\n\nfunc NewMsgClient(cc grpc1.ClientConn) MsgClient {\n\treturn &msgClient{cc}\n}\n\nfunc (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) {\n\tout := new(MsgUpdateParamsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.bandwidth.v1beta1.Msg/UpdateParams\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// MsgServer is the server API for Msg service.\ntype MsgServer interface {\n\tUpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error)\n}\n\n// UnimplementedMsgServer can be embedded to have forward compatible implementations.\ntype UnimplementedMsgServer struct{}\n\nfunc (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method UpdateParams not implemented\")\n}\n\nfunc RegisterMsgServer(s grpc1.Server, srv MsgServer) {\n\ts.RegisterService(&_Msg_serviceDesc, srv)\n}\n\nfunc _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgUpdateParams)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).UpdateParams(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.bandwidth.v1beta1.Msg/UpdateParams\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _Msg_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"cyber.bandwidth.v1beta1.Msg\",\n\tHandlerType: (*MsgServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"UpdateParams\",\n\t\t\tHandler:    _Msg_UpdateParams_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"cyber/bandwidth/v1beta1/tx.proto\",\n}\n\nfunc (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x12\n\tif len(m.Authority) > 0 {\n\t\ti -= len(m.Authority)\n\t\tcopy(dAtA[i:], m.Authority)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Authority)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintTx(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovTx(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *MsgUpdateParams) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Authority)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = m.Params.Size()\n\tn += 1 + l + sovTx(uint64(l))\n\treturn n\n}\n\nfunc (m *MsgUpdateParamsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc sovTx(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozTx(x uint64) (n int) {\n\treturn sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *MsgUpdateParams) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParams: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParams: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Authority\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Authority = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParamsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipTx(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthTx\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupTx\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthTx\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthTx        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowTx          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupTx = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/bandwidth/types/types.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/bandwidth/v1beta1/types.proto\n\npackage types\n\nimport (\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\tgithub_com_cosmos_cosmos_sdk_types \"github.com/cosmos/cosmos-sdk/types\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype Params struct {\n\tRecoveryPeriod    uint64                                 `protobuf:\"varint,1,opt,name=recovery_period,json=recoveryPeriod,proto3\" json:\"recovery_period,omitempty\"`\n\tAdjustPricePeriod uint64                                 `protobuf:\"varint,2,opt,name=adjust_price_period,json=adjustPricePeriod,proto3\" json:\"adjust_price_period,omitempty\"`\n\tBasePrice         github_com_cosmos_cosmos_sdk_types.Dec `protobuf:\"bytes,3,opt,name=base_price,json=basePrice,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec\" json:\"base_price\"`\n\tBaseLoad          github_com_cosmos_cosmos_sdk_types.Dec `protobuf:\"bytes,4,opt,name=base_load,json=baseLoad,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec\" json:\"base_load\"`\n\tMaxBlockBandwidth uint64                                 `protobuf:\"varint,5,opt,name=max_block_bandwidth,json=maxBlockBandwidth,proto3\" json:\"max_block_bandwidth,omitempty\"`\n}\n\nfunc (m *Params) Reset()         { *m = Params{} }\nfunc (m *Params) String() string { return proto.CompactTextString(m) }\nfunc (*Params) ProtoMessage()    {}\nfunc (*Params) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_b76904de4f1717b1, []int{0}\n}\n\nfunc (m *Params) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_Params.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *Params) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Params.Merge(m, src)\n}\n\nfunc (m *Params) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *Params) XXX_DiscardUnknown() {\n\txxx_messageInfo_Params.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Params proto.InternalMessageInfo\n\nfunc (m *Params) GetRecoveryPeriod() uint64 {\n\tif m != nil {\n\t\treturn m.RecoveryPeriod\n\t}\n\treturn 0\n}\n\nfunc (m *Params) GetAdjustPricePeriod() uint64 {\n\tif m != nil {\n\t\treturn m.AdjustPricePeriod\n\t}\n\treturn 0\n}\n\nfunc (m *Params) GetMaxBlockBandwidth() uint64 {\n\tif m != nil {\n\t\treturn m.MaxBlockBandwidth\n\t}\n\treturn 0\n}\n\ntype NeuronBandwidth struct {\n\tNeuron           string `protobuf:\"bytes,1,opt,name=neuron,proto3\" json:\"neuron,omitempty\"`\n\tRemainedValue    uint64 `protobuf:\"varint,2,opt,name=remained_value,json=remainedValue,proto3\" json:\"remained_value,omitempty\"`\n\tLastUpdatedBlock uint64 `protobuf:\"varint,3,opt,name=last_updated_block,json=lastUpdatedBlock,proto3\" json:\"last_updated_block,omitempty\"`\n\tMaxValue         uint64 `protobuf:\"varint,4,opt,name=max_value,json=maxValue,proto3\" json:\"max_value,omitempty\"`\n}\n\nfunc (m *NeuronBandwidth) Reset()         { *m = NeuronBandwidth{} }\nfunc (m *NeuronBandwidth) String() string { return proto.CompactTextString(m) }\nfunc (*NeuronBandwidth) ProtoMessage()    {}\nfunc (*NeuronBandwidth) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_b76904de4f1717b1, []int{1}\n}\n\nfunc (m *NeuronBandwidth) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *NeuronBandwidth) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_NeuronBandwidth.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *NeuronBandwidth) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_NeuronBandwidth.Merge(m, src)\n}\n\nfunc (m *NeuronBandwidth) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *NeuronBandwidth) XXX_DiscardUnknown() {\n\txxx_messageInfo_NeuronBandwidth.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_NeuronBandwidth proto.InternalMessageInfo\n\ntype Price struct {\n\tPrice github_com_cosmos_cosmos_sdk_types.Dec `protobuf:\"bytes,1,opt,name=price,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec\" json:\"price\"`\n}\n\nfunc (m *Price) Reset()         { *m = Price{} }\nfunc (m *Price) String() string { return proto.CompactTextString(m) }\nfunc (*Price) ProtoMessage()    {}\nfunc (*Price) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_b76904de4f1717b1, []int{2}\n}\n\nfunc (m *Price) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *Price) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_Price.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *Price) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Price.Merge(m, src)\n}\n\nfunc (m *Price) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *Price) XXX_DiscardUnknown() {\n\txxx_messageInfo_Price.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Price proto.InternalMessageInfo\n\nfunc init() {\n\tproto.RegisterType((*Params)(nil), \"cyber.bandwidth.v1beta1.Params\")\n\tproto.RegisterType((*NeuronBandwidth)(nil), \"cyber.bandwidth.v1beta1.NeuronBandwidth\")\n\tproto.RegisterType((*Price)(nil), \"cyber.bandwidth.v1beta1.Price\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"cyber/bandwidth/v1beta1/types.proto\", fileDescriptor_b76904de4f1717b1)\n}\n\nvar fileDescriptor_b76904de4f1717b1 = []byte{\n\t// 443 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x92, 0xb1, 0x6e, 0xd4, 0x30,\n\t0x1c, 0xc6, 0xe3, 0x92, 0x3b, 0xdd, 0x59, 0xa2, 0x05, 0x83, 0x20, 0x02, 0x29, 0xa9, 0x0e, 0x01,\n\t0x1d, 0x68, 0xa2, 0xaa, 0x5b, 0xc7, 0xa8, 0x1b, 0x14, 0x9d, 0x22, 0x01, 0x12, 0x4b, 0xe4, 0xd8,\n\t0x56, 0x1a, 0x9a, 0xc4, 0x91, 0xed, 0x1c, 0xb9, 0x37, 0x60, 0xe4, 0x11, 0x6e, 0xe1, 0x09, 0x78,\n\t0x89, 0x8e, 0x1d, 0x11, 0x43, 0x85, 0xee, 0x96, 0x3e, 0x06, 0xb2, 0x9d, 0x5c, 0x3b, 0x77, 0x4a,\n\t0xfc, 0x7d, 0xbf, 0x7c, 0xf1, 0xff, 0xd3, 0x1f, 0xbe, 0x22, 0xcb, 0x8c, 0x89, 0x28, 0xc3, 0x35,\n\t0xfd, 0x5e, 0x50, 0x75, 0x1e, 0x2d, 0x8e, 0x32, 0xa6, 0xf0, 0x51, 0xa4, 0x96, 0x0d, 0x93, 0x61,\n\t0x23, 0xb8, 0xe2, 0xe8, 0xb9, 0x81, 0xc2, 0x2d, 0x14, 0xf6, 0xd0, 0x8b, 0xa7, 0x39, 0xcf, 0xb9,\n\t0x61, 0x22, 0xfd, 0x66, 0xf1, 0xd9, 0xef, 0x1d, 0x38, 0x9e, 0x63, 0x81, 0x2b, 0x89, 0xde, 0xc2,\n\t0x3d, 0xc1, 0x08, 0x5f, 0x30, 0xb1, 0x4c, 0x1b, 0x26, 0x0a, 0x4e, 0x3d, 0xb0, 0x0f, 0x0e, 0xdc,\n\t0x64, 0x77, 0x90, 0xe7, 0x46, 0x45, 0x21, 0x7c, 0x82, 0xe9, 0xb7, 0x56, 0xaa, 0xb4, 0x11, 0x05,\n\t0x61, 0x03, 0xbc, 0x63, 0xe0, 0xc7, 0xd6, 0x9a, 0x6b, 0xa7, 0xe7, 0xcf, 0x20, 0xcc, 0xb0, 0x64,\n\t0x96, 0xf6, 0x1e, 0xec, 0x83, 0x83, 0x69, 0x1c, 0x5e, 0x5e, 0x07, 0xce, 0xdf, 0xeb, 0xe0, 0x4d,\n\t0x5e, 0xa8, 0xf3, 0x36, 0x0b, 0x09, 0xaf, 0x22, 0xc2, 0x65, 0xc5, 0x65, 0xff, 0x38, 0x94, 0xf4,\n\t0xa2, 0x1f, 0xec, 0x94, 0x91, 0x64, 0xaa, 0x13, 0x4c, 0x28, 0x7a, 0x0f, 0xcd, 0x21, 0x2d, 0x39,\n\t0xa6, 0x9e, 0x7b, 0xaf, 0xb4, 0x89, 0x0e, 0xf8, 0xc0, 0xb1, 0x99, 0xa5, 0xc2, 0x5d, 0x9a, 0x95,\n\t0x9c, 0x5c, 0xa4, 0xdb, 0xd2, 0xbc, 0x91, 0x9d, 0xa5, 0xc2, 0x5d, 0xac, 0x9d, 0x78, 0x30, 0x4e,\n\t0xdc, 0x9b, 0x55, 0x00, 0x66, 0xbf, 0x00, 0xdc, 0xfb, 0xc8, 0x5a, 0xc1, 0xeb, 0xad, 0x83, 0x9e,\n\t0xc1, 0x71, 0x6d, 0x24, 0xd3, 0xda, 0x34, 0xe9, 0x4f, 0xe8, 0x35, 0xdc, 0x15, 0xac, 0xc2, 0x45,\n\t0xcd, 0x68, 0xba, 0xc0, 0x65, 0xcb, 0xfa, 0xa2, 0x1e, 0x0e, 0xea, 0x67, 0x2d, 0xa2, 0x77, 0x10,\n\t0x95, 0x58, 0xaa, 0xb4, 0x6d, 0x28, 0x56, 0x8c, 0xda, 0x1b, 0x99, 0xb2, 0xdc, 0xe4, 0x91, 0x76,\n\t0x3e, 0x59, 0xc3, 0xdc, 0x07, 0xbd, 0x84, 0x53, 0x7d, 0x6d, 0x9b, 0xe7, 0x1a, 0x68, 0x52, 0xe1,\n\t0xce, 0x44, 0x9d, 0x4c, 0x7e, 0xac, 0x02, 0xe7, 0x66, 0x15, 0x38, 0xb3, 0x2f, 0x70, 0x64, 0x3b,\n\t0x3b, 0x85, 0x23, 0xdb, 0x3e, 0xb8, 0x57, 0x5f, 0xf6, 0xe3, 0xdb, 0xe0, 0xf8, 0xec, 0x72, 0xed,\n\t0x83, 0xab, 0xb5, 0x0f, 0xfe, 0xad, 0x7d, 0xf0, 0x73, 0xe3, 0x3b, 0x57, 0x1b, 0xdf, 0xf9, 0xb3,\n\t0xf1, 0x9d, 0xaf, 0xc7, 0x77, 0x23, 0xf5, 0x2a, 0x12, 0x5e, 0xe7, 0x82, 0x49, 0x19, 0xe5, 0xfc,\n\t0xd0, 0x2e, 0x70, 0x77, 0x67, 0x85, 0xcd, 0x3f, 0xb2, 0xb1, 0x59, 0xc6, 0xe3, 0xff, 0x01, 0x00,\n\t0x00, 0xff, 0xff, 0x1d, 0x38, 0x0c, 0x71, 0xe2, 0x02, 0x00, 0x00,\n}\n\nfunc (this *Params) Equal(that interface{}) bool {\n\tif that == nil {\n\t\treturn this == nil\n\t}\n\n\tthat1, ok := that.(*Params)\n\tif !ok {\n\t\tthat2, ok := that.(Params)\n\t\tif ok {\n\t\t\tthat1 = &that2\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\tif that1 == nil {\n\t\treturn this == nil\n\t} else if this == nil {\n\t\treturn false\n\t}\n\tif this.RecoveryPeriod != that1.RecoveryPeriod {\n\t\treturn false\n\t}\n\tif this.AdjustPricePeriod != that1.AdjustPricePeriod {\n\t\treturn false\n\t}\n\tif !this.BasePrice.Equal(that1.BasePrice) {\n\t\treturn false\n\t}\n\tif !this.BaseLoad.Equal(that1.BaseLoad) {\n\t\treturn false\n\t}\n\tif this.MaxBlockBandwidth != that1.MaxBlockBandwidth {\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc (m *Params) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *Params) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.MaxBlockBandwidth != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.MaxBlockBandwidth))\n\t\ti--\n\t\tdAtA[i] = 0x28\n\t}\n\t{\n\t\tsize := m.BaseLoad.Size()\n\t\ti -= size\n\t\tif _, err := m.BaseLoad.MarshalTo(dAtA[i:]); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti = encodeVarintTypes(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x22\n\t{\n\t\tsize := m.BasePrice.Size()\n\t\ti -= size\n\t\tif _, err := m.BasePrice.MarshalTo(dAtA[i:]); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti = encodeVarintTypes(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x1a\n\tif m.AdjustPricePeriod != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.AdjustPricePeriod))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif m.RecoveryPeriod != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.RecoveryPeriod))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *NeuronBandwidth) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *NeuronBandwidth) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *NeuronBandwidth) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.MaxValue != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.MaxValue))\n\t\ti--\n\t\tdAtA[i] = 0x20\n\t}\n\tif m.LastUpdatedBlock != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.LastUpdatedBlock))\n\t\ti--\n\t\tdAtA[i] = 0x18\n\t}\n\tif m.RemainedValue != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.RemainedValue))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif len(m.Neuron) > 0 {\n\t\ti -= len(m.Neuron)\n\t\tcopy(dAtA[i:], m.Neuron)\n\t\ti = encodeVarintTypes(dAtA, i, uint64(len(m.Neuron)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *Price) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *Price) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *Price) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize := m.Price.Size()\n\t\ti -= size\n\t\tif _, err := m.Price.MarshalTo(dAtA[i:]); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti = encodeVarintTypes(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintTypes(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovTypes(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *Params) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.RecoveryPeriod != 0 {\n\t\tn += 1 + sovTypes(uint64(m.RecoveryPeriod))\n\t}\n\tif m.AdjustPricePeriod != 0 {\n\t\tn += 1 + sovTypes(uint64(m.AdjustPricePeriod))\n\t}\n\tl = m.BasePrice.Size()\n\tn += 1 + l + sovTypes(uint64(l))\n\tl = m.BaseLoad.Size()\n\tn += 1 + l + sovTypes(uint64(l))\n\tif m.MaxBlockBandwidth != 0 {\n\t\tn += 1 + sovTypes(uint64(m.MaxBlockBandwidth))\n\t}\n\treturn n\n}\n\nfunc (m *NeuronBandwidth) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Neuron)\n\tif l > 0 {\n\t\tn += 1 + l + sovTypes(uint64(l))\n\t}\n\tif m.RemainedValue != 0 {\n\t\tn += 1 + sovTypes(uint64(m.RemainedValue))\n\t}\n\tif m.LastUpdatedBlock != 0 {\n\t\tn += 1 + sovTypes(uint64(m.LastUpdatedBlock))\n\t}\n\tif m.MaxValue != 0 {\n\t\tn += 1 + sovTypes(uint64(m.MaxValue))\n\t}\n\treturn n\n}\n\nfunc (m *Price) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Price.Size()\n\tn += 1 + l + sovTypes(uint64(l))\n\treturn n\n}\n\nfunc sovTypes(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozTypes(x uint64) (n int) {\n\treturn sovTypes(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *Params) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: Params: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: Params: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field RecoveryPeriod\", wireType)\n\t\t\t}\n\t\t\tm.RecoveryPeriod = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.RecoveryPeriod |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field AdjustPricePeriod\", wireType)\n\t\t\t}\n\t\t\tm.AdjustPricePeriod = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.AdjustPricePeriod |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field BasePrice\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.BasePrice.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 4:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field BaseLoad\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.BaseLoad.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 5:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MaxBlockBandwidth\", wireType)\n\t\t\t}\n\t\t\tm.MaxBlockBandwidth = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.MaxBlockBandwidth |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTypes(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *NeuronBandwidth) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: NeuronBandwidth: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: NeuronBandwidth: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Neuron\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Neuron = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field RemainedValue\", wireType)\n\t\t\t}\n\t\t\tm.RemainedValue = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.RemainedValue |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 3:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field LastUpdatedBlock\", wireType)\n\t\t\t}\n\t\t\tm.LastUpdatedBlock = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.LastUpdatedBlock |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 4:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MaxValue\", wireType)\n\t\t\t}\n\t\t\tm.MaxValue = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.MaxValue |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTypes(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *Price) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: Price: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: Price: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Price\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Price.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTypes(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipTypes(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowTypes\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupTypes\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthTypes\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthTypes        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowTypes          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupTypes = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/bandwidth/wasm/interface.go",
    "content": "package wasm\n\nimport (\n\t\"encoding/json\"\n\n\terrorsmod \"cosmossdk.io/errors\"\n\n\tpluginstypes \"github.com/cybercongress/go-cyber/v7/plugins/types\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/bandwidth/keeper\"\n)\n\ntype Querier struct {\n\t*keeper.BandwidthMeter\n}\n\nfunc NewWasmQuerier(keeper *keeper.BandwidthMeter) *Querier {\n\treturn &Querier{keeper}\n}\n\nfunc (querier *Querier) HandleQuery(ctx sdk.Context, query pluginstypes.CyberQuery) ([]byte, error) {\n\tswitch {\n\tcase query.BandwidthLoad != nil:\n\t\tres, err := querier.BandwidthMeter.Load(ctx, query.BandwidthLoad)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to get bandwidth load\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(res)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to serialize bandwidth load response\")\n\t\t}\n\t\treturn responseBytes, nil\n\n\tcase query.BandwidthPrice != nil:\n\t\tres, err := querier.BandwidthMeter.Price(ctx, query.BandwidthPrice)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to get bandwidth price\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(res)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to serialize bandwidth price response\")\n\t\t}\n\t\treturn responseBytes, nil\n\tcase query.TotalBandwidth != nil:\n\t\tres, err := querier.BandwidthMeter.TotalBandwidth(ctx, query.TotalBandwidth)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to get total bandwidth\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(res)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to serialize total bandwidth response\")\n\t\t}\n\t\treturn responseBytes, nil\n\tcase query.NeuronBandwidth != nil:\n\t\tres, err := querier.BandwidthMeter.NeuronBandwidth(ctx, query.NeuronBandwidth)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to get neuron bandwidth\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(res)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to serialize neuron bandwidth response\")\n\t\t}\n\t\treturn responseBytes, nil\n\tdefault:\n\t\treturn nil, pluginstypes.ErrHandleQuery\n\t}\n}\n"
  },
  {
    "path": "x/clock/README.md",
    "content": "# Clock\n\nThis module allows smart contracts to execute logic at the end of every block without an external bot.\n\n[Clock Spec](./spec/README.md)\n"
  },
  {
    "path": "x/clock/abci.go",
    "content": "package clock\n\nimport (\n\tabci \"github.com/cometbft/cometbft/abci/types\"\n\t\"github.com/cybercongress/go-cyber/v7/app/helpers\"\n\t\"time\"\n\n\t\"github.com/cometbft/cometbft/libs/log\"\n\n\t\"github.com/cosmos/cosmos-sdk/telemetry\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/clock/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/clock/types\"\n)\n\nvar endBlockSudoMessage = []byte(types.EndBlockSudoMessage)\nvar beginBlockSudoMessage = []byte(types.EndBlockSudoMessage)\n\nfunc BeginBlocker(ctx sdk.Context, k keeper.Keeper) {\n\tdefer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyBeginBlocker)\n\tCallContracts(ctx, k, beginBlockSudoMessage)\n}\n\n// EndBlocker executes on contracts at the end of the block.\nfunc EndBlocker(ctx sdk.Context, k keeper.Keeper) []abci.ValidatorUpdate {\n\tdefer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyEndBlocker)\n\tCallContracts(ctx, k, endBlockSudoMessage)\n\n\treturn nil\n}\n\nfunc CallContracts(ctx sdk.Context, k keeper.Keeper, msg []byte) {\n\tlogger := k.Logger(ctx)\n\tp := k.GetParams(ctx)\n\n\t// Get all contracts\n\tcontracts, err := k.GetAllContracts(ctx)\n\tif err != nil {\n\t\tlogger.Error(\"Failed to get contracts\", \"error\", err)\n\t\treturn\n\t}\n\n\t// Track errors\n\terrorExecs := make([]string, len(contracts))\n\terrorExists := false\n\n\t// Execute all contracts that are not jailed\n\tfor idx, contract := range contracts {\n\n\t\t// Skip jailed contracts\n\t\tif contract.IsJailed {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Get sdk.AccAddress from contract address\n\t\tcontractAddr := sdk.MustAccAddressFromBech32(contract.ContractAddress)\n\t\tif handleError(ctx, k, logger, errorExecs, &errorExists, err, idx, contract.ContractAddress, msg) {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Create context with gas limit\n\t\tchildCtx := ctx.WithGasMeter(sdk.NewGasMeter(p.ContractGasLimit))\n\n\t\t// Execute contract\n\t\thelpers.ExecuteContract(k.GetContractKeeper(), childCtx, contractAddr, msg, &err)\n\n\t\tif handleError(ctx, k, logger, errorExecs, &errorExists, err, idx, contract.ContractAddress, msg) {\n\t\t\tcontinue\n\t\t}\n\n\t\tlogger.Info(\n\t\t\t\"abci callback to clock contract\",\n\t\t\t\"type\", string(msg),\n\t\t\t\"cause\", err,\n\t\t\t\"contract-address\", contract.ContractAddress,\n\t\t)\n\t}\n\n\t// Log errors if present\n\tif errorExists {\n\t\tlogger.Error(\"Failed to execute contracts\", \"contracts\", errorExecs)\n\t}\n}\n\n// Function to handle contract execution errors. Returns true if error is present, false otherwise.\nfunc handleError(\n\tctx sdk.Context,\n\tk keeper.Keeper,\n\tlogger log.Logger,\n\terrorExecs []string,\n\terrorExists *bool,\n\terr error,\n\tidx int,\n\tcontractAddress string,\n\tmsg []byte,\n) bool {\n\t// Check if error is present\n\tif err != nil {\n\n\t\t// Flag error\n\t\t*errorExists = true\n\t\terrorExecs[idx] = contractAddress\n\n\t\tlogger.Error(\n\t\t\t\"abci callback to clock contract failed\",\n\t\t\t\"type\", string(msg),\n\t\t\t\"cause\", err,\n\t\t\t\"contract-address\", contractAddress,\n\t\t)\n\n\t\t// Attempt to jail contract, log error if present\n\t\terr := k.SetJailStatus(ctx, contractAddress, true)\n\t\tif err != nil {\n\t\t\tlogger.Error(\"Failed to jail contract\", \"contract\", contractAddress, \"error\", err)\n\t\t}\n\t}\n\n\treturn err != nil\n}\n"
  },
  {
    "path": "x/clock/abci_test.go",
    "content": "package clock_test\n\nimport (\n\t\"crypto/sha256\"\n\t\"encoding/json\"\n\t\"testing\"\n\t\"time\"\n\n\twasmtypes \"github.com/CosmWasm/wasmd/x/wasm/types\"\n\t\"github.com/stretchr/testify/suite\"\n\n\t_ \"embed\"\n\n\ttmproto \"github.com/cometbft/cometbft/proto/tendermint/types\"\n\n\t\"github.com/cosmos/cosmos-sdk/testutil/testdata\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tminttypes \"github.com/cosmos/cosmos-sdk/x/mint/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/app\"\n\tclock \"github.com/cybercongress/go-cyber/v7/x/clock\"\n\t\"github.com/cybercongress/go-cyber/v7/x/clock/types\"\n)\n\ntype EndBlockerTestSuite struct {\n\tsuite.Suite\n\n\tctx sdk.Context\n\n\tapp *app.App\n}\n\nfunc TestEndBlockerTestSuite(t *testing.T) {\n\tsuite.Run(t, new(EndBlockerTestSuite))\n}\n\nfunc (s *EndBlockerTestSuite) SetupTest() {\n\tapp := app.Setup(s.T())\n\tctx := app.BaseApp.NewContext(false, tmproto.Header{\n\t\tChainID: \"testing\",\n\t\tHeight:  10,\n\t\tTime:    time.Now(),\n\t})\n\n\ts.app = app\n\ts.ctx = ctx\n}\n\n//go:embed keeper/testdata/clock_example.wasm\nvar clockContract []byte\n\n//go:embed keeper/testdata/cw_testburn.wasm\nvar burnContract []byte\n\nfunc (s *EndBlockerTestSuite) StoreCode(wasmContract []byte) {\n\t_, _, sender := testdata.KeyTestPubAddr()\n\tmsg := wasmtypes.MsgStoreCodeFixture(func(m *wasmtypes.MsgStoreCode) {\n\t\tm.WASMByteCode = wasmContract\n\t\tm.Sender = sender.String()\n\t})\n\trsp, err := s.app.MsgServiceRouter().Handler(msg)(s.ctx, msg)\n\ts.Require().NoError(err)\n\tvar result wasmtypes.MsgStoreCodeResponse\n\ts.Require().NoError(s.app.AppCodec().Unmarshal(rsp.Data, &result))\n\ts.Require().Equal(uint64(1), result.CodeID)\n\texpHash := sha256.Sum256(wasmContract)\n\ts.Require().Equal(expHash[:], result.Checksum)\n\t// and\n\tinfo := s.app.AppKeepers.WasmKeeper.GetCodeInfo(s.ctx, 1)\n\ts.Require().NotNil(info)\n\ts.Require().Equal(expHash[:], info.CodeHash)\n\ts.Require().Equal(sender.String(), info.Creator)\n\ts.Require().Equal(wasmtypes.DefaultParams().InstantiateDefaultPermission.With(sender), info.InstantiateConfig)\n}\n\nfunc (s *EndBlockerTestSuite) InstantiateContract(sender string, admin string) string {\n\tmsgStoreCode := wasmtypes.MsgStoreCodeFixture(func(m *wasmtypes.MsgStoreCode) {\n\t\tm.WASMByteCode = clockContract\n\t\tm.Sender = sender\n\t})\n\t_, err := s.app.MsgServiceRouter().Handler(msgStoreCode)(s.ctx, msgStoreCode)\n\ts.Require().NoError(err)\n\n\tmsgInstantiate := wasmtypes.MsgInstantiateContractFixture(func(m *wasmtypes.MsgInstantiateContract) {\n\t\tm.Sender = sender\n\t\tm.Admin = admin\n\t\tm.Msg = []byte(`{}`)\n\t})\n\tresp, err := s.app.MsgServiceRouter().Handler(msgInstantiate)(s.ctx, msgInstantiate)\n\ts.Require().NoError(err)\n\tvar result wasmtypes.MsgInstantiateContractResponse\n\ts.Require().NoError(s.app.AppCodec().Unmarshal(resp.Data, &result))\n\tcontractInfo := s.app.AppKeepers.WasmKeeper.GetContractInfo(s.ctx, sdk.MustAccAddressFromBech32(result.Address))\n\ts.Require().Equal(contractInfo.CodeID, uint64(1))\n\ts.Require().Equal(contractInfo.Admin, admin)\n\ts.Require().Equal(contractInfo.Creator, sender)\n\n\treturn result.Address\n}\n\nfunc (s *EndBlockerTestSuite) FundAccount(ctx sdk.Context, addr sdk.AccAddress, amounts sdk.Coins) error {\n\tif err := s.app.AppKeepers.BankKeeper.MintCoins(ctx, minttypes.ModuleName, amounts); err != nil {\n\t\treturn err\n\t}\n\n\treturn s.app.AppKeepers.BankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, addr, amounts)\n}\n\n// Register a contract. You must store the contract code before registering.\nfunc (s *EndBlockerTestSuite) registerContract() string {\n\t// Create & fund accounts\n\t_, _, sender := testdata.KeyTestPubAddr()\n\t_, _, admin := testdata.KeyTestPubAddr()\n\t_ = s.FundAccount(s.ctx, sender, sdk.NewCoins(sdk.NewCoin(\"stake\", sdk.NewInt(1_000_000))))\n\t_ = s.FundAccount(s.ctx, admin, sdk.NewCoins(sdk.NewCoin(\"stake\", sdk.NewInt(1_000_000))))\n\n\t// Instantiate contract\n\tcontractAddress := s.InstantiateContract(sender.String(), admin.String())\n\n\t// Register contract\n\tclockKeeper := s.app.AppKeepers.ClockKeeper\n\terr := clockKeeper.RegisterContract(s.ctx, admin.String(), contractAddress)\n\ts.Require().NoError(err)\n\n\t// Assert contract is registered\n\tcontract, err := clockKeeper.GetClockContract(s.ctx, contractAddress)\n\ts.Require().NoError(err)\n\ts.Require().Equal(contractAddress, contract.ContractAddress)\n\n\t// Increment block height\n\ts.ctx = s.ctx.WithBlockHeight(11)\n\n\treturn contract.ContractAddress\n}\n\n// Test the end blocker. This test registers a contract, executes it with enough gas,\n// too little gas, and also ensures the unjailing process functions.\nfunc (s *EndBlockerTestSuite) TestEndBlocker() {\n\t// Setup test\n\tclockKeeper := s.app.AppKeepers.ClockKeeper\n\ts.StoreCode(clockContract)\n\tcontractAddress := s.registerContract()\n\n\t// Query contract\n\tval := s.queryContract(contractAddress)\n\ts.Require().Equal(int64(0), val)\n\n\t// Call end blocker\n\ts.callEndBlocker()\n\n\t// Query contract\n\tval = s.queryContract(contractAddress)\n\ts.Require().Equal(int64(1), val)\n\n\t// Update params with 10 gas limit\n\ts.updateGasLimit(65_000)\n\n\t// Call end blocker\n\ts.callEndBlocker()\n\n\t// Ensure contract is now jailed\n\tcontract, err := clockKeeper.GetClockContract(s.ctx, contractAddress)\n\ts.Require().NoError(err)\n\ts.Require().True(contract.IsJailed)\n\n\t// Update params to regular\n\ts.updateGasLimit(types.DefaultParams().ContractGasLimit)\n\n\t// Call end blocker\n\ts.callEndBlocker()\n\n\t// Unjail contract\n\terr = clockKeeper.SetJailStatus(s.ctx, contractAddress, false)\n\ts.Require().NoError(err)\n\n\t// Ensure contract is no longer jailed\n\tcontract, err = clockKeeper.GetClockContract(s.ctx, contractAddress)\n\ts.Require().NoError(err)\n\ts.Require().False(contract.IsJailed)\n\n\t// Call end blocker\n\ts.callEndBlocker()\n\n\t// Query contract\n\tval = s.queryContract(contractAddress)\n\ts.Require().Equal(int64(2), val)\n}\n\n// Test a contract which does not handle the sudo EndBlock msg.\nfunc (s *EndBlockerTestSuite) TestInvalidContract() {\n\t// Setup test\n\tclockKeeper := s.app.AppKeepers.ClockKeeper\n\ts.StoreCode(burnContract)\n\tcontractAddress := s.registerContract()\n\n\t// Run the end blocker\n\ts.callEndBlocker()\n\n\t// Ensure contract is now jailed\n\tcontract, err := clockKeeper.GetClockContract(s.ctx, contractAddress)\n\ts.Require().NoError(err)\n\ts.Require().True(contract.IsJailed)\n}\n\n// Test the endblocker with numerous contracts that all panic\nfunc (s *EndBlockerTestSuite) TestPerformance() {\n\ts.StoreCode(burnContract)\n\n\tnumContracts := 1000\n\n\t// Register numerous contracts\n\tfor x := 0; x < numContracts; x++ {\n\t\t// Register contract\n\t\t_ = s.registerContract()\n\t}\n\n\t// Ensure contracts exist\n\tclockKeeper := s.app.AppKeepers.ClockKeeper\n\tcontracts, err := clockKeeper.GetAllContracts(s.ctx)\n\ts.Require().NoError(err)\n\ts.Require().Len(contracts, numContracts)\n\n\t// Call end blocker\n\ts.callEndBlocker()\n\n\t// Ensure contracts are jailed\n\tcontracts, err = clockKeeper.GetAllContracts(s.ctx)\n\ts.Require().NoError(err)\n\tfor _, contract := range contracts {\n\t\ts.Require().True(contract.IsJailed)\n\t}\n}\n\n// Update the gas limit\nfunc (s *EndBlockerTestSuite) updateGasLimit(gasLimit uint64) {\n\tparams := types.DefaultParams()\n\tparams.ContractGasLimit = gasLimit\n\tk := s.app.AppKeepers.ClockKeeper\n\n\tstore := s.ctx.KVStore(k.GetStore())\n\tbz := k.GetCdc().MustMarshal(&params)\n\tstore.Set(types.ParamsKey, bz)\n\n\ts.ctx = s.ctx.WithBlockHeight(s.ctx.BlockHeight() + 1)\n}\n\n// Call the end blocker, incrementing the block height\nfunc (s *EndBlockerTestSuite) callEndBlocker() {\n\tclock.EndBlocker(s.ctx, s.app.AppKeepers.ClockKeeper)\n\ts.ctx = s.ctx.WithBlockHeight(s.ctx.BlockHeight() + 1)\n}\n\n// Query the clock contract\nfunc (s *EndBlockerTestSuite) queryContract(contractAddress string) int64 {\n\tquery := `{\"get_config\":{}}`\n\toutput, err := s.app.AppKeepers.WasmKeeper.QuerySmart(s.ctx, sdk.MustAccAddressFromBech32(contractAddress), []byte(query))\n\ts.Require().NoError(err)\n\n\tvar val struct {\n\t\tVal int64 `json:\"val\"`\n\t}\n\n\terr = json.Unmarshal(output, &val)\n\ts.Require().NoError(err)\n\n\treturn val.Val\n}\n"
  },
  {
    "path": "x/clock/client/cli/query.go",
    "content": "package cli\n\nimport (\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/cosmos/cosmos-sdk/client/flags\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/clock/types\"\n)\n\nfunc GetQueryCmd() *cobra.Command {\n\tqueryCmd := &cobra.Command{\n\t\tUse:                        types.ModuleName,\n\t\tShort:                      \"Querying commands for clock modules\",\n\t\tDisableFlagParsing:         true,\n\t\tSuggestionsMinimumDistance: 2,\n\t\tRunE:                       client.ValidateCmd,\n\t}\n\tqueryCmd.AddCommand(\n\t\tGetCmdShowContracts(),\n\t\tGetCmdShowContract(),\n\t\tGetCmdParams(),\n\t)\n\treturn queryCmd\n}\n\nfunc GetCmdShowContracts() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"contracts\",\n\t\tShort: \"Show addresses of all current clock contracts\",\n\t\tArgs:  cobra.ExactArgs(0),\n\t\tRunE: func(cmd *cobra.Command, _ []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tpageReq, err := client.ReadPageRequest(cmd.Flags())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tres, err := queryClient.ClockContracts(cmd.Context(), &types.QueryClockContracts{\n\t\t\t\tPagination: pageReq,\n\t\t\t})\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\tflags.AddQueryFlagsToCmd(cmd)\n\tflags.AddPaginationFlagsToCmd(cmd, \"contracts\")\n\treturn cmd\n}\n\nfunc GetCmdShowContract() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"contract [contract_address]\",\n\t\tShort: \"Get contract by address\",\n\t\tArgs:  cobra.ExactArgs(1),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\treq := &types.QueryClockContract{\n\t\t\t\tContractAddress: args[0],\n\t\t\t}\n\n\t\t\tres, err := queryClient.ClockContract(cmd.Context(), req)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\tflags.AddQueryFlagsToCmd(cmd)\n\treturn cmd\n}\n\nfunc GetCmdParams() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"params\",\n\t\tShort: \"Show all module params\",\n\t\tArgs:  cobra.ExactArgs(0),\n\t\tRunE: func(cmd *cobra.Command, _ []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\t\t\tres, err := queryClient.Params(cmd.Context(), &types.QueryParamsRequest{})\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\tflags.AddQueryFlagsToCmd(cmd)\n\treturn cmd\n}\n"
  },
  {
    "path": "x/clock/client/cli/tx.go",
    "content": "package cli\n\nimport (\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/cosmos/cosmos-sdk/client/flags\"\n\t\"github.com/cosmos/cosmos-sdk/client/tx\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/clock/types\"\n)\n\n// NewTxCmd returns a root CLI command handler for certain modules/Clock\n// transaction commands.\nfunc NewTxCmd() *cobra.Command {\n\ttxCmd := &cobra.Command{\n\t\tUse:                        types.ModuleName,\n\t\tShort:                      \"Clock subcommands.\",\n\t\tDisableFlagParsing:         true,\n\t\tSuggestionsMinimumDistance: 2,\n\t\tRunE:                       client.ValidateCmd,\n\t}\n\n\ttxCmd.AddCommand(\n\t\tNewRegisterClockContract(),\n\t\tNewUnregisterClockContract(),\n\t\tNewUnjailClockContract(),\n\t)\n\treturn txCmd\n}\n\n// NewRegisterClockContract returns a CLI command handler for registering a\n// contract for the clock module.\nfunc NewRegisterClockContract() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"register [contract_bech32]\",\n\t\tShort: \"Register a clock contract.\",\n\t\tLong:  \"Register a clock contract. Sender must be admin of the contract.\",\n\t\tArgs:  cobra.ExactArgs(1),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tcliCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tsenderAddress := cliCtx.GetFromAddress()\n\t\t\tcontractAddress := args[0]\n\n\t\t\tmsg := &types.MsgRegisterClockContract{\n\t\t\t\tSenderAddress:   senderAddress.String(),\n\t\t\t\tContractAddress: contractAddress,\n\t\t\t}\n\n\t\t\tif err := msg.ValidateBasic(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn tx.GenerateOrBroadcastTxCLI(cliCtx, cmd.Flags(), msg)\n\t\t},\n\t}\n\n\tflags.AddTxFlagsToCmd(cmd)\n\treturn cmd\n}\n\n// NewUnregisterClockContract returns a CLI command handler for unregistering a\n// contract for the clock module.\nfunc NewUnregisterClockContract() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"unregister [contract_bech32]\",\n\t\tShort: \"Unregister a clock contract.\",\n\t\tLong:  \"Unregister a clock contract. Sender must be admin of the contract.\",\n\t\tArgs:  cobra.ExactArgs(1),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tcliCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tsenderAddress := cliCtx.GetFromAddress()\n\t\t\tcontractAddress := args[0]\n\n\t\t\tmsg := &types.MsgUnregisterClockContract{\n\t\t\t\tSenderAddress:   senderAddress.String(),\n\t\t\t\tContractAddress: contractAddress,\n\t\t\t}\n\n\t\t\tif err := msg.ValidateBasic(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn tx.GenerateOrBroadcastTxCLI(cliCtx, cmd.Flags(), msg)\n\t\t},\n\t}\n\n\tflags.AddTxFlagsToCmd(cmd)\n\treturn cmd\n}\n\n// NewUnjailClockContract returns a CLI command handler for unjailing a\n// contract for the clock module.\nfunc NewUnjailClockContract() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"unjail [contract_bech32]\",\n\t\tShort: \"Unjail a clock contract.\",\n\t\tLong:  \"Unjail a clock contract. Sender must be admin of the contract.\",\n\t\tArgs:  cobra.ExactArgs(1),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tcliCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tsenderAddress := cliCtx.GetFromAddress()\n\t\t\tcontractAddress := args[0]\n\n\t\t\tmsg := &types.MsgUnjailClockContract{\n\t\t\t\tSenderAddress:   senderAddress.String(),\n\t\t\t\tContractAddress: contractAddress,\n\t\t\t}\n\n\t\t\tif err := msg.ValidateBasic(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn tx.GenerateOrBroadcastTxCLI(cliCtx, cmd.Flags(), msg)\n\t\t},\n\t}\n\n\tflags.AddTxFlagsToCmd(cmd)\n\treturn cmd\n}\n"
  },
  {
    "path": "x/clock/genesis.go",
    "content": "package clock\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/clock/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/clock/types\"\n)\n\n// NewGenesisState - Create a new genesis state\nfunc NewGenesisState(params types.Params) *types.GenesisState {\n\treturn &types.GenesisState{\n\t\tParams: params,\n\t}\n}\n\n// DefaultGenesisState - Return a default genesis state\nfunc DefaultGenesisState() *types.GenesisState {\n\treturn NewGenesisState(types.DefaultParams())\n}\n\n// GetGenesisStateFromAppState returns x/auth GenesisState given raw application\n// genesis state.\nfunc GetGenesisStateFromAppState(cdc codec.Codec, appState map[string]json.RawMessage) *types.GenesisState {\n\tvar genesisState types.GenesisState\n\n\tif appState[ModuleName] != nil {\n\t\tcdc.MustUnmarshalJSON(appState[ModuleName], &genesisState)\n\t}\n\n\treturn &genesisState\n}\n\nfunc ValidateGenesis(data types.GenesisState) error {\n\terr := data.Params.Validate()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\n// InitGenesis import module genesis\nfunc InitGenesis(\n\tctx sdk.Context,\n\tk keeper.Keeper,\n\tdata types.GenesisState,\n) {\n\t// Validate init contents\n\tif err := ValidateGenesis(data); err != nil {\n\t\tpanic(err)\n\t}\n\n\t// Set params\n\tif err := k.SetParams(ctx, data.Params); err != nil {\n\t\tpanic(err)\n\t}\n}\n\n// ExportGenesis export module state\nfunc ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState {\n\tparams := k.GetParams(ctx)\n\n\treturn &types.GenesisState{\n\t\tParams: params,\n\t}\n}\n"
  },
  {
    "path": "x/clock/genesis_test.go",
    "content": "package clock_test\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/suite\"\n\n\ttmproto \"github.com/cometbft/cometbft/proto/tendermint/types\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/app\"\n\tclock \"github.com/cybercongress/go-cyber/v7/x/clock\"\n\t\"github.com/cybercongress/go-cyber/v7/x/clock/types\"\n)\n\ntype GenesisTestSuite struct {\n\tsuite.Suite\n\n\tctx sdk.Context\n\n\tapp *app.App\n}\n\nfunc TestGenesisTestSuite(t *testing.T) {\n\tsuite.Run(t, new(GenesisTestSuite))\n}\n\nfunc (suite *GenesisTestSuite) SetupTest() {\n\tapp := app.Setup(suite.T())\n\tctx := app.BaseApp.NewContext(false, tmproto.Header{\n\t\tChainID: \"testing\",\n\t})\n\n\tsuite.app = app\n\tsuite.ctx = ctx\n}\n\nfunc (suite *GenesisTestSuite) TestClockInitGenesis() {\n\ttestCases := []struct {\n\t\tname    string\n\t\tgenesis types.GenesisState\n\t\tsuccess bool\n\t}{\n\t\t{\n\t\t\t\"Success - Default Genesis\",\n\t\t\t*clock.DefaultGenesisState(),\n\t\t\ttrue,\n\t\t},\n\t\t{\n\t\t\t\"Success - Custom Genesis\",\n\t\t\ttypes.GenesisState{\n\t\t\t\tParams: types.Params{\n\t\t\t\t\tContractGasLimit: 500_000,\n\t\t\t\t},\n\t\t\t},\n\t\t\ttrue,\n\t\t},\n\t\t{\n\t\t\t\"Fail - Invalid Gas Amount\",\n\t\t\ttypes.GenesisState{\n\t\t\t\tParams: types.Params{\n\t\t\t\t\tContractGasLimit: 1,\n\t\t\t\t},\n\t\t\t},\n\t\t\tfalse,\n\t\t},\n\t}\n\n\tfor _, tc := range testCases {\n\t\tsuite.Run(fmt.Sprintf(\"Case %s\", tc.name), func() {\n\t\t\tsuite.SetupTest() // reset\n\n\t\t\tif tc.success {\n\t\t\t\tsuite.Require().NotPanics(func() {\n\t\t\t\t\tclock.InitGenesis(suite.ctx, suite.app.AppKeepers.ClockKeeper, tc.genesis)\n\t\t\t\t})\n\n\t\t\t\tparams := suite.app.AppKeepers.ClockKeeper.GetParams(suite.ctx)\n\t\t\t\tsuite.Require().Equal(tc.genesis.Params, params)\n\t\t\t} else {\n\t\t\t\tsuite.Require().Panics(func() {\n\t\t\t\t\tclock.InitGenesis(suite.ctx, suite.app.AppKeepers.ClockKeeper, tc.genesis)\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "x/clock/keeper/clock.go",
    "content": "package keeper\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/store/prefix\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/query\"\n\n\tglobalerrors \"github.com/cybercongress/go-cyber/v7/app/helpers\"\n\t\"github.com/cybercongress/go-cyber/v7/x/clock/types\"\n)\n\n// Store Keys for clock contracts (both jailed and unjailed)\nvar (\n\tStoreKeyContracts = []byte(\"contracts\")\n)\n\n// Get the store for the clock contracts.\nfunc (k Keeper) getContractsStore(ctx sdk.Context) prefix.Store {\n\treturn prefix.NewStore(ctx.KVStore(k.storeKey), StoreKeyContracts)\n}\n\n// Set a clock contract address in the KV store.\nfunc (k Keeper) SetClockContract(ctx sdk.Context, contract types.ClockContract) error {\n\t// Get store, marshal content\n\tstore := k.getContractsStore(ctx)\n\tbz, err := k.cdc.Marshal(&contract)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Set the contract\n\tstore.Set([]byte(contract.ContractAddress), bz)\n\treturn nil\n}\n\n// Check if a clock contract address is in the KV store.\nfunc (k Keeper) IsClockContract(ctx sdk.Context, contractAddress string) bool {\n\tstore := k.getContractsStore(ctx)\n\treturn store.Has([]byte(contractAddress))\n}\n\n// Get a clock contract address from the KV store.\nfunc (k Keeper) GetClockContract(ctx sdk.Context, contractAddress string) (*types.ClockContract, error) {\n\t// Check if the contract is registered\n\tif !k.IsClockContract(ctx, contractAddress) {\n\t\treturn nil, globalerrors.ErrContractNotRegistered\n\t}\n\n\t// Get the KV store\n\tstore := k.getContractsStore(ctx)\n\tbz := store.Get([]byte(contractAddress))\n\n\t// Unmarshal the contract\n\tvar contract types.ClockContract\n\terr := k.cdc.Unmarshal(bz, &contract)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Return the contract\n\treturn &contract, nil\n}\n\n// Get all clock contract addresses from the KV store.\nfunc (k Keeper) GetAllContracts(ctx sdk.Context) ([]types.ClockContract, error) {\n\t// Get the KV store\n\tstore := k.getContractsStore(ctx)\n\n\t// Create iterator for contracts\n\titerator := sdk.KVStorePrefixIterator(store, []byte(nil))\n\tdefer iterator.Close()\n\n\t// Iterate over all contracts\n\tcontracts := []types.ClockContract{}\n\tfor ; iterator.Valid(); iterator.Next() {\n\n\t\t// Unmarshal iterator\n\t\tvar contract types.ClockContract\n\t\terr := k.cdc.Unmarshal(iterator.Value(), &contract)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tcontracts = append(contracts, contract)\n\t}\n\n\t// Return array of contracts\n\treturn contracts, nil\n}\n\n// Get all registered fee pay contracts\nfunc (k Keeper) GetPaginatedContracts(ctx sdk.Context, pag *query.PageRequest) (*types.QueryClockContractsResponse, error) {\n\tstore := k.getContractsStore(ctx)\n\n\t// Filter and paginate all contracts\n\tresults, pageRes, err := query.GenericFilteredPaginate(\n\t\tk.cdc,\n\t\tstore,\n\t\tpag,\n\t\tfunc(_ []byte, value *types.ClockContract) (*types.ClockContract, error) {\n\t\t\treturn value, nil\n\t\t},\n\t\tfunc() *types.ClockContract {\n\t\t\treturn &types.ClockContract{}\n\t\t},\n\t)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Dereference pointer array of contracts\n\tvar contracts []types.ClockContract\n\tfor _, contract := range results {\n\t\tcontracts = append(contracts, *contract)\n\t}\n\n\t// Return paginated contracts\n\treturn &types.QueryClockContractsResponse{\n\t\tClockContracts: contracts,\n\t\tPagination:     pageRes,\n\t}, nil\n}\n\n// Remove a clock contract address from the KV store.\nfunc (k Keeper) RemoveContract(ctx sdk.Context, contractAddress string) {\n\tstore := k.getContractsStore(ctx)\n\tkey := []byte(contractAddress)\n\n\tif store.Has(key) {\n\t\tstore.Delete(key)\n\t}\n}\n\n// Register a clock contract address in the KV store.\nfunc (k Keeper) RegisterContract(ctx sdk.Context, senderAddress string, contractAddress string) error {\n\t// Check if the contract is already registered\n\tif k.IsClockContract(ctx, contractAddress) {\n\t\treturn globalerrors.ErrContractAlreadyRegistered\n\t}\n\n\t// Ensure the sender is the contract admin or creator\n\tif ok, err := k.IsContractManager(ctx, senderAddress, contractAddress); !ok {\n\t\treturn err\n\t}\n\n\t// Register contract\n\treturn k.SetClockContract(ctx, types.ClockContract{\n\t\tContractAddress: contractAddress,\n\t\tIsJailed:        false,\n\t})\n}\n\n// Unregister a clock contract from either the jailed or unjailed KV store.\nfunc (k Keeper) UnregisterContract(ctx sdk.Context, senderAddress string, contractAddress string) error {\n\t// Check if the contract is registered in either store\n\tif !k.IsClockContract(ctx, contractAddress) {\n\t\treturn globalerrors.ErrContractNotRegistered\n\t}\n\n\t// Ensure the sender is the contract admin or creator\n\tif ok, err := k.IsContractManager(ctx, senderAddress, contractAddress); !ok {\n\t\treturn err\n\t}\n\n\t// Remove contract from both stores\n\tk.RemoveContract(ctx, contractAddress)\n\treturn nil\n}\n\n// Set the jail status of a clock contract in the KV store.\nfunc (k Keeper) SetJailStatus(ctx sdk.Context, contractAddress string, isJailed bool) error {\n\t// Get the contract\n\tcontract, err := k.GetClockContract(ctx, contractAddress)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Check if the contract is already jailed or unjailed\n\tif contract.IsJailed == isJailed {\n\t\tif isJailed {\n\t\t\treturn types.ErrContractAlreadyJailed\n\t\t}\n\n\t\treturn types.ErrContractNotJailed\n\t}\n\n\t// Set the jail status\n\tcontract.IsJailed = isJailed\n\n\t// Set the contract\n\treturn k.SetClockContract(ctx, *contract)\n}\n\n// Set the jail status of a clock contract by the sender address.\nfunc (k Keeper) SetJailStatusBySender(ctx sdk.Context, senderAddress string, contractAddress string, jailStatus bool) error {\n\t// Ensure the sender is the contract admin or creator\n\tif ok, err := k.IsContractManager(ctx, senderAddress, contractAddress); !ok {\n\t\treturn err\n\t}\n\n\treturn k.SetJailStatus(ctx, contractAddress, jailStatus)\n}\n\n// Check if the sender is the designated contract manager for the FeePay contract. If\n// an admin is present, they are considered the manager. If there is no admin, the\n// contract creator is considered the manager.\nfunc (k Keeper) IsContractManager(ctx sdk.Context, senderAddress string, contractAddress string) (bool, error) {\n\tcontractAddr := sdk.MustAccAddressFromBech32(contractAddress)\n\n\t// Ensure the contract is a cosm wasm contract\n\tif ok := k.wasmKeeper.HasContractInfo(ctx, contractAddr); !ok {\n\t\treturn false, globalerrors.ErrInvalidCWContract\n\t}\n\n\t// Get the contract info\n\tcontractInfo := k.wasmKeeper.GetContractInfo(ctx, contractAddr)\n\n\t// Flags for admin existence & sender being admin/creator\n\tadminExists := len(contractInfo.Admin) > 0\n\tisSenderAdmin := contractInfo.Admin == senderAddress\n\tisSenderCreator := contractInfo.Creator == senderAddress\n\n\t// Check if the sender is the admin or creator\n\tif adminExists && !isSenderAdmin {\n\t\treturn false, globalerrors.ErrContractNotAdmin\n\t} else if !adminExists && !isSenderCreator {\n\t\treturn false, globalerrors.ErrContractNotCreator\n\t}\n\n\treturn true, nil\n}\n"
  },
  {
    "path": "x/clock/keeper/keeper.go",
    "content": "package keeper\n\nimport (\n\twasmkeeper \"github.com/CosmWasm/wasmd/x/wasm/keeper\"\n\twasmtypes \"github.com/CosmWasm/wasmd/x/wasm/types\"\n\n\t\"github.com/cometbft/cometbft/libs/log\"\n\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tstoretypes \"github.com/cosmos/cosmos-sdk/store/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/clock/types\"\n)\n\n// Keeper of the clock store\ntype Keeper struct {\n\tstoreKey storetypes.StoreKey\n\tcdc      codec.BinaryCodec\n\n\twasmKeeper     wasmkeeper.Keeper\n\tcontractKeeper wasmtypes.ContractOpsKeeper\n\n\tauthority string\n}\n\nfunc NewKeeper(\n\tkey storetypes.StoreKey,\n\tcdc codec.BinaryCodec,\n\twasmKeeper wasmkeeper.Keeper,\n\tcontractKeeper wasmtypes.ContractOpsKeeper,\n\tauthority string,\n) Keeper {\n\treturn Keeper{\n\t\tcdc:            cdc,\n\t\tstoreKey:       key,\n\t\twasmKeeper:     wasmKeeper,\n\t\tcontractKeeper: contractKeeper,\n\t\tauthority:      authority,\n\t}\n}\n\n// Logger returns a module-specific logger.\nfunc (k Keeper) Logger(ctx sdk.Context) log.Logger {\n\treturn ctx.Logger().With(\"module\", \"x/\"+types.ModuleName)\n}\n\n// GetAuthority returns the x/clock module's authority.\nfunc (k Keeper) GetAuthority() string {\n\treturn k.authority\n}\n\n// SetParams sets the x/clock module parameters.\nfunc (k Keeper) SetParams(ctx sdk.Context, p types.Params) error {\n\tif err := p.Validate(); err != nil {\n\t\treturn err\n\t}\n\n\tstore := ctx.KVStore(k.storeKey)\n\tbz := k.cdc.MustMarshal(&p)\n\tstore.Set(types.ParamsKey, bz)\n\n\treturn nil\n}\n\n// GetParams returns the current x/clock module parameters.\nfunc (k Keeper) GetParams(ctx sdk.Context) (p types.Params) {\n\tstore := ctx.KVStore(k.storeKey)\n\tbz := store.Get(types.ParamsKey)\n\tif bz == nil {\n\t\treturn p\n\t}\n\n\tk.cdc.MustUnmarshal(bz, &p)\n\treturn p\n}\n\n// GetContractKeeper returns the x/wasm module's contract keeper.\nfunc (k Keeper) GetContractKeeper() wasmtypes.ContractOpsKeeper {\n\treturn k.contractKeeper\n}\n\n// GetCdc returns the x/clock module's codec.\nfunc (k Keeper) GetCdc() codec.BinaryCodec {\n\treturn k.cdc\n}\n\n// GetStore returns the x/clock module's store key.\nfunc (k Keeper) GetStore() storetypes.StoreKey {\n\treturn k.storeKey\n}\n"
  },
  {
    "path": "x/clock/keeper/keeper_test.go",
    "content": "package keeper_test\n\nimport (\n\t\"crypto/sha256\"\n\t\"testing\"\n\t\"time\"\n\n\twasmtypes \"github.com/CosmWasm/wasmd/x/wasm/types\"\n\t\"github.com/stretchr/testify/suite\"\n\n\t_ \"embed\"\n\n\ttmproto \"github.com/cometbft/cometbft/proto/tendermint/types\"\n\n\t\"github.com/cosmos/cosmos-sdk/baseapp\"\n\t\"github.com/cosmos/cosmos-sdk/testutil/testdata\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tbankkeeper \"github.com/cosmos/cosmos-sdk/x/bank/keeper\"\n\tminttypes \"github.com/cosmos/cosmos-sdk/x/mint/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/app\"\n\t\"github.com/cybercongress/go-cyber/v7/x/clock/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/clock/types\"\n)\n\ntype IntegrationTestSuite struct {\n\tsuite.Suite\n\n\tctx            sdk.Context\n\tapp            *app.App\n\tbankKeeper     bankkeeper.Keeper\n\tqueryClient    types.QueryClient\n\tclockMsgServer types.MsgServer\n}\n\nfunc (s *IntegrationTestSuite) SetupTest() {\n\tisCheckTx := false\n\ts.app = app.Setup(s.T())\n\n\ts.ctx = s.app.BaseApp.NewContext(isCheckTx, tmproto.Header{\n\t\tChainID: \"testing\",\n\t\tHeight:  1,\n\t\tTime:    time.Now().UTC(),\n\t})\n\n\tqueryHelper := baseapp.NewQueryServerTestHelper(s.ctx, s.app.InterfaceRegistry())\n\ttypes.RegisterQueryServer(queryHelper, keeper.NewQuerier(s.app.AppKeepers.ClockKeeper))\n\n\ts.queryClient = types.NewQueryClient(queryHelper)\n\ts.bankKeeper = s.app.AppKeepers.BankKeeper\n\ts.clockMsgServer = keeper.NewMsgServerImpl(s.app.AppKeepers.ClockKeeper)\n}\n\nfunc (s *IntegrationTestSuite) FundAccount(ctx sdk.Context, addr sdk.AccAddress, amounts sdk.Coins) error {\n\tif err := s.bankKeeper.MintCoins(ctx, minttypes.ModuleName, amounts); err != nil {\n\t\treturn err\n\t}\n\n\treturn s.bankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, addr, amounts)\n}\n\nfunc TestKeeperTestSuite(t *testing.T) {\n\tsuite.Run(t, new(IntegrationTestSuite))\n}\n\n//go:embed testdata/clock_example.wasm\nvar wasmContract []byte\n\nfunc (s *IntegrationTestSuite) StoreCode() {\n\t_, _, sender := testdata.KeyTestPubAddr()\n\tmsg := wasmtypes.MsgStoreCodeFixture(func(m *wasmtypes.MsgStoreCode) {\n\t\tm.WASMByteCode = wasmContract\n\t\tm.Sender = sender.String()\n\t})\n\trsp, err := s.app.MsgServiceRouter().Handler(msg)(s.ctx, msg)\n\ts.Require().NoError(err)\n\tvar result wasmtypes.MsgStoreCodeResponse\n\ts.Require().NoError(s.app.AppCodec().Unmarshal(rsp.Data, &result))\n\ts.Require().Equal(uint64(1), result.CodeID)\n\texpHash := sha256.Sum256(wasmContract)\n\ts.Require().Equal(expHash[:], result.Checksum)\n\t// and\n\tinfo := s.app.AppKeepers.WasmKeeper.GetCodeInfo(s.ctx, 1)\n\ts.Require().NotNil(info)\n\ts.Require().Equal(expHash[:], info.CodeHash)\n\ts.Require().Equal(sender.String(), info.Creator)\n\ts.Require().Equal(wasmtypes.DefaultParams().InstantiateDefaultPermission.With(sender), info.InstantiateConfig)\n}\n\nfunc (s *IntegrationTestSuite) InstantiateContract(sender string, admin string) string {\n\tmsgStoreCode := wasmtypes.MsgStoreCodeFixture(func(m *wasmtypes.MsgStoreCode) {\n\t\tm.WASMByteCode = wasmContract\n\t\tm.Sender = sender\n\t})\n\t_, err := s.app.MsgServiceRouter().Handler(msgStoreCode)(s.ctx, msgStoreCode)\n\ts.Require().NoError(err)\n\n\tmsgInstantiate := wasmtypes.MsgInstantiateContractFixture(func(m *wasmtypes.MsgInstantiateContract) {\n\t\tm.Sender = sender\n\t\tm.Admin = admin\n\t\tm.Msg = []byte(`{}`)\n\t})\n\tresp, err := s.app.MsgServiceRouter().Handler(msgInstantiate)(s.ctx, msgInstantiate)\n\ts.Require().NoError(err)\n\tvar result wasmtypes.MsgInstantiateContractResponse\n\ts.Require().NoError(s.app.AppCodec().Unmarshal(resp.Data, &result))\n\tcontractInfo := s.app.AppKeepers.WasmKeeper.GetContractInfo(s.ctx, sdk.MustAccAddressFromBech32(result.Address))\n\ts.Require().Equal(contractInfo.CodeID, uint64(1))\n\ts.Require().Equal(contractInfo.Admin, admin)\n\ts.Require().Equal(contractInfo.Creator, sender)\n\n\treturn result.Address\n}\n\n// Helper method for quickly registering a clock contract\nfunc (s *IntegrationTestSuite) RegisterClockContract(senderAddress string, contractAddress string) {\n\terr := s.app.AppKeepers.ClockKeeper.RegisterContract(s.ctx, senderAddress, contractAddress)\n\ts.Require().NoError(err)\n}\n\n// Helper method for quickly unregistering a clock contract\nfunc (s *IntegrationTestSuite) UnregisterClockContract(senderAddress string, contractAddress string) {\n\terr := s.app.AppKeepers.ClockKeeper.UnregisterContract(s.ctx, senderAddress, contractAddress)\n\ts.Require().NoError(err)\n}\n\n// Helper method for quickly jailing a clock contract\nfunc (s *IntegrationTestSuite) JailClockContract(contractAddress string) {\n\terr := s.app.AppKeepers.ClockKeeper.SetJailStatus(s.ctx, contractAddress, true)\n\ts.Require().NoError(err)\n}\n\n// Helper method for quickly unjailing a clock contract\nfunc (s *IntegrationTestSuite) UnjailClockContract(senderAddress string, contractAddress string) {\n\terr := s.app.AppKeepers.ClockKeeper.SetJailStatusBySender(s.ctx, senderAddress, contractAddress, false)\n\ts.Require().NoError(err)\n}\n"
  },
  {
    "path": "x/clock/keeper/msg_server.go",
    "content": "package keeper\n\nimport (\n\t\"context\"\n\n\terrorsmod \"cosmossdk.io/errors\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tgovtypes \"github.com/cosmos/cosmos-sdk/x/gov/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/clock/types\"\n)\n\nvar _ types.MsgServer = &msgServer{}\n\n// msgServer is a wrapper of Keeper.\ntype msgServer struct {\n\tKeeper\n}\n\n// NewMsgServerImpl returns an implementation of the x/clock MsgServer interface.\nfunc NewMsgServerImpl(k Keeper) types.MsgServer {\n\treturn &msgServer{\n\t\tKeeper: k,\n\t}\n}\n\n// RegisterClockContract handles incoming transactions to register clock contracts.\nfunc (k msgServer) RegisterClockContract(goCtx context.Context, req *types.MsgRegisterClockContract) (*types.MsgRegisterClockContractResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\t// Validate request\n\tif err := req.ValidateBasic(); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &types.MsgRegisterClockContractResponse{}, k.RegisterContract(ctx, req.SenderAddress, req.ContractAddress)\n}\n\n// UnregisterClockContract handles incoming transactions to unregister clock contracts.\nfunc (k msgServer) UnregisterClockContract(goCtx context.Context, req *types.MsgUnregisterClockContract) (*types.MsgUnregisterClockContractResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\t// Validate request\n\tif err := req.ValidateBasic(); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &types.MsgUnregisterClockContractResponse{}, k.UnregisterContract(ctx, req.SenderAddress, req.ContractAddress)\n}\n\n// UnjailClockContract handles incoming transactions to unjail clock contracts.\nfunc (k msgServer) UnjailClockContract(goCtx context.Context, req *types.MsgUnjailClockContract) (*types.MsgUnjailClockContractResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\t// Validate request\n\tif err := req.ValidateBasic(); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &types.MsgUnjailClockContractResponse{}, k.SetJailStatusBySender(ctx, req.SenderAddress, req.ContractAddress, false)\n}\n\nfunc (k msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) {\n\tif k.authority != req.Authority {\n\t\treturn nil, errorsmod.Wrapf(govtypes.ErrInvalidSigner, \"invalid authority; expected %s, got %s\", k.authority, req.Authority)\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\tif err := k.SetParams(ctx, req.Params); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &types.MsgUpdateParamsResponse{}, nil\n}\n"
  },
  {
    "path": "x/clock/keeper/msg_server_test.go",
    "content": "package keeper_test\n\nimport (\n\t_ \"embed\"\n\n\t\"github.com/cosmos/cosmos-sdk/testutil/testdata\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/clock/types\"\n)\n\n// Test register clock contract.\nfunc (s *IntegrationTestSuite) TestRegisterClockContract() {\n\t_, _, addr := testdata.KeyTestPubAddr()\n\t_, _, addr2 := testdata.KeyTestPubAddr()\n\t_ = s.FundAccount(s.ctx, addr, sdk.NewCoins(sdk.NewCoin(\"stake\", sdk.NewInt(1_000_000))))\n\n\t// Store code\n\ts.StoreCode()\n\tcontractAddress := s.InstantiateContract(addr.String(), \"\")\n\tcontractAddressWithAdmin := s.InstantiateContract(addr.String(), addr2.String())\n\n\tfor _, tc := range []struct {\n\t\tdesc     string\n\t\tsender   string\n\t\tcontract string\n\t\tisJailed bool\n\t\tsuccess  bool\n\t}{\n\t\t{\n\t\t\tdesc:     \"Success - Register Contract\",\n\t\t\tsender:   addr.String(),\n\t\t\tcontract: contractAddress,\n\t\t\tsuccess:  true,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"Success - Register Contract With Admin\",\n\t\t\tsender:   addr2.String(),\n\t\t\tcontract: contractAddressWithAdmin,\n\t\t\tsuccess:  true,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"Fail - Register Contract With Admin, But With Creator Addr\",\n\t\t\tsender:   addr.String(),\n\t\t\tcontract: contractAddressWithAdmin,\n\t\t\tsuccess:  false,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"Error - Invalid Sender\",\n\t\t\tsender:   addr2.String(),\n\t\t\tcontract: contractAddress,\n\t\t\tsuccess:  false,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"Fail - Invalid Contract Address\",\n\t\t\tsender:   addr.String(),\n\t\t\tcontract: \"Invalid\",\n\t\t\tsuccess:  false,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"Fail - Invalid Sender Address\",\n\t\t\tsender:   \"Invalid\",\n\t\t\tcontract: contractAddress,\n\t\t\tsuccess:  false,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"Fail - Contract Already Jailed\",\n\t\t\tsender:   addr.String(),\n\t\t\tcontract: contractAddress,\n\t\t\tisJailed: true,\n\t\t\tsuccess:  false,\n\t\t},\n\t} {\n\t\ttc := tc\n\t\ts.Run(tc.desc, func() {\n\t\t\t// Set params\n\t\t\tparams := types.DefaultParams()\n\t\t\terr := s.app.AppKeepers.ClockKeeper.SetParams(s.ctx, params)\n\t\t\ts.Require().NoError(err)\n\n\t\t\t// Jail contract if needed\n\t\t\tif tc.isJailed {\n\t\t\t\ts.RegisterClockContract(tc.sender, tc.contract)\n\t\t\t\terr := s.app.AppKeepers.ClockKeeper.SetJailStatus(s.ctx, tc.contract, true)\n\t\t\t\ts.Require().NoError(err)\n\t\t\t}\n\n\t\t\t// Try to register contract\n\t\t\tres, err := s.clockMsgServer.RegisterClockContract(s.ctx, &types.MsgRegisterClockContract{\n\t\t\t\tSenderAddress:   tc.sender,\n\t\t\t\tContractAddress: tc.contract,\n\t\t\t})\n\n\t\t\tif !tc.success {\n\t\t\t\ts.Require().Error(err)\n\t\t\t} else {\n\t\t\t\ts.Require().NoError(err)\n\t\t\t\ts.Require().Equal(res, &types.MsgRegisterClockContractResponse{})\n\t\t\t}\n\n\t\t\t// Ensure contract is unregistered\n\t\t\ts.app.AppKeepers.ClockKeeper.RemoveContract(s.ctx, contractAddress)\n\t\t\ts.app.AppKeepers.ClockKeeper.RemoveContract(s.ctx, contractAddressWithAdmin)\n\t\t})\n\t}\n}\n\n// Test standard unregistration of clock contracts.\nfunc (s *IntegrationTestSuite) TestUnregisterClockContract() {\n\t_, _, addr := testdata.KeyTestPubAddr()\n\t_, _, addr2 := testdata.KeyTestPubAddr()\n\t_ = s.FundAccount(s.ctx, addr, sdk.NewCoins(sdk.NewCoin(\"stake\", sdk.NewInt(1_000_000))))\n\n\ts.StoreCode()\n\tcontractAddress := s.InstantiateContract(addr.String(), \"\")\n\tcontractAddressWithAdmin := s.InstantiateContract(addr.String(), addr2.String())\n\n\tfor _, tc := range []struct {\n\t\tdesc     string\n\t\tsender   string\n\t\tcontract string\n\t\tsuccess  bool\n\t}{\n\t\t{\n\t\t\tdesc:     \"Success - Unregister Contract\",\n\t\t\tsender:   addr.String(),\n\t\t\tcontract: contractAddress,\n\t\t\tsuccess:  true,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"Success - Unregister Contract With Admin\",\n\t\t\tsender:   addr2.String(),\n\t\t\tcontract: contractAddressWithAdmin,\n\t\t\tsuccess:  true,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"Fail - Unregister Contract With Admin, But With Creator Addr\",\n\t\t\tsender:   addr.String(),\n\t\t\tcontract: contractAddressWithAdmin,\n\t\t\tsuccess:  false,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"Error - Invalid Sender\",\n\t\t\tsender:   addr2.String(),\n\t\t\tcontract: contractAddress,\n\t\t\tsuccess:  false,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"Fail - Invalid Contract Address\",\n\t\t\tsender:   addr.String(),\n\t\t\tcontract: \"Invalid\",\n\t\t\tsuccess:  false,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"Fail - Invalid Sender Address\",\n\t\t\tsender:   \"Invalid\",\n\t\t\tcontract: contractAddress,\n\t\t\tsuccess:  false,\n\t\t},\n\t} {\n\t\ttc := tc\n\t\ts.Run(tc.desc, func() {\n\t\t\ts.RegisterClockContract(addr.String(), contractAddress)\n\t\t\ts.RegisterClockContract(addr2.String(), contractAddressWithAdmin)\n\n\t\t\t// Set params\n\t\t\tparams := types.DefaultParams()\n\t\t\terr := s.app.AppKeepers.ClockKeeper.SetParams(s.ctx, params)\n\t\t\ts.Require().NoError(err)\n\n\t\t\t// Try to register all contracts\n\t\t\tres, err := s.clockMsgServer.UnregisterClockContract(s.ctx, &types.MsgUnregisterClockContract{\n\t\t\t\tSenderAddress:   tc.sender,\n\t\t\t\tContractAddress: tc.contract,\n\t\t\t})\n\n\t\t\tif !tc.success {\n\t\t\t\ts.Require().Error(err)\n\t\t\t} else {\n\t\t\t\ts.Require().NoError(err)\n\t\t\t\ts.Require().Equal(res, &types.MsgUnregisterClockContractResponse{})\n\t\t\t}\n\n\t\t\t// Ensure contract is unregistered\n\t\t\ts.app.AppKeepers.ClockKeeper.RemoveContract(s.ctx, contractAddress)\n\t\t\ts.app.AppKeepers.ClockKeeper.RemoveContract(s.ctx, contractAddressWithAdmin)\n\t\t})\n\t}\n}\n\n// Test duplicate register/unregister clock contracts.\nfunc (s *IntegrationTestSuite) TestDuplicateRegistrationChecks() {\n\t_, _, addr := testdata.KeyTestPubAddr()\n\t_ = s.FundAccount(s.ctx, addr, sdk.NewCoins(sdk.NewCoin(\"stake\", sdk.NewInt(1_000_000))))\n\n\ts.StoreCode()\n\tcontractAddress := s.InstantiateContract(addr.String(), \"\")\n\n\t// Test double register, first succeed, second fail\n\t_, err := s.clockMsgServer.RegisterClockContract(s.ctx, &types.MsgRegisterClockContract{\n\t\tSenderAddress:   addr.String(),\n\t\tContractAddress: contractAddress,\n\t})\n\ts.Require().NoError(err)\n\n\t_, err = s.clockMsgServer.RegisterClockContract(s.ctx, &types.MsgRegisterClockContract{\n\t\tSenderAddress:   addr.String(),\n\t\tContractAddress: contractAddress,\n\t})\n\ts.Require().Error(err)\n\n\t// Test double unregister, first succeed, second fail\n\t_, err = s.clockMsgServer.UnregisterClockContract(s.ctx, &types.MsgUnregisterClockContract{\n\t\tSenderAddress:   addr.String(),\n\t\tContractAddress: contractAddress,\n\t})\n\ts.Require().NoError(err)\n\n\t_, err = s.clockMsgServer.UnregisterClockContract(s.ctx, &types.MsgUnregisterClockContract{\n\t\tSenderAddress:   addr.String(),\n\t\tContractAddress: contractAddress,\n\t})\n\ts.Require().Error(err)\n}\n\n// Test unjailing clock contracts.\nfunc (s *IntegrationTestSuite) TestUnjailClockContract() {\n\t_, _, addr := testdata.KeyTestPubAddr()\n\t_, _, addr2 := testdata.KeyTestPubAddr()\n\t_ = s.FundAccount(s.ctx, addr, sdk.NewCoins(sdk.NewCoin(\"stake\", sdk.NewInt(1_000_000))))\n\n\ts.StoreCode()\n\tcontractAddress := s.InstantiateContract(addr.String(), \"\")\n\tcontractAddressWithAdmin := s.InstantiateContract(addr.String(), addr2.String())\n\n\tfor _, tc := range []struct {\n\t\tdesc     string\n\t\tsender   string\n\t\tcontract string\n\t\tunjail   bool\n\t\tsuccess  bool\n\t}{\n\t\t{\n\t\t\tdesc:     \"Success - Unjail Contract\",\n\t\t\tsender:   addr.String(),\n\t\t\tcontract: contractAddress,\n\t\t\tsuccess:  true,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"Success - Unjail Contract With Admin\",\n\t\t\tsender:   addr2.String(),\n\t\t\tcontract: contractAddressWithAdmin,\n\t\t\tsuccess:  true,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"Fail - Unjail Contract With Admin, But With Creator Addr\",\n\t\t\tsender:   addr.String(),\n\t\t\tcontract: contractAddressWithAdmin,\n\t\t\tsuccess:  false,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"Error - Invalid Sender\",\n\t\t\tsender:   addr2.String(),\n\t\t\tcontract: contractAddress,\n\t\t\tsuccess:  false,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"Fail - Invalid Contract Address\",\n\t\t\tsender:   addr.String(),\n\t\t\tcontract: \"Invalid\",\n\t\t\tsuccess:  false,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"Fail - Invalid Sender Address\",\n\t\t\tsender:   \"Invalid\",\n\t\t\tcontract: contractAddress,\n\t\t\tsuccess:  false,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"Fail - Contract Not Jailed\",\n\t\t\tsender:   addr.String(),\n\t\t\tcontract: contractAddress,\n\t\t\tunjail:   true,\n\t\t\tsuccess:  false,\n\t\t},\n\t} {\n\t\ttc := tc\n\t\ts.Run(tc.desc, func() {\n\t\t\ts.RegisterClockContract(addr.String(), contractAddress)\n\t\t\ts.JailClockContract(contractAddress)\n\t\t\ts.RegisterClockContract(addr2.String(), contractAddressWithAdmin)\n\t\t\ts.JailClockContract(contractAddressWithAdmin)\n\n\t\t\t// Unjail contract if needed\n\t\t\tif tc.unjail {\n\t\t\t\ts.UnjailClockContract(addr.String(), contractAddress)\n\t\t\t\ts.UnjailClockContract(addr2.String(), contractAddressWithAdmin)\n\t\t\t}\n\n\t\t\t// Set params\n\t\t\tparams := types.DefaultParams()\n\t\t\terr := s.app.AppKeepers.ClockKeeper.SetParams(s.ctx, params)\n\t\t\ts.Require().NoError(err)\n\n\t\t\t// Try to register all contracts\n\t\t\tres, err := s.clockMsgServer.UnjailClockContract(s.ctx, &types.MsgUnjailClockContract{\n\t\t\t\tSenderAddress:   tc.sender,\n\t\t\t\tContractAddress: tc.contract,\n\t\t\t})\n\n\t\t\tif !tc.success {\n\t\t\t\ts.Require().Error(err)\n\t\t\t} else {\n\t\t\t\ts.Require().NoError(err)\n\t\t\t\ts.Require().Equal(res, &types.MsgUnjailClockContractResponse{})\n\t\t\t}\n\n\t\t\t// Ensure contract is unregistered\n\t\t\ts.app.AppKeepers.ClockKeeper.RemoveContract(s.ctx, contractAddress)\n\t\t\ts.app.AppKeepers.ClockKeeper.RemoveContract(s.ctx, contractAddressWithAdmin)\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "x/clock/keeper/querier.go",
    "content": "package keeper\n\nimport (\n\t\"context\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\tglobalerrors \"github.com/cybercongress/go-cyber/v7/app/helpers\"\n\t\"github.com/cybercongress/go-cyber/v7/x/clock/types\"\n)\n\nvar _ types.QueryServer = &Querier{}\n\ntype Querier struct {\n\tkeeper Keeper\n}\n\nfunc NewQuerier(k Keeper) Querier {\n\treturn Querier{\n\t\tkeeper: k,\n\t}\n}\n\n// ContractModules returns contract addresses which are using the clock\nfunc (q Querier) ClockContracts(stdCtx context.Context, req *types.QueryClockContracts) (*types.QueryClockContractsResponse, error) {\n\tctx := sdk.UnwrapSDKContext(stdCtx)\n\n\tcontracts, err := q.keeper.GetPaginatedContracts(ctx, req.Pagination)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn contracts, nil\n}\n\n// ClockContract returns the clock contract information\nfunc (q Querier) ClockContract(stdCtx context.Context, req *types.QueryClockContract) (*types.QueryClockContractResponse, error) {\n\tctx := sdk.UnwrapSDKContext(stdCtx)\n\n\t// Ensure the contract address is valid\n\tif _, err := sdk.AccAddressFromBech32(req.ContractAddress); err != nil {\n\t\treturn nil, globalerrors.ErrInvalidAddress\n\t}\n\n\tcontract, err := q.keeper.GetClockContract(ctx, req.ContractAddress)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &types.QueryClockContractResponse{\n\t\tClockContract: *contract,\n\t}, nil\n}\n\n// Params returns the total set of clock parameters.\nfunc (q Querier) Params(stdCtx context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) {\n\tctx := sdk.UnwrapSDKContext(stdCtx)\n\n\tp := q.keeper.GetParams(ctx)\n\n\treturn &types.QueryParamsResponse{\n\t\tParams: &p,\n\t}, nil\n}\n"
  },
  {
    "path": "x/clock/keeper/querier_test.go",
    "content": "package keeper_test\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/testutil/testdata\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/clock/types\"\n)\n\n// Query Clock Params\nfunc (s *IntegrationTestSuite) TestQueryClockParams() {\n\tfor _, tc := range []struct {\n\t\tdesc   string\n\t\tparams types.Params\n\t}{\n\t\t{\n\t\t\tdesc:   \"On default\",\n\t\t\tparams: types.DefaultParams(),\n\t\t},\n\t\t{\n\t\t\tdesc: \"On 500_000\",\n\t\t\tparams: types.Params{\n\t\t\t\tContractGasLimit: 500_000,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdesc: \"On 1_000_000\",\n\t\t\tparams: types.Params{\n\t\t\t\tContractGasLimit: 1_000_000,\n\t\t\t},\n\t\t},\n\t} {\n\t\ttc := tc\n\t\ts.Run(tc.desc, func() {\n\t\t\t// Set params\n\t\t\terr := s.app.AppKeepers.ClockKeeper.SetParams(s.ctx, tc.params)\n\t\t\ts.Require().NoError(err)\n\n\t\t\t// Query params\n\t\t\tgoCtx := sdk.WrapSDKContext(s.ctx)\n\t\t\tresp, err := s.queryClient.Params(goCtx, &types.QueryParamsRequest{})\n\n\t\t\t// Response check\n\t\t\ts.Require().NoError(err)\n\t\t\ts.Require().NotNil(resp)\n\t\t\ts.Require().Equal(tc.params, *resp.Params)\n\t\t})\n\t}\n}\n\n// Query Clock Contracts\nfunc (s *IntegrationTestSuite) TestQueryClockContracts() {\n\t_, _, addr := testdata.KeyTestPubAddr()\n\t_ = s.FundAccount(s.ctx, addr, sdk.NewCoins(sdk.NewCoin(\"stake\", sdk.NewInt(1_000_000))))\n\n\ts.StoreCode()\n\n\tfor _, tc := range []struct {\n\t\tdesc      string\n\t\tcontracts []string\n\t}{\n\t\t{\n\t\t\tdesc:      \"On empty\",\n\t\t\tcontracts: []string(nil),\n\t\t},\n\t\t{\n\t\t\tdesc: \"On Single\",\n\t\t\tcontracts: []string{\n\t\t\t\ts.InstantiateContract(addr.String(), \"\"),\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdesc: \"On Multiple\",\n\t\t\tcontracts: []string{\n\t\t\t\ts.InstantiateContract(addr.String(), \"\"),\n\t\t\t\ts.InstantiateContract(addr.String(), \"\"),\n\t\t\t\ts.InstantiateContract(addr.String(), \"\"),\n\t\t\t},\n\t\t},\n\t} {\n\t\ttc := tc\n\t\ts.Run(tc.desc, func() {\n\t\t\t// Loop through contracts & register\n\t\t\tfor _, contract := range tc.contracts {\n\t\t\t\ts.RegisterClockContract(addr.String(), contract)\n\t\t\t}\n\n\t\t\t// Contracts check\n\t\t\tgoCtx := sdk.WrapSDKContext(s.ctx)\n\t\t\tresp, err := s.queryClient.ClockContracts(goCtx, &types.QueryClockContracts{})\n\n\t\t\t// Response check\n\t\t\ts.Require().NoError(err)\n\t\t\ts.Require().NotNil(resp)\n\t\t\tfor _, contract := range resp.ClockContracts {\n\t\t\t\ts.Require().Contains(tc.contracts, contract.ContractAddress)\n\t\t\t\ts.Require().False(contract.IsJailed)\n\t\t\t}\n\n\t\t\t// Remove all contracts\n\t\t\tfor _, contract := range tc.contracts {\n\t\t\t\ts.app.AppKeepers.ClockKeeper.RemoveContract(s.ctx, contract)\n\t\t\t}\n\t\t})\n\t}\n}\n\n// Query Jailed Clock Contracts\nfunc (s *IntegrationTestSuite) TestQueryJailedClockContracts() {\n\t_, _, addr := testdata.KeyTestPubAddr()\n\t_ = s.FundAccount(s.ctx, addr, sdk.NewCoins(sdk.NewCoin(\"stake\", sdk.NewInt(1_000_000))))\n\n\ts.StoreCode()\n\n\tfor _, tc := range []struct {\n\t\tdesc      string\n\t\tcontracts []string\n\t}{\n\t\t{\n\t\t\tdesc:      \"On empty\",\n\t\t\tcontracts: []string(nil),\n\t\t},\n\t\t{\n\t\t\tdesc: \"On Single\",\n\t\t\tcontracts: []string{\n\t\t\t\ts.InstantiateContract(addr.String(), \"\"),\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdesc: \"On Multiple\",\n\t\t\tcontracts: []string{\n\t\t\t\ts.InstantiateContract(addr.String(), \"\"),\n\t\t\t\ts.InstantiateContract(addr.String(), \"\"),\n\t\t\t\ts.InstantiateContract(addr.String(), \"\"),\n\t\t\t},\n\t\t},\n\t} {\n\t\ttc := tc\n\t\ts.Run(tc.desc, func() {\n\t\t\t// Loop through contracts & register\n\t\t\tfor _, contract := range tc.contracts {\n\t\t\t\ts.RegisterClockContract(addr.String(), contract)\n\t\t\t\ts.JailClockContract(contract)\n\t\t\t}\n\n\t\t\t// Contracts check\n\t\t\tgoCtx := sdk.WrapSDKContext(s.ctx)\n\t\t\tresp, err := s.queryClient.ClockContracts(goCtx, &types.QueryClockContracts{})\n\n\t\t\t// Response check\n\t\t\ts.Require().NoError(err)\n\t\t\ts.Require().NotNil(resp)\n\t\t\tfor _, contract := range resp.ClockContracts {\n\t\t\t\ts.Require().Contains(tc.contracts, contract.ContractAddress)\n\t\t\t\ts.Require().True(contract.IsJailed)\n\t\t\t}\n\n\t\t\t// Remove all contracts\n\t\t\tfor _, contract := range tc.contracts {\n\t\t\t\ts.app.AppKeepers.ClockKeeper.RemoveContract(s.ctx, contract)\n\t\t\t}\n\t\t})\n\t}\n}\n\n// Query Clock Contract\nfunc (s *IntegrationTestSuite) TestQueryClockContract() {\n\t_, _, addr := testdata.KeyTestPubAddr()\n\t_ = s.FundAccount(s.ctx, addr, sdk.NewCoins(sdk.NewCoin(\"stake\", sdk.NewInt(1_000_000))))\n\t_, _, invalidAddr := testdata.KeyTestPubAddr()\n\n\ts.StoreCode()\n\n\tunjailedContract := s.InstantiateContract(addr.String(), \"\")\n\t_ = s.app.AppKeepers.ClockKeeper.SetClockContract(s.ctx, types.ClockContract{\n\t\tContractAddress: unjailedContract,\n\t\tIsJailed:        false,\n\t})\n\n\tjailedContract := s.InstantiateContract(addr.String(), \"\")\n\t_ = s.app.AppKeepers.ClockKeeper.SetClockContract(s.ctx, types.ClockContract{\n\t\tContractAddress: jailedContract,\n\t\tIsJailed:        true,\n\t})\n\n\tfor _, tc := range []struct {\n\t\tdesc     string\n\t\tcontract string\n\t\tisJailed bool\n\t\tsuccess  bool\n\t}{\n\t\t{\n\t\t\tdesc:     \"On Unjailed\",\n\t\t\tcontract: unjailedContract,\n\t\t\tisJailed: false,\n\t\t\tsuccess:  true,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"On Jailed\",\n\t\t\tcontract: jailedContract,\n\t\t\tisJailed: true,\n\t\t\tsuccess:  true,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"Invalid Contract - Unjailed\",\n\t\t\tcontract: invalidAddr.String(),\n\t\t\tisJailed: false,\n\t\t\tsuccess:  false,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"Invalid Contract - Jailed\",\n\t\t\tcontract: invalidAddr.String(),\n\t\t\tisJailed: true,\n\t\t\tsuccess:  false,\n\t\t},\n\t} {\n\t\ttc := tc\n\t\ts.Run(tc.desc, func() {\n\t\t\t// Query contract\n\t\t\tresp, err := s.queryClient.ClockContract(s.ctx, &types.QueryClockContract{\n\t\t\t\tContractAddress: tc.contract,\n\t\t\t})\n\n\t\t\t// Validate responses\n\t\t\tif tc.success {\n\t\t\t\ts.Require().NoError(err)\n\t\t\t\ts.Require().Equal(resp.ClockContract.ContractAddress, tc.contract)\n\t\t\t\ts.Require().Equal(resp.ClockContract.IsJailed, tc.isJailed)\n\t\t\t} else {\n\t\t\t\ts.Require().Error(err)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "x/clock/module.go",
    "content": "package clock\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\n\t\"github.com/gorilla/mux\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/runtime\"\n\t\"github.com/spf13/cobra\"\n\n\tabci \"github.com/cometbft/cometbft/abci/types\"\n\n\terrorsmod \"cosmossdk.io/errors\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tcodectypes \"github.com/cosmos/cosmos-sdk/codec/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/module\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/clock/client/cli\"\n\t\"github.com/cybercongress/go-cyber/v7/x/clock/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/clock/types\"\n)\n\nconst (\n\tModuleName = types.ModuleName\n\n\t// ConsensusVersion defines the current x/clock module consensus version.\n\tConsensusVersion = 1\n)\n\nvar (\n\t_ module.AppModuleBasic   = AppModuleBasic{}\n\t_ module.AppModuleGenesis = AppModule{}\n\t_ module.AppModule        = AppModule{}\n)\n\n// AppModuleBasic defines the basic application module used by the wasm module.\ntype AppModuleBasic struct {\n\tcdc codec.Codec\n}\n\nfunc (a AppModuleBasic) Name() string {\n\treturn types.ModuleName\n}\n\nfunc (a AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage {\n\treturn cdc.MustMarshalJSON(&types.GenesisState{\n\t\tParams: types.DefaultParams(),\n\t})\n}\n\nfunc (a AppModuleBasic) ValidateGenesis(marshaler codec.JSONCodec, _ client.TxEncodingConfig, message json.RawMessage) error {\n\tvar data types.GenesisState\n\terr := marshaler.UnmarshalJSON(message, &data)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err := data.Params.Validate(); err != nil {\n\t\treturn errorsmod.Wrap(err, \"params\")\n\t}\n\treturn nil\n}\n\nfunc (a AppModuleBasic) RegisterRESTRoutes(_ client.Context, _ *mux.Router) {\n}\n\nfunc (a AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) {\n\terr := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx))\n\tif err != nil {\n\t\t// same behavior as in cosmos-sdk\n\t\tpanic(err)\n\t}\n}\n\nfunc (a AppModuleBasic) GetTxCmd() *cobra.Command {\n\treturn cli.NewTxCmd()\n}\n\nfunc (a AppModuleBasic) GetQueryCmd() *cobra.Command {\n\treturn cli.GetQueryCmd()\n}\n\nfunc (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {\n\ttypes.RegisterLegacyAminoCodec(cdc)\n}\n\nfunc (a AppModuleBasic) RegisterInterfaces(r codectypes.InterfaceRegistry) {\n\ttypes.RegisterInterfaces(r)\n}\n\ntype AppModule struct {\n\tAppModuleBasic\n\n\tkeeper keeper.Keeper\n}\n\n// NewAppModule constructor\nfunc NewAppModule(\n\tcdc codec.Codec,\n\tkeeper keeper.Keeper,\n) *AppModule {\n\treturn &AppModule{\n\t\tAppModuleBasic: AppModuleBasic{cdc: cdc},\n\t\tkeeper:         keeper,\n\t}\n}\n\nfunc (a AppModule) RegisterServices(cfg module.Configurator) {\n\ttypes.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(a.keeper))\n\ttypes.RegisterQueryServer(cfg.QueryServer(), keeper.NewQuerier(a.keeper))\n}\n\nfunc (a AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {\n}\n\nfunc (a AppModule) InitGenesis(ctx sdk.Context, marshaler codec.JSONCodec, message json.RawMessage) []abci.ValidatorUpdate {\n\tvar genesisState types.GenesisState\n\tmarshaler.MustUnmarshalJSON(message, &genesisState)\n\t_ = a.keeper.SetParams(ctx, genesisState.Params)\n\treturn nil\n}\n\nfunc (a AppModule) ExportGenesis(ctx sdk.Context, marshaler codec.JSONCodec) json.RawMessage {\n\tgenState := ExportGenesis(ctx, a.keeper)\n\treturn marshaler.MustMarshalJSON(genState)\n}\n\n// ConsensusVersion is a sequence number for state-breaking change of the\n// module. It should be incremented on each consensus-breaking change\n// introduced by the module. To avoid wrong/empty versions, the initial version\n// should be set to 1.\nfunc (a AppModule) ConsensusVersion() uint64 {\n\treturn ConsensusVersion\n}\n\nfunc (a AppModule) BeginBlock(ctx sdk.Context, _ abci.RequestBeginBlock) {\n\tBeginBlocker(ctx, a.keeper)\n}\n\nfunc (a AppModule) EndBlock(ctx sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate {\n\tEndBlocker(ctx, a.keeper)\n\treturn nil\n}\n\n// IsOnePerModuleType implements the depinject.OnePerModuleType interface.\nfunc (am AppModule) IsOnePerModuleType() {}\n\n// IsAppModule implements the appmodule.AppModule interface.\nfunc (am AppModule) IsAppModule() {}\n"
  },
  {
    "path": "x/clock/spec/01_concepts.md",
    "content": "<!--\norder: 1\n-->\n\n# Concepts\n\n## Clock\n\nThe Clock module allows registered contracts to be executed at the start and the end of every block. This allows the smart contract to perform regular and routine actions without the need for external bots. Developers can setup their contract with x/Clock by registering their contract with the module. Once registered, the contract will be executed at the end of every block. If the contract throws an error during execution or exceeds the gas limit defined in the module's parameters, the contract will be jailed and no longer executed. The contract can be unjailed by the contract admin.\n\n## Registering a Contract\n\nRegister a contract with x/Clock by executing the following transaction:\n\n```bash\ncyber tx clock register [contract_address]\n```\n\n> Note: the sender of this transaction must be the contract admin, if exists, or else the contract creator.\n\nThe `contract_address` is the bech32 address of the contract to be executed at the end of every block. Once registered, the contract will be executed at the end of every block. Please ensure that your contract follows the guidelines outlined in [Integration](03_integration.md). \n\n## Unjailing a Contract\n\nA contract can be unjailed by executing the following transaction:\n\n```bash\ncyber tx clock unjail [contract_address]\n```\n\n> Note: the sender of this transaction must be the contract admin, if exists, or else the contract creator.\n\nThe `contract_address` is the bech32 address of the contract to be unjailed. Unjailing a contract will allow it to be executed at the end of every block. If your contract becomes jailed, please see [Integration](03_integration.md) to ensure the contract is setup with a Sudo message. \n\n## Unregistering a Contract\n\nA contract can be unregistered by executing the following transaction:\n\n```bash\ncyber tx clock unregister [contract_address]\n```\n\n> Note: the sender of this transaction must be the contract admin, if exists, or else the contract creator.\n\nThe `contract_address` is the bech32 address of the contract to be unregistered. Unregistering a contract will remove it from the Clock module. This means that the contract will no longer be executed at the end of every block."
  },
  {
    "path": "x/clock/spec/02_state.md",
    "content": "<!--\norder: 2\n-->\n\n# State\n\n## State Objects\n\nThe `x/clock` module only manages the following object in state: ClockContract. This object is used to store the address of the contract and its jail status. The jail status is used to determine if the contract should be executed at the end of every block. If the contract is jailed, it will not be executed.\n\n```go\n// This object is used to store the contract address and the\n// jail status of the contract.\nmessage ClockContract {\n    // The address of the contract.\n    string contract_address = 1;\n    // The jail status of the contract.\n    bool is_jailed = 2;\n}\n```\n\n## Genesis & Params\n\nThe `x/clock` module's `GenesisState` defines the state necessary for initializing the chain from a previously exported height. It simply contains the gas limit parameter which is used to determine the maximum amount of gas that can be used by a contract. This value can be modified with a governance proposal.\n\n```go\n// GenesisState - initial state of module\nmessage GenesisState {\n  // Params of this module\n  Params params = 1 [\n    (gogoproto.nullable) = false,\n    (gogoproto.jsontag) = \"params,omitempty\"\n  ];\n}\n\n// Params defines the set of module parameters.\nmessage Params {\n  // contract_gas_limit defines the maximum amount of gas that can be used by a contract.\n  uint64 contract_gas_limit = 1 [\n    (gogoproto.jsontag) = \"contract_gas_limit,omitempty\",\n    (gogoproto.moretags) = \"yaml:\\\"contract_gas_limit\\\"\"\n  ];\n}\n```\n\n## State Transitions\n\nThe following state transitions are possible:\n\n- Register a contract creates a new ClockContract object in state.\n- Jailing a contract updates the is_jailed field of a ClockContract object in state.\n- Unjailing a contract updates the is_jailed field of a ClockContract object in state.\n- Unregister a contract deletes a ClockContract object from state."
  },
  {
    "path": "x/clock/spec/03_integration.md",
    "content": "<!--\norder: 3\n-->\n\n# CosmWasm Integration\n\nThis `x/clock` module does not require any custom bindings. Rather, you must add a Sudo message to your contract. If your contract does not implement this Sudo message, it will be jailed. Please review the following sections below for more information.\n\n> Note: you can find a basic [cw-clock contract here](https://github.com/Reecepbcups/cw-clock-example).\n\n## Implementation\n\nTo satisfy the module's requirements, add the following message and entry point to your contract:\n\n```rust\n// msg.rs\n#[cw_serde]\npub enum SudoMsg {    \n    BeginBlock { },\n    EndBlock { },\n}\n\n// contract.rs\n#[cfg_attr(not(feature = \"library\"), entry_point)]\npub fn sudo(deps: DepsMut, _env: Env, msg: SudoMsg) -> Result<Response, ContractError> {\n    match msg {        \n        SudoMsg::BeginBlock { } => {}\n        SudoMsg::EndBlock { } => {\n            \n            // TODO: PERFORM LOGIC HERE\n\n            Ok(Response::new())\n        }\n    }\n}\n```\n\nAt the end of every block, registered contracts will execute the `ClockEndBlock` Sudo message. This is where all of the contract's custom end block logic can be performed. Please keep in mind that contracts which exceed the gas limit specified in the params will be jailed.\n\n## Examples\n\nIn the example below, at the end of every block the `val` Config variable will increase by 1. This is a simple example, but one can extrapolate upon this idea and perform actions such as cleanup, auto compounding, etc.\n\n```rust\n// msg.rs\n#[cw_serde]\npub enum SudoMsg {   \n    BeginBlock { }, \n    EndBlock { },\n}\n\n// contract.rs\n#[cfg_attr(not(feature = \"library\"), entry_point)]\npub fn sudo(deps: DepsMut, _env: Env, msg: SudoMsg) -> Result<Response, ContractError> {\n    match msg {        \n        SudoMsg::BeginBlock { } => {}\n        SudoMsg::EndBlock { } => {\n            let mut config = CONFIG.load(deps.storage)?;\n            config.val += 1;\n            CONFIG.save(deps.storage, &config)?;\n\n            Ok(Response::new())\n        }\n    }\n}\n```\n\nTo perform an action occasionally rather than every block, use the `env` variable in the Sudo message to check the block height and then perform logic accordingly. The contract below will only increase the `val` Config variable by 1 if the block height is divisible by 10.\n\n```rust\n// msg.rs\n#[cw_serde]\npub enum SudoMsg {\n    BeginBlock { },    \n    EndBlock { },\n}\n\n// contract.rs\n#[cfg_attr(not(feature = \"library\"), entry_point)]\npub fn sudo(deps: DepsMut, env: Env, msg: SudoMsg) -> Result<Response, ContractError> {\n    match msg {        \n        SudoMsg::BeginBlock { } => {}\n        SudoMsg::EndBlock { } => {    \n            // If the block is not divisible by ten, do nothing.      \n            if env.block.height % 10 != 0 {\n                return Ok(Response::new());\n            }\n\n            let mut config = CONFIG.load(deps.storage)?;\n            config.val += 1;\n            CONFIG.save(deps.storage, &config)?;\n\n            Ok(Response::new())\n        }\n    }\n}\n```\n"
  },
  {
    "path": "x/clock/spec/04_clients.md",
    "content": "<!--\norder: 4\n-->\n\n# Clients\n\n## Command Line Interface (CLI)\n\nThe CLI has been updated with new queries and transactions for the `x/clock` module. View the entire list below.\n\n### Queries\n\n| Command             | Subcommand  | Arguments          | Description             |\n|:--------------------| :---------- | :----------------- | :---------------------- |\n| `cyber query clock` | `params`    |                    | Get Clock params        |\n| `cyber query clock` | `contract`  | [contract_address] | Get a Clock contract    |\n| `cyber query clock` | `contracts` |                    | Get all Clock contracts |\n\n### Transactions\n\n| Command          | Subcommand   | Arguments          | Description                 |\n|:-----------------| :----------- | :----------------- | :-------------------------- |\n| `cyber tx clock` | `register`   | [contract_address] | Register a Clock contract   |\n| `cyber tx clock` | `unjail`     | [contract_address] | Unjail a Clock contract     |\n| `cyber tx clock` | `unregister` | [contract_address] | Unregister a Clock contract |"
  },
  {
    "path": "x/clock/spec/README.md",
    "content": "# `clock`\n\n```text\nThanks to Juno and Tgrade teams for the initial development of this module.\nThis module is based on Juno clock's module implementation with few modifications:\n1. Added support for ABCI BeginBlocker\n2. TODO: Add support for gas limit for each contract\n```\n\n## Abstract\n\nThis document specifies the internal `x/clock` module of cyber-sdk based networks.\n\nThe `x/clock` module allows specific contracts to be executed at the end of every block. This allows the smart contract to perform actions that may need to happen every block or at set block intervals.\n\nBy using this module, your application can remove the headache of external whitelisted bots and instead depend on the chain itself for constant executions.\n\n## Contents\n\n1. **[Concepts](01_concepts.md)**\n2. **[State](02_state.md)**\n3. **[Contract Integration](03_integration.md)**\n4. **[Clients](04_clients.md)**\n"
  },
  {
    "path": "x/clock/types/clock.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/clock/v1/clock.proto\n\npackage types\n\nimport (\n\tfmt \"fmt\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\n// This object is used to store the contract address and the\n// jail status of the contract.\ntype ClockContract struct {\n\t// The address of the contract.\n\tContractAddress string `protobuf:\"bytes,1,opt,name=contract_address,json=contractAddress,proto3\" json:\"contract_address,omitempty\"`\n\t// The jail status of the contract.\n\tIsJailed bool `protobuf:\"varint,2,opt,name=is_jailed,json=isJailed,proto3\" json:\"is_jailed,omitempty\"`\n}\n\nfunc (m *ClockContract) Reset()         { *m = ClockContract{} }\nfunc (m *ClockContract) String() string { return proto.CompactTextString(m) }\nfunc (*ClockContract) ProtoMessage()    {}\nfunc (*ClockContract) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_790af3b737cb20eb, []int{0}\n}\nfunc (m *ClockContract) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *ClockContract) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_ClockContract.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *ClockContract) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ClockContract.Merge(m, src)\n}\nfunc (m *ClockContract) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *ClockContract) XXX_DiscardUnknown() {\n\txxx_messageInfo_ClockContract.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ClockContract proto.InternalMessageInfo\n\nfunc (m *ClockContract) GetContractAddress() string {\n\tif m != nil {\n\t\treturn m.ContractAddress\n\t}\n\treturn \"\"\n}\n\nfunc (m *ClockContract) GetIsJailed() bool {\n\tif m != nil {\n\t\treturn m.IsJailed\n\t}\n\treturn false\n}\n\nfunc init() {\n\tproto.RegisterType((*ClockContract)(nil), \"cyber.clock.v1.ClockContract\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/clock/v1/clock.proto\", fileDescriptor_790af3b737cb20eb) }\n\nvar fileDescriptor_790af3b737cb20eb = []byte{\n\t// 193 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4a, 0xae, 0x4c, 0x4a,\n\t0x2d, 0xd2, 0x4f, 0xce, 0xc9, 0x4f, 0xce, 0xd6, 0x2f, 0x33, 0x84, 0x30, 0xf4, 0x0a, 0x8a, 0xf2,\n\t0x4b, 0xf2, 0x85, 0xf8, 0xc0, 0x72, 0x7a, 0x10, 0xa1, 0x32, 0x43, 0xa5, 0x70, 0x2e, 0x5e, 0x67,\n\t0x10, 0xdb, 0x39, 0x3f, 0xaf, 0xa4, 0x28, 0x31, 0xb9, 0x44, 0x48, 0x93, 0x4b, 0x20, 0x19, 0xca,\n\t0x8e, 0x4f, 0x4c, 0x49, 0x29, 0x4a, 0x2d, 0x2e, 0x96, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x0c, 0xe2,\n\t0x87, 0x89, 0x3b, 0x42, 0x84, 0x85, 0xa4, 0xb9, 0x38, 0x33, 0x8b, 0xe3, 0xb3, 0x12, 0x33, 0x73,\n\t0x52, 0x53, 0x24, 0x98, 0x14, 0x18, 0x35, 0x38, 0x82, 0x38, 0x32, 0x8b, 0xbd, 0xc0, 0x7c, 0x27,\n\t0xcf, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63,\n\t0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0xd2, 0x4f, 0xcf, 0x2c, 0xc9,\n\t0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x07, 0xbb, 0x26, 0x39, 0x3f, 0x2f, 0x1d, 0x64, 0xa0,\n\t0x7e, 0x7a, 0xbe, 0x2e, 0xc4, 0xe9, 0x15, 0x50, 0xc7, 0x97, 0x54, 0x16, 0xa4, 0x16, 0x27, 0xb1,\n\t0x81, 0x9d, 0x6e, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x19, 0x17, 0xde, 0x92, 0xd8, 0x00, 0x00,\n\t0x00,\n}\n\nfunc (m *ClockContract) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *ClockContract) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *ClockContract) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.IsJailed {\n\t\ti--\n\t\tif m.IsJailed {\n\t\t\tdAtA[i] = 1\n\t\t} else {\n\t\t\tdAtA[i] = 0\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif len(m.ContractAddress) > 0 {\n\t\ti -= len(m.ContractAddress)\n\t\tcopy(dAtA[i:], m.ContractAddress)\n\t\ti = encodeVarintClock(dAtA, i, uint64(len(m.ContractAddress)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintClock(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovClock(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\nfunc (m *ClockContract) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.ContractAddress)\n\tif l > 0 {\n\t\tn += 1 + l + sovClock(uint64(l))\n\t}\n\tif m.IsJailed {\n\t\tn += 2\n\t}\n\treturn n\n}\n\nfunc sovClock(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\nfunc sozClock(x uint64) (n int) {\n\treturn sovClock(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\nfunc (m *ClockContract) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowClock\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: ClockContract: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: ClockContract: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field ContractAddress\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowClock\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthClock\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthClock\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.ContractAddress = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field IsJailed\", wireType)\n\t\t\t}\n\t\t\tvar v int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowClock\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tv |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tm.IsJailed = bool(v != 0)\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipClock(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthClock\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc skipClock(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowClock\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowClock\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowClock\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthClock\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupClock\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthClock\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthClock        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowClock          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupClock = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/clock/types/codec.go",
    "content": "package types\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\t\"github.com/cosmos/cosmos-sdk/codec/types\"\n\tcryptocodec \"github.com/cosmos/cosmos-sdk/crypto/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/msgservice\"\n\tauthzcodec \"github.com/cosmos/cosmos-sdk/x/authz/codec\"\n\tgovcodec \"github.com/cosmos/cosmos-sdk/x/gov/codec\"\n)\n\nvar (\n\tamino    = codec.NewLegacyAmino()\n\tAminoCdc = codec.NewAminoCodec(amino)\n)\n\nfunc init() {\n\tRegisterLegacyAminoCodec(amino)\n\tcryptocodec.RegisterCrypto(amino)\n\tsdk.RegisterLegacyAminoCodec(amino)\n\n\t// Register all Amino interfaces and concrete types on the authz  and gov Amino codec\n\t// so that this can later be used to properly serialize MsgGrant and MsgExec\n\t// instances.\n\tRegisterLegacyAminoCodec(authzcodec.Amino)\n\tRegisterLegacyAminoCodec(govcodec.Amino)\n}\n\n// RegisterLegacyAminoCodec registers concrete types on the LegacyAmino codec\nfunc RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {\n\tcdc.RegisterConcrete(&MsgRegisterClockContract{}, \"clock/MsgRegisterClockContract\", nil)\n\tcdc.RegisterConcrete(&MsgUnregisterClockContract{}, \"clock/MsgUnregisterClockContract\", nil)\n\tcdc.RegisterConcrete(&MsgUnjailClockContract{}, \"clock/MsgUnjailClockContract\", nil)\n\tcdc.RegisterConcrete(&MsgUpdateParams{}, \"clock/MsgUpdateParams\", nil)\n}\n\nfunc RegisterInterfaces(registry types.InterfaceRegistry) {\n\tregistry.RegisterImplementations(\n\t\t(*sdk.Msg)(nil),\n\t\t&MsgRegisterClockContract{},\n\t\t&MsgUnregisterClockContract{},\n\t\t&MsgUnjailClockContract{},\n\t\t&MsgUpdateParams{},\n\t)\n\n\tmsgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc)\n}\n"
  },
  {
    "path": "x/clock/types/codec_test.go",
    "content": "package types\n\nimport (\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/suite\"\n\n\tcodectypes \"github.com/cosmos/cosmos-sdk/codec/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\ntype CodecTestSuite struct {\n\tsuite.Suite\n}\n\nfunc TestCodecSuite(t *testing.T) {\n\tsuite.Run(t, new(CodecTestSuite))\n}\n\nfunc (suite *CodecTestSuite) TestRegisterInterfaces() {\n\tregistry := codectypes.NewInterfaceRegistry()\n\tregistry.RegisterInterface(sdk.MsgInterfaceProtoName, (*sdk.Msg)(nil))\n\tRegisterInterfaces(registry)\n\n\timpls := registry.ListImplementations(sdk.MsgInterfaceProtoName)\n\tsuite.Require().Equal(4, len(impls))\n\tsuite.Require().ElementsMatch([]string{\n\t\t\"/cyber.clock.v1.MsgUpdateParams\",\n\t\t\"/cyber.clock.v1.MsgRegisterClockContract\",\n\t\t\"/cyber.clock.v1.MsgUnregisterClockContract\",\n\t\t\"/cyber.clock.v1.MsgUnjailClockContract\",\n\t}, impls)\n}\n"
  },
  {
    "path": "x/clock/types/errors.go",
    "content": "package types\n\nimport (\n\terrorsmod \"cosmossdk.io/errors\"\n)\n\nvar (\n\tErrContractJailed        = errorsmod.Register(ModuleName, 1, \"contract is jailed\")\n\tErrContractNotJailed     = errorsmod.Register(ModuleName, 2, \"contract is not jailed\")\n\tErrContractAlreadyJailed = errorsmod.Register(ModuleName, 3, \"contract is already jailed\")\n)\n"
  },
  {
    "path": "x/clock/types/genesis.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/clock/v1/genesis.proto\n\npackage types\n\nimport (\n\tfmt \"fmt\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\n// GenesisState - initial state of module\ntype GenesisState struct {\n\t// Params of this module\n\tParams Params `protobuf:\"bytes,1,opt,name=params,proto3\" json:\"params,omitempty\"`\n}\n\nfunc (m *GenesisState) Reset()         { *m = GenesisState{} }\nfunc (m *GenesisState) String() string { return proto.CompactTextString(m) }\nfunc (*GenesisState) ProtoMessage()    {}\nfunc (*GenesisState) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_5e684cf0c154fcd7, []int{0}\n}\nfunc (m *GenesisState) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_GenesisState.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *GenesisState) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GenesisState.Merge(m, src)\n}\nfunc (m *GenesisState) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *GenesisState) XXX_DiscardUnknown() {\n\txxx_messageInfo_GenesisState.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GenesisState proto.InternalMessageInfo\n\nfunc (m *GenesisState) GetParams() Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn Params{}\n}\n\n// Params defines the set of module parameters.\ntype Params struct {\n\t// contract_gas_limit defines the maximum amount of gas that can be used by a\n\t// contract.\n\tContractGasLimit uint64 `protobuf:\"varint,1,opt,name=contract_gas_limit,json=contractGasLimit,proto3\" json:\"contract_gas_limit,omitempty\" yaml:\"contract_gas_limit\"`\n}\n\nfunc (m *Params) Reset()         { *m = Params{} }\nfunc (m *Params) String() string { return proto.CompactTextString(m) }\nfunc (*Params) ProtoMessage()    {}\nfunc (*Params) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_5e684cf0c154fcd7, []int{1}\n}\nfunc (m *Params) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_Params.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *Params) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Params.Merge(m, src)\n}\nfunc (m *Params) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *Params) XXX_DiscardUnknown() {\n\txxx_messageInfo_Params.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Params proto.InternalMessageInfo\n\nfunc (m *Params) GetContractGasLimit() uint64 {\n\tif m != nil {\n\t\treturn m.ContractGasLimit\n\t}\n\treturn 0\n}\n\nfunc init() {\n\tproto.RegisterType((*GenesisState)(nil), \"cyber.clock.v1.GenesisState\")\n\tproto.RegisterType((*Params)(nil), \"cyber.clock.v1.Params\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/clock/v1/genesis.proto\", fileDescriptor_5e684cf0c154fcd7) }\n\nvar fileDescriptor_5e684cf0c154fcd7 = []byte{\n\t// 275 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x49, 0xae, 0x4c, 0x4a,\n\t0x2d, 0xd2, 0x4f, 0xce, 0xc9, 0x4f, 0xce, 0xd6, 0x2f, 0x33, 0xd4, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d,\n\t0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x03, 0xcb, 0xea, 0x81, 0x65, 0xf5,\n\t0xca, 0x0c, 0xa5, 0x44, 0xd2, 0xf3, 0xd3, 0xf3, 0xc1, 0x52, 0xfa, 0x20, 0x16, 0x44, 0x95, 0x52,\n\t0x04, 0x17, 0x8f, 0x3b, 0x44, 0x5b, 0x70, 0x49, 0x62, 0x49, 0xaa, 0x90, 0x07, 0x17, 0x5b, 0x41,\n\t0x62, 0x51, 0x62, 0x6e, 0xb1, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0xb7, 0x91, 0x98, 0x1e, 0xaa, 0x31,\n\t0x7a, 0x01, 0x60, 0x59, 0x27, 0x89, 0x13, 0xf7, 0xe4, 0x19, 0x5e, 0xdd, 0x93, 0x17, 0x80, 0xa8,\n\t0xd6, 0xc9, 0xcf, 0xcd, 0x2c, 0x49, 0xcd, 0x2d, 0x28, 0xa9, 0x0c, 0x82, 0xea, 0x57, 0x2a, 0xe5,\n\t0x62, 0x83, 0xa8, 0x15, 0xca, 0xe6, 0x12, 0x4a, 0xce, 0xcf, 0x2b, 0x29, 0x4a, 0x4c, 0x2e, 0x89,\n\t0x4f, 0x4f, 0x2c, 0x8e, 0xcf, 0xc9, 0xcc, 0xcd, 0x2c, 0x01, 0x9b, 0xcf, 0xe2, 0x64, 0xfb, 0xea,\n\t0x9e, 0xbc, 0x0c, 0xa6, 0x2c, 0xc2, 0xbc, 0x4f, 0xf7, 0xe4, 0x25, 0x2b, 0x13, 0x73, 0x73, 0xac,\n\t0x94, 0x30, 0x55, 0x29, 0x05, 0x09, 0xc0, 0x04, 0xdd, 0x13, 0x8b, 0x7d, 0x40, 0x42, 0x4e, 0x9e,\n\t0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0xe3, 0x84, 0xc7, 0x72,\n\t0x0c, 0x17, 0x1e, 0xcb, 0x31, 0xdc, 0x78, 0x2c, 0xc7, 0x10, 0xa5, 0x9f, 0x9e, 0x59, 0x92, 0x51,\n\t0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x0f, 0xf6, 0x54, 0x72, 0x7e, 0x5e, 0x7a, 0x51, 0x6a, 0x71,\n\t0xb1, 0x7e, 0x7a, 0xbe, 0x2e, 0x24, 0x28, 0x2b, 0xa0, 0x81, 0x59, 0x52, 0x59, 0x90, 0x5a, 0x9c,\n\t0xc4, 0x06, 0x0e, 0x22, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x2f, 0x65, 0x95, 0x9e, 0x68,\n\t0x01, 0x00, 0x00,\n}\n\nfunc (m *GenesisState) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *GenesisState) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintGenesis(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *Params) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *Params) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.ContractGasLimit != 0 {\n\t\ti = encodeVarintGenesis(dAtA, i, uint64(m.ContractGasLimit))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintGenesis(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovGenesis(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\nfunc (m *GenesisState) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Params.Size()\n\tn += 1 + l + sovGenesis(uint64(l))\n\treturn n\n}\n\nfunc (m *Params) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.ContractGasLimit != 0 {\n\t\tn += 1 + sovGenesis(uint64(m.ContractGasLimit))\n\t}\n\treturn n\n}\n\nfunc sovGenesis(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\nfunc sozGenesis(x uint64) (n int) {\n\treturn sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\nfunc (m *GenesisState) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: GenesisState: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: GenesisState: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipGenesis(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *Params) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: Params: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: Params: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field ContractGasLimit\", wireType)\n\t\t\t}\n\t\t\tm.ContractGasLimit = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.ContractGasLimit |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipGenesis(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc skipGenesis(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupGenesis\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthGenesis\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthGenesis        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowGenesis          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupGenesis = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/clock/types/keys.go",
    "content": "package types\n\nvar ParamsKey = []byte{0x00}\n\nconst (\n\tModuleName = \"clock\"\n\n\tRouterKey = ModuleName\n\n\tStoreKey = ModuleName\n)\n"
  },
  {
    "path": "x/clock/types/msgs.go",
    "content": "package types\n\nimport (\n\t\"cosmossdk.io/errors\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\tglobalerrors \"github.com/cybercongress/go-cyber/v7/app/helpers\"\n)\n\nconst (\n\t// Sudo Message called on the contracts\n\tBeginBlockSudoMessage = `{\"clock_begin_block\":{}}`\n\tEndBlockSudoMessage   = `{\"clock_end_block\":{}}`\n)\n\n// == MsgUpdateParams ==\nconst (\n\tTypeMsgRegisterFeePayContract   = \"register_clock_contract\"\n\tTypeMsgUnregisterFeePayContract = \"unregister_clock_contract\"\n\tTypeMsgUnjailFeePayContract     = \"unjail_clock_contract\"\n\tTypeMsgUpdateParams             = \"update_clock_params\"\n)\n\nvar (\n\t_ sdk.Msg = &MsgRegisterClockContract{}\n\t_ sdk.Msg = &MsgUnregisterClockContract{}\n\t_ sdk.Msg = &MsgUnjailClockContract{}\n\t_ sdk.Msg = &MsgUpdateParams{}\n)\n\n// Route returns the name of the module\nfunc (msg MsgRegisterClockContract) Route() string { return RouterKey }\n\n// Type returns the the action\nfunc (msg MsgRegisterClockContract) Type() string { return TypeMsgRegisterFeePayContract }\n\n// ValidateBasic runs stateless checks on the message\nfunc (msg MsgRegisterClockContract) ValidateBasic() error {\n\treturn validateAddresses(msg.SenderAddress, msg.ContractAddress)\n}\n\n// GetSignBytes encodes the message for signing\nfunc (msg *MsgRegisterClockContract) GetSignBytes() []byte {\n\treturn sdk.MustSortJSON(AminoCdc.MustMarshalJSON(msg))\n}\n\n// GetSigners defines whose signature is required\nfunc (msg MsgRegisterClockContract) GetSigners() []sdk.AccAddress {\n\tfrom, _ := sdk.AccAddressFromBech32(msg.SenderAddress)\n\treturn []sdk.AccAddress{from}\n}\n\n// Route returns the name of the module\nfunc (msg MsgUnregisterClockContract) Route() string { return RouterKey }\n\n// Type returns the the action\nfunc (msg MsgUnregisterClockContract) Type() string { return TypeMsgRegisterFeePayContract }\n\n// ValidateBasic runs stateless checks on the message\nfunc (msg MsgUnregisterClockContract) ValidateBasic() error {\n\treturn validateAddresses(msg.SenderAddress, msg.ContractAddress)\n}\n\n// GetSignBytes encodes the message for signing\nfunc (msg *MsgUnregisterClockContract) GetSignBytes() []byte {\n\treturn sdk.MustSortJSON(AminoCdc.MustMarshalJSON(msg))\n}\n\n// GetSigners defines whose signature is required\nfunc (msg MsgUnregisterClockContract) GetSigners() []sdk.AccAddress {\n\tfrom, _ := sdk.AccAddressFromBech32(msg.SenderAddress)\n\treturn []sdk.AccAddress{from}\n}\n\n// Route returns the name of the module\nfunc (msg MsgUnjailClockContract) Route() string { return RouterKey }\n\n// Type returns the the action\nfunc (msg MsgUnjailClockContract) Type() string { return TypeMsgRegisterFeePayContract }\n\n// ValidateBasic runs stateless checks on the message\nfunc (msg MsgUnjailClockContract) ValidateBasic() error {\n\treturn validateAddresses(msg.SenderAddress, msg.ContractAddress)\n}\n\n// GetSignBytes encodes the message for signing\nfunc (msg *MsgUnjailClockContract) GetSignBytes() []byte {\n\treturn sdk.MustSortJSON(AminoCdc.MustMarshalJSON(msg))\n}\n\n// GetSigners defines whose signature is required\nfunc (msg MsgUnjailClockContract) GetSigners() []sdk.AccAddress {\n\tfrom, _ := sdk.AccAddressFromBech32(msg.SenderAddress)\n\treturn []sdk.AccAddress{from}\n}\n\n// NewMsgUpdateParams creates new instance of MsgUpdateParams\nfunc NewMsgUpdateParams(\n\tsender sdk.Address,\n\tcontractGasLimit uint64,\n) *MsgUpdateParams {\n\treturn &MsgUpdateParams{\n\t\tAuthority: sender.String(),\n\t\tParams:    NewParams(contractGasLimit),\n\t}\n}\n\n// Route returns the name of the module\nfunc (msg MsgUpdateParams) Route() string { return RouterKey }\n\n// Type returns the the action\nfunc (msg MsgUpdateParams) Type() string { return TypeMsgUpdateParams }\n\n// GetSignBytes implements the LegacyMsg interface.\nfunc (msg MsgUpdateParams) GetSignBytes() []byte {\n\treturn sdk.MustSortJSON(AminoCdc.MustMarshalJSON(&msg))\n}\n\n// GetSigners returns the expected signers for a MsgUpdateParams message.\nfunc (msg *MsgUpdateParams) GetSigners() []sdk.AccAddress {\n\taddr, _ := sdk.AccAddressFromBech32(msg.Authority)\n\treturn []sdk.AccAddress{addr}\n}\n\n// ValidateBasic does a sanity check on the provided data.\nfunc (msg *MsgUpdateParams) ValidateBasic() error {\n\tif _, err := sdk.AccAddressFromBech32(msg.Authority); err != nil {\n\t\treturn errors.Wrap(err, \"invalid authority address\")\n\t}\n\n\treturn msg.Params.Validate()\n}\n\n// ValidateAddresses validates the provided addresses\nfunc validateAddresses(addresses ...string) error {\n\tfor _, address := range addresses {\n\t\tif _, err := sdk.AccAddressFromBech32(address); err != nil {\n\t\t\treturn errors.Wrapf(globalerrors.ErrInvalidAddress, \"invalid address: %s\", address)\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/clock/types/msgs_test.go",
    "content": "package types\n\nimport (\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/suite\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\ntype MsgsTestSuite struct {\n\tsuite.Suite\n\tgovModule string\n}\n\nfunc TestMsgsTestSuite(t *testing.T) {\n\tsuite.Run(t, new(MsgsTestSuite))\n}\n\nfunc (suite *MsgsTestSuite) SetupTest() {\n\tsuite.govModule = \"juno10d07y265gmmuvt4z0w9aw880jnsr700jvss730\"\n}\n\nfunc (suite *MsgsTestSuite) TestMsgUpdateParams() {\n\tvar limit uint64 = 100_000\n\n\tp := MsgUpdateParams{\n\t\tAuthority: suite.govModule,\n\t\tParams: Params{\n\t\t\tContractGasLimit: limit,\n\t\t},\n\t}\n\n\tacc, _ := sdk.AccAddressFromBech32(p.Authority)\n\n\tmsg := NewMsgUpdateParams(acc, limit)\n\n\tsuite.Require().Equal(RouterKey, msg.Route())\n\tsuite.Require().Equal(TypeMsgUpdateParams, msg.Type())\n\tsuite.Require().NotNil(msg.GetSigners())\n}\n"
  },
  {
    "path": "x/clock/types/params.go",
    "content": "package types\n\nimport (\n\terrorsmod \"cosmossdk.io/errors\"\n\n\tsdkerrors \"github.com/cosmos/cosmos-sdk/types/errors\"\n)\n\n// DefaultParams returns default parameters\nfunc DefaultParams() Params {\n\treturn Params{\n\t\tContractGasLimit: 100_000,\n\t}\n}\n\n// NewParams creates a new Params object\nfunc NewParams(\n\tcontractGasLimit uint64,\n) Params {\n\treturn Params{\n\t\tContractGasLimit: contractGasLimit,\n\t}\n}\n\n// Validate performs basic validation.\nfunc (p Params) Validate() error {\n\tminimumGas := uint64(100_000)\n\tif p.ContractGasLimit < minimumGas {\n\t\treturn errorsmod.Wrapf(\n\t\t\tsdkerrors.ErrInvalidRequest,\n\t\t\t\"invalid contract gas limit: %d. Must be above %d\", p.ContractGasLimit, minimumGas,\n\t\t)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/clock/types/params_test.go",
    "content": "package types_test\n\nimport (\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/require\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/clock/types\"\n)\n\nfunc TestParamsValidate(t *testing.T) {\n\ttestCases := []struct {\n\t\tname    string\n\t\tparams  types.Params\n\t\tsuccess bool\n\t}{\n\t\t{\n\t\t\t\"Success - Default\",\n\t\t\ttypes.DefaultParams(),\n\t\t\ttrue,\n\t\t},\n\t\t{\n\t\t\t\"Success - Meets min Gas\",\n\t\t\ttypes.NewParams(100_000),\n\t\t\ttrue,\n\t\t},\n\t\t{\n\t\t\t\"Success - Meets min Gas\",\n\t\t\ttypes.NewParams(500_000),\n\t\t\ttrue,\n\t\t},\n\t\t{\n\t\t\t\"Fail - Not Enough Gas\",\n\t\t\ttypes.NewParams(1),\n\t\t\tfalse,\n\t\t},\n\t\t{\n\t\t\t\"Fail - Not Enough Gas\",\n\t\t\ttypes.NewParams(100),\n\t\t\tfalse,\n\t\t},\n\t\t{\n\t\t\t\"Fail - Not Enough Gas\",\n\t\t\ttypes.NewParams(1_000),\n\t\t\tfalse,\n\t\t},\n\t\t{\n\t\t\t\"Fail - Not Enough Gas\",\n\t\t\ttypes.NewParams(10_000),\n\t\t\tfalse,\n\t\t},\n\t}\n\n\tfor _, tc := range testCases {\n\t\terr := tc.params.Validate()\n\n\t\tif tc.success {\n\t\t\trequire.NoError(t, err, tc.name)\n\t\t} else {\n\t\t\trequire.Error(t, err, tc.name)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "x/clock/types/query.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/clock/v1/query.proto\n\npackage types\n\nimport (\n\tcontext \"context\"\n\tfmt \"fmt\"\n\tquery \"github.com/cosmos/cosmos-sdk/types/query\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tgrpc1 \"github.com/cosmos/gogoproto/grpc\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\n// QueryClockContracts is the request type to get all contracts.\ntype QueryClockContracts struct {\n\t// pagination defines an optional pagination for the request.\n\tPagination *query.PageRequest `protobuf:\"bytes,1,opt,name=pagination,proto3\" json:\"pagination,omitempty\"`\n}\n\nfunc (m *QueryClockContracts) Reset()         { *m = QueryClockContracts{} }\nfunc (m *QueryClockContracts) String() string { return proto.CompactTextString(m) }\nfunc (*QueryClockContracts) ProtoMessage()    {}\nfunc (*QueryClockContracts) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_05444fcb6b1de94a, []int{0}\n}\nfunc (m *QueryClockContracts) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryClockContracts) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryClockContracts.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryClockContracts) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryClockContracts.Merge(m, src)\n}\nfunc (m *QueryClockContracts) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryClockContracts) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryClockContracts.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryClockContracts proto.InternalMessageInfo\n\nfunc (m *QueryClockContracts) GetPagination() *query.PageRequest {\n\tif m != nil {\n\t\treturn m.Pagination\n\t}\n\treturn nil\n}\n\n// QueryClockContractsResponse is the response type for the Query/ClockContracts\n// RPC method.\ntype QueryClockContractsResponse struct {\n\t// clock_contracts are the clock contracts.\n\tClockContracts []ClockContract `protobuf:\"bytes,1,rep,name=clock_contracts,json=clockContracts,proto3\" json:\"clock_contracts\"`\n\t// pagination defines the pagination in the response.\n\tPagination *query.PageResponse `protobuf:\"bytes,2,opt,name=pagination,proto3\" json:\"pagination,omitempty\"`\n}\n\nfunc (m *QueryClockContractsResponse) Reset()         { *m = QueryClockContractsResponse{} }\nfunc (m *QueryClockContractsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryClockContractsResponse) ProtoMessage()    {}\nfunc (*QueryClockContractsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_05444fcb6b1de94a, []int{1}\n}\nfunc (m *QueryClockContractsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryClockContractsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryClockContractsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryClockContractsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryClockContractsResponse.Merge(m, src)\n}\nfunc (m *QueryClockContractsResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryClockContractsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryClockContractsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryClockContractsResponse proto.InternalMessageInfo\n\nfunc (m *QueryClockContractsResponse) GetClockContracts() []ClockContract {\n\tif m != nil {\n\t\treturn m.ClockContracts\n\t}\n\treturn nil\n}\n\nfunc (m *QueryClockContractsResponse) GetPagination() *query.PageResponse {\n\tif m != nil {\n\t\treturn m.Pagination\n\t}\n\treturn nil\n}\n\n// QueryClockContract is the request type to get a single contract.\ntype QueryClockContract struct {\n\t// contract_address is the address of the contract to query.\n\tContractAddress string `protobuf:\"bytes,1,opt,name=contract_address,json=contractAddress,proto3\" json:\"contract_address,omitempty\"`\n}\n\nfunc (m *QueryClockContract) Reset()         { *m = QueryClockContract{} }\nfunc (m *QueryClockContract) String() string { return proto.CompactTextString(m) }\nfunc (*QueryClockContract) ProtoMessage()    {}\nfunc (*QueryClockContract) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_05444fcb6b1de94a, []int{2}\n}\nfunc (m *QueryClockContract) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryClockContract) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryClockContract.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryClockContract) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryClockContract.Merge(m, src)\n}\nfunc (m *QueryClockContract) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryClockContract) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryClockContract.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryClockContract proto.InternalMessageInfo\n\nfunc (m *QueryClockContract) GetContractAddress() string {\n\tif m != nil {\n\t\treturn m.ContractAddress\n\t}\n\treturn \"\"\n}\n\n// QueryClockContractResponse is the response type for the Query/ClockContract\n// RPC method.\ntype QueryClockContractResponse struct {\n\t// contract is the clock contract.\n\tClockContract ClockContract `protobuf:\"bytes,1,opt,name=clock_contract,json=clockContract,proto3\" json:\"clock_contract\"`\n}\n\nfunc (m *QueryClockContractResponse) Reset()         { *m = QueryClockContractResponse{} }\nfunc (m *QueryClockContractResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryClockContractResponse) ProtoMessage()    {}\nfunc (*QueryClockContractResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_05444fcb6b1de94a, []int{3}\n}\nfunc (m *QueryClockContractResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryClockContractResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryClockContractResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryClockContractResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryClockContractResponse.Merge(m, src)\n}\nfunc (m *QueryClockContractResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryClockContractResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryClockContractResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryClockContractResponse proto.InternalMessageInfo\n\nfunc (m *QueryClockContractResponse) GetClockContract() ClockContract {\n\tif m != nil {\n\t\treturn m.ClockContract\n\t}\n\treturn ClockContract{}\n}\n\n// QueryParams is the request type to get all module params.\ntype QueryParamsRequest struct {\n}\n\nfunc (m *QueryParamsRequest) Reset()         { *m = QueryParamsRequest{} }\nfunc (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryParamsRequest) ProtoMessage()    {}\nfunc (*QueryParamsRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_05444fcb6b1de94a, []int{4}\n}\nfunc (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryParamsRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryParamsRequest.Merge(m, src)\n}\nfunc (m *QueryParamsRequest) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryParamsRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryParamsRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo\n\n// QueryClockContractsResponse is the response type for the Query/ClockContracts\n// RPC method.\ntype QueryParamsResponse struct {\n\tParams *Params `protobuf:\"bytes,1,opt,name=params,proto3\" json:\"params\" yaml:\"params\"`\n}\n\nfunc (m *QueryParamsResponse) Reset()         { *m = QueryParamsResponse{} }\nfunc (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryParamsResponse) ProtoMessage()    {}\nfunc (*QueryParamsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_05444fcb6b1de94a, []int{5}\n}\nfunc (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryParamsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryParamsResponse.Merge(m, src)\n}\nfunc (m *QueryParamsResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryParamsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryParamsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo\n\nfunc (m *QueryParamsResponse) GetParams() *Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn nil\n}\n\nfunc init() {\n\tproto.RegisterType((*QueryClockContracts)(nil), \"cyber.clock.v1.QueryClockContracts\")\n\tproto.RegisterType((*QueryClockContractsResponse)(nil), \"cyber.clock.v1.QueryClockContractsResponse\")\n\tproto.RegisterType((*QueryClockContract)(nil), \"cyber.clock.v1.QueryClockContract\")\n\tproto.RegisterType((*QueryClockContractResponse)(nil), \"cyber.clock.v1.QueryClockContractResponse\")\n\tproto.RegisterType((*QueryParamsRequest)(nil), \"cyber.clock.v1.QueryParamsRequest\")\n\tproto.RegisterType((*QueryParamsResponse)(nil), \"cyber.clock.v1.QueryParamsResponse\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/clock/v1/query.proto\", fileDescriptor_05444fcb6b1de94a) }\n\nvar fileDescriptor_05444fcb6b1de94a = []byte{\n\t// 539 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0x4d, 0x6b, 0x13, 0x41,\n\t0x18, 0xc7, 0xb3, 0xad, 0x06, 0x9c, 0x92, 0x54, 0xc6, 0x52, 0xe2, 0x46, 0x37, 0x75, 0x0b, 0x5a,\n\t0xab, 0xce, 0x90, 0xe8, 0xc9, 0x8b, 0x98, 0x82, 0xe2, 0xcb, 0xa1, 0xee, 0x51, 0x90, 0x32, 0xbb,\n\t0x1d, 0xa6, 0x8b, 0xc9, 0xce, 0x66, 0x67, 0x12, 0x0c, 0xe2, 0x45, 0xf0, 0x2e, 0x88, 0x17, 0x3f,\n\t0x87, 0x1f, 0xa2, 0xc7, 0x82, 0x17, 0x4f, 0x41, 0x12, 0x4f, 0x1e, 0xfd, 0x04, 0xb2, 0x33, 0xb3,\n\t0xd1, 0xd9, 0xb6, 0xa6, 0xb7, 0xd9, 0xe7, 0xf5, 0xf7, 0x7f, 0x9e, 0x87, 0x05, 0x6e, 0x34, 0x0e,\n\t0x69, 0x86, 0xa3, 0x1e, 0x8f, 0x5e, 0xe3, 0x51, 0x1b, 0x0f, 0x86, 0x34, 0x1b, 0xa3, 0x34, 0xe3,\n\t0x92, 0xc3, 0xba, 0xf2, 0x21, 0xe5, 0x43, 0xa3, 0xb6, 0xbb, 0x1d, 0x71, 0xd1, 0xe7, 0x02, 0x87,\n\t0x44, 0x50, 0x1d, 0x88, 0x47, 0xed, 0x90, 0x4a, 0xd2, 0xc6, 0x29, 0x61, 0x71, 0x42, 0x64, 0xcc,\n\t0x13, 0x9d, 0xeb, 0xae, 0x31, 0xce, 0xb8, 0x7a, 0xe2, 0xfc, 0x65, 0xac, 0x57, 0x18, 0xe7, 0xac,\n\t0x47, 0x31, 0x49, 0x63, 0x4c, 0x92, 0x84, 0x4b, 0x95, 0x22, 0x0a, 0x6f, 0x89, 0x85, 0xd1, 0x84,\n\t0x8a, 0xb8, 0xf0, 0x96, 0x49, 0x35, 0x96, 0xf2, 0xf9, 0xaf, 0xc0, 0xa5, 0x17, 0x39, 0xcf, 0x4e,\n\t0x6e, 0xdb, 0xe1, 0x89, 0xcc, 0x48, 0x24, 0x05, 0x7c, 0x04, 0xc0, 0x5f, 0xb0, 0x86, 0xb3, 0xe1,\n\t0x6c, 0xad, 0x74, 0xae, 0x23, 0xad, 0x02, 0xe5, 0x2a, 0x90, 0x96, 0x6b, 0x54, 0xa0, 0x5d, 0xc2,\n\t0x68, 0x40, 0x07, 0x43, 0x2a, 0x64, 0xf0, 0x4f, 0xa6, 0xff, 0xd5, 0x01, 0xcd, 0x13, 0xea, 0x07,\n\t0x54, 0xa4, 0x3c, 0x11, 0x14, 0x3e, 0x07, 0xab, 0x8a, 0x66, 0x2f, 0x2a, 0x5c, 0x0d, 0x67, 0x63,\n\t0x79, 0x6b, 0xa5, 0x73, 0x15, 0xd9, 0x23, 0x44, 0x56, 0x81, 0xee, 0xb9, 0xc3, 0x49, 0xab, 0x12,\n\t0xd4, 0x23, 0x9b, 0xfa, 0xb1, 0x45, 0xbd, 0xa4, 0xa8, 0x6f, 0x2c, 0xa4, 0xd6, 0x28, 0x16, 0xf6,\n\t0x03, 0x00, 0x8f, 0x53, 0xc3, 0x9b, 0xe0, 0x62, 0x81, 0xb9, 0x47, 0xf6, 0xf7, 0x33, 0x2a, 0x84,\n\t0x1a, 0xcd, 0x85, 0x60, 0xb5, 0xb0, 0x3f, 0xd4, 0x66, 0xff, 0x00, 0xb8, 0xc7, 0x0b, 0xcc, 0x55,\n\t0x3f, 0x05, 0x75, 0x5b, 0xb5, 0x99, 0xf0, 0x99, 0x44, 0xd7, 0x2c, 0xd1, 0xfe, 0x9a, 0x41, 0xdd,\n\t0x25, 0x19, 0xe9, 0x0b, 0xb3, 0x03, 0x3f, 0x34, 0x6b, 0x2d, 0xac, 0xa6, 0xf1, 0x33, 0x50, 0x4d,\n\t0x95, 0xc5, 0x34, 0x5c, 0x2f, 0x37, 0xd4, 0xf1, 0xdd, 0xe6, 0xaf, 0x49, 0xcb, 0x44, 0xfe, 0x9e,\n\t0xb4, 0x6a, 0x63, 0xd2, 0xef, 0xdd, 0xf7, 0xf5, 0xb7, 0x1f, 0x18, 0x47, 0xe7, 0xcb, 0x32, 0x38,\n\t0xaf, 0x9a, 0xc0, 0x0f, 0x0e, 0xa8, 0x97, 0x0e, 0x68, 0xb3, 0x5c, 0xf9, 0x84, 0x2b, 0x70, 0x6f,\n\t0x9d, 0x21, 0xa8, 0x60, 0xf7, 0xaf, 0xbd, 0xff, 0xf6, 0xf3, 0xd3, 0x52, 0x13, 0x5e, 0xc6, 0xe5,\n\t0x73, 0x9e, 0x37, 0xfd, 0xec, 0x80, 0x9a, 0xbd, 0x32, 0x7f, 0x71, 0x07, 0x77, 0x7b, 0x71, 0xcc,\n\t0x1c, 0xe2, 0x9e, 0x82, 0x40, 0xf0, 0xf6, 0xa9, 0x10, 0xf8, 0x6d, 0xf9, 0x46, 0xde, 0xc1, 0x01,\n\t0xa8, 0xea, 0xc1, 0x9e, 0xc2, 0x63, 0xed, 0xce, 0xdd, 0xfc, 0x6f, 0x8c, 0x01, 0xf1, 0x14, 0x48,\n\t0x03, 0xae, 0x97, 0x41, 0xf4, 0x72, 0xba, 0x4f, 0x0e, 0xa7, 0x9e, 0x73, 0x34, 0xf5, 0x9c, 0x1f,\n\t0x53, 0xcf, 0xf9, 0x38, 0xf3, 0x2a, 0x47, 0x33, 0xaf, 0xf2, 0x7d, 0xe6, 0x55, 0x5e, 0x62, 0x16,\n\t0xcb, 0x83, 0x61, 0x88, 0x22, 0xde, 0xd7, 0xb9, 0x11, 0x4f, 0x58, 0xce, 0x89, 0x19, 0xbf, 0xa3,\n\t0x8b, 0xbd, 0x31, 0xe5, 0xe4, 0x38, 0xa5, 0x22, 0xac, 0xaa, 0x3f, 0xc5, 0xdd, 0x3f, 0x01, 0x00,\n\t0x00, 0xff, 0xff, 0x2a, 0x7c, 0xaf, 0x65, 0xf1, 0x04, 0x00, 0x00,\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ context.Context\nvar _ grpc.ClientConn\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// QueryClient is the client API for Query service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype QueryClient interface {\n\t// ClockContracts\n\tClockContracts(ctx context.Context, in *QueryClockContracts, opts ...grpc.CallOption) (*QueryClockContractsResponse, error)\n\t// ClockContract\n\tClockContract(ctx context.Context, in *QueryClockContract, opts ...grpc.CallOption) (*QueryClockContractResponse, error)\n\t// Params\n\tParams(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error)\n}\n\ntype queryClient struct {\n\tcc grpc1.ClientConn\n}\n\nfunc NewQueryClient(cc grpc1.ClientConn) QueryClient {\n\treturn &queryClient{cc}\n}\n\nfunc (c *queryClient) ClockContracts(ctx context.Context, in *QueryClockContracts, opts ...grpc.CallOption) (*QueryClockContractsResponse, error) {\n\tout := new(QueryClockContractsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.clock.v1.Query/ClockContracts\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) ClockContract(ctx context.Context, in *QueryClockContract, opts ...grpc.CallOption) (*QueryClockContractResponse, error) {\n\tout := new(QueryClockContractResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.clock.v1.Query/ClockContract\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) {\n\tout := new(QueryParamsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.clock.v1.Query/Params\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// QueryServer is the server API for Query service.\ntype QueryServer interface {\n\t// ClockContracts\n\tClockContracts(context.Context, *QueryClockContracts) (*QueryClockContractsResponse, error)\n\t// ClockContract\n\tClockContract(context.Context, *QueryClockContract) (*QueryClockContractResponse, error)\n\t// Params\n\tParams(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error)\n}\n\n// UnimplementedQueryServer can be embedded to have forward compatible implementations.\ntype UnimplementedQueryServer struct {\n}\n\nfunc (*UnimplementedQueryServer) ClockContracts(ctx context.Context, req *QueryClockContracts) (*QueryClockContractsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method ClockContracts not implemented\")\n}\nfunc (*UnimplementedQueryServer) ClockContract(ctx context.Context, req *QueryClockContract) (*QueryClockContractResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method ClockContract not implemented\")\n}\nfunc (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Params not implemented\")\n}\n\nfunc RegisterQueryServer(s grpc1.Server, srv QueryServer) {\n\ts.RegisterService(&_Query_serviceDesc, srv)\n}\n\nfunc _Query_ClockContracts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryClockContracts)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).ClockContracts(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.clock.v1.Query/ClockContracts\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).ClockContracts(ctx, req.(*QueryClockContracts))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_ClockContract_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryClockContract)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).ClockContract(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.clock.v1.Query/ClockContract\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).ClockContract(ctx, req.(*QueryClockContract))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryParamsRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).Params(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.clock.v1.Query/Params\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _Query_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"cyber.clock.v1.Query\",\n\tHandlerType: (*QueryServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"ClockContracts\",\n\t\t\tHandler:    _Query_ClockContracts_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ClockContract\",\n\t\t\tHandler:    _Query_ClockContract_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Params\",\n\t\t\tHandler:    _Query_Params_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"cyber/clock/v1/query.proto\",\n}\n\nfunc (m *QueryClockContracts) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryClockContracts) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryClockContracts) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Pagination != nil {\n\t\t{\n\t\t\tsize, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\ti -= size\n\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryClockContractsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryClockContractsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryClockContractsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Pagination != nil {\n\t\t{\n\t\t\tsize, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\ti -= size\n\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.ClockContracts) > 0 {\n\t\tfor iNdEx := len(m.ClockContracts) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.ClockContracts[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0xa\n\t\t}\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryClockContract) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryClockContract) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryClockContract) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.ContractAddress) > 0 {\n\t\ti -= len(m.ContractAddress)\n\t\tcopy(dAtA[i:], m.ContractAddress)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.ContractAddress)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryClockContractResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryClockContractResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryClockContractResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.ClockContract.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Params != nil {\n\t\t{\n\t\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\ti -= size\n\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintQuery(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovQuery(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\nfunc (m *QueryClockContracts) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.Pagination != nil {\n\t\tl = m.Pagination.Size()\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryClockContractsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif len(m.ClockContracts) > 0 {\n\t\tfor _, e := range m.ClockContracts {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovQuery(uint64(l))\n\t\t}\n\t}\n\tif m.Pagination != nil {\n\t\tl = m.Pagination.Size()\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryClockContract) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.ContractAddress)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryClockContractResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.ClockContract.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc (m *QueryParamsRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *QueryParamsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.Params != nil {\n\t\tl = m.Params.Size()\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc sovQuery(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\nfunc sozQuery(x uint64) (n int) {\n\treturn sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\nfunc (m *QueryClockContracts) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryClockContracts: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryClockContracts: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Pagination\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif m.Pagination == nil {\n\t\t\t\tm.Pagination = &query.PageRequest{}\n\t\t\t}\n\t\t\tif err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *QueryClockContractsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryClockContractsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryClockContractsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field ClockContracts\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.ClockContracts = append(m.ClockContracts, ClockContract{})\n\t\t\tif err := m.ClockContracts[len(m.ClockContracts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Pagination\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif m.Pagination == nil {\n\t\t\t\tm.Pagination = &query.PageResponse{}\n\t\t\t}\n\t\t\tif err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *QueryClockContract) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryClockContract: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryClockContract: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field ContractAddress\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.ContractAddress = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *QueryClockContractResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryClockContractResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryClockContractResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field ClockContract\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.ClockContract.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *QueryParamsRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *QueryParamsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif m.Params == nil {\n\t\t\t\tm.Params = &Params{}\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc skipQuery(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupQuery\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthQuery\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthQuery        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowQuery          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupQuery = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/clock/types/query.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: cyber/clock/v1/query.proto\n\n/*\nPackage types is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage types\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/golang/protobuf/descriptor\"\n\t\"github.com/golang/protobuf/proto\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// Suppress \"imported and not used\" errors\nvar _ codes.Code\nvar _ io.Reader\nvar _ status.Status\nvar _ = runtime.String\nvar _ = utilities.NewDoubleArray\nvar _ = descriptor.ForMessage\nvar _ = metadata.Join\n\nvar (\n\tfilter_Query_ClockContracts_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n)\n\nfunc request_Query_ClockContracts_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryClockContracts\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ClockContracts_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.ClockContracts(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n\n}\n\nfunc local_request_Query_ClockContracts_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryClockContracts\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ClockContracts_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.ClockContracts(ctx, &protoReq)\n\treturn msg, metadata, err\n\n}\n\nfunc request_Query_ClockContract_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryClockContract\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"contract_address\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"contract_address\")\n\t}\n\n\tprotoReq.ContractAddress, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"contract_address\", err)\n\t}\n\n\tmsg, err := client.ClockContract(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n\n}\n\nfunc local_request_Query_ClockContract_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryClockContract\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"contract_address\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"contract_address\")\n\t}\n\n\tprotoReq.ContractAddress, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"contract_address\", err)\n\t}\n\n\tmsg, err := server.ClockContract(ctx, &protoReq)\n\treturn msg, metadata, err\n\n}\n\nfunc request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryParamsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n\n}\n\nfunc local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryParamsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := server.Params(ctx, &protoReq)\n\treturn msg, metadata, err\n\n}\n\n// RegisterQueryHandlerServer registers the http handlers for service Query to \"mux\".\n// UnaryRPC     :call QueryServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead.\nfunc RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error {\n\n\tmux.Handle(\"GET\", pattern_Query_ClockContracts_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_ClockContracts_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_ClockContracts_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_ClockContract_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_ClockContract_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_ClockContract_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\treturn nil\n}\n\n// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.Dial(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Infof(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Infof(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\n\treturn RegisterQueryHandler(ctx, mux, conn)\n}\n\n// RegisterQueryHandler registers the http handlers for service Query to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn))\n}\n\n// RegisterQueryHandlerClient registers the http handlers for service Query\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"QueryClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"QueryClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"QueryClient\" to call the correct interceptors.\nfunc RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error {\n\n\tmux.Handle(\"GET\", pattern_Query_ClockContracts_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_ClockContracts_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_ClockContracts_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_ClockContract_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_ClockContract_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_ClockContract_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\treturn nil\n}\n\nvar (\n\tpattern_Query_ClockContracts_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"cyber\", \"clock\", \"v1\", \"contracts\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_ClockContract_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{\"cyber\", \"clock\", \"v1\", \"contracts\", \"contract_address\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"cyber\", \"clock\", \"v1\", \"params\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n)\n\nvar (\n\tforward_Query_ClockContracts_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_ClockContract_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_Params_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "x/clock/types/tx.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/clock/v1/tx.proto\n\npackage types\n\nimport (\n\tcontext \"context\"\n\tfmt \"fmt\"\n\t_ \"github.com/cosmos/cosmos-proto\"\n\t_ \"github.com/cosmos/cosmos-sdk/types/msgservice\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tgrpc1 \"github.com/cosmos/gogoproto/grpc\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\n// MsgRegisterClockContract is the Msg/RegisterClockContract request type.\ntype MsgRegisterClockContract struct {\n\t// The address of the sender.\n\tSenderAddress string `protobuf:\"bytes,1,opt,name=sender_address,json=senderAddress,proto3\" json:\"sender_address,omitempty\"`\n\t// The address of the contract to register.\n\tContractAddress string `protobuf:\"bytes,2,opt,name=contract_address,json=contractAddress,proto3\" json:\"contract_address,omitempty\"`\n}\n\nfunc (m *MsgRegisterClockContract) Reset()         { *m = MsgRegisterClockContract{} }\nfunc (m *MsgRegisterClockContract) String() string { return proto.CompactTextString(m) }\nfunc (*MsgRegisterClockContract) ProtoMessage()    {}\nfunc (*MsgRegisterClockContract) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f27fe74cf5db2c38, []int{0}\n}\nfunc (m *MsgRegisterClockContract) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgRegisterClockContract) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgRegisterClockContract.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgRegisterClockContract) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgRegisterClockContract.Merge(m, src)\n}\nfunc (m *MsgRegisterClockContract) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgRegisterClockContract) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgRegisterClockContract.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgRegisterClockContract proto.InternalMessageInfo\n\nfunc (m *MsgRegisterClockContract) GetSenderAddress() string {\n\tif m != nil {\n\t\treturn m.SenderAddress\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgRegisterClockContract) GetContractAddress() string {\n\tif m != nil {\n\t\treturn m.ContractAddress\n\t}\n\treturn \"\"\n}\n\n// MsgRegisterClockContractResponse defines the response structure for executing\n// a MsgRegisterClockContract message.\ntype MsgRegisterClockContractResponse struct {\n}\n\nfunc (m *MsgRegisterClockContractResponse) Reset()         { *m = MsgRegisterClockContractResponse{} }\nfunc (m *MsgRegisterClockContractResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgRegisterClockContractResponse) ProtoMessage()    {}\nfunc (*MsgRegisterClockContractResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f27fe74cf5db2c38, []int{1}\n}\nfunc (m *MsgRegisterClockContractResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgRegisterClockContractResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgRegisterClockContractResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgRegisterClockContractResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgRegisterClockContractResponse.Merge(m, src)\n}\nfunc (m *MsgRegisterClockContractResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgRegisterClockContractResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgRegisterClockContractResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgRegisterClockContractResponse proto.InternalMessageInfo\n\n// MsgUnregisterClockContract is the Msg/UnregisterClockContract request type.\ntype MsgUnregisterClockContract struct {\n\t// The address of the sender.\n\tSenderAddress string `protobuf:\"bytes,1,opt,name=sender_address,json=senderAddress,proto3\" json:\"sender_address,omitempty\"`\n\t// The address of the contract to unregister.\n\tContractAddress string `protobuf:\"bytes,2,opt,name=contract_address,json=contractAddress,proto3\" json:\"contract_address,omitempty\"`\n}\n\nfunc (m *MsgUnregisterClockContract) Reset()         { *m = MsgUnregisterClockContract{} }\nfunc (m *MsgUnregisterClockContract) String() string { return proto.CompactTextString(m) }\nfunc (*MsgUnregisterClockContract) ProtoMessage()    {}\nfunc (*MsgUnregisterClockContract) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f27fe74cf5db2c38, []int{2}\n}\nfunc (m *MsgUnregisterClockContract) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgUnregisterClockContract) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgUnregisterClockContract.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgUnregisterClockContract) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgUnregisterClockContract.Merge(m, src)\n}\nfunc (m *MsgUnregisterClockContract) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgUnregisterClockContract) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgUnregisterClockContract.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgUnregisterClockContract proto.InternalMessageInfo\n\nfunc (m *MsgUnregisterClockContract) GetSenderAddress() string {\n\tif m != nil {\n\t\treturn m.SenderAddress\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgUnregisterClockContract) GetContractAddress() string {\n\tif m != nil {\n\t\treturn m.ContractAddress\n\t}\n\treturn \"\"\n}\n\n// MsgUnregisterClockContractResponse defines the response structure for\n// executing a MsgUnregisterClockContract message.\ntype MsgUnregisterClockContractResponse struct {\n}\n\nfunc (m *MsgUnregisterClockContractResponse) Reset()         { *m = MsgUnregisterClockContractResponse{} }\nfunc (m *MsgUnregisterClockContractResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgUnregisterClockContractResponse) ProtoMessage()    {}\nfunc (*MsgUnregisterClockContractResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f27fe74cf5db2c38, []int{3}\n}\nfunc (m *MsgUnregisterClockContractResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgUnregisterClockContractResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgUnregisterClockContractResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgUnregisterClockContractResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgUnregisterClockContractResponse.Merge(m, src)\n}\nfunc (m *MsgUnregisterClockContractResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgUnregisterClockContractResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgUnregisterClockContractResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgUnregisterClockContractResponse proto.InternalMessageInfo\n\n// MsgUnjailClockContract is the Msg/UnjailClockContract request type.\ntype MsgUnjailClockContract struct {\n\t// The address of the sender.\n\tSenderAddress string `protobuf:\"bytes,1,opt,name=sender_address,json=senderAddress,proto3\" json:\"sender_address,omitempty\"`\n\t// The address of the contract to unjail.\n\tContractAddress string `protobuf:\"bytes,2,opt,name=contract_address,json=contractAddress,proto3\" json:\"contract_address,omitempty\"`\n}\n\nfunc (m *MsgUnjailClockContract) Reset()         { *m = MsgUnjailClockContract{} }\nfunc (m *MsgUnjailClockContract) String() string { return proto.CompactTextString(m) }\nfunc (*MsgUnjailClockContract) ProtoMessage()    {}\nfunc (*MsgUnjailClockContract) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f27fe74cf5db2c38, []int{4}\n}\nfunc (m *MsgUnjailClockContract) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgUnjailClockContract) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgUnjailClockContract.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgUnjailClockContract) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgUnjailClockContract.Merge(m, src)\n}\nfunc (m *MsgUnjailClockContract) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgUnjailClockContract) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgUnjailClockContract.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgUnjailClockContract proto.InternalMessageInfo\n\nfunc (m *MsgUnjailClockContract) GetSenderAddress() string {\n\tif m != nil {\n\t\treturn m.SenderAddress\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgUnjailClockContract) GetContractAddress() string {\n\tif m != nil {\n\t\treturn m.ContractAddress\n\t}\n\treturn \"\"\n}\n\n// MsgUnjailClockContractResponse defines the response structure for executing a\n// MsgUnjailClockContract message.\ntype MsgUnjailClockContractResponse struct {\n}\n\nfunc (m *MsgUnjailClockContractResponse) Reset()         { *m = MsgUnjailClockContractResponse{} }\nfunc (m *MsgUnjailClockContractResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgUnjailClockContractResponse) ProtoMessage()    {}\nfunc (*MsgUnjailClockContractResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f27fe74cf5db2c38, []int{5}\n}\nfunc (m *MsgUnjailClockContractResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgUnjailClockContractResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgUnjailClockContractResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgUnjailClockContractResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgUnjailClockContractResponse.Merge(m, src)\n}\nfunc (m *MsgUnjailClockContractResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgUnjailClockContractResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgUnjailClockContractResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgUnjailClockContractResponse proto.InternalMessageInfo\n\n// MsgUpdateParams is the Msg/UpdateParams request type.\n//\n// Since: cosmos-sdk 0.47\ntype MsgUpdateParams struct {\n\t// authority is the address of the governance account.\n\tAuthority string `protobuf:\"bytes,1,opt,name=authority,proto3\" json:\"authority,omitempty\"`\n\t// params defines the x/clock parameters to update.\n\t//\n\t// NOTE: All parameters must be supplied.\n\tParams Params `protobuf:\"bytes,2,opt,name=params,proto3\" json:\"params\"`\n}\n\nfunc (m *MsgUpdateParams) Reset()         { *m = MsgUpdateParams{} }\nfunc (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) }\nfunc (*MsgUpdateParams) ProtoMessage()    {}\nfunc (*MsgUpdateParams) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f27fe74cf5db2c38, []int{6}\n}\nfunc (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgUpdateParams.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgUpdateParams) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgUpdateParams.Merge(m, src)\n}\nfunc (m *MsgUpdateParams) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgUpdateParams) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgUpdateParams.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo\n\nfunc (m *MsgUpdateParams) GetAuthority() string {\n\tif m != nil {\n\t\treturn m.Authority\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgUpdateParams) GetParams() Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn Params{}\n}\n\n// MsgUpdateParamsResponse defines the response structure for executing a\n// MsgUpdateParams message.\n//\n// Since: cosmos-sdk 0.47\ntype MsgUpdateParamsResponse struct {\n}\n\nfunc (m *MsgUpdateParamsResponse) Reset()         { *m = MsgUpdateParamsResponse{} }\nfunc (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgUpdateParamsResponse) ProtoMessage()    {}\nfunc (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f27fe74cf5db2c38, []int{7}\n}\nfunc (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgUpdateParamsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src)\n}\nfunc (m *MsgUpdateParamsResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo\n\nfunc init() {\n\tproto.RegisterType((*MsgRegisterClockContract)(nil), \"cyber.clock.v1.MsgRegisterClockContract\")\n\tproto.RegisterType((*MsgRegisterClockContractResponse)(nil), \"cyber.clock.v1.MsgRegisterClockContractResponse\")\n\tproto.RegisterType((*MsgUnregisterClockContract)(nil), \"cyber.clock.v1.MsgUnregisterClockContract\")\n\tproto.RegisterType((*MsgUnregisterClockContractResponse)(nil), \"cyber.clock.v1.MsgUnregisterClockContractResponse\")\n\tproto.RegisterType((*MsgUnjailClockContract)(nil), \"cyber.clock.v1.MsgUnjailClockContract\")\n\tproto.RegisterType((*MsgUnjailClockContractResponse)(nil), \"cyber.clock.v1.MsgUnjailClockContractResponse\")\n\tproto.RegisterType((*MsgUpdateParams)(nil), \"cyber.clock.v1.MsgUpdateParams\")\n\tproto.RegisterType((*MsgUpdateParamsResponse)(nil), \"cyber.clock.v1.MsgUpdateParamsResponse\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/clock/v1/tx.proto\", fileDescriptor_f27fe74cf5db2c38) }\n\nvar fileDescriptor_f27fe74cf5db2c38 = []byte{\n\t// 541 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0x41, 0x6f, 0xd3, 0x3e,\n\t0x18, 0xc6, 0x9b, 0xfd, 0xa7, 0x49, 0xf3, 0x1f, 0x3a, 0x14, 0xc6, 0xda, 0x66, 0x5b, 0x5a, 0x0c,\n\t0x83, 0x31, 0x69, 0x31, 0x2b, 0x88, 0x03, 0x37, 0xba, 0x13, 0x87, 0x4a, 0x28, 0x08, 0x09, 0x71,\n\t0x99, 0xdc, 0xd4, 0xf2, 0x32, 0x1a, 0x3b, 0xb2, 0xdd, 0x69, 0xbd, 0xee, 0x0b, 0x30, 0x89, 0x0b,\n\t0x47, 0x3e, 0xc2, 0x0e, 0x7c, 0x88, 0x1d, 0x27, 0xb8, 0x70, 0x42, 0xa8, 0x45, 0xe2, 0x6b, 0xa0,\n\t0xd8, 0x49, 0xc6, 0xba, 0x44, 0xf4, 0x02, 0x37, 0xe7, 0x7d, 0x9f, 0xf7, 0x79, 0x7e, 0x8a, 0xdf,\n\t0x04, 0xd4, 0x82, 0x51, 0x8f, 0x08, 0x14, 0x0c, 0x78, 0xf0, 0x16, 0x1d, 0xee, 0x20, 0x75, 0xe4,\n\t0xc5, 0x82, 0x2b, 0x6e, 0x57, 0x75, 0xc3, 0xd3, 0x0d, 0xef, 0x70, 0xc7, 0x59, 0xa3, 0x9c, 0xd3,\n\t0x01, 0x41, 0x38, 0x0e, 0x11, 0x66, 0x8c, 0x2b, 0xac, 0x42, 0xce, 0xa4, 0x51, 0x3b, 0xb5, 0x80,\n\t0xcb, 0x88, 0x4b, 0x14, 0x49, 0x9a, 0xb8, 0x44, 0x92, 0xa6, 0x8d, 0xb5, 0x29, 0x7f, 0x4a, 0x18,\n\t0x91, 0x61, 0x36, 0xb6, 0x4c, 0x39, 0xe5, 0xfa, 0x88, 0x92, 0x53, 0x5a, 0x6d, 0x18, 0xb3, 0x3d,\n\t0xd3, 0x30, 0x0f, 0xa6, 0x05, 0x07, 0xa0, 0xde, 0x95, 0xd4, 0x27, 0x34, 0x94, 0x8a, 0x88, 0xdd,\n\t0xc4, 0x75, 0x97, 0x33, 0x25, 0x70, 0xa0, 0xec, 0x0d, 0x50, 0x95, 0x84, 0xf5, 0x89, 0xd8, 0xc3,\n\t0xfd, 0xbe, 0x20, 0x52, 0xd6, 0xad, 0x96, 0xb5, 0xb9, 0xe8, 0x5f, 0x37, 0xd5, 0x67, 0xa6, 0x68,\n\t0x3f, 0x00, 0x37, 0x82, 0x74, 0x24, 0x17, 0xce, 0x69, 0xe1, 0x52, 0x56, 0x4f, 0xa5, 0x10, 0x82,\n\t0x56, 0x59, 0x9a, 0x4f, 0x64, 0xcc, 0x99, 0x24, 0x90, 0x01, 0xa7, 0x2b, 0xe9, 0x2b, 0x26, 0xfe,\n\t0x11, 0xd3, 0x5d, 0x00, 0xcb, 0xf3, 0x72, 0xaa, 0x03, 0xb0, 0xa2, 0x55, 0x07, 0x38, 0x1c, 0xfc,\n\t0x6d, 0xa2, 0x16, 0x70, 0x8b, 0xb3, 0x72, 0x9a, 0x77, 0x16, 0x58, 0x4a, 0x24, 0x71, 0x1f, 0x2b,\n\t0xf2, 0x02, 0x0b, 0x1c, 0x49, 0xfb, 0x09, 0x58, 0xc4, 0x43, 0xb5, 0xcf, 0x45, 0xa8, 0x46, 0x06,\n\t0xa1, 0x53, 0xff, 0xfc, 0x69, 0x7b, 0x39, 0xbd, 0xee, 0xd4, 0xfc, 0xa5, 0x12, 0x21, 0xa3, 0xfe,\n\t0x85, 0xd4, 0x7e, 0x0c, 0x16, 0x62, 0xed, 0xa0, 0x71, 0xfe, 0x6f, 0xaf, 0x78, 0x97, 0x17, 0xd5,\n\t0x33, 0xfe, 0x9d, 0xf9, 0xb3, 0x6f, 0xcd, 0x8a, 0x9f, 0x6a, 0x9f, 0x56, 0x8f, 0x7f, 0x9e, 0x6e,\n\t0x5d, 0xb8, 0xc0, 0x06, 0xa8, 0x4d, 0x01, 0x65, 0xb0, 0xed, 0xd3, 0x79, 0xf0, 0x5f, 0x57, 0x52,\n\t0xfb, 0x83, 0x05, 0x6e, 0x15, 0x2f, 0xda, 0xe6, 0x74, 0x64, 0xd9, 0x92, 0x38, 0x0f, 0x67, 0x55,\n\t0xe6, 0xaf, 0xea, 0xce, 0xf1, 0x97, 0x1f, 0xef, 0xe7, 0xd6, 0xe1, 0x2a, 0xba, 0xf2, 0x61, 0xa2,\n\t0xec, 0xca, 0xed, 0x8f, 0x16, 0xa8, 0x95, 0x6d, 0xdc, 0x56, 0x41, 0x64, 0x89, 0xd6, 0x69, 0xcf,\n\t0xae, 0xcd, 0x01, 0x37, 0x34, 0x60, 0x13, 0xae, 0x17, 0x00, 0x0e, 0xf3, 0x59, 0xfb, 0xc4, 0x02,\n\t0x37, 0x8b, 0xd6, 0xef, 0x5e, 0x61, 0xe4, 0x15, 0x9d, 0xe3, 0xcd, 0xa6, 0xcb, 0xb1, 0x6e, 0x6b,\n\t0xac, 0x55, 0xd8, 0x28, 0xc4, 0x4a, 0xe6, 0xec, 0xd7, 0xe0, 0xda, 0xa5, 0x0d, 0x6c, 0x16, 0x45,\n\t0xfc, 0x26, 0x70, 0xee, 0xff, 0x41, 0x90, 0x85, 0x77, 0x9e, 0x9f, 0x8d, 0x5d, 0xeb, 0x7c, 0xec,\n\t0x5a, 0xdf, 0xc7, 0xae, 0x75, 0x32, 0x71, 0x2b, 0xe7, 0x13, 0xb7, 0xf2, 0x75, 0xe2, 0x56, 0xde,\n\t0x20, 0x1a, 0xaa, 0xfd, 0x61, 0xcf, 0x0b, 0x78, 0x64, 0xc0, 0x02, 0xce, 0x68, 0xb2, 0xd8, 0x88,\n\t0xf2, 0x6d, 0x43, 0x7a, 0x94, 0xb2, 0xaa, 0x51, 0x4c, 0x64, 0x6f, 0x41, 0xff, 0xe7, 0x1e, 0xfd,\n\t0x0a, 0x00, 0x00, 0xff, 0xff, 0x1f, 0xcc, 0xf9, 0xf2, 0x98, 0x05, 0x00, 0x00,\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ context.Context\nvar _ grpc.ClientConn\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// MsgClient is the client API for Msg service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype MsgClient interface {\n\t// RegisterClockContract defines the endpoint for\n\t// registering a new clock contract.\n\tRegisterClockContract(ctx context.Context, in *MsgRegisterClockContract, opts ...grpc.CallOption) (*MsgRegisterClockContractResponse, error)\n\t// UnregisterClockContract defines the endpoint for\n\t// unregistering a clock contract.\n\tUnregisterClockContract(ctx context.Context, in *MsgUnregisterClockContract, opts ...grpc.CallOption) (*MsgUnregisterClockContractResponse, error)\n\t// UnjailClockContract defines the endpoint for\n\t// unjailing a clock contract.\n\tUnjailClockContract(ctx context.Context, in *MsgUnjailClockContract, opts ...grpc.CallOption) (*MsgUnjailClockContractResponse, error)\n\t// UpdateParams defines a governance operation for updating the x/clock module\n\t// parameters. The authority is hard-coded to the x/gov module account.\n\t//\n\t// Since: cosmos-sdk 0.47\n\tUpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error)\n}\n\ntype msgClient struct {\n\tcc grpc1.ClientConn\n}\n\nfunc NewMsgClient(cc grpc1.ClientConn) MsgClient {\n\treturn &msgClient{cc}\n}\n\nfunc (c *msgClient) RegisterClockContract(ctx context.Context, in *MsgRegisterClockContract, opts ...grpc.CallOption) (*MsgRegisterClockContractResponse, error) {\n\tout := new(MsgRegisterClockContractResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.clock.v1.Msg/RegisterClockContract\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) UnregisterClockContract(ctx context.Context, in *MsgUnregisterClockContract, opts ...grpc.CallOption) (*MsgUnregisterClockContractResponse, error) {\n\tout := new(MsgUnregisterClockContractResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.clock.v1.Msg/UnregisterClockContract\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) UnjailClockContract(ctx context.Context, in *MsgUnjailClockContract, opts ...grpc.CallOption) (*MsgUnjailClockContractResponse, error) {\n\tout := new(MsgUnjailClockContractResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.clock.v1.Msg/UnjailClockContract\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) {\n\tout := new(MsgUpdateParamsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.clock.v1.Msg/UpdateParams\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// MsgServer is the server API for Msg service.\ntype MsgServer interface {\n\t// RegisterClockContract defines the endpoint for\n\t// registering a new clock contract.\n\tRegisterClockContract(context.Context, *MsgRegisterClockContract) (*MsgRegisterClockContractResponse, error)\n\t// UnregisterClockContract defines the endpoint for\n\t// unregistering a clock contract.\n\tUnregisterClockContract(context.Context, *MsgUnregisterClockContract) (*MsgUnregisterClockContractResponse, error)\n\t// UnjailClockContract defines the endpoint for\n\t// unjailing a clock contract.\n\tUnjailClockContract(context.Context, *MsgUnjailClockContract) (*MsgUnjailClockContractResponse, error)\n\t// UpdateParams defines a governance operation for updating the x/clock module\n\t// parameters. The authority is hard-coded to the x/gov module account.\n\t//\n\t// Since: cosmos-sdk 0.47\n\tUpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error)\n}\n\n// UnimplementedMsgServer can be embedded to have forward compatible implementations.\ntype UnimplementedMsgServer struct {\n}\n\nfunc (*UnimplementedMsgServer) RegisterClockContract(ctx context.Context, req *MsgRegisterClockContract) (*MsgRegisterClockContractResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method RegisterClockContract not implemented\")\n}\nfunc (*UnimplementedMsgServer) UnregisterClockContract(ctx context.Context, req *MsgUnregisterClockContract) (*MsgUnregisterClockContractResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method UnregisterClockContract not implemented\")\n}\nfunc (*UnimplementedMsgServer) UnjailClockContract(ctx context.Context, req *MsgUnjailClockContract) (*MsgUnjailClockContractResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method UnjailClockContract not implemented\")\n}\nfunc (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method UpdateParams not implemented\")\n}\n\nfunc RegisterMsgServer(s grpc1.Server, srv MsgServer) {\n\ts.RegisterService(&_Msg_serviceDesc, srv)\n}\n\nfunc _Msg_RegisterClockContract_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgRegisterClockContract)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).RegisterClockContract(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.clock.v1.Msg/RegisterClockContract\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).RegisterClockContract(ctx, req.(*MsgRegisterClockContract))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_UnregisterClockContract_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgUnregisterClockContract)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).UnregisterClockContract(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.clock.v1.Msg/UnregisterClockContract\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).UnregisterClockContract(ctx, req.(*MsgUnregisterClockContract))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_UnjailClockContract_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgUnjailClockContract)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).UnjailClockContract(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.clock.v1.Msg/UnjailClockContract\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).UnjailClockContract(ctx, req.(*MsgUnjailClockContract))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgUpdateParams)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).UpdateParams(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.clock.v1.Msg/UpdateParams\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _Msg_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"cyber.clock.v1.Msg\",\n\tHandlerType: (*MsgServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"RegisterClockContract\",\n\t\t\tHandler:    _Msg_RegisterClockContract_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"UnregisterClockContract\",\n\t\t\tHandler:    _Msg_UnregisterClockContract_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"UnjailClockContract\",\n\t\t\tHandler:    _Msg_UnjailClockContract_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"UpdateParams\",\n\t\t\tHandler:    _Msg_UpdateParams_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"cyber/clock/v1/tx.proto\",\n}\n\nfunc (m *MsgRegisterClockContract) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgRegisterClockContract) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgRegisterClockContract) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.ContractAddress) > 0 {\n\t\ti -= len(m.ContractAddress)\n\t\tcopy(dAtA[i:], m.ContractAddress)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.ContractAddress)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.SenderAddress) > 0 {\n\t\ti -= len(m.SenderAddress)\n\t\tcopy(dAtA[i:], m.SenderAddress)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.SenderAddress)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgRegisterClockContractResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgRegisterClockContractResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgRegisterClockContractResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgUnregisterClockContract) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgUnregisterClockContract) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgUnregisterClockContract) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.ContractAddress) > 0 {\n\t\ti -= len(m.ContractAddress)\n\t\tcopy(dAtA[i:], m.ContractAddress)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.ContractAddress)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.SenderAddress) > 0 {\n\t\ti -= len(m.SenderAddress)\n\t\tcopy(dAtA[i:], m.SenderAddress)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.SenderAddress)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgUnregisterClockContractResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgUnregisterClockContractResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgUnregisterClockContractResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgUnjailClockContract) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgUnjailClockContract) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgUnjailClockContract) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.ContractAddress) > 0 {\n\t\ti -= len(m.ContractAddress)\n\t\tcopy(dAtA[i:], m.ContractAddress)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.ContractAddress)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.SenderAddress) > 0 {\n\t\ti -= len(m.SenderAddress)\n\t\tcopy(dAtA[i:], m.SenderAddress)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.SenderAddress)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgUnjailClockContractResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgUnjailClockContractResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgUnjailClockContractResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x12\n\tif len(m.Authority) > 0 {\n\t\ti -= len(m.Authority)\n\t\tcopy(dAtA[i:], m.Authority)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Authority)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintTx(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovTx(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\nfunc (m *MsgRegisterClockContract) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.SenderAddress)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.ContractAddress)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *MsgRegisterClockContractResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgUnregisterClockContract) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.SenderAddress)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.ContractAddress)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *MsgUnregisterClockContractResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgUnjailClockContract) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.SenderAddress)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.ContractAddress)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *MsgUnjailClockContractResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgUpdateParams) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Authority)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = m.Params.Size()\n\tn += 1 + l + sovTx(uint64(l))\n\treturn n\n}\n\nfunc (m *MsgUpdateParamsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc sovTx(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\nfunc sozTx(x uint64) (n int) {\n\treturn sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\nfunc (m *MsgRegisterClockContract) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgRegisterClockContract: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgRegisterClockContract: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field SenderAddress\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.SenderAddress = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field ContractAddress\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.ContractAddress = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *MsgRegisterClockContractResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgRegisterClockContractResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgRegisterClockContractResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *MsgUnregisterClockContract) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUnregisterClockContract: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUnregisterClockContract: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field SenderAddress\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.SenderAddress = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field ContractAddress\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.ContractAddress = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *MsgUnregisterClockContractResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUnregisterClockContractResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUnregisterClockContractResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *MsgUnjailClockContract) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUnjailClockContract: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUnjailClockContract: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field SenderAddress\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.SenderAddress = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field ContractAddress\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.ContractAddress = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *MsgUnjailClockContractResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUnjailClockContractResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUnjailClockContractResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *MsgUpdateParams) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParams: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParams: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Authority\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Authority = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParamsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc skipTx(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthTx\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupTx\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthTx\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthTx        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowTx          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupTx = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/clock/types/tx.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: cyber/clock/v1/tx.proto\n\n/*\nPackage types is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage types\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/golang/protobuf/descriptor\"\n\t\"github.com/golang/protobuf/proto\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// Suppress \"imported and not used\" errors\nvar _ codes.Code\nvar _ io.Reader\nvar _ status.Status\nvar _ = runtime.String\nvar _ = utilities.NewDoubleArray\nvar _ = descriptor.ForMessage\nvar _ = metadata.Join\n\nvar (\n\tfilter_Msg_RegisterClockContract_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n)\n\nfunc request_Msg_RegisterClockContract_0(ctx context.Context, marshaler runtime.Marshaler, client MsgClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq MsgRegisterClockContract\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_RegisterClockContract_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.RegisterClockContract(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n\n}\n\nfunc local_request_Msg_RegisterClockContract_0(ctx context.Context, marshaler runtime.Marshaler, server MsgServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq MsgRegisterClockContract\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_RegisterClockContract_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.RegisterClockContract(ctx, &protoReq)\n\treturn msg, metadata, err\n\n}\n\nvar (\n\tfilter_Msg_UnregisterClockContract_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n)\n\nfunc request_Msg_UnregisterClockContract_0(ctx context.Context, marshaler runtime.Marshaler, client MsgClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq MsgUnregisterClockContract\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_UnregisterClockContract_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.UnregisterClockContract(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n\n}\n\nfunc local_request_Msg_UnregisterClockContract_0(ctx context.Context, marshaler runtime.Marshaler, server MsgServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq MsgUnregisterClockContract\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_UnregisterClockContract_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.UnregisterClockContract(ctx, &protoReq)\n\treturn msg, metadata, err\n\n}\n\nvar (\n\tfilter_Msg_UnjailClockContract_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n)\n\nfunc request_Msg_UnjailClockContract_0(ctx context.Context, marshaler runtime.Marshaler, client MsgClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq MsgUnjailClockContract\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_UnjailClockContract_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.UnjailClockContract(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n\n}\n\nfunc local_request_Msg_UnjailClockContract_0(ctx context.Context, marshaler runtime.Marshaler, server MsgServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq MsgUnjailClockContract\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_UnjailClockContract_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.UnjailClockContract(ctx, &protoReq)\n\treturn msg, metadata, err\n\n}\n\n// RegisterMsgHandlerServer registers the http handlers for service Msg to \"mux\".\n// UnaryRPC     :call MsgServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterMsgHandlerFromEndpoint instead.\nfunc RegisterMsgHandlerServer(ctx context.Context, mux *runtime.ServeMux, server MsgServer) error {\n\n\tmux.Handle(\"POST\", pattern_Msg_RegisterClockContract_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Msg_RegisterClockContract_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Msg_RegisterClockContract_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\tmux.Handle(\"POST\", pattern_Msg_UnregisterClockContract_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Msg_UnregisterClockContract_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Msg_UnregisterClockContract_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\tmux.Handle(\"POST\", pattern_Msg_UnjailClockContract_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Msg_UnjailClockContract_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Msg_UnjailClockContract_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\treturn nil\n}\n\n// RegisterMsgHandlerFromEndpoint is same as RegisterMsgHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterMsgHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.Dial(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Infof(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Infof(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\n\treturn RegisterMsgHandler(ctx, mux, conn)\n}\n\n// RegisterMsgHandler registers the http handlers for service Msg to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterMsgHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterMsgHandlerClient(ctx, mux, NewMsgClient(conn))\n}\n\n// RegisterMsgHandlerClient registers the http handlers for service Msg\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"MsgClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"MsgClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"MsgClient\" to call the correct interceptors.\nfunc RegisterMsgHandlerClient(ctx context.Context, mux *runtime.ServeMux, client MsgClient) error {\n\n\tmux.Handle(\"POST\", pattern_Msg_RegisterClockContract_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Msg_RegisterClockContract_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Msg_RegisterClockContract_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\tmux.Handle(\"POST\", pattern_Msg_UnregisterClockContract_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Msg_UnregisterClockContract_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Msg_UnregisterClockContract_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\tmux.Handle(\"POST\", pattern_Msg_UnjailClockContract_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Msg_UnjailClockContract_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Msg_UnjailClockContract_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\treturn nil\n}\n\nvar (\n\tpattern_Msg_RegisterClockContract_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{\"cyber\", \"clock\", \"v1\", \"tx\", \"register\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Msg_UnregisterClockContract_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{\"cyber\", \"clock\", \"v1\", \"tx\", \"unregister\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Msg_UnjailClockContract_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{\"cyber\", \"clock\", \"v1\", \"tx\", \"unjail\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n)\n\nvar (\n\tforward_Msg_RegisterClockContract_0 = runtime.ForwardResponseMessage\n\n\tforward_Msg_UnregisterClockContract_0 = runtime.ForwardResponseMessage\n\n\tforward_Msg_UnjailClockContract_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "x/cyberbank/abci.go",
    "content": "package cyberbank\n\nimport (\n\t\"time\"\n\n\t\"github.com/cosmos/cosmos-sdk/telemetry\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/cyberbank/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/cyberbank/types\"\n)\n\nfunc EndBlocker(ctx sdk.Context, k *keeper.IndexedKeeper) {\n\tdefer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyEndBlocker)\n\n\tk.UpdateAccountsStakeAmpere(ctx)\n}\n"
  },
  {
    "path": "x/cyberbank/keeper/genesis.go",
    "content": "package keeper\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\nfunc (k *IndexedKeeper) InitGenesis(ctx sdk.Context) {\n\tfor _, account := range k.accountKeeper.GetAllAccounts(ctx) {\n\t\tk.InitializeStakeAmpere(\n\t\t\taccount.GetAccountNumber(),\n\t\t\tuint64(k.Proxy.GetAccountStakeAmperPlusRouted(ctx, account.GetAddress())),\n\t\t)\n\t}\n}\n"
  },
  {
    "path": "x/cyberbank/keeper/keeper.go",
    "content": "package keeper\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\tstoretypes \"github.com/cosmos/cosmos-sdk/store/types\"\n\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tgogotypes \"github.com/cosmos/gogoproto/types\"\n\n\t\"github.com/cometbft/cometbft/libs/log\"\n\tauthtypes \"github.com/cosmos/cosmos-sdk/x/auth/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/cyberbank/types\"\n)\n\ntype IndexedKeeper struct {\n\t*Proxy\n\taccountKeeper types.AccountKeeper\n\tcdc           codec.BinaryCodec\n\tauthKey       storetypes.StoreKey\n\n\tuserTotalStakeAmpere    map[uint64]uint64\n\tuserNewTotalStakeAmpere map[uint64]uint64\n\taccountToUpdate         []sdk.AccAddress\n}\n\nfunc NewIndexedKeeper(\n\tcdc codec.BinaryCodec,\n\tauthKey storetypes.StoreKey,\n\tpbk *Proxy,\n\tak types.AccountKeeper,\n) *IndexedKeeper {\n\tindexedKeeper := &IndexedKeeper{\n\t\tProxy:           pbk,\n\t\tcdc:             cdc,\n\t\tauthKey:         authKey,\n\t\taccountKeeper:   ak,\n\t\taccountToUpdate: make([]sdk.AccAddress, 0),\n\t}\n\thook := func(ctx sdk.Context, from sdk.AccAddress, to sdk.AccAddress) {\n\t\tif from != nil {\n\t\t\tindexedKeeper.accountToUpdate = append(indexedKeeper.accountToUpdate, from)\n\t\t}\n\t\tif to != nil {\n\t\t\tindexedKeeper.accountToUpdate = append(indexedKeeper.accountToUpdate, to)\n\t\t}\n\t}\n\tpbk.AddHook(hook)\n\n\treturn indexedKeeper\n}\n\nfunc (k IndexedKeeper) Logger(ctx sdk.Context) log.Logger {\n\treturn ctx.Logger().With(\"module\", fmt.Sprintf(\"x/%s\", types.ModuleName))\n}\n\nfunc (k *IndexedKeeper) LoadState(rankCtx sdk.Context, freshCtx sdk.Context) {\n\tk.userTotalStakeAmpere = make(map[uint64]uint64)\n\tk.accountKeeper.IterateAccounts(rankCtx, k.getCollectFunc(rankCtx, k.userTotalStakeAmpere))\n\n\tk.userNewTotalStakeAmpere = make(map[uint64]uint64)\n\tk.accountKeeper.IterateAccounts(freshCtx, k.getCollectFunc(freshCtx, k.userNewTotalStakeAmpere))\n}\n\nfunc (k *IndexedKeeper) getCollectFunc(ctx sdk.Context, userStake map[uint64]uint64) func(account authtypes.AccountI) bool {\n\treturn func(account authtypes.AccountI) bool {\n\t\tbalance := k.Proxy.GetAccountStakeAmperPlusRouted(ctx, account.GetAddress())\n\t\tuserStake[account.GetAccountNumber()] = uint64(balance)\n\t\treturn false\n\t}\n}\n\nfunc (k *IndexedKeeper) InitializeStakeAmpere(account uint64, stake uint64) {\n\tk.userTotalStakeAmpere[account] = stake\n\tk.userNewTotalStakeAmpere[account] = stake\n}\n\nfunc (k *IndexedKeeper) GetTotalStakesAmpere() map[uint64]uint64 {\n\treturn k.userTotalStakeAmpere\n}\n\nfunc (k *IndexedKeeper) DetectUsersStakeAmpereChange(ctx sdk.Context) bool {\n\tstakeChanged := false\n\tfor o, n := range k.userNewTotalStakeAmpere {\n\t\tif _, ok := k.userTotalStakeAmpere[o]; ok {\n\t\t\tif k.userTotalStakeAmpere[o] != n {\n\t\t\t\tstakeChanged = true\n\t\t\t\tk.userTotalStakeAmpere[o] = n\n\t\t\t}\n\t\t} else {\n\t\t\tk.userTotalStakeAmpere[o] = n\n\t\t}\n\t}\n\n\treturn stakeChanged\n}\n\nfunc (k *IndexedKeeper) UpdateAccountsStakeAmpere(ctx sdk.Context) {\n\tfor _, addr := range k.accountToUpdate {\n\t\tk.Logger(ctx).Debug(\"account to update:\", \"address\", addr.String())\n\t\tstake := k.GetAccountStakeAmperPlusRouted(ctx, addr)\n\t\tif k.accountKeeper.GetAccount(ctx, addr) == nil {\n\t\t\tk.Logger(ctx).Info(\"skipped account:\", \"address\", addr.String())\n\t\t\tcontinue\n\t\t}\n\t\taccountNumber := k.accountKeeper.GetAccount(ctx, addr).GetAccountNumber()\n\t\tk.userNewTotalStakeAmpere[accountNumber] = uint64(stake)\n\t}\n\n\t// trigger full account map rebuild in case of account' missing (and if new contract deployed)\n\t// TODO migrate logic to storage listener in sdk 46?\n\t// NOTE returns last not applied yet next! account number\n\t// equal to current length of accounts ids array, but last id is equal to next-1\n\tnextAccountNumber := k.GetNextAccountNumber(ctx)\n\tif uint64(len(k.userNewTotalStakeAmpere)) != nextAccountNumber {\n\t\tstartTime := time.Now()\n\t\tfor i := nextAccountNumber - 1; i > 0; i-- {\n\t\t\tif _, ok := k.userNewTotalStakeAmpere[i]; !ok {\n\t\t\t\tk.Logger(ctx).Info(\"added to stake index:\", \"account\", i)\n\t\t\t\t// TODO update in next release\n\t\t\t\t// stake := k.GetAccountStakeAmperPlusRouted(ctx, addr)\n\t\t\t\tk.userNewTotalStakeAmpere[i] = 0\n\t\t\t}\n\t\t}\n\t\tk.Logger(ctx).Info(\"rebuild stake index:\", \"duration\", time.Since(startTime).String())\n\t}\n\n\tk.accountToUpdate = make([]sdk.AccAddress, 0)\n}\n\nfunc (k IndexedKeeper) GetNextAccountNumber(ctx sdk.Context) uint64 {\n\tvar accNumber uint64\n\tstore := ctx.KVStore(k.authKey)\n\tbz := store.Get(authtypes.GlobalAccountNumberKey)\n\n\tif bz == nil {\n\t\taccNumber = 0\n\t} else {\n\t\tval := gogotypes.UInt64Value{}\n\n\t\terr := k.cdc.Unmarshal(bz, &val)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\n\t\taccNumber = val.GetValue()\n\t}\n\n\treturn accNumber\n}\n"
  },
  {
    "path": "x/cyberbank/keeper/proxy.go",
    "content": "package keeper\n\nimport (\n\tcontext \"context\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/query\"\n\tauthkeeper \"github.com/cosmos/cosmos-sdk/x/auth/keeper\"\n\tbank \"github.com/cosmos/cosmos-sdk/x/bank/keeper\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n\n\tctypes \"github.com/cybercongress/go-cyber/v7/types\"\n\t\"github.com/cybercongress/go-cyber/v7/x/cyberbank/types\"\n\tresourcestypes \"github.com/cybercongress/go-cyber/v7/x/resources/types\"\n)\n\nvar _ bank.Keeper = (*Proxy)(nil)\n\nconst ResourcesTransferBurnPercentage = int64(2)\n\ntype Proxy struct {\n\tbk bank.Keeper\n\tak authkeeper.AccountKeeper\n\tek types.EnergyKeeper\n\tgk types.GraphKeeper\n\n\tcoinsTransferHooks []types.CoinsTransferHook\n}\n\nfunc (p *Proxy) SpendableCoin(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin {\n\treturn p.bk.SpendableCoin(ctx, addr, denom)\n}\n\nfunc (p *Proxy) IsSendEnabledDenom(ctx sdk.Context, denom string) bool {\n\treturn p.bk.IsSendEnabledDenom(ctx, denom)\n}\n\nfunc (p *Proxy) GetSendEnabledEntry(ctx sdk.Context, denom string) (banktypes.SendEnabled, bool) {\n\treturn p.bk.GetSendEnabledEntry(ctx, denom)\n}\n\nfunc (p *Proxy) SetSendEnabled(ctx sdk.Context, denom string, value bool) {\n\tp.bk.SetSendEnabled(ctx, denom, value)\n}\n\nfunc (p *Proxy) SetAllSendEnabled(ctx sdk.Context, sendEnableds []*banktypes.SendEnabled) {\n\tp.bk.SetAllSendEnabled(ctx, sendEnableds)\n}\n\nfunc (p *Proxy) DeleteSendEnabled(ctx sdk.Context, denoms ...string) {\n\tp.bk.DeleteSendEnabled(ctx, denoms...)\n}\n\nfunc (p *Proxy) IterateSendEnabledEntries(ctx sdk.Context, cb func(denom string, sendEnabled bool) (stop bool)) {\n\tp.bk.IterateSendEnabledEntries(ctx, cb)\n}\n\nfunc (p *Proxy) GetAllSendEnabledEntries(ctx sdk.Context) []banktypes.SendEnabled {\n\treturn p.bk.GetAllSendEnabledEntries(ctx)\n}\n\nfunc (p *Proxy) GetBlockedAddresses() map[string]bool {\n\treturn p.bk.GetBlockedAddresses()\n}\n\nfunc (p *Proxy) GetAuthority() string {\n\treturn p.bk.GetAuthority()\n}\n\nfunc (p *Proxy) WithMintCoinsRestriction(fn bank.MintingRestrictionFn) bank.BaseKeeper {\n\treturn p.bk.WithMintCoinsRestriction(fn)\n}\n\nfunc (p *Proxy) HasDenomMetaData(ctx sdk.Context, denom string) bool {\n\treturn p.bk.HasDenomMetaData(ctx, denom)\n}\n\nfunc (p *Proxy) GetAllDenomMetaData(ctx sdk.Context) []banktypes.Metadata {\n\treturn p.bk.GetAllDenomMetaData(ctx)\n}\n\nfunc (p *Proxy) SpendableBalanceByDenom(ctx context.Context, request *banktypes.QuerySpendableBalanceByDenomRequest) (*banktypes.QuerySpendableBalanceByDenomResponse, error) {\n\treturn p.bk.SpendableBalanceByDenom(ctx, request)\n}\n\nfunc (p *Proxy) DenomOwners(ctx context.Context, request *banktypes.QueryDenomOwnersRequest) (*banktypes.QueryDenomOwnersResponse, error) {\n\treturn p.bk.DenomOwners(ctx, request)\n}\n\nfunc (p *Proxy) SendEnabled(ctx context.Context, request *banktypes.QuerySendEnabledRequest) (*banktypes.QuerySendEnabledResponse, error) {\n\treturn p.bk.SendEnabled(ctx, request)\n}\n\nfunc Wrap(bk bank.Keeper) *Proxy {\n\treturn &Proxy{\n\t\tbk:                 bk,\n\t\tcoinsTransferHooks: make([]types.CoinsTransferHook, 0),\n\t}\n}\n\nfunc (p *Proxy) AddHook(hook types.CoinsTransferHook) {\n\tp.coinsTransferHooks = append(p.coinsTransferHooks, hook)\n}\n\nfunc (p *Proxy) SetGridKeeper(ek types.EnergyKeeper) {\n\tp.ek = ek\n}\n\nfunc (p *Proxy) SetAccountKeeper(ak authkeeper.AccountKeeper) {\n\tp.ak = ak\n}\n\nfunc (p *Proxy) SetGraphKeeper(gk types.GraphKeeper) {\n\tp.gk = gk\n}\n\nfunc (p *Proxy) OnCoinsTransfer(ctx sdk.Context, from sdk.AccAddress, to sdk.AccAddress) {\n\tfor _, hook := range p.coinsTransferHooks {\n\t\thook(ctx, from, to)\n\t}\n}\n\nfunc (p Proxy) GetTotalSupplyVolt(ctx sdk.Context) int64 {\n\treturn p.bk.GetSupply(ctx, ctypes.VOLT).Amount.Int64()\n}\n\nfunc (p Proxy) GetTotalSupplyAmper(ctx sdk.Context) int64 {\n\treturn p.bk.GetSupply(ctx, ctypes.AMPERE).Amount.Int64()\n}\n\nfunc (p Proxy) GetAccountStakeVolt(ctx sdk.Context, addr sdk.AccAddress) int64 {\n\treturn p.bk.GetBalance(ctx, addr, ctypes.VOLT).Amount.Int64()\n}\n\nfunc (p Proxy) GetAccountStakeAmperPlusRouted(ctx sdk.Context, addr sdk.AccAddress) int64 {\n\treturn p.bk.GetBalance(ctx, addr, ctypes.AMPERE).Amount.Int64() + p.GetRoutedTo(ctx, addr).AmountOf(ctypes.AMPERE).Int64()\n}\n\nfunc (p Proxy) GetRoutedTo(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins {\n\treturn p.ek.GetRoutedToEnergy(ctx, addr)\n}\n\n// -----------------------------------------------------------------\n\nfunc (p *Proxy) InputOutputCoins(ctx sdk.Context, inputs []banktypes.Input, outputs []banktypes.Output) error {\n\terr := p.bk.InputOutputCoins(ctx, inputs, outputs)\n\tif err == nil {\n\t\tfor _, i := range inputs {\n\t\t\tinAddress, _ := sdk.AccAddressFromBech32(i.Address)\n\t\t\tp.OnCoinsTransfer(ctx, inAddress, nil)\n\t\t}\n\t\tfor _, j := range outputs {\n\t\t\toutAddress, _ := sdk.AccAddressFromBech32(j.Address)\n\t\t\tp.OnCoinsTransfer(ctx, nil, outAddress)\n\t\t}\n\t}\n\treturn err\n}\n\nfunc (p *Proxy) SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error {\n\t// Calculate 2% burn for milliampere and millivolt denoms\n\tburnCoins := sdk.NewCoins()\n\tnetCoins := sdk.NewCoins()\n\tfor _, c := range amt {\n\t\tif c.Denom == \"milliampere\" || c.Denom == \"millivolt\" {\n\t\t\tfee := c.Amount.MulRaw(ResourcesTransferBurnPercentage).QuoRaw(100)\n\t\t\tif fee.IsPositive() {\n\t\t\t\tburnCoins = burnCoins.Add(sdk.NewCoin(c.Denom, fee))\n\t\t\t\tnetAmt := c.Amount.Sub(fee)\n\t\t\t\tif netAmt.IsPositive() {\n\t\t\t\t\tnetCoins = netCoins.Add(sdk.NewCoin(c.Denom, netAmt))\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tnetCoins = netCoins.Add(c)\n\t}\n\n\t// Burn the fee portion via the resources module account\n\tif burnCoins.IsAllPositive() {\n\t\tif err := p.bk.SendCoinsFromAccountToModule(ctx, fromAddr, resourcestypes.ResourcesName, burnCoins); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := p.bk.BurnCoins(ctx, resourcestypes.ResourcesName, burnCoins); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif burnCoins.AmountOf(ctypes.VOLT).IsPositive() {\n\t\t\tp.gk.AddBurnedVolts(ctx, burnCoins.AmountOf(ctypes.VOLT).Uint64())\n\t\t}\n\t\tif burnCoins.AmountOf(ctypes.VOLT).IsPositive() {\n\t\t\tp.gk.AddBurnedAmperes(ctx, burnCoins.AmountOf(ctypes.AMPERE).Uint64())\n\t\t}\n\t}\n\n\t// Send the net amount to the recipient\n\tif netCoins.IsAllPositive() {\n\t\tif err := p.bk.SendCoins(ctx, fromAddr, toAddr, netCoins); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Fire transfer hooks once for the logical transfer\n\tp.OnCoinsTransfer(ctx, fromAddr, toAddr)\n\treturn nil\n}\n\nfunc (p *Proxy) DenomMetadata(ctx context.Context, request *banktypes.QueryDenomMetadataRequest) (*banktypes.QueryDenomMetadataResponse, error) {\n\treturn p.bk.DenomMetadata(ctx, request)\n}\n\nfunc (p *Proxy) DenomsMetadata(ctx context.Context, request *banktypes.QueryDenomsMetadataRequest) (*banktypes.QueryDenomsMetadataResponse, error) {\n\treturn p.bk.DenomsMetadata(ctx, request)\n}\n\nfunc (p *Proxy) SendCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error {\n\terr := p.bk.SendCoinsFromModuleToAccount(ctx, senderModule, recipientAddr, amt)\n\n\tif err == nil {\n\t\tp.OnCoinsTransfer(ctx, p.ak.GetModuleAddress(senderModule), recipientAddr)\n\t}\n\treturn err\n}\n\nfunc (p *Proxy) SendCoinsFromModuleToModule(ctx sdk.Context, senderModule, recipientModule string, amt sdk.Coins) error {\n\terr := p.bk.SendCoinsFromModuleToModule(ctx, senderModule, recipientModule, amt)\n\treturn err\n}\n\nfunc (p *Proxy) SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error {\n\terr := p.bk.SendCoinsFromAccountToModule(ctx, senderAddr, recipientModule, amt)\n\n\tif err == nil {\n\t\tp.OnCoinsTransfer(ctx, senderAddr, p.ak.GetModuleAddress(recipientModule))\n\t}\n\treturn err\n}\n\nfunc (p *Proxy) ValidateBalance(ctx sdk.Context, addr sdk.AccAddress) error {\n\treturn p.bk.ValidateBalance(ctx, addr)\n}\n\nfunc (p *Proxy) HasBalance(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coin) bool {\n\treturn p.bk.HasBalance(ctx, addr, amt)\n}\n\nfunc (p *Proxy) GetAllBalances(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins {\n\treturn p.bk.GetAllBalances(ctx, addr)\n}\n\nfunc (p *Proxy) GetAccountsBalances(ctx sdk.Context) []banktypes.Balance {\n\treturn p.bk.GetAccountsBalances(ctx)\n}\n\nfunc (p *Proxy) GetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin {\n\treturn p.bk.GetBalance(ctx, addr, denom)\n}\n\nfunc (p *Proxy) LockedCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins {\n\treturn p.bk.LockedCoins(ctx, addr)\n}\n\nfunc (p *Proxy) SpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins {\n\treturn p.bk.SpendableCoins(ctx, addr)\n}\n\nfunc (p *Proxy) IterateAccountBalances(ctx sdk.Context, addr sdk.AccAddress, cb func(coin sdk.Coin) (stop bool)) {\n\tp.bk.IterateAccountBalances(ctx, addr, cb)\n}\n\nfunc (p *Proxy) IterateAllBalances(ctx sdk.Context, cb func(address sdk.AccAddress, coin sdk.Coin) (stop bool)) {\n\tp.bk.IterateAllBalances(ctx, cb)\n}\n\nfunc (p *Proxy) GetParams(ctx sdk.Context) banktypes.Params {\n\treturn p.bk.GetParams(ctx)\n}\n\nfunc (p *Proxy) SetParams(ctx sdk.Context, params banktypes.Params) error {\n\treturn p.bk.SetParams(ctx, params)\n}\n\nfunc (p *Proxy) BlockedAddr(addr sdk.AccAddress) bool {\n\treturn p.bk.BlockedAddr(addr)\n}\n\nfunc (p *Proxy) InitGenesis(context sdk.Context, state *banktypes.GenesisState) {\n\tp.bk.InitGenesis(context, state)\n}\n\nfunc (p *Proxy) ExportGenesis(context sdk.Context) *banktypes.GenesisState {\n\treturn p.bk.ExportGenesis(context)\n}\n\nfunc (p *Proxy) GetSupply(ctx sdk.Context, denom string) sdk.Coin {\n\treturn p.bk.GetSupply(ctx, denom)\n}\n\nfunc (p *Proxy) IsSendEnabledCoin(ctx sdk.Context, coin sdk.Coin) bool {\n\treturn p.bk.IsSendEnabledCoin(ctx, coin)\n}\n\nfunc (p *Proxy) IsSendEnabledCoins(ctx sdk.Context, coins ...sdk.Coin) error {\n\treturn p.bk.IsSendEnabledCoins(ctx, coins...)\n}\n\nfunc (p *Proxy) GetPaginatedTotalSupply(ctx sdk.Context, pagination *query.PageRequest) (sdk.Coins, *query.PageResponse, error) {\n\treturn p.bk.GetPaginatedTotalSupply(ctx, pagination)\n}\n\nfunc (p *Proxy) IterateTotalSupply(ctx sdk.Context, cb func(sdk.Coin) bool) {\n\tp.bk.IterateTotalSupply(ctx, cb)\n}\n\nfunc (p *Proxy) GetDenomMetaData(ctx sdk.Context, denom string) (banktypes.Metadata, bool) {\n\treturn p.bk.GetDenomMetaData(ctx, denom)\n}\n\nfunc (p *Proxy) SetDenomMetaData(ctx sdk.Context, denomMetaData banktypes.Metadata) {\n\tp.bk.SetDenomMetaData(ctx, denomMetaData)\n}\n\nfunc (p *Proxy) IterateAllDenomMetaData(ctx sdk.Context, cb func(banktypes.Metadata) bool) {\n\tp.bk.IterateAllDenomMetaData(ctx, cb)\n}\n\nfunc (p *Proxy) DelegateCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error {\n\treturn p.bk.DelegateCoinsFromAccountToModule(ctx, senderAddr, recipientModule, amt)\n}\n\nfunc (p *Proxy) UndelegateCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error {\n\treturn p.bk.UndelegateCoinsFromModuleToAccount(ctx, senderModule, recipientAddr, amt)\n}\n\nfunc (p *Proxy) MintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error {\n\treturn p.bk.MintCoins(ctx, moduleName, amt)\n}\n\nfunc (p *Proxy) BurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error {\n\treturn p.bk.BurnCoins(ctx, moduleName, amt)\n}\n\nfunc (p *Proxy) DelegateCoins(ctx sdk.Context, delegatorAddr, moduleAccAddr sdk.AccAddress, amt sdk.Coins) error {\n\treturn p.bk.DelegateCoins(ctx, delegatorAddr, moduleAccAddr, amt)\n}\n\nfunc (p *Proxy) UndelegateCoins(ctx sdk.Context, moduleAccAddr, delegatorAddr sdk.AccAddress, amt sdk.Coins) error {\n\treturn p.bk.UndelegateCoins(ctx, moduleAccAddr, delegatorAddr, amt)\n}\n\nfunc (p *Proxy) Balance(ctx context.Context, request *banktypes.QueryBalanceRequest) (*banktypes.QueryBalanceResponse, error) {\n\treturn p.bk.Balance(ctx, request)\n}\n\nfunc (p *Proxy) AllBalances(ctx context.Context, request *banktypes.QueryAllBalancesRequest) (*banktypes.QueryAllBalancesResponse, error) {\n\treturn p.bk.AllBalances(ctx, request)\n}\n\nfunc (p *Proxy) TotalSupply(ctx context.Context, request *banktypes.QueryTotalSupplyRequest) (*banktypes.QueryTotalSupplyResponse, error) {\n\treturn p.bk.TotalSupply(ctx, request)\n}\n\nfunc (p *Proxy) SupplyOf(ctx context.Context, request *banktypes.QuerySupplyOfRequest) (*banktypes.QuerySupplyOfResponse, error) {\n\treturn p.bk.SupplyOf(ctx, request)\n}\n\nfunc (p *Proxy) Params(ctx context.Context, request *banktypes.QueryParamsRequest) (*banktypes.QueryParamsResponse, error) {\n\treturn p.bk.Params(ctx, request)\n}\n\nfunc (p *Proxy) SpendableBalances(ctx context.Context, request *banktypes.QuerySpendableBalancesRequest) (*banktypes.QuerySpendableBalancesResponse, error) {\n\treturn p.bk.SpendableBalances(ctx, request)\n}\n\nfunc (p *Proxy) HasSupply(ctx sdk.Context, denom string) bool {\n\treturn p.bk.HasSupply(ctx, denom)\n}\n"
  },
  {
    "path": "x/cyberbank/keeper/snapshotter.go",
    "content": "package keeper\n\nimport (\n\t\"github.com/cometbft/cometbft/libs/log\"\n\ttmproto \"github.com/cometbft/cometbft/proto/tendermint/types\"\n\tsnapshot \"github.com/cosmos/cosmos-sdk/snapshots/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cybercongress/go-cyber/v7/x/cyberbank/types\"\n)\n\nvar _ snapshot.ExtensionSnapshotter = &CyberbankSnapshotter{}\n\nconst SnapshotFormat = 1\n\ntype CyberbankSnapshotter struct {\n\tindexedKeeper *IndexedKeeper\n\tcms           sdk.MultiStore\n}\n\nfunc NewCyberbankSnapshotter(cms sdk.MultiStore, indexedKeeper *IndexedKeeper) *CyberbankSnapshotter {\n\treturn &CyberbankSnapshotter{\n\t\tindexedKeeper: indexedKeeper,\n\t\tcms:           cms,\n\t}\n}\n\nfunc (cs *CyberbankSnapshotter) SnapshotName() string {\n\treturn types.ModuleName\n}\n\nfunc (cs *CyberbankSnapshotter) SnapshotFormat() uint32 {\n\treturn SnapshotFormat\n}\n\nfunc (cs *CyberbankSnapshotter) SupportedFormats() []uint32 {\n\t// If we support older formats, add them here and handle them in Restore\n\treturn []uint32{SnapshotFormat}\n}\n\nfunc (cs *CyberbankSnapshotter) SnapshotExtension(_ uint64, _ snapshot.ExtensionPayloadWriter) error {\n\treturn nil\n}\n\nfunc (cs *CyberbankSnapshotter) RestoreExtension(height uint64, format uint32, _ snapshot.ExtensionPayloadReader) error {\n\tif format == SnapshotFormat {\n\t\tfreshCtx := sdk.NewContext(cs.cms, tmproto.Header{Height: int64(height)}, false, log.NewNopLogger())\n\n\t\t// TODO revisit with get params and case of increased rank computation blocks\n\t\tcalculationPeriod := int64(5)\n\t\trankRoundBlockNumber := (freshCtx.BlockHeight() / calculationPeriod) * calculationPeriod\n\n\t\tstore, err := cs.cms.CacheMultiStoreWithVersion(rankRoundBlockNumber)\n\t\tif err != nil {\n\t\t\tprintln(\"Error: \", err)\n\t\t}\n\t\trankCtx := sdk.NewContext(store, tmproto.Header{Height: rankRoundBlockNumber}, false, log.NewNopLogger())\n\n\t\tcs.indexedKeeper.LoadState(rankCtx, freshCtx)\n\n\t\treturn nil\n\t}\n\treturn snapshot.ErrUnknownFormat\n}\n"
  },
  {
    "path": "x/cyberbank/module.go",
    "content": "package cyberbank\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\tcodectypes \"github.com/cosmos/cosmos-sdk/codec/types\"\n\t\"github.com/gorilla/mux\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/runtime\"\n\t\"github.com/spf13/cobra\"\n\n\tabci \"github.com/cometbft/cometbft/abci/types\"\n\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/module\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/cyberbank/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/cyberbank/types\"\n)\n\nvar (\n\t_ module.AppModule      = AppModule{}\n\t_ module.AppModuleBasic = AppModuleBasic{}\n)\n\ntype AppModuleBasic struct {\n\tcdc codec.Codec\n}\n\nfunc (AppModuleBasic) Name() string { return types.ModuleName }\n\nfunc (AppModuleBasic) RegisterLegacyAminoCodec(_ *codec.LegacyAmino) {}\n\nfunc (AppModuleBasic) DefaultGenesis(_ codec.JSONCodec) json.RawMessage {\n\treturn nil\n}\n\nfunc (AppModuleBasic) ValidateGenesis(_ codec.JSONCodec, _ client.TxEncodingConfig, _ json.RawMessage) error {\n\treturn nil\n}\n\nfunc (AppModuleBasic) RegisterRESTRoutes(_ client.Context, _ *mux.Router) {}\n\nfunc (AppModuleBasic) RegisterGRPCGatewayRoutes(_ client.Context, _ *runtime.ServeMux) {}\n\nfunc (AppModuleBasic) GetTxCmd() *cobra.Command { return nil }\n\nfunc (AppModuleBasic) GetQueryCmd() *cobra.Command { return nil }\n\nfunc (AppModuleBasic) RegisterInterfaces(_ codectypes.InterfaceRegistry) {}\n\ntype AppModule struct {\n\tAppModuleBasic\n\n\tkeeper *keeper.IndexedKeeper\n}\n\nfunc NewAppModule(\n\tcdc codec.Codec,\n\tik *keeper.IndexedKeeper,\n) AppModule {\n\treturn AppModule{\n\t\tAppModuleBasic: AppModuleBasic{cdc: cdc},\n\t\tkeeper:         ik,\n\t}\n}\n\nfunc (AppModule) Name() string { return types.ModuleName }\n\nfunc (AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {}\n\nfunc (AppModule) RegisterServices(_ module.Configurator) {}\n\nfunc (am AppModule) InitGenesis(ctx sdk.Context, _ codec.JSONCodec, _ json.RawMessage) []abci.ValidatorUpdate {\n\t// this will be called by the app module manager because of null module params in genesis, used direct call in InitChainer\n\t// am.keeper.InitGenesis(ctx)\n\treturn []abci.ValidatorUpdate{}\n}\n\nfunc (AppModule) ExportGenesis(_ sdk.Context, _ codec.JSONCodec) json.RawMessage { return nil }\n\nfunc (am AppModule) ConsensusVersion() uint64 {\n\treturn 1\n}\n\nfunc (AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {}\n\nfunc (am AppModule) EndBlock(ctx sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate {\n\tEndBlocker(ctx, am.keeper)\n\treturn []abci.ValidatorUpdate{}\n}\n"
  },
  {
    "path": "x/cyberbank/spec/00_concepts.md",
    "content": "# Concepts\n\n# In-memory token balance index\n\n# Balance change hooks\n\n# Consitency of balances\n\n"
  },
  {
    "path": "x/cyberbank/spec/02_state.md",
    "content": ""
  },
  {
    "path": "x/cyberbank/spec/03_state_transitions.md",
    "content": ""
  },
  {
    "path": "x/cyberbank/spec/README.md",
    "content": "# `cyberbank`\n\n## Abstract\n\nThe cyberbank module is the module that wraps the original Cosmos-SDK's bank module while providing extra functionality:\n1. tracks of neuron's VOLTs balance change for [bandwidth](../../bandwidth/spec/README.md) module to adjust neuron's personal bandwidth\n2. keeps two in-memory indexes of AMPEREs balances for the [rank](../../rank/spec/README.md) module (one index for last calculation and one for the next one)\n3. tracking of routed to neurons resources (VOLTs and AMPEREs) from [energy](../../grid/spec/README.md) module\n\nNote: cyberbank wrapper keep all his state completely in-memory and not introduce any new modification to application storage  \n  \n\n## Contents\n\n1. **[Concepts](00_concepts.md)**\n3. **[State](02_state.md)**\n4. **[State Transitions](03_state_transitions.md)**"
  },
  {
    "path": "x/cyberbank/types/expected_keepers.go",
    "content": "package types\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tauthtypes \"github.com/cosmos/cosmos-sdk/x/auth/types\"\n)\n\ntype AccountKeeper interface {\n\tIterateAccounts(ctx sdk.Context, process func(i authtypes.AccountI) (stop bool))\n\tGetAccount(ctx sdk.Context, addr sdk.AccAddress) authtypes.AccountI\n\tGetAllAccounts(ctx sdk.Context) (accounts []authtypes.AccountI)\n}\n\ntype EnergyKeeper interface {\n\tGetRoutedToEnergy(ctx sdk.Context, delegate sdk.AccAddress) sdk.Coins\n}\n\ntype GraphKeeper interface {\n\tAddBurnedVolts(ctx sdk.Context, toBurn uint64)\n\tAddBurnedAmperes(ctx sdk.Context, toBurn uint64)\n}\n"
  },
  {
    "path": "x/cyberbank/types/hook.go",
    "content": "package types\n\nimport sdk \"github.com/cosmos/cosmos-sdk/types\"\n\ntype CoinsTransferHook = func(ctx sdk.Context, from sdk.AccAddress, to sdk.AccAddress)\n"
  },
  {
    "path": "x/cyberbank/types/keys.go",
    "content": "package types\n\nconst (\n\tModuleName = \"cyberbank\"\n)\n"
  },
  {
    "path": "x/dmn/abci.go",
    "content": "package dmn\n\nimport (\n\t\"time\"\n\n\t\"github.com/cosmos/cosmos-sdk/telemetry\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/dmn/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/dmn/types\"\n)\n\nfunc BeginBlock(ctx sdk.Context, k keeper.Keeper) {\n\tdefer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyBeginBlocker)\n\tk.ExecuteThoughtsQueue(ctx)\n\n\t// TODO add block event\n}\n"
  },
  {
    "path": "x/dmn/client/cli/query.go",
    "content": "package cli\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/cosmos/cosmos-sdk/client/flags\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/dmn/types\"\n)\n\nfunc GetQueryCmd() *cobra.Command {\n\tqueryCmd := &cobra.Command{\n\t\tUse:                        types.ModuleName,\n\t\tShort:                      fmt.Sprintf(\"Querying commands for the %s module\", types.ModuleName),\n\t\tDisableFlagParsing:         true,\n\t\tSuggestionsMinimumDistance: 2,\n\t\tRunE:                       client.ValidateCmd,\n\t}\n\n\tqueryCmd.AddCommand(\n\t\tGetCmdQueryParams(),\n\t\tGetCmdQueryThought(),\n\t\tGetCmdQueryThoughtStats(),\n\t\tGetCmdQueryThoughts(),\n\t\tGetCmdQueryThoughtsStats(),\n\t)\n\n\treturn queryCmd\n}\n\nfunc GetCmdQueryParams() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"params\",\n\t\tArgs:  cobra.NoArgs,\n\t\tShort: \"Query the current dmn module parameters information\",\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tres, err := queryClient.Params(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryParamsRequest{},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryThought() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"thought [program] [name]\",\n\t\tShort: \"Query thought\",\n\t\tArgs:  cobra.ExactArgs(2),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tprogram, err := sdk.AccAddressFromBech32(args[0])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tres, err := queryClient.Thought(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryThoughtParamsRequest{\n\t\t\t\t\tProgram: program.String(), Name: args[1],\n\t\t\t\t},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryThoughtStats() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"thought-stats [program] [name]\",\n\t\tShort: \"Query thought stats\",\n\t\tArgs:  cobra.ExactArgs(2),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tprogram, err := sdk.AccAddressFromBech32(args[0])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tres, err := queryClient.ThoughtStats(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryThoughtParamsRequest{\n\t\t\t\t\tProgram: program.String(), Name: args[1],\n\t\t\t\t},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryThoughts() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"thoughts\",\n\t\tShort: \"Query all thoughts\",\n\t\tArgs:  cobra.ExactArgs(0),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tres, err := queryClient.Thoughts(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryThoughtsRequest{},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryThoughtsStats() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"thoughts-stats\",\n\t\tShort: \"Query all thoughts stats\",\n\t\tArgs:  cobra.ExactArgs(0),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tres, err := queryClient.ThoughtsStats(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryThoughtsStatsRequest{},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n"
  },
  {
    "path": "x/dmn/exported/exported.go",
    "content": "package exported\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tparamtypes \"github.com/cosmos/cosmos-sdk/x/params/types\"\n)\n\ntype (\n\tParamSet = paramtypes.ParamSet\n\n\t// Subspace defines an interface that implements the legacy x/params Subspace\n\t// type.\n\t//\n\t// NOTE: This is used solely for migration of x/params managed parameters.\n\tSubspace interface {\n\t\tGetParamSet(ctx sdk.Context, ps ParamSet)\n\t}\n)\n"
  },
  {
    "path": "x/dmn/keeper/genesis.go",
    "content": "package keeper\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/dmn/types\"\n)\n\nfunc InitGenesis(ctx sdk.Context, k Keeper, data types.GenesisState) {\n\terr := k.SetParams(ctx, data.Params)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc ExportGenesis(ctx sdk.Context, k Keeper) *types.GenesisState {\n\tparams := k.GetParams(ctx)\n\n\treturn types.NewGenesisState(params)\n}\n"
  },
  {
    "path": "x/dmn/keeper/grpc_query.go",
    "content": "package keeper\n\nimport (\n\t\"context\"\n\n\tctypes \"github.com/cybercongress/go-cyber/v7/types\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/status\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/dmn/types\"\n)\n\nvar _ types.QueryServer = Keeper{}\n\nfunc (k Keeper) Params(goCtx context.Context, request *types.QueryParamsRequest) (*types.QueryParamsResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\tparams := k.GetParams(ctx)\n\n\treturn &types.QueryParamsResponse{Params: params}, nil\n}\n\nfunc (k Keeper) Thought(goCtx context.Context, request *types.QueryThoughtParamsRequest) (*types.QueryThoughtResponse, error) {\n\tif request == nil {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tif request.Program == \"\" {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"program address cannot be empty\")\n\t}\n\n\tif request.Name == \"\" {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"thought name cannot be empty\")\n\t}\n\n\tprogram, err := sdk.AccAddressFromBech32(request.Program)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tthought, found := k.GetThought(ctx, program, request.Name)\n\tif !found {\n\t\treturn nil, status.Errorf(codes.NotFound, \"thought with program %s and name %s not found\", request.Program, request.Name)\n\t}\n\n\treturn &types.QueryThoughtResponse{Thought: thought}, nil\n}\n\nfunc (k Keeper) ThoughtStats(goCtx context.Context, request *types.QueryThoughtParamsRequest) (*types.QueryThoughtStatsResponse, error) {\n\tif request == nil {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tif request.Program == \"\" {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"program address cannot be empty\")\n\t}\n\n\tif request.Name == \"\" {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"thought name cannot be empty\")\n\t}\n\n\tprogram, err := sdk.AccAddressFromBech32(request.Program)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tthoughtStats, found := k.GetThoughtStats(ctx, program, request.Name)\n\tif !found {\n\t\treturn nil, status.Errorf(codes.NotFound, \"thought stats with program %s and name %s not found\", request.Program, request.Name)\n\t}\n\n\treturn &types.QueryThoughtStatsResponse{ThoughtStats: thoughtStats}, nil\n}\n\nfunc (k Keeper) Thoughts(goCtx context.Context, _ *types.QueryThoughtsRequest) (*types.QueryThoughtsResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tthoughts := k.GetAllThoughts(ctx)\n\n\treturn &types.QueryThoughtsResponse{Thoughts: thoughts}, nil\n}\n\nfunc (k Keeper) ThoughtsStats(goCtx context.Context, _ *types.QueryThoughtsStatsRequest) (*types.QueryThoughtsStatsResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tthoughtsStats := k.GetAllThoughtsStats(ctx)\n\n\treturn &types.QueryThoughtsStatsResponse{ThoughtsStats: thoughtsStats}, nil\n}\n\nfunc (k Keeper) ThoughtsFees(goCtx context.Context, _ *types.QueryThoughtsFeesRequest) (*types.QueryThoughtsFeesResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tthoughts := k.GetAllThoughts(ctx)\n\tif len(thoughts) == 0 {\n\t\treturn &types.QueryThoughtsFeesResponse{Fees: sdk.NewCoins(ctypes.NewCybCoin(0))}, nil\n\t}\n\tthoughts.Sort()\n\n\tvar fees sdk.Coins\n\tfor _, thought := range thoughts {\n\t\tfees = append(fees, thought.Load.GasPrice)\n\t}\n\treturn &types.QueryThoughtsFeesResponse{Fees: fees}, nil\n}\n"
  },
  {
    "path": "x/dmn/keeper/keeper.go",
    "content": "package keeper\n\nimport (\n\t\"encoding/base64\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\n\tstoretypes \"github.com/cosmos/cosmos-sdk/store/types\"\n\n\t\"github.com/CosmWasm/wasmd/x/wasm\"\n\t\"github.com/cometbft/cometbft/libs/log\"\n\t\"github.com/cosmos/cosmos-sdk/telemetry\"\n\tsdkerrors \"github.com/cosmos/cosmos-sdk/types/errors\"\n\tauthtypes \"github.com/cosmos/cosmos-sdk/x/auth/types\"\n\tparamstypes \"github.com/cosmos/cosmos-sdk/x/params/types\"\n\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\tctypes \"github.com/cybercongress/go-cyber/v7/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/dmn/types\"\n\tgraphtypes \"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n)\n\n// Keeper of the power store\ntype Keeper struct {\n\tstoreKey      storetypes.StoreKey\n\tcdc           codec.BinaryCodec\n\twasmKeeper    wasm.Keeper\n\taccountKeeper types.AccountKeeper\n\tproxyKeeper   types.BankKeeper\n\tparamspace    paramstypes.Subspace\n\n\tauthority string\n}\n\nfunc NewKeeper(\n\tcdc codec.BinaryCodec,\n\tkey storetypes.StoreKey,\n\tbk types.BankKeeper,\n\tak types.AccountKeeper,\n\tauthority string,\n) *Keeper {\n\treturn &Keeper{\n\t\tstoreKey:      key,\n\t\tcdc:           cdc,\n\t\tproxyKeeper:   bk,\n\t\taccountKeeper: ak,\n\t\tauthority:     authority,\n\t}\n}\n\nfunc (k *Keeper) SetWasmKeeper(ws wasm.Keeper) {\n\tk.wasmKeeper = ws\n}\n\n// GetAuthority returns the x/mint module's authority.\nfunc (k Keeper) GetAuthority() string { return k.authority }\n\nfunc (k Keeper) Logger(ctx sdk.Context) log.Logger {\n\treturn ctx.Logger().With(\"module\", fmt.Sprintf(\"x/%s\", types.ModuleName))\n}\n\nfunc (k Keeper) SetParams(ctx sdk.Context, p types.Params) error {\n\tif err := p.Validate(); err != nil {\n\t\treturn err\n\t}\n\n\tstore := ctx.KVStore(k.storeKey)\n\tbz := k.cdc.MustMarshal(&p)\n\tstore.Set(types.ParamsKey, bz)\n\n\treturn nil\n}\n\nfunc (k Keeper) GetParams(ctx sdk.Context) (p types.Params) {\n\tstore := ctx.KVStore(k.storeKey)\n\tbz := store.Get(types.ParamsKey)\n\tif bz == nil {\n\t\treturn p\n\t}\n\n\tk.cdc.MustUnmarshal(bz, &p)\n\treturn p\n}\n\nfunc (k Keeper) SaveThought(\n\tctx sdk.Context, program sdk.AccAddress,\n\ttrigger types.Trigger, load types.Load,\n\tname string, particle graphtypes.Cid,\n) error {\n\tif trigger.Block != 0 && ctx.BlockHeight() > int64(trigger.Block) {\n\t\treturn types.ErrBadTrigger\n\t}\n\n\t// if there are full slots but new one with higher fee than delete thought with\n\t// the smallest one fee and add new one with higher fee\n\tthoughts := k.GetAllThoughts(ctx)\n\tthoughts.Sort()\n\tif uint32(len(thoughts)) == k.MaxThougths(ctx) {\n\t\tif thoughts[len(thoughts)-1].Load.GasPrice.IsLT(load.GasPrice) {\n\t\t\tpr, _ := sdk.AccAddressFromBech32(thoughts[len(thoughts)-1].Program)\n\t\t\tk.DeleteThought(ctx, pr, thoughts[len(thoughts)-1].Name)\n\t\t\tk.DeleteThoughtStats(ctx, pr, name)\n\t\t} else {\n\t\t\treturn types.ErrExceededMaxThoughts\n\t\t}\n\t}\n\n\tk.SetThought(ctx, types.NewThought(\n\t\tprogram.String(),\n\t\ttrigger, load,\n\t\tname, string(particle),\n\t))\n\t// set last_block to current height to start count future ttl fee\n\tk.SetThoughtStats(ctx, program, name,\n\t\ttypes.NewStats(\n\t\t\tprogram.String(), name,\n\t\t\t0, 0, 0, uint64(ctx.BlockHeight()),\n\t\t),\n\t)\n\n\treturn nil\n}\n\nfunc (k Keeper) RemoveThoughtFull(\n\tctx sdk.Context, program sdk.AccAddress, name string,\n) error {\n\t_, found := k.GetThought(ctx, program, name)\n\tif !found {\n\t\treturn types.ErrThoughtNotExist\n\t}\n\n\tk.DeleteThought(ctx, program, name)\n\tk.DeleteThoughtStats(ctx, program, name)\n\n\treturn nil\n}\n\nfunc (k Keeper) UpdateThoughtParticle(\n\tctx sdk.Context, program sdk.AccAddress, name string,\n\tparticle graphtypes.Cid,\n) error {\n\tthought, found := k.GetThought(ctx, program, name)\n\tif !found {\n\t\treturn types.ErrThoughtNotExist\n\t}\n\n\tk.SetThought(ctx, types.NewThought(\n\t\tthought.Program,\n\t\tthought.Trigger, thought.Load,\n\t\tthought.Name, string(particle),\n\t))\n\n\treturn nil\n}\n\nfunc (k Keeper) UpdateThoughtName(\n\tctx sdk.Context, program sdk.AccAddress, name string,\n\tnameNew string,\n) error {\n\tthought, found := k.GetThought(ctx, program, name)\n\tif !found {\n\t\treturn types.ErrThoughtNotExist\n\t}\n\tthoughtStats, _ := k.GetThoughtStats(ctx, program, name)\n\n\tif thought.Name == nameNew {\n\t\treturn types.ErrBadName\n\t}\n\n\tk.DeleteThought(ctx, program, name)\n\tk.DeleteThoughtStats(ctx, program, name)\n\n\tk.SetThought(ctx, types.NewThought(\n\t\tthought.Program,\n\t\tthought.Trigger, thought.Load,\n\t\tnameNew, thought.Particle,\n\t))\n\n\tk.SetThoughtStats(ctx, program, nameNew,\n\t\ttypes.NewStats(\n\t\t\tprogram.String(), nameNew,\n\t\t\tthoughtStats.Calls, thoughtStats.Fees, thoughtStats.Fees, thoughtStats.LastBlock,\n\t\t))\n\n\treturn nil\n}\n\nfunc (k Keeper) UpdateThoughtCallData(\n\tctx sdk.Context, program sdk.AccAddress, name string,\n\tcalldata string,\n) error {\n\tthought, found := k.GetThought(ctx, program, name)\n\tif !found {\n\t\treturn types.ErrThoughtNotExist\n\t}\n\n\tk.SetThought(ctx, types.NewThought(\n\t\tthought.Program,\n\t\tthought.Trigger, types.NewLoad(calldata, thought.Load.GasPrice),\n\t\tthought.Name, thought.Particle,\n\t))\n\n\treturn nil\n}\n\nfunc (k Keeper) UpdateThoughtGasPrice(\n\tctx sdk.Context, program sdk.AccAddress, name string,\n\tgasprice sdk.Coin,\n) error {\n\tthought, found := k.GetThought(ctx, program, name)\n\tif !found {\n\t\treturn types.ErrThoughtNotExist\n\t}\n\n\tk.SetThought(ctx, types.NewThought(\n\t\tthought.Program,\n\t\tthought.Trigger, types.NewLoad(thought.Load.Input, gasprice),\n\t\tthought.Name, thought.Particle,\n\t))\n\n\treturn nil\n}\n\nfunc (k Keeper) UpdateThoughtPeriod(\n\tctx sdk.Context, program sdk.AccAddress, name string,\n\tperiod uint64,\n) error {\n\tthought, found := k.GetThought(ctx, program, name)\n\tif !found {\n\t\treturn types.ErrThoughtNotExist\n\t}\n\n\tif thought.Trigger.Block > 0 {\n\t\treturn types.ErrConvertTrigger\n\t}\n\n\tk.SetThought(ctx, types.NewThought(\n\t\tthought.Program,\n\t\ttypes.NewTrigger(period, thought.Trigger.Block), thought.Load,\n\t\tthought.Name, thought.Particle,\n\t))\n\n\treturn nil\n}\n\nfunc (k Keeper) UpdateThoughtBlock(\n\tctx sdk.Context, program sdk.AccAddress, name string,\n\tblock uint64,\n) error {\n\tthought, found := k.GetThought(ctx, program, name)\n\tif !found {\n\t\treturn types.ErrThoughtNotExist\n\t}\n\n\tif ctx.BlockHeight() >= int64(block) {\n\t\treturn types.ErrBadTrigger\n\t}\n\n\tif thought.Trigger.Period > 0 {\n\t\treturn types.ErrConvertTrigger\n\t}\n\n\tk.SetThought(ctx, types.NewThought(\n\t\tthought.Program,\n\t\ttypes.NewTrigger(thought.Trigger.Period, block), thought.Load,\n\t\tthought.Name, thought.Particle,\n\t))\n\n\treturn nil\n}\n\nfunc (k Keeper) MaxThougths(ctx sdk.Context) (res uint32) {\n\treturn k.GetParams(ctx).MaxSlots\n}\n\nfunc (k Keeper) MaxGas(ctx sdk.Context) (res uint32) {\n\treturn k.GetParams(ctx).MaxGas\n}\n\nfunc (k Keeper) FeeTTL(ctx sdk.Context) (res uint32) {\n\treturn k.GetParams(ctx).FeeTtl\n}\n\nfunc (k Keeper) SetThought(ctx sdk.Context, thought types.Thought) {\n\tstore := ctx.KVStore(k.storeKey)\n\tb := k.cdc.MustMarshal(&thought)\n\n\tprogram, _ := sdk.AccAddressFromBech32(thought.Program)\n\tstore.Set(types.GetThoughtKey(program, thought.Name), b)\n}\n\nfunc (k Keeper) DeleteThought(ctx sdk.Context, program sdk.AccAddress, name string) {\n\tstore := ctx.KVStore(k.storeKey)\n\tstore.Delete(types.GetThoughtKey(program, name))\n}\n\nfunc (k Keeper) SetThoughts(ctx sdk.Context, thoughts types.Thoughts) error {\n\tfor _, thought := range thoughts {\n\t\tk.SetThought(ctx, types.NewThought(\n\t\t\tthought.Program,\n\t\t\tthought.Trigger, thought.Load,\n\t\t\tthought.Name, thought.Particle,\n\t\t))\n\t}\n\treturn nil\n}\n\nfunc (k Keeper) SetThoughtStats(ctx sdk.Context, program sdk.AccAddress, name string, stats types.ThoughtStats) {\n\tstore := ctx.KVStore(k.storeKey)\n\tb := k.cdc.MustMarshal(&stats)\n\tstore.Set(types.GetThoughtStatsKey(program, name), b)\n}\n\nfunc (k Keeper) DeleteThoughtStats(ctx sdk.Context, program sdk.AccAddress, name string) {\n\tstore := ctx.KVStore(k.storeKey)\n\tstore.Delete(types.GetThoughtStatsKey(program, name))\n}\n\nfunc (k Keeper) GetThought(ctx sdk.Context, program sdk.AccAddress, name string) (thought types.Thought, found bool) {\n\tstore := ctx.KVStore(k.storeKey)\n\tkey := types.GetThoughtKey(program, name)\n\n\tvalue := store.Get(key)\n\tif value == nil {\n\t\treturn thought, false\n\t}\n\n\tk.cdc.MustUnmarshal(value, &thought)\n\n\treturn thought, true\n}\n\nfunc (k Keeper) GetAllThoughts(ctx sdk.Context) (thoughts types.Thoughts) {\n\tk.IterateAllThoughts(ctx, func(thought types.Thought) bool {\n\t\tthoughts = append(thoughts, thought)\n\t\treturn false\n\t})\n\n\treturn thoughts\n}\n\nfunc (k Keeper) GetAllThoughtsStats(ctx sdk.Context) (thoughtsStats types.ThoughtsStats) {\n\tk.IterateAllThoughtsStats(ctx, func(thoughtStats types.ThoughtStats) bool {\n\t\tthoughtsStats = append(thoughtsStats, thoughtStats)\n\t\treturn false\n\t})\n\n\treturn thoughtsStats\n}\n\nfunc (k Keeper) IterateAllThoughtsStats(ctx sdk.Context, cb func(thoughtStats types.ThoughtStats) (stop bool)) {\n\tstore := ctx.KVStore(k.storeKey)\n\n\titerator := sdk.KVStorePrefixIterator(store, types.ThoughtStatsKey)\n\tdefer iterator.Close()\n\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tvar thoughtStats types.ThoughtStats\n\t\tk.cdc.MustUnmarshal(iterator.Value(), &thoughtStats)\n\t\tif cb(thoughtStats) {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\nfunc (k Keeper) IterateAllThoughts(ctx sdk.Context, cb func(thought types.Thought) (stop bool)) {\n\tstore := ctx.KVStore(k.storeKey)\n\n\titerator := sdk.KVStorePrefixIterator(store, types.ThoughtKey)\n\tdefer iterator.Close()\n\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tvar thought types.Thought\n\t\tk.cdc.MustUnmarshal(iterator.Value(), &thought)\n\t\tif cb(thought) {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\nfunc (k Keeper) GetThoughtStats(ctx sdk.Context, program sdk.AccAddress, name string) (stats types.ThoughtStats, found bool) {\n\tstore := ctx.KVStore(k.storeKey)\n\tkey := types.GetThoughtStatsKey(program, name)\n\n\tvalue := store.Get(key)\n\tif value == nil {\n\t\treturn stats, false\n\t}\n\n\tk.cdc.MustUnmarshal(value, &stats)\n\n\treturn stats, true\n}\n\nfunc (k Keeper) ExecuteThoughtsQueue(ctx sdk.Context) {\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\tswitch rType := r.(type) {\n\t\t\tcase sdk.ErrorOutOfGas:\n\t\t\t\terrorMsg := fmt.Sprintf(\n\t\t\t\t\t\"out of gas in location: %v; gasUsed: %d\",\n\t\t\t\t\trType.Descriptor, ctx.GasMeter().GasConsumed(),\n\t\t\t\t)\n\t\t\t\tk.Logger(ctx).Error(sdkerrors.Wrap(sdkerrors.ErrOutOfGas, errorMsg).Error())\n\t\t\tdefault:\n\t\t\t\t// Not ErrorOutOfGas, so panic again.\n\t\t\t\tpanic(r)\n\t\t\t}\n\t\t}\n\t}()\n\n\tthoughts := k.GetAllThoughts(ctx)\n\tthoughts.Sort()\n\n\tmaxGas := k.MaxGas(ctx)\n\tgasBeforeDmn := ctx.GasMeter().GasConsumed()\n\tgasUsedTotal := sdk.Gas(0)\n\n\tfeeTTL := k.FeeTTL(ctx)\n\tmaxThoughts := k.MaxThougths(ctx)\n\tmaxGasPerThought := maxGas / maxThoughts\n\n\tif thoughts.Len() > 0 {\n\t\tk.Logger(ctx).Info(\"Thoughts in queue\", \"size\", thoughts.Len())\n\t}\n\n\tvar thoughtsTriggered uint32\n\tfor i, thought := range thoughts {\n\t\tif (thought.Trigger.Period != 0 && ctx.BlockHeight()%int64(thought.Trigger.Period) == 0) ||\n\t\t\t(thought.Trigger.Period == 0 && ctx.BlockHeight() == int64(thought.Trigger.Block)) {\n\t\t\tprice := thought.Load.GasPrice\n\n\t\t\tk.Logger(ctx).Info(\"Started thought\", \"number\", i, \"gas price\", price)\n\t\t\tthoughtsTriggered++\n\n\t\t\tcacheContext, writeFn := ctx.CacheContext()\n\t\t\tcacheContext = cacheContext.WithGasMeter(sdk.NewGasMeter(sdk.Gas(maxGasPerThought)))\n\n\t\t\tk.Logger(ctx).Info(\"Context gas stats before thought execution\",\n\t\t\t\t\"consumed\", ctx.GasMeter().GasConsumed(),\n\t\t\t)\n\n\t\t\tremained := ctx.GasMeter().Limit() - ctx.GasMeter().GasConsumedToLimit()\n\t\t\tif remained < uint64(maxGasPerThought) {\n\t\t\t\tk.Logger(ctx).Info(\"Thought break, not enough gas\", \"thought #\", i)\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tprogram, _ := sdk.AccAddressFromBech32(thought.Program)\n\t\t\t_, errExecute := k.executeThoughtWithSudo(\n\t\t\t\tcacheContext, program, thought.Load.Input,\n\t\t\t)\n\n\t\t\tgasUsedByThought := cacheContext.GasMeter().GasConsumed()\n\t\t\tctx.GasMeter().ConsumeGas(gasUsedByThought, \"thought execution\")\n\t\t\tif gasUsedTotal+gasUsedByThought > uint64(maxGas) {\n\t\t\t\tbreak\n\t\t\t} else {\n\t\t\t\tgasUsedTotal += gasUsedByThought\n\t\t\t}\n\n\t\t\tjs, _ := k.GetThoughtStats(ctx, program, thought.Name)\n\t\t\t// TODO move to more advanced fee system, 10X fee reducer applied (min 0.1 per gas)\n\t\t\tamtGasFee := price.Amount.Int64() * int64(gasUsedByThought) / 10\n\t\t\tamtTTLFee := (ctx.BlockHeight() - int64(js.LastBlock)) * int64(feeTTL)\n\t\t\tamtTotalFee := amtGasFee + amtTTLFee\n\n\t\t\tk.Logger(ctx).Info(\"Gas thought execution stats\",\n\t\t\t\t\"used\", gasUsedByThought,\n\t\t\t\t\"gas fee\", amtGasFee,\n\t\t\t\t\"ttl fee\", amtTTLFee,\n\t\t\t\t\"total fee\", amtTotalFee,\n\t\t\t)\n\n\t\t\tfee := sdk.NewCoin(ctypes.CYB, sdk.NewInt(amtTotalFee))\n\n\t\t\terrSend := k.proxyKeeper.SendCoins(\n\t\t\t\tctx, program, k.accountKeeper.GetModuleAddress(authtypes.FeeCollectorName), sdk.NewCoins(fee))\n\t\t\tif errSend != nil {\n\t\t\t\tk.DeleteThought(ctx, program, thought.Name)\n\t\t\t\tk.DeleteThoughtStats(ctx, program, thought.Name)\n\n\t\t\t\tk.Logger(ctx).Info(\"Not enough program balance, state not applied, thought forgotten\", \"Thought #\", i)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif errExecute != nil {\n\t\t\t\tk.Logger(ctx).Info(\"Thought failed, state not applied\", \"Thought #\", i)\n\t\t\t\tk.Logger(ctx).Info(\"Failed with error: \", \"Error\", errExecute.Error())\n\t\t\t} else {\n\t\t\t\twriteFn() // apply cached context\n\t\t\t\tk.Logger(ctx).Info(\"Thought finished, state applied\", \"Thought #\", i)\n\t\t\t}\n\n\t\t\tk.SetThoughtStats(ctx, program, thought.Name,\n\t\t\t\ttypes.NewStats(\n\t\t\t\t\tprogram.String(), thought.Name,\n\t\t\t\t\tjs.Calls+1, js.Fees+uint64(amtTotalFee),\n\t\t\t\t\tjs.Gas+gasUsedByThought, uint64(ctx.BlockHeight())),\n\t\t\t)\n\n\t\t\tif ctx.BlockHeight() == int64(thought.Trigger.Block) {\n\t\t\t\tk.DeleteThought(ctx, program, thought.Name)\n\t\t\t\tk.DeleteThoughtStats(ctx, program, thought.Name)\n\n\t\t\t\tk.Logger(ctx).Info(\"Thought executed at given block, deleted from queue\", \"Thought #\", i)\n\t\t\t}\n\t\t}\n\t}\n\n\tgasAfterDmn := ctx.GasMeter().GasConsumed()\n\tif thoughtsTriggered > 0 {\n\t\tk.Logger(ctx).Info(\"Total dmn gas used\", \"Gas used\", gasAfterDmn-gasBeforeDmn)\n\t}\n}\n\nfunc (k Keeper) executeThoughtWithSudo(ctx sdk.Context, program sdk.AccAddress, msg string) ([]byte, error) {\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\tswitch rType := r.(type) {\n\t\t\tcase sdk.ErrorOutOfGas:\n\t\t\t\terrorMsg := fmt.Sprintf(\n\t\t\t\t\t\"out of gas in location: %v; gasUsed: %d\",\n\t\t\t\t\trType.Descriptor, ctx.GasMeter().GasConsumed(),\n\t\t\t\t)\n\t\t\t\tk.Logger(ctx).Error(sdkerrors.Wrap(sdkerrors.ErrOutOfGas, errorMsg).Error())\n\t\t\tdefault:\n\t\t\t\t// Not ErrorOutOfGas, so panic again.\n\t\t\t\tpanic(r)\n\t\t\t}\n\t\t}\n\t\ttelemetry.IncrCounter(1.0, types.ModuleName, \"thought\")\n\t}()\n\n\tcallData, berr := base64.StdEncoding.DecodeString(msg)\n\tif berr != nil {\n\t\t// TODO remove hex later as deprecated\n\t\t_, herr := hex.DecodeString(msg)\n\t\tif herr != nil {\n\t\t\treturn nil, types.ErrBadCallData\n\t\t}\n\t}\n\treturn k.wasmKeeper.Sudo(ctx, program, callData)\n}\n"
  },
  {
    "path": "x/dmn/keeper/migrator.go",
    "content": "package keeper\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/dmn/exported\"\n\tv2 \"github.com/cybercongress/go-cyber/v7/x/dmn/migrations/v2\"\n)\n\n// Migrator is a struct for handling in-place state migrations.\ntype Migrator struct {\n\tkeeper         Keeper\n\tlegacySubspace exported.Subspace\n}\n\nfunc NewMigrator(k Keeper, ss exported.Subspace) Migrator {\n\treturn Migrator{\n\t\tkeeper:         k,\n\t\tlegacySubspace: ss,\n\t}\n}\n\nfunc (m Migrator) Migrate1to2(ctx sdk.Context) error {\n\treturn v2.Migrate(ctx, ctx.KVStore(m.keeper.storeKey), m.legacySubspace, m.keeper.cdc)\n}\n"
  },
  {
    "path": "x/dmn/keeper/msg_server.go",
    "content": "package keeper\n\nimport (\n\t\"context\"\n\n\tgovtypes \"github.com/cosmos/cosmos-sdk/x/gov/types\"\n\n\t\"cosmossdk.io/errors\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/dmn/types\"\n\tgraph \"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n)\n\ntype msgServer struct {\n\tKeeper\n}\n\nfunc NewMsgServerImpl(\n\tkeeper Keeper,\n) types.MsgServer {\n\treturn &msgServer{\n\t\tkeeper,\n\t}\n}\n\nvar _ types.MsgServer = msgServer{}\n\nfunc (k msgServer) CreateThought(goCtx context.Context, msg *types.MsgCreateThought) (*types.MsgCreateThoughtResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tprogram, _ := sdk.AccAddressFromBech32(msg.Program)\n\n\terr := k.SaveThought(\n\t\tctx, program,\n\t\tmsg.Trigger, msg.Load,\n\t\tmsg.Name, graph.Cid(msg.Particle),\n\t)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\tsdk.EventTypeMessage,\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),\n\t\t\tsdk.NewAttribute(sdk.AttributeKeySender, msg.Program),\n\t\t),\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeCreateThought,\n\t\t\tsdk.NewAttribute(types.AttributeKeyThoughtProgram, msg.Program),\n\t\t\tsdk.NewAttribute(types.AttributeKeyThoughtTrigger, msg.Trigger.String()),\n\t\t\tsdk.NewAttribute(types.AttributeKeyThoughtLoad, msg.Load.String()),\n\t\t\tsdk.NewAttribute(types.AttributeKeyThoughtName, msg.Name),\n\t\t\tsdk.NewAttribute(types.AttributeKeyThoughtParticle, msg.Particle),\n\t\t),\n\t})\n\n\treturn &types.MsgCreateThoughtResponse{}, nil\n}\n\nfunc (k msgServer) ForgetThought(goCtx context.Context, msg *types.MsgForgetThought) (*types.MsgForgetThoughtResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tprogram, _ := sdk.AccAddressFromBech32(msg.Program)\n\n\terr := k.RemoveThoughtFull(ctx, program, msg.Name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\tsdk.EventTypeMessage,\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),\n\t\t\tsdk.NewAttribute(sdk.AttributeKeySender, msg.Program),\n\t\t),\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeForgetThought,\n\t\t\tsdk.NewAttribute(types.AttributeKeyThoughtProgram, msg.Program),\n\t\t),\n\t})\n\n\treturn &types.MsgForgetThoughtResponse{}, nil\n}\n\nfunc (k msgServer) ChangeThoughtParticle(goCtx context.Context, msg *types.MsgChangeThoughtParticle) (*types.MsgChangeThoughtParticleResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tprogram, _ := sdk.AccAddressFromBech32(msg.Program)\n\n\terr := k.UpdateThoughtParticle(ctx, program, msg.Name, graph.Cid(msg.Particle))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\tsdk.EventTypeMessage,\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),\n\t\t\tsdk.NewAttribute(sdk.AttributeKeySender, msg.Program),\n\t\t),\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeChangeThoughtParticle,\n\t\t\tsdk.NewAttribute(types.AttributeKeyThoughtProgram, msg.Program),\n\t\t\tsdk.NewAttribute(types.AttributeKeyThoughtParticle, msg.Particle),\n\t\t),\n\t})\n\n\treturn &types.MsgChangeThoughtParticleResponse{}, nil\n}\n\nfunc (k msgServer) ChangeThoughtName(goCtx context.Context, msg *types.MsgChangeThoughtName) (*types.MsgChangeThoughtNameResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tprogram, _ := sdk.AccAddressFromBech32(msg.Program)\n\n\terr := k.UpdateThoughtName(ctx, program, msg.Name, msg.NewName)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\tsdk.EventTypeMessage,\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),\n\t\t\tsdk.NewAttribute(sdk.AttributeKeySender, msg.Program),\n\t\t),\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeChangeThoughtName,\n\t\t\tsdk.NewAttribute(types.AttributeKeyThoughtProgram, msg.Program),\n\t\t\tsdk.NewAttribute(types.AttributeKeyThoughtName, msg.Name),\n\t\t),\n\t})\n\n\treturn &types.MsgChangeThoughtNameResponse{}, nil\n}\n\nfunc (k msgServer) ChangeThoughtInput(goCtx context.Context, msg *types.MsgChangeThoughtInput) (*types.MsgChangeThoughtInputResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tprogram, _ := sdk.AccAddressFromBech32(msg.Program)\n\n\terr := k.UpdateThoughtCallData(ctx, program, msg.Name, msg.Input)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\tsdk.EventTypeMessage,\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),\n\t\t\tsdk.NewAttribute(sdk.AttributeKeySender, msg.Program),\n\t\t),\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeChangeThoughtInput,\n\t\t\tsdk.NewAttribute(types.AttributeKeyThoughtProgram, msg.Program),\n\t\t\tsdk.NewAttribute(types.AttributeKeyThoughtInput, msg.Input),\n\t\t),\n\t})\n\n\treturn &types.MsgChangeThoughtInputResponse{}, nil\n}\n\nfunc (k msgServer) ChangeThoughtGasPrice(goCtx context.Context, msg *types.MsgChangeThoughtGasPrice) (*types.MsgChangeThoughtGasPriceResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tprogram, _ := sdk.AccAddressFromBech32(msg.Program)\n\n\terr := k.UpdateThoughtGasPrice(ctx, program, msg.Name, msg.GasPrice)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\tsdk.EventTypeMessage,\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),\n\t\t\tsdk.NewAttribute(sdk.AttributeKeySender, msg.Program),\n\t\t),\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeChangeThoughtGasPrice,\n\t\t\tsdk.NewAttribute(types.AttributeKeyThoughtProgram, msg.Program),\n\t\t\tsdk.NewAttribute(types.AttributeKeyThoughtGasPrice, msg.GasPrice.String()),\n\t\t),\n\t})\n\n\treturn &types.MsgChangeThoughtGasPriceResponse{}, nil\n}\n\nfunc (k msgServer) ChangeThoughtPeriod(goCtx context.Context, msg *types.MsgChangeThoughtPeriod) (*types.MsgChangeThoughtPeriodResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tprogram, _ := sdk.AccAddressFromBech32(msg.Program)\n\n\terr := k.UpdateThoughtPeriod(ctx, program, msg.Name, msg.Period)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\tsdk.EventTypeMessage,\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),\n\t\t\tsdk.NewAttribute(sdk.AttributeKeySender, msg.Program),\n\t\t),\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeChangeThoughtPeriod,\n\t\t\tsdk.NewAttribute(types.AttributeKeyThoughtProgram, msg.Program),\n\t\t\t// TODO:update later\n\t\t\tsdk.NewAttribute(types.AttributeKeyThoughtPeriod, string(msg.Period)), //nolint:govet\n\t\t),\n\t})\n\n\treturn &types.MsgChangeThoughtPeriodResponse{}, nil\n}\n\nfunc (k msgServer) ChangeThoughtBlock(goCtx context.Context, msg *types.MsgChangeThoughtBlock) (*types.MsgChangeThoughtBlockResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tprogram, _ := sdk.AccAddressFromBech32(msg.Program)\n\n\terr := k.UpdateThoughtBlock(ctx, program, msg.Name, msg.Block)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\tsdk.EventTypeMessage,\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),\n\t\t\tsdk.NewAttribute(sdk.AttributeKeySender, msg.Program),\n\t\t),\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeChangeThoughtBlock,\n\t\t\tsdk.NewAttribute(types.AttributeKeyThoughtProgram, msg.Program),\n\t\t\t// TODO:update later\n\t\t\tsdk.NewAttribute(types.AttributeKeyThoughtBlock, string(msg.Block)), //nolint:govet\n\t\t),\n\t})\n\n\treturn &types.MsgChangeThoughtBlockResponse{}, nil\n}\n\nfunc (server msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) {\n\tif server.authority != req.Authority {\n\t\treturn nil, errors.Wrapf(govtypes.ErrInvalidSigner, \"invalid authority; expected %s, got %s\", server.authority, req.Authority)\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\tif err := server.SetParams(ctx, req.Params); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &types.MsgUpdateParamsResponse{}, nil\n}\n"
  },
  {
    "path": "x/dmn/migrations/v2/migrate.go",
    "content": "package v2\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/dmn/exported\"\n\t\"github.com/cybercongress/go-cyber/v7/x/dmn/types\"\n)\n\nfunc Migrate(\n\tctx sdk.Context,\n\tstore sdk.KVStore,\n\tlegacySubspace exported.Subspace,\n\tcdc codec.BinaryCodec,\n) error {\n\tvar currParams types.Params\n\tlegacySubspace.GetParamSet(ctx, &currParams)\n\n\tif err := currParams.Validate(); err != nil {\n\t\treturn err\n\t}\n\n\tbz := cdc.MustMarshal(&currParams)\n\tstore.Set(types.ParamsKey, bz)\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/dmn/module.go",
    "content": "package dmn\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\tcodectypes \"github.com/cosmos/cosmos-sdk/codec/types\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/runtime\"\n\t\"github.com/spf13/cobra\"\n\n\tabci \"github.com/cometbft/cometbft/abci/types\"\n\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/module\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/dmn/client/cli\"\n\t\"github.com/cybercongress/go-cyber/v7/x/dmn/exported\"\n\t\"github.com/cybercongress/go-cyber/v7/x/dmn/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/dmn/types\"\n)\n\nvar (\n\t_ module.AppModule      = AppModule{}\n\t_ module.AppModuleBasic = AppModuleBasic{}\n)\n\ntype AppModuleBasic struct {\n\tcdc codec.Codec\n}\n\nfunc (AppModuleBasic) Name() string { return types.ModuleName }\n\nfunc (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {\n\ttypes.RegisterLegacyAminoCodec(cdc)\n}\n\nfunc (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage {\n\treturn cdc.MustMarshalJSON(types.DefaultGenesisState())\n}\n\nfunc (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, _ client.TxEncodingConfig, bz json.RawMessage) error {\n\tvar data types.GenesisState\n\terr := cdc.UnmarshalJSON(bz, &data)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to unmarshal %s genesis state: %w\", types.ModuleName, err)\n\t}\n\treturn types.ValidateGenesis(data)\n}\n\nfunc (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) {\n\tif err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc (AppModuleBasic) GetTxCmd() *cobra.Command { return nil }\n\nfunc (AppModuleBasic) GetQueryCmd() *cobra.Command {\n\treturn cli.GetQueryCmd()\n}\n\nfunc (AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) {\n\ttypes.RegisterInterfaces(registry)\n}\n\ntype AppModule struct {\n\tAppModuleBasic\n\n\tcdc            codec.Codec\n\tkeeper         keeper.Keeper\n\tlegacySubspace exported.Subspace\n}\n\nfunc NewAppModule(\n\tcdc codec.Codec,\n\tk keeper.Keeper,\n\tss exported.Subspace,\n) AppModule {\n\treturn AppModule{\n\t\tAppModuleBasic: AppModuleBasic{cdc: cdc},\n\t\tcdc:            cdc,\n\t\tkeeper:         k,\n\t\tlegacySubspace: ss,\n\t}\n}\n\nfunc (AppModule) Name() string { return types.ModuleName }\n\nfunc (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {}\n\nfunc (am AppModule) RegisterServices(cfg module.Configurator) {\n\ttypes.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper))\n\ttypes.RegisterQueryServer(cfg.QueryServer(), am.keeper)\n\n\tm := keeper.NewMigrator(am.keeper, am.legacySubspace)\n\tif err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil {\n\t\tpanic(fmt.Sprintf(\"failed to migrate x/%s from version 1 to 2: %v\", types.ModuleName, err))\n\t}\n}\n\nfunc (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate {\n\tvar genesisState types.GenesisState\n\tcdc.MustUnmarshalJSON(data, &genesisState)\n\tkeeper.InitGenesis(ctx, am.keeper, genesisState)\n\treturn []abci.ValidatorUpdate{}\n}\n\nfunc (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage {\n\tgs := keeper.ExportGenesis(ctx, am.keeper)\n\treturn cdc.MustMarshalJSON(gs)\n}\n\nfunc (am AppModule) ConsensusVersion() uint64 {\n\treturn 2\n}\n\nfunc (am AppModule) BeginBlock(ctx sdk.Context, _ abci.RequestBeginBlock) {\n\tBeginBlock(ctx, am.keeper)\n}\n\nfunc (am AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate {\n\treturn []abci.ValidatorUpdate{}\n}\n"
  },
  {
    "path": "x/dmn/types/codec.go",
    "content": "package types\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\t\"github.com/cosmos/cosmos-sdk/codec/legacy\"\n\t\"github.com/cosmos/cosmos-sdk/codec/types\"\n\tcdctypes \"github.com/cosmos/cosmos-sdk/codec/types\"\n\tcryptocodec \"github.com/cosmos/cosmos-sdk/crypto/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/msgservice\"\n\tgovcodec \"github.com/cosmos/cosmos-sdk/x/gov/codec\"\n)\n\nfunc RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {\n\tlegacy.RegisterAminoMsg(cdc, &MsgUpdateParams{}, \"cyber/dmn/MsgUpdateParams\")\n\n\tcdc.RegisterConcrete(Params{}, \"cyber/dmn/Params\", nil)\n}\n\nfunc RegisterInterfaces(registry types.InterfaceRegistry) {\n\tregistry.RegisterImplementations((*sdk.Msg)(nil),\n\t\t&MsgCreateThought{},\n\t\t&MsgForgetThought{},\n\t\t&MsgChangeThoughtParticle{},\n\t\t&MsgChangeThoughtName{},\n\t\t&MsgChangeThoughtInput{},\n\t\t&MsgChangeThoughtGasPrice{},\n\t\t&MsgChangeThoughtPeriod{},\n\t\t&MsgChangeThoughtBlock{},\n\t\t&MsgUpdateParams{},\n\t)\n\n\tmsgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc)\n}\n\nvar (\n\tamino = codec.NewLegacyAmino()\n\n\tModuleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry())\n\t// ModuleCdc = codec.NewAminoCodec(amino)\n)\n\nfunc init() {\n\tRegisterLegacyAminoCodec(amino)\n\tcryptocodec.RegisterCrypto(amino)\n\tsdk.RegisterLegacyAminoCodec(amino)\n\n\tRegisterLegacyAminoCodec(govcodec.Amino)\n}\n"
  },
  {
    "path": "x/dmn/types/errors.go",
    "content": "package types\n\nimport (\n\terrorsmod \"cosmossdk.io/errors\"\n)\n\nvar (\n\tErrInvalidAddress      = errorsmod.Register(ModuleName, 2, \"invalid address\")\n\tErrExceededMaxThoughts = errorsmod.Register(ModuleName, 3, \"exceeded max thoughts\")\n\tErrBadCallData         = errorsmod.Register(ModuleName, 4, \"bad call data\")\n\tErrBadGasPrice         = errorsmod.Register(ModuleName, 5, \"bad gas price\")\n\tErrBadTrigger          = errorsmod.Register(ModuleName, 6, \"bad trigger\")\n\tErrBadName             = errorsmod.Register(ModuleName, 7, \"bad name\")\n\tErrThoughtNotExist     = errorsmod.Register(ModuleName, 8, \"thought does not exist\")\n\tErrConvertTrigger      = errorsmod.Register(ModuleName, 9, \"cannot convert trigger\")\n)\n"
  },
  {
    "path": "x/dmn/types/events.go",
    "content": "package types\n\nconst (\n\tEventTypeCreateThought         = \"create_thought\"\n\tEventTypeForgetThought         = \"forget_thought\"\n\tEventTypeChangeThoughtParticle = \"change_thought_particle\"\n\tEventTypeChangeThoughtName     = \"change_thought_name\"\n\tEventTypeChangeThoughtInput    = \"change_thought_input\"\n\tEventTypeChangeThoughtGasPrice = \"change_thought_gas_price\"\n\tEventTypeChangeThoughtPeriod   = \"change_thought_period\"\n\tEventTypeChangeThoughtBlock    = \"change_thought_block\"\n\n\tAttributeKeyThoughtProgram  = \"program\"\n\tAttributeKeyThoughtTrigger  = \"trigger\"\n\tAttributeKeyThoughtLoad     = \"load\"\n\tAttributeKeyThoughtName     = \"name\"\n\tAttributeKeyThoughtParticle = \"particle\"\n\tAttributeKeyThoughtInput    = \"input\"\n\tAttributeKeyThoughtGasPrice = \"gas_price\"\n\tAttributeKeyThoughtPeriod   = \"period\"\n\tAttributeKeyThoughtBlock    = \"block\"\n\n\tAttributeValueCategory = ModuleName\n)\n"
  },
  {
    "path": "x/dmn/types/expected_keepers.go",
    "content": "package types\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\ntype BankKeeper interface {\n\tOnCoinsTransfer(ctx sdk.Context, from sdk.AccAddress, to sdk.AccAddress)\n\tSendCoins(ctx sdk.Context, from sdk.AccAddress, to sdk.AccAddress, amt sdk.Coins) error\n}\n\ntype AccountKeeper interface {\n\tGetModuleAddress(name string) sdk.AccAddress\n}\n"
  },
  {
    "path": "x/dmn/types/genesis.go",
    "content": "package types\n\nfunc NewGenesisState(params Params) *GenesisState {\n\treturn &GenesisState{\n\t\tParams: params,\n\t}\n}\n\nfunc DefaultGenesisState() *GenesisState {\n\treturn &GenesisState{\n\t\tParams: DefaultParams(),\n\t}\n}\n\nfunc ValidateGenesis(_ GenesisState) error {\n\treturn nil\n}\n"
  },
  {
    "path": "x/dmn/types/genesis.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/dmn/v1beta1/genesis.proto\n\npackage types\n\nimport (\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype GenesisState struct {\n\tParams Params `protobuf:\"bytes,1,opt,name=params,proto3\" json:\"params\"`\n}\n\nfunc (m *GenesisState) Reset()         { *m = GenesisState{} }\nfunc (m *GenesisState) String() string { return proto.CompactTextString(m) }\nfunc (*GenesisState) ProtoMessage()    {}\nfunc (*GenesisState) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_3d0e09d4ad24cea5, []int{0}\n}\n\nfunc (m *GenesisState) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_GenesisState.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *GenesisState) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GenesisState.Merge(m, src)\n}\n\nfunc (m *GenesisState) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *GenesisState) XXX_DiscardUnknown() {\n\txxx_messageInfo_GenesisState.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GenesisState proto.InternalMessageInfo\n\nfunc (m *GenesisState) GetParams() Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn Params{}\n}\n\nfunc init() {\n\tproto.RegisterType((*GenesisState)(nil), \"cyber.dmn.v1beta1.GenesisState\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/dmn/v1beta1/genesis.proto\", fileDescriptor_3d0e09d4ad24cea5) }\n\nvar fileDescriptor_3d0e09d4ad24cea5 = []byte{\n\t// 205 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0xae, 0x4c, 0x4a,\n\t0x2d, 0xd2, 0x4f, 0xc9, 0xcd, 0xd3, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x4f, 0x4f,\n\t0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x04, 0x2b, 0xd0,\n\t0x4b, 0xc9, 0xcd, 0xd3, 0x83, 0x2a, 0x90, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0xcb, 0xea, 0x83,\n\t0x58, 0x10, 0x85, 0x52, 0xb2, 0x98, 0x26, 0x95, 0x54, 0x16, 0xa4, 0x42, 0xcd, 0x51, 0x72, 0xe7,\n\t0xe2, 0x71, 0x87, 0x18, 0x1c, 0x5c, 0x92, 0x58, 0x92, 0x2a, 0x64, 0xce, 0xc5, 0x56, 0x90, 0x58,\n\t0x94, 0x98, 0x5b, 0x2c, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x6d, 0x24, 0xa9, 0x87, 0x61, 0x91, 0x5e,\n\t0x00, 0x58, 0x81, 0x13, 0xcb, 0x89, 0x7b, 0xf2, 0x0c, 0x41, 0x50, 0xe5, 0x4e, 0xee, 0x27, 0x1e,\n\t0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0xe3, 0x84, 0xc7, 0x72, 0x0c, 0x17,\n\t0x1e, 0xcb, 0x31, 0xdc, 0x78, 0x2c, 0xc7, 0x10, 0xa5, 0x9b, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4,\n\t0x97, 0x9c, 0x9f, 0xab, 0x0f, 0x36, 0x2c, 0x39, 0x3f, 0x2f, 0xbd, 0x28, 0xb5, 0xb8, 0x58, 0x3f,\n\t0x3d, 0x5f, 0x17, 0xe2, 0xba, 0x0a, 0xb0, 0xfb, 0xc0, 0xee, 0x4a, 0x62, 0x03, 0x3b, 0xcc, 0x18,\n\t0x10, 0x00, 0x00, 0xff, 0xff, 0x71, 0xd6, 0xba, 0xca, 0x03, 0x01, 0x00, 0x00,\n}\n\nfunc (m *GenesisState) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *GenesisState) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintGenesis(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintGenesis(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovGenesis(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *GenesisState) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Params.Size()\n\tn += 1 + l + sovGenesis(uint64(l))\n\treturn n\n}\n\nfunc sovGenesis(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozGenesis(x uint64) (n int) {\n\treturn sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *GenesisState) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: GenesisState: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: GenesisState: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipGenesis(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipGenesis(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupGenesis\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthGenesis\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthGenesis        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowGenesis          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupGenesis = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/dmn/types/keys.go",
    "content": "package types\n\nimport sdk \"github.com/cosmos/cosmos-sdk/types\"\n\nconst (\n\tModuleName = \"dmn\"\n\tStoreKey   = ModuleName\n\tRouterKey  = ModuleName\n)\n\nvar (\n\tThoughtKey      = []byte{0x00}\n\tThoughtStatsKey = []byte{0x01}\n\tParamsKey       = []byte{0x02}\n)\n\nfunc GetThoughtKey(program sdk.AccAddress, name string) []byte {\n\tkey := append(program.Bytes(), []byte(name)...)\n\treturn append(ThoughtKey, key...)\n}\n\nfunc GetThoughtStatsKey(program sdk.AccAddress, name string) []byte {\n\tkey := append(program.Bytes(), []byte(name)...)\n\treturn append(ThoughtStatsKey, key...)\n}\n"
  },
  {
    "path": "x/dmn/types/msgs.go",
    "content": "package types\n\nimport (\n\terrorsmod \"cosmossdk.io/errors\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tsdkerrors \"github.com/cosmos/cosmos-sdk/types/errors\"\n\t\"github.com/ipfs/go-cid\"\n\n\t// sdkerrors \"github.com/cosmos/cosmos-sdk/types/errors\"\n\n\t\"github.com/cybercongress/go-cyber/v7/types\"\n\tgraph \"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n)\n\nconst (\n\tTypeMsgCreateThought         = \"create_thought\"\n\tTypeMsgForgetThought         = \"forget_thought\"\n\tTypeMsgChangeThoughtName     = \"change_thought_name\"\n\tTypeMsgChangeThoughtParticle = \"change_thought_particle\"\n\tTypeMsgChangeThoughtInput    = \"change_thought_input\"\n\tTypeMsgChangeThoughtGasPrice = \"change_thought_gas_price\"\n\tTypeMsgChangeThoughtPeriod   = \"change_thought_period\"\n\tTypeMsgChangeThoughtBlock    = \"change_thought_block\"\n)\n\nfunc NewMsgCreateThought(\n\tprogram sdk.AccAddress,\n\ttrigger Trigger,\n\tload Load,\n\tname string,\n\tparticle string,\n) *MsgCreateThought {\n\treturn &MsgCreateThought{\n\t\tProgram:  program.String(),\n\t\tTrigger:  trigger,\n\t\tLoad:     load,\n\t\tName:     name,\n\t\tParticle: particle,\n\t}\n}\n\nfunc (msg MsgCreateThought) Route() string { return RouterKey }\n\nfunc (msg MsgCreateThought) Type() string { return TypeMsgCreateThought }\n\nfunc (msg MsgCreateThought) ValidateBasic() error {\n\t_, err := sdk.AccAddressFromBech32(msg.Program)\n\tif err != nil {\n\t\treturn sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid program address (%s)\", err)\n\t}\n\tif msg.Load.Input == \"\" || len(msg.Load.Input) > 2048 {\n\t\treturn ErrBadCallData\n\t}\n\tif msg.Load.GasPrice.Denom != types.CYB {\n\t\treturn ErrBadGasPrice\n\t}\n\tif !msg.Load.GasPrice.Amount.IsPositive() {\n\t\treturn ErrBadGasPrice\n\t}\n\tif msg.Trigger.Period == 0 && msg.Trigger.Block == 0 {\n\t\treturn ErrBadTrigger\n\t}\n\tif msg.Trigger.Period > 0 && msg.Trigger.Block > 0 {\n\t\treturn ErrBadTrigger\n\t}\n\tif msg.Name == \"\" || len(msg.Name) > 32 {\n\t\treturn ErrBadName\n\t}\n\tparticle, err := cid.Decode(msg.Particle)\n\tif err != nil {\n\t\treturn graph.ErrInvalidParticle\n\t}\n\tif particle.Version() != 0 {\n\t\treturn graph.ErrCidVersion\n\t}\n\n\treturn nil\n}\n\nfunc (msg MsgCreateThought) GetSignBytes() []byte {\n\tbz := ModuleCdc.MustMarshalJSON(&msg)\n\treturn sdk.MustSortJSON(bz)\n}\n\nfunc (msg MsgCreateThought) GetSigners() []sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(msg.Program)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn []sdk.AccAddress{addr}\n}\n\nfunc NewMsgForgetThought(program sdk.AccAddress, label string) *MsgForgetThought {\n\treturn &MsgForgetThought{\n\t\tProgram: program.String(),\n\t\tName:    label,\n\t}\n}\n\nfunc (msg MsgForgetThought) Route() string { return RouterKey }\n\nfunc (msg MsgForgetThought) Type() string { return TypeMsgForgetThought }\n\nfunc (msg MsgForgetThought) ValidateBasic() error {\n\t_, err := sdk.AccAddressFromBech32(msg.Program)\n\tif err != nil {\n\t\treturn sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid program address (%s)\", err)\n\t}\n\tif msg.Name == \"\" || len(msg.Name) > 32 {\n\t\treturn ErrBadName\n\t}\n\n\treturn nil\n}\n\nfunc (msg MsgForgetThought) GetSignBytes() []byte {\n\tbz := ModuleCdc.MustMarshalJSON(&msg)\n\treturn sdk.MustSortJSON(bz)\n}\n\nfunc (msg MsgForgetThought) GetSigners() []sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(msg.Program)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn []sdk.AccAddress{addr}\n}\n\nfunc NewMsgChangeThoughtName(\n\tprogram sdk.AccAddress,\n\tname, newName string,\n) *MsgChangeThoughtName {\n\treturn &MsgChangeThoughtName{\n\t\tProgram: program.String(),\n\t\tName:    name,\n\t\tNewName: newName,\n\t}\n}\n\nfunc (msg MsgChangeThoughtName) Route() string { return RouterKey }\n\nfunc (msg MsgChangeThoughtName) Type() string { return TypeMsgChangeThoughtName }\n\nfunc (msg MsgChangeThoughtName) ValidateBasic() error {\n\t_, err := sdk.AccAddressFromBech32(msg.Program)\n\tif err != nil {\n\t\treturn sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid program address (%s)\", err)\n\t}\n\tif msg.Name == \"\" || len(msg.Name) > 32 {\n\t\treturn ErrBadName\n\t}\n\tif msg.NewName == \"\" || len(msg.NewName) > 32 {\n\t\treturn ErrBadName\n\t}\n\n\treturn nil\n}\n\nfunc (msg MsgChangeThoughtName) GetSignBytes() []byte {\n\tbz := ModuleCdc.MustMarshalJSON(&msg)\n\treturn sdk.MustSortJSON(bz)\n}\n\nfunc (msg MsgChangeThoughtName) GetSigners() []sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(msg.Program)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn []sdk.AccAddress{addr}\n}\n\nfunc NewMsgChangeThoughtParticle(\n\tprogram sdk.AccAddress,\n\tlabel string,\n\tcid string,\n) *MsgChangeThoughtParticle {\n\treturn &MsgChangeThoughtParticle{\n\t\tProgram:  program.String(),\n\t\tName:     label,\n\t\tParticle: cid,\n\t}\n}\n\nfunc (msg MsgChangeThoughtParticle) Route() string { return RouterKey }\n\nfunc (msg MsgChangeThoughtParticle) Type() string { return TypeMsgChangeThoughtParticle }\n\nfunc (msg MsgChangeThoughtParticle) ValidateBasic() error {\n\t_, err := sdk.AccAddressFromBech32(msg.Program)\n\tif err != nil {\n\t\treturn sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid program address (%s)\", err)\n\t}\n\tparticle, err := cid.Decode(msg.Particle)\n\tif err != nil {\n\t\treturn graph.ErrInvalidParticle\n\t}\n\tif particle.Version() != 0 {\n\t\treturn graph.ErrCidVersion\n\t}\n\tif msg.Name == \"\" || len(msg.Name) > 32 {\n\t\treturn ErrBadName\n\t}\n\n\treturn nil\n}\n\nfunc (msg MsgChangeThoughtParticle) GetSignBytes() []byte {\n\tbz := ModuleCdc.MustMarshalJSON(&msg)\n\treturn sdk.MustSortJSON(bz)\n}\n\nfunc (msg MsgChangeThoughtParticle) GetSigners() []sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(msg.Program)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn []sdk.AccAddress{addr}\n}\n\nfunc NewMsgChangeCallInput(\n\tprogram sdk.AccAddress,\n\tname string,\n\tinput string,\n) *MsgChangeThoughtInput {\n\treturn &MsgChangeThoughtInput{\n\t\tProgram: program.String(),\n\t\tName:    name,\n\t\tInput:   input,\n\t}\n}\n\nfunc (msg MsgChangeThoughtInput) Route() string { return RouterKey }\n\nfunc (msg MsgChangeThoughtInput) Type() string { return TypeMsgChangeThoughtInput }\n\nfunc (msg MsgChangeThoughtInput) ValidateBasic() error {\n\t_, err := sdk.AccAddressFromBech32(msg.Program)\n\tif err != nil {\n\t\treturn sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid program address (%s)\", err)\n\t}\n\tif msg.Name == \"\" || len(msg.Name) > 32 {\n\t\treturn ErrBadName\n\t}\n\tif msg.Input == \"\" || len(msg.Input) > 2048 {\n\t\treturn ErrBadCallData\n\t}\n\n\treturn nil\n}\n\nfunc (msg MsgChangeThoughtInput) GetSignBytes() []byte {\n\tbz := ModuleCdc.MustMarshalJSON(&msg)\n\treturn sdk.MustSortJSON(bz)\n}\n\nfunc (msg MsgChangeThoughtInput) GetSigners() []sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(msg.Program)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn []sdk.AccAddress{addr}\n}\n\nfunc NewMsgChangeThoughtGasPrice(\n\tprogram sdk.AccAddress,\n\tname string,\n\tgasprice sdk.Coin,\n) *MsgChangeThoughtGasPrice {\n\treturn &MsgChangeThoughtGasPrice{\n\t\tProgram:  program.String(),\n\t\tName:     name,\n\t\tGasPrice: gasprice,\n\t}\n}\n\nfunc (msg MsgChangeThoughtGasPrice) Route() string { return RouterKey }\n\nfunc (msg MsgChangeThoughtGasPrice) Type() string { return TypeMsgChangeThoughtGasPrice }\n\nfunc (msg MsgChangeThoughtGasPrice) ValidateBasic() error {\n\t_, err := sdk.AccAddressFromBech32(msg.Program)\n\tif err != nil {\n\t\treturn sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid program address (%s)\", err)\n\t}\n\tif msg.Name == \"\" || len(msg.Name) > 32 {\n\t\treturn ErrBadName\n\t}\n\tif msg.GasPrice.Denom != types.CYB {\n\t\treturn ErrBadGasPrice\n\t}\n\tif !msg.GasPrice.Amount.IsPositive() {\n\t\treturn ErrBadGasPrice\n\t}\n\n\treturn nil\n}\n\nfunc (msg MsgChangeThoughtGasPrice) GetSignBytes() []byte {\n\tbz := ModuleCdc.MustMarshalJSON(&msg)\n\treturn sdk.MustSortJSON(bz)\n}\n\nfunc (msg MsgChangeThoughtGasPrice) GetSigners() []sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(msg.Program)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn []sdk.AccAddress{addr}\n}\n\nfunc NewMsgChangeThoughtPeriod(\n\tprogram sdk.AccAddress,\n\tname string,\n\tperiod uint64,\n) *MsgChangeThoughtPeriod {\n\treturn &MsgChangeThoughtPeriod{\n\t\tProgram: program.String(),\n\t\tName:    name,\n\t\tPeriod:  period,\n\t}\n}\n\nfunc (msg MsgChangeThoughtPeriod) Route() string { return RouterKey }\n\nfunc (msg MsgChangeThoughtPeriod) Type() string { return TypeMsgChangeThoughtPeriod }\n\nfunc (msg MsgChangeThoughtPeriod) ValidateBasic() error {\n\t_, err := sdk.AccAddressFromBech32(msg.Program)\n\tif err != nil {\n\t\treturn sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid program address (%s)\", err)\n\t}\n\tif msg.Name == \"\" || len(msg.Name) > 32 {\n\t\treturn ErrBadName\n\t}\n\tif msg.Period == 0 {\n\t\treturn ErrBadTrigger\n\t}\n\n\treturn nil\n}\n\nfunc (msg MsgChangeThoughtPeriod) GetSignBytes() []byte {\n\tbz := ModuleCdc.MustMarshalJSON(&msg)\n\treturn sdk.MustSortJSON(bz)\n}\n\nfunc (msg MsgChangeThoughtPeriod) GetSigners() []sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(msg.Program)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn []sdk.AccAddress{addr}\n}\n\nfunc NewMsgChangeThoughtBlock(\n\tprogram sdk.AccAddress,\n\tname string,\n\tblock uint64,\n) *MsgChangeThoughtBlock {\n\treturn &MsgChangeThoughtBlock{\n\t\tProgram: program.String(),\n\t\tName:    name,\n\t\tBlock:   block,\n\t}\n}\n\nfunc (msg MsgChangeThoughtBlock) Route() string { return RouterKey }\n\nfunc (msg MsgChangeThoughtBlock) Type() string { return TypeMsgChangeThoughtBlock }\n\nfunc (msg MsgChangeThoughtBlock) ValidateBasic() error {\n\t_, err := sdk.AccAddressFromBech32(msg.Program)\n\tif err != nil {\n\t\treturn sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid program address (%s)\", err)\n\t}\n\tif msg.Name == \"\" || len(msg.Name) > 32 {\n\t\treturn ErrBadName\n\t}\n\tif msg.Block == 0 {\n\t\treturn ErrBadTrigger\n\t}\n\n\treturn nil\n}\n\nfunc (msg MsgChangeThoughtBlock) GetSigners() []sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(msg.Program)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn []sdk.AccAddress{addr}\n}\n\nfunc (msg MsgChangeThoughtBlock) GetSignBytes() []byte {\n\tbz := ModuleCdc.MustMarshalJSON(&msg)\n\treturn sdk.MustSortJSON(bz)\n}\n\nvar _ sdk.Msg = &MsgUpdateParams{}\n\n// GetSignBytes implements the LegacyMsg interface.\nfunc (m MsgUpdateParams) GetSignBytes() []byte {\n\treturn sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))\n}\n\n// GetSigners returns the expected signers for a MsgUpdateParams message.\nfunc (m *MsgUpdateParams) GetSigners() []sdk.AccAddress {\n\taddr, _ := sdk.AccAddressFromBech32(m.Authority)\n\treturn []sdk.AccAddress{addr}\n}\n\n// ValidateBasic does a sanity check on the provided data.\nfunc (m *MsgUpdateParams) ValidateBasic() error {\n\tif _, err := sdk.AccAddressFromBech32(m.Authority); err != nil {\n\t\treturn errorsmod.Wrap(err, \"invalid authority address\")\n\t}\n\n\treturn m.Params.Validate()\n}\n"
  },
  {
    "path": "x/dmn/types/params.go",
    "content": "package types\n\nimport (\n\t\"fmt\"\n)\n\nconst (\n\tDefaultMaxSlots uint32 = 4\n\tDefaultMaxGas   uint32 = 2000000\n\tDefaultFeeTTL   uint32 = 50\n)\n\nfunc DefaultParams() Params {\n\treturn Params{\n\t\tDefaultMaxSlots,\n\t\tDefaultMaxGas,\n\t\tDefaultFeeTTL,\n\t}\n}\n\nfunc NewParams(\n\tmaxSlots uint32,\n\tmaxGas uint32,\n\tfeeTtl uint32,\n) Params {\n\treturn Params{\n\t\tmaxSlots,\n\t\tmaxGas,\n\t\tfeeTtl,\n\t}\n}\n\nfunc (p Params) Validate() error {\n\tif err := validateMaxSlots(p.MaxSlots); err != nil {\n\t\treturn err\n\t}\n\tif err := validateMaxGas(p.MaxGas); err != nil {\n\t\treturn err\n\t}\n\tif err := validateFeeTTL(p.FeeTtl); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc validateMaxSlots(i interface{}) error {\n\tv, ok := i.(uint32)\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v < 4 {\n\t\treturn fmt.Errorf(\"max slots must be equal or more than 4: %d\", v)\n\t}\n\n\treturn nil\n}\n\nfunc validateMaxGas(i interface{}) error {\n\tv, ok := i.(uint32)\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v < 2000000 {\n\t\treturn fmt.Errorf(\"max gas must be equal or more than 2000000: %d\", v)\n\t}\n\n\treturn nil\n}\n\nfunc validateFeeTTL(i interface{}) error {\n\tv, ok := i.(uint32)\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v == 0 {\n\t\treturn fmt.Errorf(\"fee ttl must be positive: %d\", v)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/dmn/types/params_legacy.go",
    "content": "package types\n\nimport paramstypes \"github.com/cosmos/cosmos-sdk/x/params/types\"\n\nvar (\n\tKeyMaxSlots = []byte(\"MaxSlots\")\n\tKeyMaxGas   = []byte(\"MaxGas\")\n\tKeyFeeTTL   = []byte(\"FeeTTL\")\n)\n\n// Deprecated: Type declaration for parameters\nfunc ParamKeyTable() paramstypes.KeyTable {\n\treturn paramstypes.NewKeyTable().RegisterParamSet(&Params{})\n}\n\nfunc (p *Params) ParamSetPairs() paramstypes.ParamSetPairs {\n\treturn paramstypes.ParamSetPairs{\n\t\tparamstypes.NewParamSetPair(KeyMaxSlots, &p.MaxSlots, validateMaxSlots),\n\t\tparamstypes.NewParamSetPair(KeyMaxGas, &p.MaxGas, validateMaxGas),\n\t\tparamstypes.NewParamSetPair(KeyFeeTTL, &p.FeeTtl, validateFeeTTL),\n\t}\n}\n"
  },
  {
    "path": "x/dmn/types/querier.go",
    "content": "package types\n\nimport sdk \"github.com/cosmos/cosmos-sdk/types\"\n\nconst (\n\tQueryParams        = \"params\"\n\tQueryThought       = \"thought\"\n\tQueryThoughtStats  = \"thought_stats\"\n\tQueryThoughts      = \"thoughts\"\n\tQueryThoughtsStats = \"thoughts_stats\"\n)\n\ntype QueryThoughtParams struct {\n\tProgram sdk.AccAddress\n\tName    string\n}\n\nfunc NewQueryThoughtParams(program sdk.AccAddress, name string) QueryThoughtParams {\n\treturn QueryThoughtParams{program, name}\n}\n"
  },
  {
    "path": "x/dmn/types/query.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/dmn/v1beta1/query.proto\n\npackage types\n\nimport (\n\tcontext \"context\"\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\tgithub_com_cosmos_cosmos_sdk_types \"github.com/cosmos/cosmos-sdk/types\"\n\ttypes \"github.com/cosmos/cosmos-sdk/types\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tgrpc1 \"github.com/cosmos/gogoproto/grpc\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype QueryParamsRequest struct{}\n\nfunc (m *QueryParamsRequest) Reset()         { *m = QueryParamsRequest{} }\nfunc (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryParamsRequest) ProtoMessage()    {}\nfunc (*QueryParamsRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_55109069a1b1f260, []int{0}\n}\n\nfunc (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryParamsRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryParamsRequest.Merge(m, src)\n}\n\nfunc (m *QueryParamsRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryParamsRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryParamsRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo\n\ntype QueryParamsResponse struct {\n\tParams Params `protobuf:\"bytes,1,opt,name=params,proto3\" json:\"params\"`\n}\n\nfunc (m *QueryParamsResponse) Reset()         { *m = QueryParamsResponse{} }\nfunc (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryParamsResponse) ProtoMessage()    {}\nfunc (*QueryParamsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_55109069a1b1f260, []int{1}\n}\n\nfunc (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryParamsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryParamsResponse.Merge(m, src)\n}\n\nfunc (m *QueryParamsResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryParamsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryParamsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo\n\nfunc (m *QueryParamsResponse) GetParams() Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn Params{}\n}\n\ntype QueryThoughtParamsRequest struct {\n\tProgram string `protobuf:\"bytes,1,opt,name=program,proto3\" json:\"program,omitempty\"`\n\tName    string `protobuf:\"bytes,2,opt,name=name,proto3\" json:\"name,omitempty\"`\n}\n\nfunc (m *QueryThoughtParamsRequest) Reset()         { *m = QueryThoughtParamsRequest{} }\nfunc (m *QueryThoughtParamsRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryThoughtParamsRequest) ProtoMessage()    {}\nfunc (*QueryThoughtParamsRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_55109069a1b1f260, []int{2}\n}\n\nfunc (m *QueryThoughtParamsRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryThoughtParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryThoughtParamsRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryThoughtParamsRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryThoughtParamsRequest.Merge(m, src)\n}\n\nfunc (m *QueryThoughtParamsRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryThoughtParamsRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryThoughtParamsRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryThoughtParamsRequest proto.InternalMessageInfo\n\nfunc (m *QueryThoughtParamsRequest) GetProgram() string {\n\tif m != nil {\n\t\treturn m.Program\n\t}\n\treturn \"\"\n}\n\nfunc (m *QueryThoughtParamsRequest) GetName() string {\n\tif m != nil {\n\t\treturn m.Name\n\t}\n\treturn \"\"\n}\n\ntype QueryThoughtResponse struct {\n\tThought Thought `protobuf:\"bytes,1,opt,name=thought,proto3\" json:\"thought\"`\n}\n\nfunc (m *QueryThoughtResponse) Reset()         { *m = QueryThoughtResponse{} }\nfunc (m *QueryThoughtResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryThoughtResponse) ProtoMessage()    {}\nfunc (*QueryThoughtResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_55109069a1b1f260, []int{3}\n}\n\nfunc (m *QueryThoughtResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryThoughtResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryThoughtResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryThoughtResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryThoughtResponse.Merge(m, src)\n}\n\nfunc (m *QueryThoughtResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryThoughtResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryThoughtResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryThoughtResponse proto.InternalMessageInfo\n\nfunc (m *QueryThoughtResponse) GetThought() Thought {\n\tif m != nil {\n\t\treturn m.Thought\n\t}\n\treturn Thought{}\n}\n\ntype QueryThoughtStatsResponse struct {\n\tThoughtStats ThoughtStats `protobuf:\"bytes,1,opt,name=thought_stats,json=thoughtStats,proto3\" json:\"thought_stats\"`\n}\n\nfunc (m *QueryThoughtStatsResponse) Reset()         { *m = QueryThoughtStatsResponse{} }\nfunc (m *QueryThoughtStatsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryThoughtStatsResponse) ProtoMessage()    {}\nfunc (*QueryThoughtStatsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_55109069a1b1f260, []int{4}\n}\n\nfunc (m *QueryThoughtStatsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryThoughtStatsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryThoughtStatsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryThoughtStatsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryThoughtStatsResponse.Merge(m, src)\n}\n\nfunc (m *QueryThoughtStatsResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryThoughtStatsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryThoughtStatsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryThoughtStatsResponse proto.InternalMessageInfo\n\nfunc (m *QueryThoughtStatsResponse) GetThoughtStats() ThoughtStats {\n\tif m != nil {\n\t\treturn m.ThoughtStats\n\t}\n\treturn ThoughtStats{}\n}\n\ntype QueryThoughtsRequest struct{}\n\nfunc (m *QueryThoughtsRequest) Reset()         { *m = QueryThoughtsRequest{} }\nfunc (m *QueryThoughtsRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryThoughtsRequest) ProtoMessage()    {}\nfunc (*QueryThoughtsRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_55109069a1b1f260, []int{5}\n}\n\nfunc (m *QueryThoughtsRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryThoughtsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryThoughtsRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryThoughtsRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryThoughtsRequest.Merge(m, src)\n}\n\nfunc (m *QueryThoughtsRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryThoughtsRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryThoughtsRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryThoughtsRequest proto.InternalMessageInfo\n\ntype QueryThoughtsResponse struct {\n\tThoughts Thoughts `protobuf:\"bytes,1,rep,name=thoughts,proto3,castrepeated=Thoughts\" json:\"thoughts\"`\n}\n\nfunc (m *QueryThoughtsResponse) Reset()         { *m = QueryThoughtsResponse{} }\nfunc (m *QueryThoughtsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryThoughtsResponse) ProtoMessage()    {}\nfunc (*QueryThoughtsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_55109069a1b1f260, []int{6}\n}\n\nfunc (m *QueryThoughtsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryThoughtsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryThoughtsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryThoughtsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryThoughtsResponse.Merge(m, src)\n}\n\nfunc (m *QueryThoughtsResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryThoughtsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryThoughtsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryThoughtsResponse proto.InternalMessageInfo\n\nfunc (m *QueryThoughtsResponse) GetThoughts() Thoughts {\n\tif m != nil {\n\t\treturn m.Thoughts\n\t}\n\treturn nil\n}\n\ntype QueryThoughtsStatsRequest struct{}\n\nfunc (m *QueryThoughtsStatsRequest) Reset()         { *m = QueryThoughtsStatsRequest{} }\nfunc (m *QueryThoughtsStatsRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryThoughtsStatsRequest) ProtoMessage()    {}\nfunc (*QueryThoughtsStatsRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_55109069a1b1f260, []int{7}\n}\n\nfunc (m *QueryThoughtsStatsRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryThoughtsStatsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryThoughtsStatsRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryThoughtsStatsRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryThoughtsStatsRequest.Merge(m, src)\n}\n\nfunc (m *QueryThoughtsStatsRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryThoughtsStatsRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryThoughtsStatsRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryThoughtsStatsRequest proto.InternalMessageInfo\n\ntype QueryThoughtsStatsResponse struct {\n\tThoughtsStats ThoughtsStats `protobuf:\"bytes,1,rep,name=thoughts_stats,json=thoughtsStats,proto3,castrepeated=ThoughtsStats\" json:\"thoughts_stats\"`\n}\n\nfunc (m *QueryThoughtsStatsResponse) Reset()         { *m = QueryThoughtsStatsResponse{} }\nfunc (m *QueryThoughtsStatsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryThoughtsStatsResponse) ProtoMessage()    {}\nfunc (*QueryThoughtsStatsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_55109069a1b1f260, []int{8}\n}\n\nfunc (m *QueryThoughtsStatsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryThoughtsStatsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryThoughtsStatsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryThoughtsStatsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryThoughtsStatsResponse.Merge(m, src)\n}\n\nfunc (m *QueryThoughtsStatsResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryThoughtsStatsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryThoughtsStatsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryThoughtsStatsResponse proto.InternalMessageInfo\n\nfunc (m *QueryThoughtsStatsResponse) GetThoughtsStats() ThoughtsStats {\n\tif m != nil {\n\t\treturn m.ThoughtsStats\n\t}\n\treturn nil\n}\n\ntype QueryThoughtsFeesRequest struct{}\n\nfunc (m *QueryThoughtsFeesRequest) Reset()         { *m = QueryThoughtsFeesRequest{} }\nfunc (m *QueryThoughtsFeesRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryThoughtsFeesRequest) ProtoMessage()    {}\nfunc (*QueryThoughtsFeesRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_55109069a1b1f260, []int{9}\n}\n\nfunc (m *QueryThoughtsFeesRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryThoughtsFeesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryThoughtsFeesRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryThoughtsFeesRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryThoughtsFeesRequest.Merge(m, src)\n}\n\nfunc (m *QueryThoughtsFeesRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryThoughtsFeesRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryThoughtsFeesRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryThoughtsFeesRequest proto.InternalMessageInfo\n\ntype QueryThoughtsFeesResponse struct {\n\tFees github_com_cosmos_cosmos_sdk_types.Coins `protobuf:\"bytes,3,rep,name=fees,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins\" json:\"fees\"`\n}\n\nfunc (m *QueryThoughtsFeesResponse) Reset()         { *m = QueryThoughtsFeesResponse{} }\nfunc (m *QueryThoughtsFeesResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryThoughtsFeesResponse) ProtoMessage()    {}\nfunc (*QueryThoughtsFeesResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_55109069a1b1f260, []int{10}\n}\n\nfunc (m *QueryThoughtsFeesResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryThoughtsFeesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryThoughtsFeesResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryThoughtsFeesResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryThoughtsFeesResponse.Merge(m, src)\n}\n\nfunc (m *QueryThoughtsFeesResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryThoughtsFeesResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryThoughtsFeesResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryThoughtsFeesResponse proto.InternalMessageInfo\n\nfunc (m *QueryThoughtsFeesResponse) GetFees() github_com_cosmos_cosmos_sdk_types.Coins {\n\tif m != nil {\n\t\treturn m.Fees\n\t}\n\treturn nil\n}\n\nfunc init() {\n\tproto.RegisterType((*QueryParamsRequest)(nil), \"cyber.dmn.v1beta1.QueryParamsRequest\")\n\tproto.RegisterType((*QueryParamsResponse)(nil), \"cyber.dmn.v1beta1.QueryParamsResponse\")\n\tproto.RegisterType((*QueryThoughtParamsRequest)(nil), \"cyber.dmn.v1beta1.QueryThoughtParamsRequest\")\n\tproto.RegisterType((*QueryThoughtResponse)(nil), \"cyber.dmn.v1beta1.QueryThoughtResponse\")\n\tproto.RegisterType((*QueryThoughtStatsResponse)(nil), \"cyber.dmn.v1beta1.QueryThoughtStatsResponse\")\n\tproto.RegisterType((*QueryThoughtsRequest)(nil), \"cyber.dmn.v1beta1.QueryThoughtsRequest\")\n\tproto.RegisterType((*QueryThoughtsResponse)(nil), \"cyber.dmn.v1beta1.QueryThoughtsResponse\")\n\tproto.RegisterType((*QueryThoughtsStatsRequest)(nil), \"cyber.dmn.v1beta1.QueryThoughtsStatsRequest\")\n\tproto.RegisterType((*QueryThoughtsStatsResponse)(nil), \"cyber.dmn.v1beta1.QueryThoughtsStatsResponse\")\n\tproto.RegisterType((*QueryThoughtsFeesRequest)(nil), \"cyber.dmn.v1beta1.QueryThoughtsFeesRequest\")\n\tproto.RegisterType((*QueryThoughtsFeesResponse)(nil), \"cyber.dmn.v1beta1.QueryThoughtsFeesResponse\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/dmn/v1beta1/query.proto\", fileDescriptor_55109069a1b1f260) }\n\nvar fileDescriptor_55109069a1b1f260 = []byte{\n\t// 668 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x95, 0xcd, 0x6e, 0xd3, 0x40,\n\t0x10, 0xc7, 0xe3, 0x26, 0x24, 0x65, 0x69, 0x11, 0x2c, 0x29, 0x4a, 0x0c, 0x75, 0x8a, 0x45, 0x3e,\n\t0x24, 0x1a, 0x9b, 0x96, 0x03, 0x12, 0xc7, 0x20, 0xf1, 0x75, 0x40, 0x10, 0x38, 0x21, 0xa1, 0xc8,\n\t0x49, 0x16, 0x27, 0x02, 0x7b, 0x5d, 0xef, 0x06, 0x11, 0x81, 0x38, 0x70, 0x40, 0x1c, 0x91, 0x38,\n\t0x80, 0xc4, 0x1b, 0xf0, 0x24, 0x3d, 0x56, 0xe2, 0xc2, 0x09, 0x50, 0xc2, 0x99, 0x67, 0x40, 0xde,\n\t0x9d, 0xb8, 0xd9, 0x26, 0xa9, 0xc3, 0xa9, 0xce, 0xce, 0xcc, 0x7f, 0x7e, 0x33, 0xbb, 0x7f, 0x15,\n\t0x6d, 0x76, 0x86, 0x6d, 0x12, 0xda, 0x5d, 0xcf, 0xb7, 0x5f, 0xee, 0xb4, 0x09, 0x77, 0x76, 0xec,\n\t0xbd, 0x01, 0x09, 0x87, 0x56, 0x10, 0x52, 0x4e, 0xf1, 0x59, 0x11, 0xb6, 0xba, 0x9e, 0x6f, 0x41,\n\t0x58, 0xcf, 0xbb, 0xd4, 0xa5, 0x22, 0x6a, 0x47, 0x5f, 0x32, 0x51, 0xbf, 0xe8, 0x52, 0xea, 0xbe,\n\t0x20, 0xb6, 0x13, 0xf4, 0x6d, 0xc7, 0xf7, 0x29, 0x77, 0x78, 0x9f, 0xfa, 0x0c, 0xa2, 0x46, 0x87,\n\t0x32, 0x8f, 0x32, 0xbb, 0xed, 0x30, 0x12, 0xf7, 0xe9, 0xd0, 0xbe, 0x0f, 0xf1, 0x39, 0x14, 0x7c,\n\t0x18, 0x10, 0x28, 0x37, 0xf3, 0x08, 0x3f, 0x8c, 0xa0, 0x1e, 0x38, 0xa1, 0xe3, 0xb1, 0x26, 0xd9,\n\t0x1b, 0x10, 0xc6, 0xcd, 0xfb, 0xe8, 0x9c, 0x72, 0xca, 0x02, 0xea, 0x33, 0x82, 0xaf, 0xa3, 0x6c,\n\t0x20, 0x4e, 0x0a, 0xda, 0x96, 0x56, 0x3b, 0xb5, 0x5b, 0xb4, 0x66, 0x66, 0xb0, 0x64, 0x49, 0x23,\n\t0xb3, 0xff, 0xb3, 0x94, 0x6a, 0x42, 0xba, 0x79, 0x17, 0x15, 0x85, 0xde, 0xe3, 0x1e, 0x1d, 0xb8,\n\t0x3d, 0xae, 0x34, 0xc3, 0x05, 0x94, 0x0b, 0x42, 0xea, 0x86, 0x8e, 0x27, 0x64, 0x4f, 0x36, 0x27,\n\t0x3f, 0x31, 0x46, 0x19, 0xdf, 0xf1, 0x48, 0x61, 0x45, 0x1c, 0x8b, 0x6f, 0xb3, 0x89, 0xf2, 0xd3,\n\t0x52, 0x31, 0xdb, 0x0d, 0x94, 0xe3, 0xf2, 0x08, 0xe0, 0xf4, 0x39, 0x70, 0x50, 0x04, 0x74, 0x93,\n\t0x02, 0xd3, 0x55, 0xf1, 0x1e, 0x71, 0x87, 0x1f, 0x0e, 0x7d, 0x0f, 0xad, 0x43, 0x5e, 0x8b, 0x45,\n\t0x01, 0x90, 0x2f, 0x2d, 0x96, 0x17, 0xf5, 0xd0, 0x63, 0x8d, 0x4f, 0x9d, 0x99, 0xe7, 0x55, 0xf8,\n\t0x78, 0xdf, 0x0e, 0xda, 0x38, 0x72, 0x0e, 0xcd, 0xef, 0xa0, 0x55, 0x10, 0x88, 0xfa, 0xa6, 0x13,\n\t0xc6, 0x3a, 0x13, 0xb5, 0xfc, 0xf6, 0xab, 0xb4, 0x1a, 0xeb, 0xc4, 0xd5, 0xe6, 0x05, 0x75, 0x46,\n\t0x06, 0x43, 0xca, 0xfe, 0xaf, 0x91, 0x3e, 0x2f, 0x08, 0x10, 0x4f, 0xd1, 0xe9, 0x89, 0x4c, 0xbc,\n\t0x82, 0xf4, 0x32, 0x2b, 0xd8, 0x00, 0x9e, 0x75, 0x55, 0x77, 0xb2, 0x4f, 0xf9, 0xd3, 0xd4, 0x51,\n\t0x41, 0x69, 0x7e, 0x8b, 0x90, 0x18, 0xec, 0xcd, 0x11, 0x6a, 0x19, 0x03, 0xae, 0x16, 0xca, 0x3c,\n\t0x23, 0x84, 0x15, 0xd2, 0x82, 0xa6, 0x68, 0x49, 0x27, 0x58, 0x91, 0x13, 0x62, 0x9e, 0x9b, 0xb4,\n\t0xef, 0x37, 0xae, 0x02, 0x47, 0xcd, 0xed, 0xf3, 0xde, 0xa0, 0x6d, 0x75, 0xa8, 0x67, 0x83, 0x6d,\n\t0xe4, 0x9f, 0x3a, 0xeb, 0x3e, 0x07, 0x5b, 0x44, 0x05, 0xac, 0x29, 0x84, 0x77, 0xff, 0x66, 0xd1,\n\t0x09, 0xd1, 0x1e, 0xbf, 0x45, 0x59, 0xf9, 0x68, 0x71, 0x79, 0xce, 0xd0, 0xb3, 0x0e, 0xd2, 0x2b,\n\t0x49, 0x69, 0x72, 0x06, 0xb3, 0xfc, 0xee, 0xfb, 0x9f, 0x4f, 0x2b, 0x25, 0xbc, 0x69, 0xcf, 0xfa,\n\t0x34, 0xfa, 0x96, 0x06, 0xc2, 0x1f, 0x34, 0x94, 0x83, 0x1d, 0xe0, 0xed, 0x45, 0xd2, 0xf3, 0xdc,\n\t0xa5, 0x57, 0x13, 0xb2, 0x63, 0x92, 0x8a, 0x20, 0xd9, 0xc2, 0xc6, 0x02, 0x12, 0xb8, 0x34, 0xfc,\n\t0x45, 0x43, 0x6b, 0xd3, 0xb7, 0xfc, 0x9f, 0x3c, 0x49, 0xd9, 0xca, 0xd3, 0x33, 0xb7, 0x05, 0x54,\n\t0x05, 0x5f, 0x3e, 0x1e, 0x4a, 0x3e, 0x4b, 0xfc, 0x5e, 0x43, 0xf1, 0xd3, 0xc7, 0x49, 0x83, 0xc7,\n\t0x44, 0xb5, 0xe4, 0x44, 0xa0, 0xa9, 0x0a, 0x9a, 0x4b, 0xb8, 0x74, 0x3c, 0x0d, 0xc3, 0x5f, 0x35,\n\t0xa4, 0xbe, 0xf9, 0xc4, 0x25, 0x29, 0x7e, 0xd4, 0xeb, 0x4b, 0x66, 0x03, 0x57, 0x5d, 0x70, 0x55,\n\t0x71, 0x39, 0x81, 0x0b, 0xd6, 0xf4, 0xf9, 0xf0, 0x06, 0x85, 0xa1, 0xf0, 0x95, 0xa4, 0x76, 0x53,\n\t0x96, 0x4c, 0xbc, 0x40, 0xc5, 0xa3, 0xcb, 0x5e, 0x20, 0x6b, 0x45, 0x86, 0x6b, 0xdc, 0xde, 0x1f,\n\t0x19, 0xda, 0xc1, 0xc8, 0xd0, 0x7e, 0x8f, 0x0c, 0xed, 0xe3, 0xd8, 0x48, 0x1d, 0x8c, 0x8d, 0xd4,\n\t0x8f, 0xb1, 0x91, 0x7a, 0x52, 0x9f, 0xb6, 0x6e, 0xa4, 0xd4, 0xa1, 0xbe, 0x1b, 0x12, 0xc6, 0x6c,\n\t0x97, 0xd6, 0xa5, 0xf4, 0x2b, 0x29, 0x18, 0xb9, 0xb8, 0x9d, 0x15, 0xff, 0xdd, 0xae, 0xfd, 0x0b,\n\t0x00, 0x00, 0xff, 0xff, 0x7a, 0x0c, 0x0d, 0x7e, 0x84, 0x07, 0x00, 0x00,\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ context.Context\n\t_ grpc.ClientConn\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// QueryClient is the client API for Query service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype QueryClient interface {\n\tParams(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error)\n\tThought(ctx context.Context, in *QueryThoughtParamsRequest, opts ...grpc.CallOption) (*QueryThoughtResponse, error)\n\tThoughtStats(ctx context.Context, in *QueryThoughtParamsRequest, opts ...grpc.CallOption) (*QueryThoughtStatsResponse, error)\n\tThoughts(ctx context.Context, in *QueryThoughtsRequest, opts ...grpc.CallOption) (*QueryThoughtsResponse, error)\n\tThoughtsStats(ctx context.Context, in *QueryThoughtsStatsRequest, opts ...grpc.CallOption) (*QueryThoughtsStatsResponse, error)\n\tThoughtsFees(ctx context.Context, in *QueryThoughtsFeesRequest, opts ...grpc.CallOption) (*QueryThoughtsFeesResponse, error)\n}\n\ntype queryClient struct {\n\tcc grpc1.ClientConn\n}\n\nfunc NewQueryClient(cc grpc1.ClientConn) QueryClient {\n\treturn &queryClient{cc}\n}\n\nfunc (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) {\n\tout := new(QueryParamsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.dmn.v1beta1.Query/Params\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) Thought(ctx context.Context, in *QueryThoughtParamsRequest, opts ...grpc.CallOption) (*QueryThoughtResponse, error) {\n\tout := new(QueryThoughtResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.dmn.v1beta1.Query/Thought\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) ThoughtStats(ctx context.Context, in *QueryThoughtParamsRequest, opts ...grpc.CallOption) (*QueryThoughtStatsResponse, error) {\n\tout := new(QueryThoughtStatsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.dmn.v1beta1.Query/ThoughtStats\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) Thoughts(ctx context.Context, in *QueryThoughtsRequest, opts ...grpc.CallOption) (*QueryThoughtsResponse, error) {\n\tout := new(QueryThoughtsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.dmn.v1beta1.Query/Thoughts\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) ThoughtsStats(ctx context.Context, in *QueryThoughtsStatsRequest, opts ...grpc.CallOption) (*QueryThoughtsStatsResponse, error) {\n\tout := new(QueryThoughtsStatsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.dmn.v1beta1.Query/ThoughtsStats\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) ThoughtsFees(ctx context.Context, in *QueryThoughtsFeesRequest, opts ...grpc.CallOption) (*QueryThoughtsFeesResponse, error) {\n\tout := new(QueryThoughtsFeesResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.dmn.v1beta1.Query/ThoughtsFees\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// QueryServer is the server API for Query service.\ntype QueryServer interface {\n\tParams(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error)\n\tThought(context.Context, *QueryThoughtParamsRequest) (*QueryThoughtResponse, error)\n\tThoughtStats(context.Context, *QueryThoughtParamsRequest) (*QueryThoughtStatsResponse, error)\n\tThoughts(context.Context, *QueryThoughtsRequest) (*QueryThoughtsResponse, error)\n\tThoughtsStats(context.Context, *QueryThoughtsStatsRequest) (*QueryThoughtsStatsResponse, error)\n\tThoughtsFees(context.Context, *QueryThoughtsFeesRequest) (*QueryThoughtsFeesResponse, error)\n}\n\n// UnimplementedQueryServer can be embedded to have forward compatible implementations.\ntype UnimplementedQueryServer struct{}\n\nfunc (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Params not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) Thought(ctx context.Context, req *QueryThoughtParamsRequest) (*QueryThoughtResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Thought not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) ThoughtStats(ctx context.Context, req *QueryThoughtParamsRequest) (*QueryThoughtStatsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method ThoughtStats not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) Thoughts(ctx context.Context, req *QueryThoughtsRequest) (*QueryThoughtsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Thoughts not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) ThoughtsStats(ctx context.Context, req *QueryThoughtsStatsRequest) (*QueryThoughtsStatsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method ThoughtsStats not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) ThoughtsFees(ctx context.Context, req *QueryThoughtsFeesRequest) (*QueryThoughtsFeesResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method ThoughtsFees not implemented\")\n}\n\nfunc RegisterQueryServer(s grpc1.Server, srv QueryServer) {\n\ts.RegisterService(&_Query_serviceDesc, srv)\n}\n\nfunc _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryParamsRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).Params(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.dmn.v1beta1.Query/Params\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_Thought_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryThoughtParamsRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).Thought(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.dmn.v1beta1.Query/Thought\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).Thought(ctx, req.(*QueryThoughtParamsRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_ThoughtStats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryThoughtParamsRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).ThoughtStats(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.dmn.v1beta1.Query/ThoughtStats\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).ThoughtStats(ctx, req.(*QueryThoughtParamsRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_Thoughts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryThoughtsRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).Thoughts(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.dmn.v1beta1.Query/Thoughts\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).Thoughts(ctx, req.(*QueryThoughtsRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_ThoughtsStats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryThoughtsStatsRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).ThoughtsStats(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.dmn.v1beta1.Query/ThoughtsStats\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).ThoughtsStats(ctx, req.(*QueryThoughtsStatsRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_ThoughtsFees_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryThoughtsFeesRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).ThoughtsFees(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.dmn.v1beta1.Query/ThoughtsFees\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).ThoughtsFees(ctx, req.(*QueryThoughtsFeesRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _Query_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"cyber.dmn.v1beta1.Query\",\n\tHandlerType: (*QueryServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Params\",\n\t\t\tHandler:    _Query_Params_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Thought\",\n\t\t\tHandler:    _Query_Thought_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ThoughtStats\",\n\t\t\tHandler:    _Query_ThoughtStats_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Thoughts\",\n\t\t\tHandler:    _Query_Thoughts_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ThoughtsStats\",\n\t\t\tHandler:    _Query_ThoughtsStats_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ThoughtsFees\",\n\t\t\tHandler:    _Query_ThoughtsFees_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"cyber/dmn/v1beta1/query.proto\",\n}\n\nfunc (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryThoughtParamsRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryThoughtParamsRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryThoughtParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Name) > 0 {\n\t\ti -= len(m.Name)\n\t\tcopy(dAtA[i:], m.Name)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.Name)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Program) > 0 {\n\t\ti -= len(m.Program)\n\t\tcopy(dAtA[i:], m.Program)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.Program)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryThoughtResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryThoughtResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryThoughtResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Thought.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryThoughtStatsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryThoughtStatsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryThoughtStatsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.ThoughtStats.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryThoughtsRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryThoughtsRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryThoughtsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryThoughtsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryThoughtsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryThoughtsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Thoughts) > 0 {\n\t\tfor iNdEx := len(m.Thoughts) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.Thoughts[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0xa\n\t\t}\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryThoughtsStatsRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryThoughtsStatsRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryThoughtsStatsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryThoughtsStatsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryThoughtsStatsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryThoughtsStatsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.ThoughtsStats) > 0 {\n\t\tfor iNdEx := len(m.ThoughtsStats) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.ThoughtsStats[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0xa\n\t\t}\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryThoughtsFeesRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryThoughtsFeesRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryThoughtsFeesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryThoughtsFeesResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryThoughtsFeesResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryThoughtsFeesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Fees) > 0 {\n\t\tfor iNdEx := len(m.Fees) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.Fees[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0x1a\n\t\t}\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintQuery(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovQuery(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *QueryParamsRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *QueryParamsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Params.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc (m *QueryThoughtParamsRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Program)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\tl = len(m.Name)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryThoughtResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Thought.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc (m *QueryThoughtStatsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.ThoughtStats.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc (m *QueryThoughtsRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *QueryThoughtsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif len(m.Thoughts) > 0 {\n\t\tfor _, e := range m.Thoughts {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovQuery(uint64(l))\n\t\t}\n\t}\n\treturn n\n}\n\nfunc (m *QueryThoughtsStatsRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *QueryThoughtsStatsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif len(m.ThoughtsStats) > 0 {\n\t\tfor _, e := range m.ThoughtsStats {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovQuery(uint64(l))\n\t\t}\n\t}\n\treturn n\n}\n\nfunc (m *QueryThoughtsFeesRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *QueryThoughtsFeesResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif len(m.Fees) > 0 {\n\t\tfor _, e := range m.Fees {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovQuery(uint64(l))\n\t\t}\n\t}\n\treturn n\n}\n\nfunc sovQuery(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozQuery(x uint64) (n int) {\n\treturn sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *QueryParamsRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryParamsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryThoughtParamsRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryThoughtParamsRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryThoughtParamsRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Program\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Program = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Name\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Name = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryThoughtResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryThoughtResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryThoughtResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Thought\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Thought.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryThoughtStatsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryThoughtStatsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryThoughtStatsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field ThoughtStats\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.ThoughtStats.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryThoughtsRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryThoughtsRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryThoughtsRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryThoughtsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryThoughtsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryThoughtsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Thoughts\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Thoughts = append(m.Thoughts, Thought{})\n\t\t\tif err := m.Thoughts[len(m.Thoughts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryThoughtsStatsRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryThoughtsStatsRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryThoughtsStatsRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryThoughtsStatsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryThoughtsStatsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryThoughtsStatsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field ThoughtsStats\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.ThoughtsStats = append(m.ThoughtsStats, ThoughtStats{})\n\t\t\tif err := m.ThoughtsStats[len(m.ThoughtsStats)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryThoughtsFeesRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryThoughtsFeesRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryThoughtsFeesRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryThoughtsFeesResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryThoughtsFeesResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryThoughtsFeesResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Fees\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Fees = append(m.Fees, types.Coin{})\n\t\t\tif err := m.Fees[len(m.Fees)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipQuery(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupQuery\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthQuery\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthQuery        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowQuery          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupQuery = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/dmn/types/query.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: cyber/dmn/v1beta1/query.proto\n\n/*\nPackage types is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage types\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/golang/protobuf/descriptor\"\n\t\"github.com/golang/protobuf/proto\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = descriptor.ForMessage\n\t_ = metadata.Join\n)\n\nfunc request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryParamsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryParamsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := server.Params(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Query_Thought_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_Query_Thought_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryThoughtParamsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Thought_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.Thought(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_Thought_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryThoughtParamsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Thought_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.Thought(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Query_ThoughtStats_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_Query_ThoughtStats_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryThoughtParamsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ThoughtStats_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.ThoughtStats(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_ThoughtStats_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryThoughtParamsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ThoughtStats_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.ThoughtStats(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_Query_Thoughts_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryThoughtsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := client.Thoughts(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_Thoughts_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryThoughtsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := server.Thoughts(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_Query_ThoughtsStats_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryThoughtsStatsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := client.ThoughtsStats(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_ThoughtsStats_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryThoughtsStatsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := server.ThoughtsStats(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_Query_ThoughtsFees_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryThoughtsFeesRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := client.ThoughtsFees(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_ThoughtsFees_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryThoughtsFeesRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := server.ThoughtsFees(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterQueryHandlerServer registers the http handlers for service Query to \"mux\".\n// UnaryRPC     :call QueryServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead.\nfunc RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error {\n\tmux.Handle(\"GET\", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Thought_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_Thought_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Thought_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_ThoughtStats_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_ThoughtStats_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_ThoughtStats_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Thoughts_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_Thoughts_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Thoughts_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_ThoughtsStats_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_ThoughtsStats_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_ThoughtsStats_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_ThoughtsFees_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_ThoughtsFees_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_ThoughtsFees_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.Dial(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Infof(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Infof(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\n\treturn RegisterQueryHandler(ctx, mux, conn)\n}\n\n// RegisterQueryHandler registers the http handlers for service Query to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn))\n}\n\n// RegisterQueryHandlerClient registers the http handlers for service Query\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"QueryClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"QueryClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"QueryClient\" to call the correct interceptors.\nfunc RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error {\n\tmux.Handle(\"GET\", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Thought_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_Thought_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Thought_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_ThoughtStats_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_ThoughtStats_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_ThoughtStats_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Thoughts_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_Thoughts_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Thoughts_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_ThoughtsStats_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_ThoughtsStats_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_ThoughtsStats_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_ThoughtsFees_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_ThoughtsFees_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_ThoughtsFees_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\nvar (\n\tpattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"dmn\", \"v1beta1\", \"params\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_Thought_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"dmn\", \"v1beta1\", \"thought\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_ThoughtStats_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"dmn\", \"v1beta1\", \"thought_stats\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_Thoughts_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"dmn\", \"v1beta1\", \"thoughts\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_ThoughtsStats_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"dmn\", \"v1beta1\", \"thoughts_stats\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_ThoughtsFees_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"dmn\", \"v1beta1\", \"thoughts_fees\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n)\n\nvar (\n\tforward_Query_Params_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_Thought_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_ThoughtStats_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_Thoughts_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_ThoughtsStats_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_ThoughtsFees_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "x/dmn/types/thought.go",
    "content": "package types\n\nimport (\n\t\"sort\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\nfunc NewThought(\n\tprogram string,\n\ttrigger Trigger,\n\tload Load,\n\tname string,\n\tparticle string,\n) Thought {\n\treturn Thought{\n\t\tProgram:  program,\n\t\tTrigger:  trigger,\n\t\tLoad:     load,\n\t\tName:     name,\n\t\tParticle: particle,\n\t}\n}\n\ntype Thoughts []Thought\n\ntype ThoughtsStats []ThoughtStats\n\nfunc (js Thoughts) Sort() {\n\tsort.Sort(js)\n}\n\nfunc (js Thoughts) Len() int { return len(js) }\n\nfunc (js Thoughts) Less(i, j int) bool {\n\treturn js[j].Load.GasPrice.IsLT(js[i].Load.GasPrice)\n\t// return js[i].Load.GasPrice.Amount.GT(js[j].Load.GasPrice.Amount)\n}\n\nfunc (js Thoughts) Swap(i, j int) { js[i], js[j] = js[j], js[i] }\n\nfunc NewTrigger(period, block uint64) Trigger {\n\treturn Trigger{\n\t\tPeriod: period,\n\t\tBlock:  block,\n\t}\n}\n\nfunc NewStats(\n\tprogram, name string,\n\tcalls, fees, gas, block uint64,\n) ThoughtStats {\n\treturn ThoughtStats{\n\t\tProgram:   program,\n\t\tName:      name,\n\t\tCalls:     calls,\n\t\tFees:      fees,\n\t\tGas:       gas,\n\t\tLastBlock: block,\n\t}\n}\n\nfunc NewLoad(calldata string, gasprice sdk.Coin) Load {\n\treturn Load{\n\t\tInput:    calldata,\n\t\tGasPrice: gasprice,\n\t}\n}\n"
  },
  {
    "path": "x/dmn/types/tx.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/dmn/v1beta1/tx.proto\n\npackage types\n\nimport (\n\tcontext \"context\"\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\t_ \"github.com/cosmos/cosmos-proto\"\n\t_ \"github.com/cosmos/cosmos-sdk/types\"\n\tgithub_com_cosmos_cosmos_sdk_types \"github.com/cosmos/cosmos-sdk/types\"\n\t_ \"github.com/cosmos/cosmos-sdk/types/msgservice\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tgrpc1 \"github.com/cosmos/gogoproto/grpc\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype MsgCreateThought struct {\n\tProgram  string  `protobuf:\"bytes,1,opt,name=program,proto3\" json:\"program,omitempty\"`\n\tTrigger  Trigger `protobuf:\"bytes,2,opt,name=trigger,proto3\" json:\"trigger\"`\n\tLoad     Load    `protobuf:\"bytes,3,opt,name=load,proto3\" json:\"load\"`\n\tName     string  `protobuf:\"bytes,4,opt,name=name,proto3\" json:\"name,omitempty\"`\n\tParticle string  `protobuf:\"bytes,5,opt,name=particle,proto3\" json:\"particle,omitempty\"`\n}\n\nfunc (m *MsgCreateThought) Reset()         { *m = MsgCreateThought{} }\nfunc (m *MsgCreateThought) String() string { return proto.CompactTextString(m) }\nfunc (*MsgCreateThought) ProtoMessage()    {}\nfunc (*MsgCreateThought) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4770788ccd571dd4, []int{0}\n}\n\nfunc (m *MsgCreateThought) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgCreateThought) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgCreateThought.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgCreateThought) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgCreateThought.Merge(m, src)\n}\n\nfunc (m *MsgCreateThought) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgCreateThought) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgCreateThought.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgCreateThought proto.InternalMessageInfo\n\nfunc (m *MsgCreateThought) GetProgram() string {\n\tif m != nil {\n\t\treturn m.Program\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgCreateThought) GetTrigger() Trigger {\n\tif m != nil {\n\t\treturn m.Trigger\n\t}\n\treturn Trigger{}\n}\n\nfunc (m *MsgCreateThought) GetLoad() Load {\n\tif m != nil {\n\t\treturn m.Load\n\t}\n\treturn Load{}\n}\n\nfunc (m *MsgCreateThought) GetName() string {\n\tif m != nil {\n\t\treturn m.Name\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgCreateThought) GetParticle() string {\n\tif m != nil {\n\t\treturn m.Particle\n\t}\n\treturn \"\"\n}\n\ntype MsgForgetThought struct {\n\tProgram string `protobuf:\"bytes,1,opt,name=program,proto3\" json:\"program,omitempty\"`\n\tName    string `protobuf:\"bytes,2,opt,name=name,proto3\" json:\"name,omitempty\"`\n}\n\nfunc (m *MsgForgetThought) Reset()         { *m = MsgForgetThought{} }\nfunc (m *MsgForgetThought) String() string { return proto.CompactTextString(m) }\nfunc (*MsgForgetThought) ProtoMessage()    {}\nfunc (*MsgForgetThought) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4770788ccd571dd4, []int{1}\n}\n\nfunc (m *MsgForgetThought) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgForgetThought) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgForgetThought.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgForgetThought) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgForgetThought.Merge(m, src)\n}\n\nfunc (m *MsgForgetThought) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgForgetThought) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgForgetThought.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgForgetThought proto.InternalMessageInfo\n\nfunc (m *MsgForgetThought) GetProgram() string {\n\tif m != nil {\n\t\treturn m.Program\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgForgetThought) GetName() string {\n\tif m != nil {\n\t\treturn m.Name\n\t}\n\treturn \"\"\n}\n\ntype MsgChangeThoughtParticle struct {\n\tProgram  string `protobuf:\"bytes,1,opt,name=program,proto3\" json:\"program,omitempty\"`\n\tName     string `protobuf:\"bytes,2,opt,name=name,proto3\" json:\"name,omitempty\"`\n\tParticle string `protobuf:\"bytes,3,opt,name=particle,proto3\" json:\"particle,omitempty\"`\n}\n\nfunc (m *MsgChangeThoughtParticle) Reset()         { *m = MsgChangeThoughtParticle{} }\nfunc (m *MsgChangeThoughtParticle) String() string { return proto.CompactTextString(m) }\nfunc (*MsgChangeThoughtParticle) ProtoMessage()    {}\nfunc (*MsgChangeThoughtParticle) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4770788ccd571dd4, []int{2}\n}\n\nfunc (m *MsgChangeThoughtParticle) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgChangeThoughtParticle) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgChangeThoughtParticle.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgChangeThoughtParticle) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgChangeThoughtParticle.Merge(m, src)\n}\n\nfunc (m *MsgChangeThoughtParticle) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgChangeThoughtParticle) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgChangeThoughtParticle.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgChangeThoughtParticle proto.InternalMessageInfo\n\nfunc (m *MsgChangeThoughtParticle) GetProgram() string {\n\tif m != nil {\n\t\treturn m.Program\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgChangeThoughtParticle) GetName() string {\n\tif m != nil {\n\t\treturn m.Name\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgChangeThoughtParticle) GetParticle() string {\n\tif m != nil {\n\t\treturn m.Particle\n\t}\n\treturn \"\"\n}\n\ntype MsgChangeThoughtName struct {\n\tProgram string `protobuf:\"bytes,1,opt,name=program,proto3\" json:\"program,omitempty\"`\n\tName    string `protobuf:\"bytes,2,opt,name=name,proto3\" json:\"name,omitempty\"`\n\tNewName string `protobuf:\"bytes,3,opt,name=new_name,json=newName,proto3\" json:\"new_name,omitempty\"`\n}\n\nfunc (m *MsgChangeThoughtName) Reset()         { *m = MsgChangeThoughtName{} }\nfunc (m *MsgChangeThoughtName) String() string { return proto.CompactTextString(m) }\nfunc (*MsgChangeThoughtName) ProtoMessage()    {}\nfunc (*MsgChangeThoughtName) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4770788ccd571dd4, []int{3}\n}\n\nfunc (m *MsgChangeThoughtName) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgChangeThoughtName) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgChangeThoughtName.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgChangeThoughtName) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgChangeThoughtName.Merge(m, src)\n}\n\nfunc (m *MsgChangeThoughtName) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgChangeThoughtName) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgChangeThoughtName.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgChangeThoughtName proto.InternalMessageInfo\n\nfunc (m *MsgChangeThoughtName) GetProgram() string {\n\tif m != nil {\n\t\treturn m.Program\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgChangeThoughtName) GetName() string {\n\tif m != nil {\n\t\treturn m.Name\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgChangeThoughtName) GetNewName() string {\n\tif m != nil {\n\t\treturn m.NewName\n\t}\n\treturn \"\"\n}\n\ntype MsgChangeThoughtInput struct {\n\tProgram string `protobuf:\"bytes,1,opt,name=program,proto3\" json:\"program,omitempty\"`\n\tName    string `protobuf:\"bytes,2,opt,name=name,proto3\" json:\"name,omitempty\"`\n\tInput   string `protobuf:\"bytes,3,opt,name=input,proto3\" json:\"input,omitempty\"`\n}\n\nfunc (m *MsgChangeThoughtInput) Reset()         { *m = MsgChangeThoughtInput{} }\nfunc (m *MsgChangeThoughtInput) String() string { return proto.CompactTextString(m) }\nfunc (*MsgChangeThoughtInput) ProtoMessage()    {}\nfunc (*MsgChangeThoughtInput) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4770788ccd571dd4, []int{4}\n}\n\nfunc (m *MsgChangeThoughtInput) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgChangeThoughtInput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgChangeThoughtInput.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgChangeThoughtInput) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgChangeThoughtInput.Merge(m, src)\n}\n\nfunc (m *MsgChangeThoughtInput) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgChangeThoughtInput) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgChangeThoughtInput.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgChangeThoughtInput proto.InternalMessageInfo\n\nfunc (m *MsgChangeThoughtInput) GetProgram() string {\n\tif m != nil {\n\t\treturn m.Program\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgChangeThoughtInput) GetName() string {\n\tif m != nil {\n\t\treturn m.Name\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgChangeThoughtInput) GetInput() string {\n\tif m != nil {\n\t\treturn m.Input\n\t}\n\treturn \"\"\n}\n\ntype MsgChangeThoughtGasPrice struct {\n\tProgram  string                                  `protobuf:\"bytes,1,opt,name=program,proto3\" json:\"program,omitempty\"`\n\tName     string                                  `protobuf:\"bytes,2,opt,name=name,proto3\" json:\"name,omitempty\"`\n\tGasPrice github_com_cosmos_cosmos_sdk_types.Coin `protobuf:\"bytes,3,opt,name=gas_price,json=gasPrice,proto3,casttype=github.com/cosmos/cosmos-sdk/types.Coin\" json:\"gas_price\"`\n}\n\nfunc (m *MsgChangeThoughtGasPrice) Reset()         { *m = MsgChangeThoughtGasPrice{} }\nfunc (m *MsgChangeThoughtGasPrice) String() string { return proto.CompactTextString(m) }\nfunc (*MsgChangeThoughtGasPrice) ProtoMessage()    {}\nfunc (*MsgChangeThoughtGasPrice) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4770788ccd571dd4, []int{5}\n}\n\nfunc (m *MsgChangeThoughtGasPrice) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgChangeThoughtGasPrice) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgChangeThoughtGasPrice.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgChangeThoughtGasPrice) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgChangeThoughtGasPrice.Merge(m, src)\n}\n\nfunc (m *MsgChangeThoughtGasPrice) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgChangeThoughtGasPrice) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgChangeThoughtGasPrice.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgChangeThoughtGasPrice proto.InternalMessageInfo\n\nfunc (m *MsgChangeThoughtGasPrice) GetProgram() string {\n\tif m != nil {\n\t\treturn m.Program\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgChangeThoughtGasPrice) GetName() string {\n\tif m != nil {\n\t\treturn m.Name\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgChangeThoughtGasPrice) GetGasPrice() github_com_cosmos_cosmos_sdk_types.Coin {\n\tif m != nil {\n\t\treturn m.GasPrice\n\t}\n\treturn github_com_cosmos_cosmos_sdk_types.Coin{}\n}\n\ntype MsgChangeThoughtPeriod struct {\n\tProgram string `protobuf:\"bytes,1,opt,name=program,proto3\" json:\"program,omitempty\"`\n\tName    string `protobuf:\"bytes,2,opt,name=name,proto3\" json:\"name,omitempty\"`\n\tPeriod  uint64 `protobuf:\"varint,3,opt,name=period,proto3\" json:\"period,omitempty\"`\n}\n\nfunc (m *MsgChangeThoughtPeriod) Reset()         { *m = MsgChangeThoughtPeriod{} }\nfunc (m *MsgChangeThoughtPeriod) String() string { return proto.CompactTextString(m) }\nfunc (*MsgChangeThoughtPeriod) ProtoMessage()    {}\nfunc (*MsgChangeThoughtPeriod) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4770788ccd571dd4, []int{6}\n}\n\nfunc (m *MsgChangeThoughtPeriod) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgChangeThoughtPeriod) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgChangeThoughtPeriod.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgChangeThoughtPeriod) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgChangeThoughtPeriod.Merge(m, src)\n}\n\nfunc (m *MsgChangeThoughtPeriod) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgChangeThoughtPeriod) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgChangeThoughtPeriod.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgChangeThoughtPeriod proto.InternalMessageInfo\n\nfunc (m *MsgChangeThoughtPeriod) GetProgram() string {\n\tif m != nil {\n\t\treturn m.Program\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgChangeThoughtPeriod) GetName() string {\n\tif m != nil {\n\t\treturn m.Name\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgChangeThoughtPeriod) GetPeriod() uint64 {\n\tif m != nil {\n\t\treturn m.Period\n\t}\n\treturn 0\n}\n\ntype MsgChangeThoughtBlock struct {\n\tProgram string `protobuf:\"bytes,1,opt,name=program,proto3\" json:\"program,omitempty\"`\n\tName    string `protobuf:\"bytes,2,opt,name=name,proto3\" json:\"name,omitempty\"`\n\tBlock   uint64 `protobuf:\"varint,3,opt,name=block,proto3\" json:\"block,omitempty\"`\n}\n\nfunc (m *MsgChangeThoughtBlock) Reset()         { *m = MsgChangeThoughtBlock{} }\nfunc (m *MsgChangeThoughtBlock) String() string { return proto.CompactTextString(m) }\nfunc (*MsgChangeThoughtBlock) ProtoMessage()    {}\nfunc (*MsgChangeThoughtBlock) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4770788ccd571dd4, []int{7}\n}\n\nfunc (m *MsgChangeThoughtBlock) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgChangeThoughtBlock) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgChangeThoughtBlock.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgChangeThoughtBlock) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgChangeThoughtBlock.Merge(m, src)\n}\n\nfunc (m *MsgChangeThoughtBlock) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgChangeThoughtBlock) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgChangeThoughtBlock.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgChangeThoughtBlock proto.InternalMessageInfo\n\nfunc (m *MsgChangeThoughtBlock) GetProgram() string {\n\tif m != nil {\n\t\treturn m.Program\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgChangeThoughtBlock) GetName() string {\n\tif m != nil {\n\t\treturn m.Name\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgChangeThoughtBlock) GetBlock() uint64 {\n\tif m != nil {\n\t\treturn m.Block\n\t}\n\treturn 0\n}\n\ntype MsgUpdateParams struct {\n\tAuthority string `protobuf:\"bytes,1,opt,name=authority,proto3\" json:\"authority,omitempty\"`\n\tParams    Params `protobuf:\"bytes,2,opt,name=params,proto3\" json:\"params\"`\n}\n\nfunc (m *MsgUpdateParams) Reset()         { *m = MsgUpdateParams{} }\nfunc (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) }\nfunc (*MsgUpdateParams) ProtoMessage()    {}\nfunc (*MsgUpdateParams) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4770788ccd571dd4, []int{8}\n}\n\nfunc (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgUpdateParams.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgUpdateParams) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgUpdateParams.Merge(m, src)\n}\n\nfunc (m *MsgUpdateParams) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgUpdateParams) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgUpdateParams.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo\n\nfunc (m *MsgUpdateParams) GetAuthority() string {\n\tif m != nil {\n\t\treturn m.Authority\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgUpdateParams) GetParams() Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn Params{}\n}\n\ntype MsgCreateThoughtResponse struct{}\n\nfunc (m *MsgCreateThoughtResponse) Reset()         { *m = MsgCreateThoughtResponse{} }\nfunc (m *MsgCreateThoughtResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgCreateThoughtResponse) ProtoMessage()    {}\nfunc (*MsgCreateThoughtResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4770788ccd571dd4, []int{9}\n}\n\nfunc (m *MsgCreateThoughtResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgCreateThoughtResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgCreateThoughtResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgCreateThoughtResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgCreateThoughtResponse.Merge(m, src)\n}\n\nfunc (m *MsgCreateThoughtResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgCreateThoughtResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgCreateThoughtResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgCreateThoughtResponse proto.InternalMessageInfo\n\ntype MsgForgetThoughtResponse struct{}\n\nfunc (m *MsgForgetThoughtResponse) Reset()         { *m = MsgForgetThoughtResponse{} }\nfunc (m *MsgForgetThoughtResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgForgetThoughtResponse) ProtoMessage()    {}\nfunc (*MsgForgetThoughtResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4770788ccd571dd4, []int{10}\n}\n\nfunc (m *MsgForgetThoughtResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgForgetThoughtResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgForgetThoughtResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgForgetThoughtResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgForgetThoughtResponse.Merge(m, src)\n}\n\nfunc (m *MsgForgetThoughtResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgForgetThoughtResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgForgetThoughtResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgForgetThoughtResponse proto.InternalMessageInfo\n\ntype MsgChangeThoughtParticleResponse struct{}\n\nfunc (m *MsgChangeThoughtParticleResponse) Reset()         { *m = MsgChangeThoughtParticleResponse{} }\nfunc (m *MsgChangeThoughtParticleResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgChangeThoughtParticleResponse) ProtoMessage()    {}\nfunc (*MsgChangeThoughtParticleResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4770788ccd571dd4, []int{11}\n}\n\nfunc (m *MsgChangeThoughtParticleResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgChangeThoughtParticleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgChangeThoughtParticleResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgChangeThoughtParticleResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgChangeThoughtParticleResponse.Merge(m, src)\n}\n\nfunc (m *MsgChangeThoughtParticleResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgChangeThoughtParticleResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgChangeThoughtParticleResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgChangeThoughtParticleResponse proto.InternalMessageInfo\n\ntype MsgChangeThoughtNameResponse struct{}\n\nfunc (m *MsgChangeThoughtNameResponse) Reset()         { *m = MsgChangeThoughtNameResponse{} }\nfunc (m *MsgChangeThoughtNameResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgChangeThoughtNameResponse) ProtoMessage()    {}\nfunc (*MsgChangeThoughtNameResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4770788ccd571dd4, []int{12}\n}\n\nfunc (m *MsgChangeThoughtNameResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgChangeThoughtNameResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgChangeThoughtNameResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgChangeThoughtNameResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgChangeThoughtNameResponse.Merge(m, src)\n}\n\nfunc (m *MsgChangeThoughtNameResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgChangeThoughtNameResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgChangeThoughtNameResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgChangeThoughtNameResponse proto.InternalMessageInfo\n\ntype MsgChangeThoughtInputResponse struct{}\n\nfunc (m *MsgChangeThoughtInputResponse) Reset()         { *m = MsgChangeThoughtInputResponse{} }\nfunc (m *MsgChangeThoughtInputResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgChangeThoughtInputResponse) ProtoMessage()    {}\nfunc (*MsgChangeThoughtInputResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4770788ccd571dd4, []int{13}\n}\n\nfunc (m *MsgChangeThoughtInputResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgChangeThoughtInputResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgChangeThoughtInputResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgChangeThoughtInputResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgChangeThoughtInputResponse.Merge(m, src)\n}\n\nfunc (m *MsgChangeThoughtInputResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgChangeThoughtInputResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgChangeThoughtInputResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgChangeThoughtInputResponse proto.InternalMessageInfo\n\ntype MsgChangeThoughtGasPriceResponse struct{}\n\nfunc (m *MsgChangeThoughtGasPriceResponse) Reset()         { *m = MsgChangeThoughtGasPriceResponse{} }\nfunc (m *MsgChangeThoughtGasPriceResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgChangeThoughtGasPriceResponse) ProtoMessage()    {}\nfunc (*MsgChangeThoughtGasPriceResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4770788ccd571dd4, []int{14}\n}\n\nfunc (m *MsgChangeThoughtGasPriceResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgChangeThoughtGasPriceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgChangeThoughtGasPriceResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgChangeThoughtGasPriceResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgChangeThoughtGasPriceResponse.Merge(m, src)\n}\n\nfunc (m *MsgChangeThoughtGasPriceResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgChangeThoughtGasPriceResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgChangeThoughtGasPriceResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgChangeThoughtGasPriceResponse proto.InternalMessageInfo\n\ntype MsgChangeThoughtPeriodResponse struct{}\n\nfunc (m *MsgChangeThoughtPeriodResponse) Reset()         { *m = MsgChangeThoughtPeriodResponse{} }\nfunc (m *MsgChangeThoughtPeriodResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgChangeThoughtPeriodResponse) ProtoMessage()    {}\nfunc (*MsgChangeThoughtPeriodResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4770788ccd571dd4, []int{15}\n}\n\nfunc (m *MsgChangeThoughtPeriodResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgChangeThoughtPeriodResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgChangeThoughtPeriodResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgChangeThoughtPeriodResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgChangeThoughtPeriodResponse.Merge(m, src)\n}\n\nfunc (m *MsgChangeThoughtPeriodResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgChangeThoughtPeriodResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgChangeThoughtPeriodResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgChangeThoughtPeriodResponse proto.InternalMessageInfo\n\ntype MsgChangeThoughtBlockResponse struct{}\n\nfunc (m *MsgChangeThoughtBlockResponse) Reset()         { *m = MsgChangeThoughtBlockResponse{} }\nfunc (m *MsgChangeThoughtBlockResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgChangeThoughtBlockResponse) ProtoMessage()    {}\nfunc (*MsgChangeThoughtBlockResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4770788ccd571dd4, []int{16}\n}\n\nfunc (m *MsgChangeThoughtBlockResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgChangeThoughtBlockResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgChangeThoughtBlockResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgChangeThoughtBlockResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgChangeThoughtBlockResponse.Merge(m, src)\n}\n\nfunc (m *MsgChangeThoughtBlockResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgChangeThoughtBlockResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgChangeThoughtBlockResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgChangeThoughtBlockResponse proto.InternalMessageInfo\n\ntype MsgUpdateParamsResponse struct{}\n\nfunc (m *MsgUpdateParamsResponse) Reset()         { *m = MsgUpdateParamsResponse{} }\nfunc (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgUpdateParamsResponse) ProtoMessage()    {}\nfunc (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4770788ccd571dd4, []int{17}\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgUpdateParamsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src)\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo\n\nfunc init() {\n\tproto.RegisterType((*MsgCreateThought)(nil), \"cyber.dmn.v1beta1.MsgCreateThought\")\n\tproto.RegisterType((*MsgForgetThought)(nil), \"cyber.dmn.v1beta1.MsgForgetThought\")\n\tproto.RegisterType((*MsgChangeThoughtParticle)(nil), \"cyber.dmn.v1beta1.MsgChangeThoughtParticle\")\n\tproto.RegisterType((*MsgChangeThoughtName)(nil), \"cyber.dmn.v1beta1.MsgChangeThoughtName\")\n\tproto.RegisterType((*MsgChangeThoughtInput)(nil), \"cyber.dmn.v1beta1.MsgChangeThoughtInput\")\n\tproto.RegisterType((*MsgChangeThoughtGasPrice)(nil), \"cyber.dmn.v1beta1.MsgChangeThoughtGasPrice\")\n\tproto.RegisterType((*MsgChangeThoughtPeriod)(nil), \"cyber.dmn.v1beta1.MsgChangeThoughtPeriod\")\n\tproto.RegisterType((*MsgChangeThoughtBlock)(nil), \"cyber.dmn.v1beta1.MsgChangeThoughtBlock\")\n\tproto.RegisterType((*MsgUpdateParams)(nil), \"cyber.dmn.v1beta1.MsgUpdateParams\")\n\tproto.RegisterType((*MsgCreateThoughtResponse)(nil), \"cyber.dmn.v1beta1.MsgCreateThoughtResponse\")\n\tproto.RegisterType((*MsgForgetThoughtResponse)(nil), \"cyber.dmn.v1beta1.MsgForgetThoughtResponse\")\n\tproto.RegisterType((*MsgChangeThoughtParticleResponse)(nil), \"cyber.dmn.v1beta1.MsgChangeThoughtParticleResponse\")\n\tproto.RegisterType((*MsgChangeThoughtNameResponse)(nil), \"cyber.dmn.v1beta1.MsgChangeThoughtNameResponse\")\n\tproto.RegisterType((*MsgChangeThoughtInputResponse)(nil), \"cyber.dmn.v1beta1.MsgChangeThoughtInputResponse\")\n\tproto.RegisterType((*MsgChangeThoughtGasPriceResponse)(nil), \"cyber.dmn.v1beta1.MsgChangeThoughtGasPriceResponse\")\n\tproto.RegisterType((*MsgChangeThoughtPeriodResponse)(nil), \"cyber.dmn.v1beta1.MsgChangeThoughtPeriodResponse\")\n\tproto.RegisterType((*MsgChangeThoughtBlockResponse)(nil), \"cyber.dmn.v1beta1.MsgChangeThoughtBlockResponse\")\n\tproto.RegisterType((*MsgUpdateParamsResponse)(nil), \"cyber.dmn.v1beta1.MsgUpdateParamsResponse\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/dmn/v1beta1/tx.proto\", fileDescriptor_4770788ccd571dd4) }\n\nvar fileDescriptor_4770788ccd571dd4 = []byte{\n\t// 802 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xcd, 0x4e, 0xdb, 0x4c,\n\t0x14, 0x8d, 0x21, 0x10, 0xb8, 0xdf, 0x2f, 0xfe, 0x02, 0x38, 0xd6, 0x87, 0x89, 0xdc, 0x05, 0x94,\n\t0x2a, 0x71, 0x03, 0x52, 0x2b, 0xb1, 0x6a, 0x83, 0x54, 0x54, 0xa9, 0x54, 0x28, 0xa5, 0x9b, 0x56,\n\t0x02, 0x4d, 0xec, 0xd1, 0xc4, 0x02, 0x7b, 0x2c, 0x8f, 0x03, 0x64, 0xdb, 0x27, 0xa8, 0xfa, 0x24,\n\t0xad, 0xd4, 0x87, 0x40, 0xea, 0x06, 0x75, 0xd5, 0x15, 0xaa, 0x60, 0x51, 0xf5, 0x15, 0xba, 0xaa,\n\t0x66, 0x3c, 0x36, 0x24, 0x71, 0xc0, 0x59, 0x25, 0xe3, 0x7b, 0xee, 0x39, 0x33, 0x67, 0xee, 0xbd,\n\t0x36, 0xe8, 0x76, 0xaf, 0x8d, 0x43, 0xcb, 0xf1, 0x7c, 0xeb, 0xb8, 0xd1, 0xc6, 0x11, 0x6a, 0x58,\n\t0xd1, 0x69, 0x3d, 0x08, 0x69, 0x44, 0xd5, 0x39, 0x11, 0xab, 0x3b, 0x9e, 0x5f, 0x97, 0x31, 0xbd,\n\t0x4c, 0x28, 0xa1, 0x22, 0x6a, 0xf1, 0x7f, 0x31, 0x50, 0x5f, 0xb4, 0x29, 0xf3, 0x28, 0xb3, 0x3c,\n\t0x46, 0xac, 0xe3, 0x06, 0xff, 0x91, 0x81, 0x4a, 0x1c, 0x38, 0x88, 0x33, 0xe2, 0x85, 0x0c, 0x2d,\n\t0x65, 0x08, 0xf7, 0x02, 0x9c, 0x84, 0x0d, 0x49, 0xd9, 0x46, 0x0c, 0xa7, 0x00, 0x9b, 0xba, 0x7e,\n\t0x1c, 0x37, 0xbf, 0x28, 0xf0, 0xef, 0x0e, 0x23, 0x5b, 0x21, 0x46, 0x11, 0xde, 0xeb, 0xd0, 0x2e,\n\t0xe9, 0x44, 0xaa, 0x06, 0xa5, 0x20, 0xa4, 0x24, 0x44, 0x9e, 0xa6, 0x54, 0x95, 0xd5, 0xd9, 0x56,\n\t0xb2, 0x54, 0x37, 0xa1, 0x14, 0x85, 0x2e, 0x21, 0x38, 0xd4, 0x26, 0xaa, 0xca, 0xea, 0x1f, 0xeb,\n\t0x7a, 0x7d, 0xe8, 0x70, 0xf5, 0xbd, 0x18, 0xd1, 0x2c, 0x9e, 0x5d, 0x2c, 0x17, 0x5a, 0x49, 0x82,\n\t0xda, 0x80, 0xe2, 0x11, 0x45, 0x8e, 0x36, 0x29, 0x12, 0x17, 0x33, 0x12, 0x5f, 0x50, 0xe4, 0xc8,\n\t0x2c, 0x01, 0x55, 0x55, 0x28, 0xfa, 0xc8, 0xc3, 0x5a, 0x51, 0xec, 0x42, 0xfc, 0x57, 0x75, 0x98,\n\t0x09, 0x50, 0x18, 0xb9, 0xf6, 0x11, 0xd6, 0xa6, 0xc4, 0xf3, 0x74, 0x6d, 0x3e, 0x11, 0x87, 0x79,\n\t0x46, 0x43, 0x82, 0xa3, 0xbb, 0x0f, 0x93, 0xb0, 0x4f, 0x5c, 0xb3, 0x9b, 0x0e, 0x68, 0xdc, 0x8e,\n\t0x0e, 0xf2, 0x49, 0x62, 0xc7, 0xae, 0x64, 0x1f, 0x8f, 0xa9, 0x6f, 0x9f, 0x93, 0x03, 0xfb, 0x3c,\n\t0x80, 0xf2, 0xa0, 0xca, 0x4b, 0x9e, 0x33, 0x9e, 0x42, 0x05, 0x66, 0x7c, 0x7c, 0x72, 0x20, 0x9e,\n\t0xc7, 0x0a, 0x25, 0x1f, 0x9f, 0x70, 0x22, 0xf3, 0x2d, 0xcc, 0x0f, 0x0a, 0x3c, 0xf7, 0x83, 0xee,\n\t0x98, 0x6e, 0xa8, 0x65, 0x98, 0x72, 0x79, 0x9a, 0xa4, 0x8f, 0x17, 0xe6, 0x27, 0x65, 0xd8, 0xa4,\n\t0x6d, 0xc4, 0x76, 0x43, 0xd7, 0x1e, 0xf7, 0x08, 0x04, 0x66, 0x09, 0xe2, 0x75, 0xed, 0xda, 0x58,\n\t0x16, 0x46, 0xa5, 0x2e, 0xeb, 0x9b, 0x97, 0x6c, 0x5a, 0x1a, 0x5b, 0xd4, 0xf5, 0x9b, 0x16, 0x2f,\n\t0x8d, 0x5f, 0x17, 0xcb, 0x2b, 0xc4, 0x8d, 0x3a, 0xdd, 0x76, 0xdd, 0xa6, 0x9e, 0x6c, 0x06, 0xf9,\n\t0x53, 0x63, 0xce, 0xa1, 0x2c, 0x7f, 0x9e, 0xd0, 0x9a, 0x21, 0x72, 0x5b, 0xe6, 0x3e, 0x2c, 0x0c,\n\t0xdd, 0x2b, 0x0e, 0x5d, 0xea, 0x8c, 0xb9, 0xe1, 0x05, 0x98, 0x0e, 0x44, 0x9e, 0xd8, 0x6d, 0xb1,\n\t0x25, 0x57, 0x59, 0x86, 0x37, 0x8f, 0xa8, 0x7d, 0x38, 0xbe, 0xe1, 0x6d, 0x9e, 0x26, 0xd9, 0xe3,\n\t0x85, 0xf9, 0x41, 0x81, 0x7f, 0x76, 0x18, 0x79, 0x1d, 0x38, 0x28, 0xc2, 0xbb, 0x28, 0x44, 0x1e,\n\t0x53, 0x1f, 0xc1, 0x2c, 0xea, 0x46, 0x1d, 0x1a, 0xba, 0x51, 0x2f, 0x66, 0x6e, 0x6a, 0x5f, 0x3f,\n\t0xd7, 0xca, 0xd2, 0xbc, 0xa7, 0x8e, 0x13, 0x62, 0xc6, 0x5e, 0x45, 0xa1, 0xeb, 0x93, 0xd6, 0x35,\n\t0x54, 0x7d, 0x0c, 0xd3, 0x81, 0x60, 0x90, 0x0d, 0x5c, 0xc9, 0xe8, 0xc3, 0x58, 0x42, 0x76, 0xa2,\n\t0x84, 0x6f, 0xfe, 0xfd, 0xee, 0xc7, 0xc7, 0xb5, 0x6b, 0x22, 0x53, 0x8f, 0x8b, 0xe0, 0xe6, 0xe0,\n\t0x68, 0x61, 0x16, 0x50, 0x9f, 0x61, 0x19, 0xeb, 0xeb, 0xc3, 0x34, 0x66, 0x42, 0x75, 0x54, 0x87,\n\t0xa5, 0x18, 0x03, 0xfe, 0xcf, 0xea, 0x8f, 0x34, 0xbe, 0x0c, 0x4b, 0x99, 0xe5, 0x7d, 0x9b, 0x48,\n\t0x52, 0xa1, 0x29, 0xa6, 0x0a, 0x46, 0x76, 0x49, 0xdc, 0x26, 0x23, 0x2e, 0x35, 0x05, 0x54, 0x60,\n\t0x71, 0xe0, 0x5e, 0x92, 0xd0, 0xfa, 0xcf, 0x12, 0x4c, 0xee, 0x30, 0xa2, 0x22, 0xf8, 0xab, 0x7f,\n\t0xb8, 0xde, 0xcb, 0x30, 0x7c, 0xd0, 0x48, 0xfd, 0x41, 0x0e, 0x50, 0x22, 0xc5, 0x25, 0xfa, 0x47,\n\t0xde, 0x08, 0x89, 0x3e, 0xd0, 0x28, 0x89, 0xcc, 0x4b, 0x53, 0x7b, 0x30, 0x9f, 0x3d, 0x13, 0x47,\n\t0x6d, 0x34, 0x0b, 0xac, 0x6f, 0x8c, 0x01, 0x4e, 0xa5, 0x3d, 0x98, 0x1b, 0x1e, 0x94, 0x2b, 0x39,\n\t0x98, 0x38, 0x50, 0xb7, 0x72, 0x02, 0x53, 0xb9, 0x00, 0xd4, 0x8c, 0xb1, 0xb9, 0x9a, 0x83, 0x46,\n\t0x20, 0xf5, 0x87, 0x79, 0x91, 0x23, 0xbd, 0x4d, 0x47, 0x69, 0x1e, 0x6f, 0x13, 0x70, 0x2e, 0x6f,\n\t0x07, 0x5b, 0x40, 0x65, 0xf0, 0x5f, 0xd6, 0x48, 0xbc, 0x9f, 0xe7, 0x9e, 0x04, 0x54, 0x6f, 0xe4,\n\t0x86, 0x8e, 0x74, 0x38, 0x9e, 0x93, 0x79, 0x1c, 0x16, 0xc8, 0x5c, 0x0e, 0xf7, 0xb5, 0xa9, 0xba,\n\t0x0f, 0x7f, 0xf6, 0xcd, 0x4e, 0x33, 0x9b, 0xe1, 0x26, 0x46, 0x5f, 0xbb, 0x1b, 0x93, 0xf0, 0x37,\n\t0xb7, 0xcf, 0x2e, 0x0d, 0xe5, 0xfc, 0xd2, 0x50, 0xbe, 0x5f, 0x1a, 0xca, 0xfb, 0x2b, 0xa3, 0x70,\n\t0x7e, 0x65, 0x14, 0xbe, 0x5d, 0x19, 0x85, 0x37, 0xb5, 0x9b, 0x6f, 0x2a, 0xce, 0x67, 0x53, 0x9f,\n\t0xf0, 0xc1, 0x6c, 0x11, 0x5a, 0x8b, 0xbf, 0xdc, 0x4e, 0xc5, 0xb7, 0x9b, 0x78, 0x69, 0xb5, 0xa7,\n\t0xc5, 0x47, 0xd9, 0xc6, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfa, 0xd9, 0x80, 0x0a, 0x4e, 0x0a,\n\t0x00, 0x00,\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ context.Context\n\t_ grpc.ClientConn\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// MsgClient is the client API for Msg service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype MsgClient interface {\n\tCreateThought(ctx context.Context, in *MsgCreateThought, opts ...grpc.CallOption) (*MsgCreateThoughtResponse, error)\n\tForgetThought(ctx context.Context, in *MsgForgetThought, opts ...grpc.CallOption) (*MsgForgetThoughtResponse, error)\n\tChangeThoughtParticle(ctx context.Context, in *MsgChangeThoughtParticle, opts ...grpc.CallOption) (*MsgChangeThoughtParticleResponse, error)\n\tChangeThoughtName(ctx context.Context, in *MsgChangeThoughtName, opts ...grpc.CallOption) (*MsgChangeThoughtNameResponse, error)\n\tChangeThoughtInput(ctx context.Context, in *MsgChangeThoughtInput, opts ...grpc.CallOption) (*MsgChangeThoughtInputResponse, error)\n\tChangeThoughtGasPrice(ctx context.Context, in *MsgChangeThoughtGasPrice, opts ...grpc.CallOption) (*MsgChangeThoughtGasPriceResponse, error)\n\tChangeThoughtPeriod(ctx context.Context, in *MsgChangeThoughtPeriod, opts ...grpc.CallOption) (*MsgChangeThoughtPeriodResponse, error)\n\tChangeThoughtBlock(ctx context.Context, in *MsgChangeThoughtBlock, opts ...grpc.CallOption) (*MsgChangeThoughtBlockResponse, error)\n\tUpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error)\n}\n\ntype msgClient struct {\n\tcc grpc1.ClientConn\n}\n\nfunc NewMsgClient(cc grpc1.ClientConn) MsgClient {\n\treturn &msgClient{cc}\n}\n\nfunc (c *msgClient) CreateThought(ctx context.Context, in *MsgCreateThought, opts ...grpc.CallOption) (*MsgCreateThoughtResponse, error) {\n\tout := new(MsgCreateThoughtResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.dmn.v1beta1.Msg/CreateThought\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) ForgetThought(ctx context.Context, in *MsgForgetThought, opts ...grpc.CallOption) (*MsgForgetThoughtResponse, error) {\n\tout := new(MsgForgetThoughtResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.dmn.v1beta1.Msg/ForgetThought\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) ChangeThoughtParticle(ctx context.Context, in *MsgChangeThoughtParticle, opts ...grpc.CallOption) (*MsgChangeThoughtParticleResponse, error) {\n\tout := new(MsgChangeThoughtParticleResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.dmn.v1beta1.Msg/ChangeThoughtParticle\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) ChangeThoughtName(ctx context.Context, in *MsgChangeThoughtName, opts ...grpc.CallOption) (*MsgChangeThoughtNameResponse, error) {\n\tout := new(MsgChangeThoughtNameResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.dmn.v1beta1.Msg/ChangeThoughtName\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) ChangeThoughtInput(ctx context.Context, in *MsgChangeThoughtInput, opts ...grpc.CallOption) (*MsgChangeThoughtInputResponse, error) {\n\tout := new(MsgChangeThoughtInputResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.dmn.v1beta1.Msg/ChangeThoughtInput\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) ChangeThoughtGasPrice(ctx context.Context, in *MsgChangeThoughtGasPrice, opts ...grpc.CallOption) (*MsgChangeThoughtGasPriceResponse, error) {\n\tout := new(MsgChangeThoughtGasPriceResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.dmn.v1beta1.Msg/ChangeThoughtGasPrice\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) ChangeThoughtPeriod(ctx context.Context, in *MsgChangeThoughtPeriod, opts ...grpc.CallOption) (*MsgChangeThoughtPeriodResponse, error) {\n\tout := new(MsgChangeThoughtPeriodResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.dmn.v1beta1.Msg/ChangeThoughtPeriod\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) ChangeThoughtBlock(ctx context.Context, in *MsgChangeThoughtBlock, opts ...grpc.CallOption) (*MsgChangeThoughtBlockResponse, error) {\n\tout := new(MsgChangeThoughtBlockResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.dmn.v1beta1.Msg/ChangeThoughtBlock\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) {\n\tout := new(MsgUpdateParamsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.dmn.v1beta1.Msg/UpdateParams\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// MsgServer is the server API for Msg service.\ntype MsgServer interface {\n\tCreateThought(context.Context, *MsgCreateThought) (*MsgCreateThoughtResponse, error)\n\tForgetThought(context.Context, *MsgForgetThought) (*MsgForgetThoughtResponse, error)\n\tChangeThoughtParticle(context.Context, *MsgChangeThoughtParticle) (*MsgChangeThoughtParticleResponse, error)\n\tChangeThoughtName(context.Context, *MsgChangeThoughtName) (*MsgChangeThoughtNameResponse, error)\n\tChangeThoughtInput(context.Context, *MsgChangeThoughtInput) (*MsgChangeThoughtInputResponse, error)\n\tChangeThoughtGasPrice(context.Context, *MsgChangeThoughtGasPrice) (*MsgChangeThoughtGasPriceResponse, error)\n\tChangeThoughtPeriod(context.Context, *MsgChangeThoughtPeriod) (*MsgChangeThoughtPeriodResponse, error)\n\tChangeThoughtBlock(context.Context, *MsgChangeThoughtBlock) (*MsgChangeThoughtBlockResponse, error)\n\tUpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error)\n}\n\n// UnimplementedMsgServer can be embedded to have forward compatible implementations.\ntype UnimplementedMsgServer struct{}\n\nfunc (*UnimplementedMsgServer) CreateThought(ctx context.Context, req *MsgCreateThought) (*MsgCreateThoughtResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CreateThought not implemented\")\n}\n\nfunc (*UnimplementedMsgServer) ForgetThought(ctx context.Context, req *MsgForgetThought) (*MsgForgetThoughtResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method ForgetThought not implemented\")\n}\n\nfunc (*UnimplementedMsgServer) ChangeThoughtParticle(ctx context.Context, req *MsgChangeThoughtParticle) (*MsgChangeThoughtParticleResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method ChangeThoughtParticle not implemented\")\n}\n\nfunc (*UnimplementedMsgServer) ChangeThoughtName(ctx context.Context, req *MsgChangeThoughtName) (*MsgChangeThoughtNameResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method ChangeThoughtName not implemented\")\n}\n\nfunc (*UnimplementedMsgServer) ChangeThoughtInput(ctx context.Context, req *MsgChangeThoughtInput) (*MsgChangeThoughtInputResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method ChangeThoughtInput not implemented\")\n}\n\nfunc (*UnimplementedMsgServer) ChangeThoughtGasPrice(ctx context.Context, req *MsgChangeThoughtGasPrice) (*MsgChangeThoughtGasPriceResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method ChangeThoughtGasPrice not implemented\")\n}\n\nfunc (*UnimplementedMsgServer) ChangeThoughtPeriod(ctx context.Context, req *MsgChangeThoughtPeriod) (*MsgChangeThoughtPeriodResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method ChangeThoughtPeriod not implemented\")\n}\n\nfunc (*UnimplementedMsgServer) ChangeThoughtBlock(ctx context.Context, req *MsgChangeThoughtBlock) (*MsgChangeThoughtBlockResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method ChangeThoughtBlock not implemented\")\n}\n\nfunc (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method UpdateParams not implemented\")\n}\n\nfunc RegisterMsgServer(s grpc1.Server, srv MsgServer) {\n\ts.RegisterService(&_Msg_serviceDesc, srv)\n}\n\nfunc _Msg_CreateThought_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgCreateThought)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).CreateThought(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.dmn.v1beta1.Msg/CreateThought\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).CreateThought(ctx, req.(*MsgCreateThought))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_ForgetThought_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgForgetThought)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).ForgetThought(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.dmn.v1beta1.Msg/ForgetThought\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).ForgetThought(ctx, req.(*MsgForgetThought))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_ChangeThoughtParticle_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgChangeThoughtParticle)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).ChangeThoughtParticle(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.dmn.v1beta1.Msg/ChangeThoughtParticle\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).ChangeThoughtParticle(ctx, req.(*MsgChangeThoughtParticle))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_ChangeThoughtName_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgChangeThoughtName)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).ChangeThoughtName(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.dmn.v1beta1.Msg/ChangeThoughtName\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).ChangeThoughtName(ctx, req.(*MsgChangeThoughtName))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_ChangeThoughtInput_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgChangeThoughtInput)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).ChangeThoughtInput(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.dmn.v1beta1.Msg/ChangeThoughtInput\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).ChangeThoughtInput(ctx, req.(*MsgChangeThoughtInput))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_ChangeThoughtGasPrice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgChangeThoughtGasPrice)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).ChangeThoughtGasPrice(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.dmn.v1beta1.Msg/ChangeThoughtGasPrice\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).ChangeThoughtGasPrice(ctx, req.(*MsgChangeThoughtGasPrice))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_ChangeThoughtPeriod_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgChangeThoughtPeriod)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).ChangeThoughtPeriod(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.dmn.v1beta1.Msg/ChangeThoughtPeriod\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).ChangeThoughtPeriod(ctx, req.(*MsgChangeThoughtPeriod))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_ChangeThoughtBlock_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgChangeThoughtBlock)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).ChangeThoughtBlock(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.dmn.v1beta1.Msg/ChangeThoughtBlock\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).ChangeThoughtBlock(ctx, req.(*MsgChangeThoughtBlock))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgUpdateParams)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).UpdateParams(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.dmn.v1beta1.Msg/UpdateParams\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _Msg_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"cyber.dmn.v1beta1.Msg\",\n\tHandlerType: (*MsgServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"CreateThought\",\n\t\t\tHandler:    _Msg_CreateThought_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ForgetThought\",\n\t\t\tHandler:    _Msg_ForgetThought_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ChangeThoughtParticle\",\n\t\t\tHandler:    _Msg_ChangeThoughtParticle_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ChangeThoughtName\",\n\t\t\tHandler:    _Msg_ChangeThoughtName_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ChangeThoughtInput\",\n\t\t\tHandler:    _Msg_ChangeThoughtInput_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ChangeThoughtGasPrice\",\n\t\t\tHandler:    _Msg_ChangeThoughtGasPrice_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ChangeThoughtPeriod\",\n\t\t\tHandler:    _Msg_ChangeThoughtPeriod_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ChangeThoughtBlock\",\n\t\t\tHandler:    _Msg_ChangeThoughtBlock_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"UpdateParams\",\n\t\t\tHandler:    _Msg_UpdateParams_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"cyber/dmn/v1beta1/tx.proto\",\n}\n\nfunc (m *MsgCreateThought) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgCreateThought) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgCreateThought) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Particle) > 0 {\n\t\ti -= len(m.Particle)\n\t\tcopy(dAtA[i:], m.Particle)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Particle)))\n\t\ti--\n\t\tdAtA[i] = 0x2a\n\t}\n\tif len(m.Name) > 0 {\n\t\ti -= len(m.Name)\n\t\tcopy(dAtA[i:], m.Name)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Name)))\n\t\ti--\n\t\tdAtA[i] = 0x22\n\t}\n\t{\n\t\tsize, err := m.Load.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x1a\n\t{\n\t\tsize, err := m.Trigger.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x12\n\tif len(m.Program) > 0 {\n\t\ti -= len(m.Program)\n\t\tcopy(dAtA[i:], m.Program)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Program)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgForgetThought) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgForgetThought) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgForgetThought) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Name) > 0 {\n\t\ti -= len(m.Name)\n\t\tcopy(dAtA[i:], m.Name)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Name)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Program) > 0 {\n\t\ti -= len(m.Program)\n\t\tcopy(dAtA[i:], m.Program)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Program)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgChangeThoughtParticle) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgChangeThoughtParticle) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgChangeThoughtParticle) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Particle) > 0 {\n\t\ti -= len(m.Particle)\n\t\tcopy(dAtA[i:], m.Particle)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Particle)))\n\t\ti--\n\t\tdAtA[i] = 0x1a\n\t}\n\tif len(m.Name) > 0 {\n\t\ti -= len(m.Name)\n\t\tcopy(dAtA[i:], m.Name)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Name)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Program) > 0 {\n\t\ti -= len(m.Program)\n\t\tcopy(dAtA[i:], m.Program)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Program)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgChangeThoughtName) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgChangeThoughtName) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgChangeThoughtName) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.NewName) > 0 {\n\t\ti -= len(m.NewName)\n\t\tcopy(dAtA[i:], m.NewName)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.NewName)))\n\t\ti--\n\t\tdAtA[i] = 0x1a\n\t}\n\tif len(m.Name) > 0 {\n\t\ti -= len(m.Name)\n\t\tcopy(dAtA[i:], m.Name)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Name)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Program) > 0 {\n\t\ti -= len(m.Program)\n\t\tcopy(dAtA[i:], m.Program)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Program)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgChangeThoughtInput) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgChangeThoughtInput) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgChangeThoughtInput) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Input) > 0 {\n\t\ti -= len(m.Input)\n\t\tcopy(dAtA[i:], m.Input)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Input)))\n\t\ti--\n\t\tdAtA[i] = 0x1a\n\t}\n\tif len(m.Name) > 0 {\n\t\ti -= len(m.Name)\n\t\tcopy(dAtA[i:], m.Name)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Name)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Program) > 0 {\n\t\ti -= len(m.Program)\n\t\tcopy(dAtA[i:], m.Program)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Program)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgChangeThoughtGasPrice) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgChangeThoughtGasPrice) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgChangeThoughtGasPrice) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.GasPrice.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x1a\n\tif len(m.Name) > 0 {\n\t\ti -= len(m.Name)\n\t\tcopy(dAtA[i:], m.Name)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Name)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Program) > 0 {\n\t\ti -= len(m.Program)\n\t\tcopy(dAtA[i:], m.Program)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Program)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgChangeThoughtPeriod) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgChangeThoughtPeriod) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgChangeThoughtPeriod) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Period != 0 {\n\t\ti = encodeVarintTx(dAtA, i, uint64(m.Period))\n\t\ti--\n\t\tdAtA[i] = 0x18\n\t}\n\tif len(m.Name) > 0 {\n\t\ti -= len(m.Name)\n\t\tcopy(dAtA[i:], m.Name)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Name)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Program) > 0 {\n\t\ti -= len(m.Program)\n\t\tcopy(dAtA[i:], m.Program)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Program)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgChangeThoughtBlock) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgChangeThoughtBlock) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgChangeThoughtBlock) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Block != 0 {\n\t\ti = encodeVarintTx(dAtA, i, uint64(m.Block))\n\t\ti--\n\t\tdAtA[i] = 0x18\n\t}\n\tif len(m.Name) > 0 {\n\t\ti -= len(m.Name)\n\t\tcopy(dAtA[i:], m.Name)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Name)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Program) > 0 {\n\t\ti -= len(m.Program)\n\t\tcopy(dAtA[i:], m.Program)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Program)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x12\n\tif len(m.Authority) > 0 {\n\t\ti -= len(m.Authority)\n\t\tcopy(dAtA[i:], m.Authority)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Authority)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgCreateThoughtResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgCreateThoughtResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgCreateThoughtResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgForgetThoughtResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgForgetThoughtResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgForgetThoughtResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgChangeThoughtParticleResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgChangeThoughtParticleResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgChangeThoughtParticleResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgChangeThoughtNameResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgChangeThoughtNameResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgChangeThoughtNameResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgChangeThoughtInputResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgChangeThoughtInputResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgChangeThoughtInputResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgChangeThoughtGasPriceResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgChangeThoughtGasPriceResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgChangeThoughtGasPriceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgChangeThoughtPeriodResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgChangeThoughtPeriodResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgChangeThoughtPeriodResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgChangeThoughtBlockResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgChangeThoughtBlockResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgChangeThoughtBlockResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintTx(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovTx(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *MsgCreateThought) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Program)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = m.Trigger.Size()\n\tn += 1 + l + sovTx(uint64(l))\n\tl = m.Load.Size()\n\tn += 1 + l + sovTx(uint64(l))\n\tl = len(m.Name)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.Particle)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *MsgForgetThought) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Program)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.Name)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *MsgChangeThoughtParticle) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Program)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.Name)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.Particle)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *MsgChangeThoughtName) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Program)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.Name)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.NewName)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *MsgChangeThoughtInput) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Program)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.Name)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.Input)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *MsgChangeThoughtGasPrice) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Program)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.Name)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = m.GasPrice.Size()\n\tn += 1 + l + sovTx(uint64(l))\n\treturn n\n}\n\nfunc (m *MsgChangeThoughtPeriod) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Program)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.Name)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tif m.Period != 0 {\n\t\tn += 1 + sovTx(uint64(m.Period))\n\t}\n\treturn n\n}\n\nfunc (m *MsgChangeThoughtBlock) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Program)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.Name)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tif m.Block != 0 {\n\t\tn += 1 + sovTx(uint64(m.Block))\n\t}\n\treturn n\n}\n\nfunc (m *MsgUpdateParams) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Authority)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = m.Params.Size()\n\tn += 1 + l + sovTx(uint64(l))\n\treturn n\n}\n\nfunc (m *MsgCreateThoughtResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgForgetThoughtResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgChangeThoughtParticleResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgChangeThoughtNameResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgChangeThoughtInputResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgChangeThoughtGasPriceResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgChangeThoughtPeriodResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgChangeThoughtBlockResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgUpdateParamsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc sovTx(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozTx(x uint64) (n int) {\n\treturn sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *MsgCreateThought) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgCreateThought: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgCreateThought: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Program\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Program = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Trigger\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Trigger.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Load\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Load.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 4:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Name\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Name = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 5:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Particle\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Particle = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgForgetThought) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgForgetThought: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgForgetThought: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Program\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Program = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Name\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Name = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgChangeThoughtParticle) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtParticle: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtParticle: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Program\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Program = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Name\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Name = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Particle\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Particle = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgChangeThoughtName) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtName: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtName: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Program\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Program = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Name\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Name = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field NewName\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.NewName = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgChangeThoughtInput) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtInput: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtInput: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Program\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Program = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Name\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Name = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Input\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Input = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgChangeThoughtGasPrice) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtGasPrice: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtGasPrice: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Program\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Program = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Name\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Name = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field GasPrice\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.GasPrice.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgChangeThoughtPeriod) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtPeriod: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtPeriod: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Program\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Program = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Name\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Name = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Period\", wireType)\n\t\t\t}\n\t\t\tm.Period = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Period |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgChangeThoughtBlock) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtBlock: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtBlock: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Program\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Program = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Name\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Name = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Block\", wireType)\n\t\t\t}\n\t\t\tm.Block = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Block |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgUpdateParams) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParams: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParams: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Authority\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Authority = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgCreateThoughtResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgCreateThoughtResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgCreateThoughtResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgForgetThoughtResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgForgetThoughtResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgForgetThoughtResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgChangeThoughtParticleResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtParticleResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtParticleResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgChangeThoughtNameResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtNameResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtNameResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgChangeThoughtInputResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtInputResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtInputResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgChangeThoughtGasPriceResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtGasPriceResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtGasPriceResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgChangeThoughtPeriodResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtPeriodResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtPeriodResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgChangeThoughtBlockResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtBlockResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeThoughtBlockResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParamsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipTx(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthTx\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupTx\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthTx\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthTx        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowTx          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupTx = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/dmn/types/types.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/dmn/v1beta1/types.proto\n\npackage types\n\nimport (\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\t_ \"github.com/cosmos/cosmos-sdk/types\"\n\tgithub_com_cosmos_cosmos_sdk_types \"github.com/cosmos/cosmos-sdk/types\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype Params struct {\n\tMaxSlots uint32 `protobuf:\"varint,1,opt,name=max_slots,json=maxSlots,proto3\" json:\"max_slots,omitempty\"`\n\tMaxGas   uint32 `protobuf:\"varint,2,opt,name=max_gas,json=maxGas,proto3\" json:\"max_gas,omitempty\"`\n\tFeeTtl   uint32 `protobuf:\"varint,3,opt,name=fee_ttl,json=feeTtl,proto3\" json:\"fee_ttl,omitempty\"`\n}\n\nfunc (m *Params) Reset()         { *m = Params{} }\nfunc (m *Params) String() string { return proto.CompactTextString(m) }\nfunc (*Params) ProtoMessage()    {}\nfunc (*Params) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_a414790454046b0b, []int{0}\n}\n\nfunc (m *Params) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_Params.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *Params) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Params.Merge(m, src)\n}\n\nfunc (m *Params) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *Params) XXX_DiscardUnknown() {\n\txxx_messageInfo_Params.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Params proto.InternalMessageInfo\n\nfunc (m *Params) GetMaxSlots() uint32 {\n\tif m != nil {\n\t\treturn m.MaxSlots\n\t}\n\treturn 0\n}\n\nfunc (m *Params) GetMaxGas() uint32 {\n\tif m != nil {\n\t\treturn m.MaxGas\n\t}\n\treturn 0\n}\n\nfunc (m *Params) GetFeeTtl() uint32 {\n\tif m != nil {\n\t\treturn m.FeeTtl\n\t}\n\treturn 0\n}\n\ntype Thought struct {\n\tProgram  string  `protobuf:\"bytes,1,opt,name=program,proto3\" json:\"program,omitempty\"`\n\tTrigger  Trigger `protobuf:\"bytes,2,opt,name=trigger,proto3\" json:\"trigger\"`\n\tLoad     Load    `protobuf:\"bytes,3,opt,name=load,proto3\" json:\"load\"`\n\tName     string  `protobuf:\"bytes,4,opt,name=name,proto3\" json:\"name,omitempty\"`\n\tParticle string  `protobuf:\"bytes,5,opt,name=particle,proto3\" json:\"particle,omitempty\"`\n}\n\nfunc (m *Thought) Reset()         { *m = Thought{} }\nfunc (m *Thought) String() string { return proto.CompactTextString(m) }\nfunc (*Thought) ProtoMessage()    {}\nfunc (*Thought) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_a414790454046b0b, []int{1}\n}\n\nfunc (m *Thought) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *Thought) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_Thought.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *Thought) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Thought.Merge(m, src)\n}\n\nfunc (m *Thought) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *Thought) XXX_DiscardUnknown() {\n\txxx_messageInfo_Thought.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Thought proto.InternalMessageInfo\n\ntype Trigger struct {\n\tPeriod uint64 `protobuf:\"varint,1,opt,name=period,proto3\" json:\"period,omitempty\"`\n\tBlock  uint64 `protobuf:\"varint,2,opt,name=block,proto3\" json:\"block,omitempty\"`\n}\n\nfunc (m *Trigger) Reset()         { *m = Trigger{} }\nfunc (m *Trigger) String() string { return proto.CompactTextString(m) }\nfunc (*Trigger) ProtoMessage()    {}\nfunc (*Trigger) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_a414790454046b0b, []int{2}\n}\n\nfunc (m *Trigger) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *Trigger) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_Trigger.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *Trigger) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Trigger.Merge(m, src)\n}\n\nfunc (m *Trigger) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *Trigger) XXX_DiscardUnknown() {\n\txxx_messageInfo_Trigger.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Trigger proto.InternalMessageInfo\n\ntype Load struct {\n\tInput    string                                  `protobuf:\"bytes,1,opt,name=input,proto3\" json:\"input,omitempty\"`\n\tGasPrice github_com_cosmos_cosmos_sdk_types.Coin `protobuf:\"bytes,2,opt,name=gas_price,json=gasPrice,proto3,casttype=github.com/cosmos/cosmos-sdk/types.Coin\" json:\"gas_price\"`\n}\n\nfunc (m *Load) Reset()         { *m = Load{} }\nfunc (m *Load) String() string { return proto.CompactTextString(m) }\nfunc (*Load) ProtoMessage()    {}\nfunc (*Load) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_a414790454046b0b, []int{3}\n}\n\nfunc (m *Load) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *Load) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_Load.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *Load) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Load.Merge(m, src)\n}\n\nfunc (m *Load) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *Load) XXX_DiscardUnknown() {\n\txxx_messageInfo_Load.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Load proto.InternalMessageInfo\n\ntype ThoughtStats struct {\n\tProgram   string `protobuf:\"bytes,1,opt,name=program,proto3\" json:\"program,omitempty\"`\n\tName      string `protobuf:\"bytes,2,opt,name=name,proto3\" json:\"name,omitempty\"`\n\tCalls     uint64 `protobuf:\"varint,3,opt,name=calls,proto3\" json:\"calls,omitempty\"`\n\tFees      uint64 `protobuf:\"varint,4,opt,name=fees,proto3\" json:\"fees,omitempty\"`\n\tGas       uint64 `protobuf:\"varint,5,opt,name=gas,proto3\" json:\"gas,omitempty\"`\n\tLastBlock uint64 `protobuf:\"varint,6,opt,name=last_block,json=lastBlock,proto3\" json:\"last_block,omitempty\"`\n}\n\nfunc (m *ThoughtStats) Reset()         { *m = ThoughtStats{} }\nfunc (m *ThoughtStats) String() string { return proto.CompactTextString(m) }\nfunc (*ThoughtStats) ProtoMessage()    {}\nfunc (*ThoughtStats) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_a414790454046b0b, []int{4}\n}\n\nfunc (m *ThoughtStats) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *ThoughtStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_ThoughtStats.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *ThoughtStats) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ThoughtStats.Merge(m, src)\n}\n\nfunc (m *ThoughtStats) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *ThoughtStats) XXX_DiscardUnknown() {\n\txxx_messageInfo_ThoughtStats.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ThoughtStats proto.InternalMessageInfo\n\nfunc init() {\n\tproto.RegisterType((*Params)(nil), \"cyber.dmn.v1beta1.Params\")\n\tproto.RegisterType((*Thought)(nil), \"cyber.dmn.v1beta1.Thought\")\n\tproto.RegisterType((*Trigger)(nil), \"cyber.dmn.v1beta1.Trigger\")\n\tproto.RegisterType((*Load)(nil), \"cyber.dmn.v1beta1.Load\")\n\tproto.RegisterType((*ThoughtStats)(nil), \"cyber.dmn.v1beta1.ThoughtStats\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/dmn/v1beta1/types.proto\", fileDescriptor_a414790454046b0b) }\n\nvar fileDescriptor_a414790454046b0b = []byte{\n\t// 531 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x53, 0xbd, 0x8e, 0xd3, 0x40,\n\t0x10, 0xb6, 0xef, 0x9c, 0xbf, 0x3d, 0x90, 0x60, 0x15, 0x71, 0x26, 0xe8, 0x1c, 0x94, 0x06, 0x9a,\n\t0xd8, 0xca, 0xd1, 0xa5, 0x23, 0x14, 0xd7, 0x50, 0x9c, 0x7c, 0xa9, 0x90, 0x50, 0xb4, 0xb6, 0x37,\n\t0x1b, 0xeb, 0xbc, 0x5e, 0x6b, 0x77, 0x83, 0x72, 0x6f, 0x40, 0x07, 0x8f, 0x10, 0xde, 0xe6, 0x0a,\n\t0x8a, 0x2b, 0xa9, 0x4e, 0x28, 0x69, 0xee, 0x19, 0xa8, 0xd0, 0xce, 0x3a, 0x51, 0x10, 0x88, 0xca,\n\t0xf3, 0xed, 0x37, 0x33, 0x9e, 0xf9, 0xbe, 0x5d, 0x74, 0x96, 0xde, 0x24, 0x54, 0x46, 0x19, 0x2f,\n\t0xa3, 0x4f, 0xa3, 0x84, 0x6a, 0x32, 0x8a, 0xf4, 0x4d, 0x45, 0x55, 0x58, 0x49, 0xa1, 0x05, 0x7e,\n\t0x0a, 0x74, 0x98, 0xf1, 0x32, 0xac, 0xe9, 0x5e, 0x97, 0x09, 0x26, 0x80, 0x8d, 0x4c, 0x64, 0x13,\n\t0x7b, 0x41, 0x2a, 0x14, 0x17, 0x2a, 0x4a, 0x88, 0xa2, 0xfb, 0x4e, 0xa9, 0xc8, 0x4b, 0xcb, 0x0f,\n\t0x3e, 0xa2, 0xe6, 0x25, 0x91, 0x84, 0x2b, 0xfc, 0x02, 0x75, 0x38, 0x59, 0xcd, 0x54, 0x21, 0xb4,\n\t0xf2, 0xdd, 0x97, 0xee, 0xeb, 0xc7, 0x71, 0x9b, 0x93, 0xd5, 0x95, 0xc1, 0xf8, 0x14, 0xb5, 0x0c,\n\t0xc9, 0x88, 0xf2, 0x8f, 0x80, 0x6a, 0x72, 0xb2, 0xba, 0x20, 0x40, 0xcc, 0x29, 0x9d, 0x69, 0x5d,\n\t0xf8, 0xc7, 0x96, 0x98, 0x53, 0x3a, 0xd5, 0xc5, 0xd8, 0x7b, 0x58, 0xf7, 0xdd, 0xc1, 0x77, 0x17,\n\t0xb5, 0xa6, 0x0b, 0xb1, 0x64, 0x0b, 0x8d, 0x7d, 0xd4, 0xaa, 0xa4, 0x60, 0x92, 0x70, 0x68, 0xdf,\n\t0x89, 0x77, 0x10, 0x8f, 0x51, 0x4b, 0xcb, 0x9c, 0x31, 0x2a, 0xa1, 0xfb, 0xc9, 0x79, 0x2f, 0xfc,\n\t0x6b, 0xbf, 0x70, 0x6a, 0x33, 0x26, 0xde, 0xed, 0x7d, 0xdf, 0x89, 0x77, 0x05, 0x78, 0x84, 0xbc,\n\t0x42, 0x90, 0x0c, 0xfe, 0x7e, 0x72, 0x7e, 0xfa, 0x8f, 0xc2, 0xf7, 0x82, 0x64, 0x75, 0x15, 0xa4,\n\t0x62, 0x8c, 0xbc, 0x92, 0x70, 0xea, 0x7b, 0x30, 0x05, 0xc4, 0xb8, 0x87, 0xda, 0x15, 0x91, 0x3a,\n\t0x4f, 0x0b, 0xea, 0x37, 0xe0, 0x7c, 0x8f, 0xc7, 0xed, 0xcf, 0xeb, 0xbe, 0xf3, 0xb0, 0xee, 0x3b,\n\t0x83, 0xb7, 0xa8, 0x55, 0x8f, 0x81, 0x9f, 0xa1, 0x66, 0x45, 0x65, 0x2e, 0x32, 0x58, 0xc6, 0x8b,\n\t0x6b, 0x84, 0xbb, 0xa8, 0x91, 0x14, 0x22, 0xbd, 0x86, 0x4d, 0xbc, 0xd8, 0x82, 0x83, 0x16, 0x5f,\n\t0x5c, 0xe4, 0x99, 0x89, 0x4c, 0x62, 0x5e, 0x56, 0x4b, 0x5d, 0x8b, 0x61, 0x01, 0x66, 0xa8, 0xc3,\n\t0x88, 0x9a, 0x55, 0x32, 0x4f, 0x69, 0x2d, 0xc6, 0xf3, 0xd0, 0x7a, 0x18, 0x1a, 0x0f, 0xf7, 0x5b,\n\t0xbd, 0x13, 0x79, 0x39, 0x89, 0xcc, 0x56, 0xbf, 0xee, 0xfb, 0xaf, 0x58, 0xae, 0x17, 0xcb, 0x24,\n\t0x4c, 0x05, 0x8f, 0x6a, 0xc3, 0xed, 0x67, 0xa8, 0xb2, 0xeb, 0xfa, 0xe2, 0x98, 0x82, 0xb8, 0xcd,\n\t0x88, 0xba, 0x34, 0xbd, 0x0f, 0x26, 0xfa, 0xe6, 0xa2, 0x47, 0xb5, 0x47, 0x57, 0x9a, 0x68, 0xf5,\n\t0x1f, 0xa3, 0x76, 0xca, 0x1d, 0x1d, 0x28, 0xd7, 0x45, 0x8d, 0x94, 0x14, 0x85, 0x02, 0x07, 0xbc,\n\t0xd8, 0x02, 0x93, 0x39, 0xa7, 0x54, 0x81, 0xc6, 0x5e, 0x0c, 0x31, 0x7e, 0x82, 0x8e, 0xcd, 0x05,\n\t0x6a, 0xc0, 0x91, 0x09, 0xf1, 0x19, 0x42, 0x05, 0x51, 0x7a, 0x66, 0x15, 0x6b, 0x02, 0xd1, 0x31,\n\t0x27, 0x93, 0x3f, 0x55, 0x9b, 0x5c, 0xdc, 0x6e, 0x02, 0xf7, 0x6e, 0x13, 0xb8, 0x3f, 0x37, 0x81,\n\t0xfb, 0x75, 0x1b, 0x38, 0x77, 0xdb, 0xc0, 0xf9, 0xb1, 0x0d, 0x9c, 0x0f, 0xc3, 0xc3, 0xd5, 0x8d,\n\t0xf7, 0xa9, 0x28, 0x99, 0xa4, 0x4a, 0x45, 0x4c, 0x0c, 0xed, 0x23, 0x5a, 0xc1, 0x33, 0x02, 0x15,\n\t0x92, 0x26, 0x5c, 0xfb, 0x37, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0xc6, 0xd9, 0xbc, 0x48, 0x60,\n\t0x03, 0x00, 0x00,\n}\n\nfunc (this *Params) Equal(that interface{}) bool {\n\tif that == nil {\n\t\treturn this == nil\n\t}\n\n\tthat1, ok := that.(*Params)\n\tif !ok {\n\t\tthat2, ok := that.(Params)\n\t\tif ok {\n\t\t\tthat1 = &that2\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\tif that1 == nil {\n\t\treturn this == nil\n\t} else if this == nil {\n\t\treturn false\n\t}\n\tif this.MaxSlots != that1.MaxSlots {\n\t\treturn false\n\t}\n\tif this.MaxGas != that1.MaxGas {\n\t\treturn false\n\t}\n\tif this.FeeTtl != that1.FeeTtl {\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc (m *Params) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *Params) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.FeeTtl != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.FeeTtl))\n\t\ti--\n\t\tdAtA[i] = 0x18\n\t}\n\tif m.MaxGas != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.MaxGas))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif m.MaxSlots != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.MaxSlots))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *Thought) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *Thought) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *Thought) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Particle) > 0 {\n\t\ti -= len(m.Particle)\n\t\tcopy(dAtA[i:], m.Particle)\n\t\ti = encodeVarintTypes(dAtA, i, uint64(len(m.Particle)))\n\t\ti--\n\t\tdAtA[i] = 0x2a\n\t}\n\tif len(m.Name) > 0 {\n\t\ti -= len(m.Name)\n\t\tcopy(dAtA[i:], m.Name)\n\t\ti = encodeVarintTypes(dAtA, i, uint64(len(m.Name)))\n\t\ti--\n\t\tdAtA[i] = 0x22\n\t}\n\t{\n\t\tsize, err := m.Load.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTypes(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x1a\n\t{\n\t\tsize, err := m.Trigger.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTypes(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x12\n\tif len(m.Program) > 0 {\n\t\ti -= len(m.Program)\n\t\tcopy(dAtA[i:], m.Program)\n\t\ti = encodeVarintTypes(dAtA, i, uint64(len(m.Program)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *Trigger) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *Trigger) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *Trigger) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Block != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.Block))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif m.Period != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.Period))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *Load) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *Load) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *Load) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.GasPrice.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTypes(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x12\n\tif len(m.Input) > 0 {\n\t\ti -= len(m.Input)\n\t\tcopy(dAtA[i:], m.Input)\n\t\ti = encodeVarintTypes(dAtA, i, uint64(len(m.Input)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *ThoughtStats) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *ThoughtStats) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *ThoughtStats) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.LastBlock != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.LastBlock))\n\t\ti--\n\t\tdAtA[i] = 0x30\n\t}\n\tif m.Gas != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.Gas))\n\t\ti--\n\t\tdAtA[i] = 0x28\n\t}\n\tif m.Fees != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.Fees))\n\t\ti--\n\t\tdAtA[i] = 0x20\n\t}\n\tif m.Calls != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.Calls))\n\t\ti--\n\t\tdAtA[i] = 0x18\n\t}\n\tif len(m.Name) > 0 {\n\t\ti -= len(m.Name)\n\t\tcopy(dAtA[i:], m.Name)\n\t\ti = encodeVarintTypes(dAtA, i, uint64(len(m.Name)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Program) > 0 {\n\t\ti -= len(m.Program)\n\t\tcopy(dAtA[i:], m.Program)\n\t\ti = encodeVarintTypes(dAtA, i, uint64(len(m.Program)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintTypes(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovTypes(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *Params) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.MaxSlots != 0 {\n\t\tn += 1 + sovTypes(uint64(m.MaxSlots))\n\t}\n\tif m.MaxGas != 0 {\n\t\tn += 1 + sovTypes(uint64(m.MaxGas))\n\t}\n\tif m.FeeTtl != 0 {\n\t\tn += 1 + sovTypes(uint64(m.FeeTtl))\n\t}\n\treturn n\n}\n\nfunc (m *Thought) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Program)\n\tif l > 0 {\n\t\tn += 1 + l + sovTypes(uint64(l))\n\t}\n\tl = m.Trigger.Size()\n\tn += 1 + l + sovTypes(uint64(l))\n\tl = m.Load.Size()\n\tn += 1 + l + sovTypes(uint64(l))\n\tl = len(m.Name)\n\tif l > 0 {\n\t\tn += 1 + l + sovTypes(uint64(l))\n\t}\n\tl = len(m.Particle)\n\tif l > 0 {\n\t\tn += 1 + l + sovTypes(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *Trigger) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.Period != 0 {\n\t\tn += 1 + sovTypes(uint64(m.Period))\n\t}\n\tif m.Block != 0 {\n\t\tn += 1 + sovTypes(uint64(m.Block))\n\t}\n\treturn n\n}\n\nfunc (m *Load) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Input)\n\tif l > 0 {\n\t\tn += 1 + l + sovTypes(uint64(l))\n\t}\n\tl = m.GasPrice.Size()\n\tn += 1 + l + sovTypes(uint64(l))\n\treturn n\n}\n\nfunc (m *ThoughtStats) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Program)\n\tif l > 0 {\n\t\tn += 1 + l + sovTypes(uint64(l))\n\t}\n\tl = len(m.Name)\n\tif l > 0 {\n\t\tn += 1 + l + sovTypes(uint64(l))\n\t}\n\tif m.Calls != 0 {\n\t\tn += 1 + sovTypes(uint64(m.Calls))\n\t}\n\tif m.Fees != 0 {\n\t\tn += 1 + sovTypes(uint64(m.Fees))\n\t}\n\tif m.Gas != 0 {\n\t\tn += 1 + sovTypes(uint64(m.Gas))\n\t}\n\tif m.LastBlock != 0 {\n\t\tn += 1 + sovTypes(uint64(m.LastBlock))\n\t}\n\treturn n\n}\n\nfunc sovTypes(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozTypes(x uint64) (n int) {\n\treturn sovTypes(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *Params) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: Params: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: Params: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MaxSlots\", wireType)\n\t\t\t}\n\t\t\tm.MaxSlots = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.MaxSlots |= uint32(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MaxGas\", wireType)\n\t\t\t}\n\t\t\tm.MaxGas = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.MaxGas |= uint32(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 3:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field FeeTtl\", wireType)\n\t\t\t}\n\t\t\tm.FeeTtl = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.FeeTtl |= uint32(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTypes(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *Thought) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: Thought: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: Thought: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Program\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Program = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Trigger\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Trigger.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Load\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Load.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 4:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Name\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Name = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 5:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Particle\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Particle = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTypes(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *Trigger) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: Trigger: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: Trigger: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Period\", wireType)\n\t\t\t}\n\t\t\tm.Period = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Period |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Block\", wireType)\n\t\t\t}\n\t\t\tm.Block = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Block |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTypes(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *Load) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: Load: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: Load: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Input\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Input = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field GasPrice\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.GasPrice.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTypes(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *ThoughtStats) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: ThoughtStats: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: ThoughtStats: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Program\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Program = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Name\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Name = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Calls\", wireType)\n\t\t\t}\n\t\t\tm.Calls = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Calls |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 4:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Fees\", wireType)\n\t\t\t}\n\t\t\tm.Fees = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Fees |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 5:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Gas\", wireType)\n\t\t\t}\n\t\t\tm.Gas = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Gas |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 6:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field LastBlock\", wireType)\n\t\t\t}\n\t\t\tm.LastBlock = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.LastBlock |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTypes(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipTypes(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowTypes\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupTypes\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthTypes\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthTypes        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowTypes          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupTypes = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/dmn/wasm/interface.go",
    "content": "package wasm\n\nimport (\n\t\"encoding/json\"\n\n\terrorsmod \"cosmossdk.io/errors\"\n\n\twasmvmtypes \"github.com/CosmWasm/wasmvm/types\"\n\n\tpluginstypes \"github.com/cybercongress/go-cyber/v7/plugins/types\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/dmn/keeper\"\n)\n\ntype Messenger struct {\n\tkeeper *keeper.Keeper\n}\n\nfunc NewMessenger(\n\tkeeper *keeper.Keeper,\n) *Messenger {\n\treturn &Messenger{\n\t\tkeeper: keeper,\n\t}\n}\n\nfunc (m *Messenger) HandleMsg(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg pluginstypes.CyberMsg) ([]sdk.Event, [][]byte, error) {\n\tswitch {\n\tcase msg.CreateThought != nil:\n\t\tif msg.CreateThought.Program != contractAddr.String() {\n\t\t\treturn nil, nil, wasmvmtypes.InvalidRequest{Err: \"create thought wrong program\"}\n\t\t}\n\n\t\tmsgServer := keeper.NewMsgServerImpl(*m.keeper)\n\n\t\tif err := msg.CreateThought.ValidateBasic(); err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed validating msg\")\n\t\t}\n\n\t\tres, err := msgServer.CreateThought(\n\t\t\tsdk.WrapSDKContext(ctx),\n\t\t\tmsg.CreateThought,\n\t\t)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"create thought msg\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(*res)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed to serialize create thought response\")\n\t\t}\n\n\t\tresp := [][]byte{responseBytes}\n\n\t\treturn nil, resp, nil\n\tcase msg.ForgetThought != nil:\n\t\tif msg.ForgetThought.Program != contractAddr.String() {\n\t\t\treturn nil, nil, wasmvmtypes.InvalidRequest{Err: \"forget thought wrong program\"}\n\t\t}\n\n\t\tmsgServer := keeper.NewMsgServerImpl(*m.keeper)\n\n\t\tif err := msg.ForgetThought.ValidateBasic(); err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed validating msg\")\n\t\t}\n\n\t\tres, err := msgServer.ForgetThought(\n\t\t\tsdk.WrapSDKContext(ctx),\n\t\t\tmsg.ForgetThought,\n\t\t)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"forget thought msg\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(*res)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed to serialize forget thought response\")\n\t\t}\n\n\t\tresp := [][]byte{responseBytes}\n\n\t\treturn nil, resp, nil\n\tcase msg.ChangeThoughtInput != nil:\n\t\tif msg.ChangeThoughtInput.Program != contractAddr.String() {\n\t\t\treturn nil, nil, wasmvmtypes.InvalidRequest{Err: \"change thought wrong program\"}\n\t\t}\n\n\t\tmsgServer := keeper.NewMsgServerImpl(*m.keeper)\n\n\t\tif err := msg.ChangeThoughtInput.ValidateBasic(); err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed validating msg\")\n\t\t}\n\n\t\tres, err := msgServer.ChangeThoughtInput(\n\t\t\tsdk.WrapSDKContext(ctx),\n\t\t\tmsg.ChangeThoughtInput,\n\t\t)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"change thought input msg\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(*res)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed to serialize change thought input response\")\n\t\t}\n\n\t\tresp := [][]byte{responseBytes}\n\n\t\treturn nil, resp, nil\n\tcase msg.ChangeThoughtPeriod != nil:\n\t\tif msg.ChangeThoughtPeriod.Program != contractAddr.String() {\n\t\t\treturn nil, nil, wasmvmtypes.InvalidRequest{Err: \"change thought wrong program\"}\n\t\t}\n\n\t\tmsgServer := keeper.NewMsgServerImpl(*m.keeper)\n\n\t\tif err := msg.ChangeThoughtPeriod.ValidateBasic(); err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed validating msg\")\n\t\t}\n\n\t\tres, err := msgServer.ChangeThoughtPeriod(\n\t\t\tsdk.WrapSDKContext(ctx),\n\t\t\tmsg.ChangeThoughtPeriod,\n\t\t)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"change thought period msg\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(*res)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed to serialize change thought period response\")\n\t\t}\n\n\t\tresp := [][]byte{responseBytes}\n\n\t\treturn nil, resp, nil\n\n\tcase msg.ChangeThoughtBlock != nil:\n\t\tif msg.ChangeThoughtBlock.Program != contractAddr.String() {\n\t\t\treturn nil, nil, wasmvmtypes.InvalidRequest{Err: \"change thought wrong program\"}\n\t\t}\n\n\t\tmsgServer := keeper.NewMsgServerImpl(*m.keeper)\n\n\t\tif err := msg.ChangeThoughtBlock.ValidateBasic(); err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed validating msg\")\n\t\t}\n\n\t\tres, err := msgServer.ChangeThoughtBlock(\n\t\t\tsdk.WrapSDKContext(ctx),\n\t\t\tmsg.ChangeThoughtBlock,\n\t\t)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"change thought block msg\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(*res)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed to serialize change thought block response\")\n\t\t}\n\n\t\tresp := [][]byte{responseBytes}\n\n\t\treturn nil, resp, nil\n\n\tcase msg.ChangeThoughtGasPrice != nil:\n\t\tif msg.ChangeThoughtGasPrice.Program != contractAddr.String() {\n\t\t\treturn nil, nil, wasmvmtypes.InvalidRequest{Err: \"change thought wrong program\"}\n\t\t}\n\n\t\tmsgServer := keeper.NewMsgServerImpl(*m.keeper)\n\n\t\tif err := msg.ChangeThoughtGasPrice.ValidateBasic(); err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed validating msg\")\n\t\t}\n\n\t\tres, err := msgServer.ChangeThoughtGasPrice(\n\t\t\tsdk.WrapSDKContext(ctx),\n\t\t\tmsg.ChangeThoughtGasPrice,\n\t\t)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"change thought gas price msg\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(*res)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed to serialize change thought gas price response\")\n\t\t}\n\n\t\tresp := [][]byte{responseBytes}\n\n\t\treturn nil, resp, nil\n\n\tcase msg.ChangeThoughtParticle != nil:\n\t\tif msg.ChangeThoughtParticle.Program != contractAddr.String() {\n\t\t\treturn nil, nil, wasmvmtypes.InvalidRequest{Err: \"change thought wrong program\"}\n\t\t}\n\n\t\tmsgServer := keeper.NewMsgServerImpl(*m.keeper)\n\n\t\tif err := msg.ChangeThoughtParticle.ValidateBasic(); err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed validating msg\")\n\t\t}\n\n\t\tres, err := msgServer.ChangeThoughtParticle(\n\t\t\tsdk.WrapSDKContext(ctx),\n\t\t\tmsg.ChangeThoughtParticle,\n\t\t)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"change thought particle msg\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(*res)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed to serialize change thought particle response\")\n\t\t}\n\n\t\tresp := [][]byte{responseBytes}\n\n\t\treturn nil, resp, nil\n\n\tcase msg.ChangeThoughtName != nil:\n\t\tif msg.ChangeThoughtName.Program != contractAddr.String() {\n\t\t\treturn nil, nil, wasmvmtypes.InvalidRequest{Err: \"change thought wrong program\"}\n\t\t}\n\n\t\tmsgServer := keeper.NewMsgServerImpl(*m.keeper)\n\n\t\tif err := msg.ChangeThoughtName.ValidateBasic(); err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed validating msg\")\n\t\t}\n\n\t\tres, err := msgServer.ChangeThoughtName(\n\t\t\tsdk.WrapSDKContext(ctx),\n\t\t\tmsg.ChangeThoughtName,\n\t\t)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"change thought name msg\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(*res)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed to serialize change thought name response\")\n\t\t}\n\n\t\tresp := [][]byte{responseBytes}\n\n\t\treturn nil, resp, nil\n\tdefault:\n\t\treturn nil, nil, pluginstypes.ErrHandleMsg\n\t}\n}\n\ntype Querier struct {\n\t*keeper.Keeper\n}\n\nfunc NewWasmQuerier(keeper *keeper.Keeper) *Querier {\n\treturn &Querier{keeper}\n}\n\nfunc (querier *Querier) HandleQuery(ctx sdk.Context, query pluginstypes.CyberQuery) ([]byte, error) {\n\tswitch {\n\tcase query.Thought != nil:\n\t\tres, err := querier.Keeper.Thought(ctx, query.Thought)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to get dmn thought\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(res)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to serialize dmn thought response\")\n\t\t}\n\t\treturn responseBytes, nil\n\tcase query.ThoughtStats != nil:\n\t\tres, err := querier.Keeper.ThoughtStats(ctx, query.ThoughtStats)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to get dmn thought stats\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(res)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to serialize dmn thought stats response\")\n\t\t}\n\t\treturn responseBytes, nil\n\tcase query.ThoughtsFees != nil:\n\t\tres, err := querier.Keeper.ThoughtsFees(ctx, query.ThoughtsFees)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to get dmn thoughts fees\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(res)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to serialize dmn thoughts fees response\")\n\t\t}\n\t\treturn responseBytes, nil\n\tdefault:\n\t\treturn nil, pluginstypes.ErrHandleQuery\n\t}\n}\n"
  },
  {
    "path": "x/graph/abci.go",
    "content": "package graph\n\nimport (\n\t\"time\"\n\n\t\"github.com/cosmos/cosmos-sdk/telemetry\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/graph/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n)\n\nfunc EndBlocker(ctx sdk.Context, gk *keeper.GraphKeeper, ik *keeper.IndexKeeper) {\n\tamountParticles := gk.GetCidsCount(ctx)\n\tamountLinks := gk.GetLinksCount(ctx)\n\tdefer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyEndBlocker)\n\tdefer telemetry.ModuleSetGauge(types.ModuleName, float32(amountLinks), \"total_cyberlinks\")\n\tdefer telemetry.ModuleSetGauge(types.ModuleName, float32(amountParticles), \"total_particles\")\n\n\tgk.UpdateMemNeudegs(ctx)\n\t// ik.MergeContextLinks(ctx)\n}\n"
  },
  {
    "path": "x/graph/client/cli/query.go",
    "content": "package cli\n\nimport (\n\t\"context\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/cosmos/cosmos-sdk/client/flags\"\n\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n)\n\n// GetQueryCmd returns\nfunc GetQueryCmd() *cobra.Command {\n\tqueryCmd := &cobra.Command{\n\t\tUse:                        types.ModuleName,\n\t\tShort:                      \"Querying commands for the graph module\",\n\t\tDisableFlagParsing:         true,\n\t\tSuggestionsMinimumDistance: 2,\n\t\tRunE:                       client.ValidateCmd,\n\t}\n\tqueryCmd.AddCommand(\n\t\tGetCmdGraphStats(),\n\t)\n\n\treturn queryCmd\n}\n\nfunc GetCmdGraphStats() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"stats\",\n\t\tShort: \"Query the graph stats\",\n\t\tArgs:  cobra.NoArgs,\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tres, err := queryClient.GraphStats(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryGraphStatsRequest{},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n"
  },
  {
    "path": "x/graph/client/cli/tx.go",
    "content": "package cli\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/cosmos/cosmos-sdk/client/flags\"\n\n\t\"github.com/cosmos/cosmos-sdk/client/tx\"\n\t\"github.com/cosmos/cosmos-sdk/version\"\n\t\"github.com/ipfs/go-cid\"\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n)\n\nfunc NewTxCmd() *cobra.Command {\n\ttxCmd := &cobra.Command{\n\t\tUse:                        types.ModuleName,\n\t\tShort:                      \"Graph transaction subcommands\",\n\t\tDisableFlagParsing:         true,\n\t\tSuggestionsMinimumDistance: 2,\n\t\tRunE:                       client.ValidateCmd,\n\t}\n\ttxCmd.AddCommand(\n\t\tGetCmdLink(),\n\t)\n\n\treturn txCmd\n}\n\nfunc GetCmdLink() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"cyberlink [cid-from] [cid-to]\",\n\t\tShort: \"Create cyberlink\",\n\t\tArgs:  cobra.ExactArgs(2),\n\t\tLong: strings.TrimSpace(\n\t\t\tfmt.Sprintf(`Create cyberlink.\nExample:\n$ %s tx link cyberlink QmWZYRj344JSLShtBnrMS4vw5DQ2zsGqrytYKMqcQgEneB QmfZwbahFLTcB3MTMT8TA8si5khhRmzm7zbHToo4WVK3zn\n`,\n\t\t\t\tversion.AppName,\n\t\t\t),\n\t\t),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tcidFrom := types.Cid(args[0])\n\t\t\tcidTo := types.Cid(args[1])\n\n\t\t\tif _, err := cid.Decode(string(cidFrom)); err != nil {\n\t\t\t\treturn types.ErrInvalidParticle\n\t\t\t}\n\n\t\t\tif _, err := cid.Decode(string(cidTo)); err != nil {\n\t\t\t\treturn types.ErrInvalidParticle\n\t\t\t}\n\n\t\t\tmsg := types.NewMsgCyberlink(\n\t\t\t\tclientCtx.GetFromAddress(),\n\t\t\t\t[]types.Link{\n\t\t\t\t\t{From: string(cidFrom), To: string(cidTo)},\n\t\t\t\t},\n\t\t\t)\n\n\t\t\terr = msg.ValidateBasic()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)\n\t\t},\n\t}\n\n\tflags.AddTxFlagsToCmd(cmd)\n\n\treturn cmd\n}\n"
  },
  {
    "path": "x/graph/keeper/genesis.go",
    "content": "package keeper\n\nimport (\n\t\"bufio\"\n\t\"os\"\n\t\"path/filepath\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/utils\"\n)\n\nconst (\n\tLinksFileName       = \"config/graph\"\n\tLinksExportFileName = \"export/graph\"\n)\n\n// TODO make refactoring of initial rank calculation on graph load from binary\nfunc InitGenesis(\n\tctx sdk.Context, gk GraphKeeper, ik *IndexKeeper,\n) (err error) {\n\tlinksFilePath := utils.RootifyPath(LinksFileName)\n\tlinksFile, err := os.Open(linksFilePath)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\tgk.Logger(ctx).Info(\"File with cyberlinks and particles not found. Empty set will be used\")\n\t\t\treturn nil\n\t\t}\n\t\treturn err\n\t}\n\treader := bufio.NewReader(linksFile) // 4096 bytes chunk size\n\n\t// initialize slices to read data\n\terr = gk.LoadFromReader(ctx, reader)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Read all links\n\terr = ik.LoadFromReader(ctx, reader)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn\n}\n\nfunc WriteGenesis(\n\tctx sdk.Context, gk GraphKeeper, ik *IndexKeeper,\n) (err error) {\n\tlinksFilePath := utils.RootifyPath(LinksExportFileName)\n\tdirName := filepath.Dir(linksFilePath)\n\tif _, err := os.Stat(dirName); err != nil {\n\t\tif err = os.MkdirAll(dirName, os.ModePerm); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tlinksFile, err := os.Create(linksFilePath)\n\tif err != nil {\n\t\treturn\n\t}\n\n\twriter := bufio.NewWriter(linksFile) // 4096 byte chunk\n\terr = gk.WriteCids(ctx, writer)\n\tif err != nil {\n\t\treturn\n\t}\n\terr = ik.WriteLinks(ctx, writer)\n\tif err != nil {\n\t\treturn\n\t}\n\n\terr = writer.Flush()\n\tif err != nil {\n\t\treturn\n\t}\n\n\tgk.Logger(ctx).Info(\"Particles and cyberlinks exported. File created.\", \"path\", linksFilePath)\n\treturn //nolint:nakedret\n}\n"
  },
  {
    "path": "x/graph/keeper/graph.go",
    "content": "package keeper\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\n\tstoretypes \"github.com/cosmos/cosmos-sdk/store/types\"\n\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\t\"github.com/cosmos/cosmos-sdk/telemetry\"\n\n\t\"github.com/cometbft/cometbft/libs/log\"\n\n\tctypes \"github.com/cybercongress/go-cyber/v7/types\"\n\t\"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\nconst (\n\tLinkBytesSize       = uint64(24)\n\tLinksCountBytesSize = uint64(8)\n)\n\ntype GraphKeeper struct {\n\tkey        storetypes.StoreKey\n\tcdc        codec.BinaryCodec\n\tneudeg     map[uint64]uint64\n\trankNeudeg map[uint64]uint64\n\ttkey       *storetypes.TransientStoreKey\n}\n\nfunc NewKeeper(\n\tcdc codec.BinaryCodec,\n\tstoreKey storetypes.StoreKey,\n\ttkey *storetypes.TransientStoreKey,\n) *GraphKeeper {\n\treturn &GraphKeeper{\n\t\tcdc:        cdc,\n\t\tkey:        storeKey,\n\t\ttkey:       tkey,\n\t\tneudeg:     make(map[uint64]uint64),\n\t\trankNeudeg: make(map[uint64]uint64),\n\t}\n}\n\nfunc (gk GraphKeeper) Logger(ctx sdk.Context) log.Logger {\n\treturn ctx.Logger().With(\"module\", fmt.Sprintf(\"x/%s\", types.ModuleName))\n}\n\nfunc (gk GraphKeeper) SaveLink(ctx sdk.Context, link types.CompactLink) {\n\tdefer telemetry.IncrCounter(1.0, types.ModuleName, \"cyberlinks\")\n\n\tstore := ctx.KVStore(gk.key)\n\tstore.Set(types.CyberlinksStoreKey(types.CyberlinkRawKey(link)), sdk.Uint64ToBigEndian(uint64(ctx.BlockHeight())))\n\n\tgk.IncrementLinksCount(ctx)\n}\n\nfunc (gk GraphKeeper) GetAllLinks(ctx sdk.Context) (types.Links, types.Links, error) {\n\treturn gk.GetAllLinksFiltered(ctx, func(l types.CompactLink) bool { return true })\n}\n\nfunc (gk GraphKeeper) GetAllLinksFiltered(ctx sdk.Context, filter types.LinkFilter) (types.Links, types.Links, error) {\n\tinLinks := make(map[types.CidNumber]types.CidLinks)\n\toutLinks := make(map[types.CidNumber]types.CidLinks)\n\n\tgk.IterateLinks(ctx, func(link types.CompactLink) {\n\t\tif filter(link) {\n\t\t\ttypes.Links(outLinks).Put(types.CidNumber(link.From), types.CidNumber(link.To), ctypes.AccNumber(link.Account))\n\t\t\ttypes.Links(inLinks).Put(types.CidNumber(link.To), types.CidNumber(link.From), ctypes.AccNumber(link.Account))\n\t\t}\n\t})\n\n\treturn inLinks, outLinks, nil\n}\n\nfunc (gk GraphKeeper) IterateLinks(ctx sdk.Context, process func(link types.CompactLink)) {\n\tgk.IterateBinaryLinks(ctx, func(key, value []byte) {\n\t\tcompactLink := types.CompactLink{\n\t\t\t// because first byte is prefix\n\t\t\tFrom:    sdk.BigEndianToUint64(key[1:9]),\n\t\t\tTo:      sdk.BigEndianToUint64(key[17:25]),\n\t\t\tAccount: sdk.BigEndianToUint64(key[9:17]),\n\t\t}\n\t\tprocess(compactLink)\n\t})\n}\n\nfunc (gk GraphKeeper) IterateBinaryLinks(ctx sdk.Context, process func(key, value []byte)) {\n\tstore := ctx.KVStore(gk.key)\n\n\titerator := sdk.KVStorePrefixIterator(store, types.CyberlinkStoreKeyPrefix)\n\n\tdefer iterator.Close()\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tprocess(iterator.Key(), iterator.Value())\n\t}\n}\n\nfunc (gk GraphKeeper) IncrementLinksCount(ctx sdk.Context) {\n\tstore := ctx.KVStore(gk.key)\n\n\tlinksCount := gk.GetLinksCount(ctx) + 1\n\tstore.Set(types.LinksCount, sdk.Uint64ToBigEndian(linksCount))\n}\n\nfunc (gk GraphKeeper) GetLinksCount(ctx sdk.Context) uint64 {\n\tstore := ctx.KVStore(gk.key)\n\tlinksCountAsBytes := store.Get(types.LinksCount)\n\n\tif linksCountAsBytes == nil {\n\t\treturn 0\n\t}\n\treturn sdk.BigEndianToUint64(linksCountAsBytes)\n}\n\nfunc (gk GraphKeeper) GetBurnedVolts(ctx sdk.Context) uint64 {\n\tstore := ctx.KVStore(gk.key)\n\tburnedVoltsAsBytes := store.Get(types.BurnedVolts)\n\n\tif burnedVoltsAsBytes == nil {\n\t\treturn 0\n\t}\n\treturn sdk.BigEndianToUint64(burnedVoltsAsBytes)\n}\n\nfunc (gk GraphKeeper) AddBurnedVolts(ctx sdk.Context, toBurn uint64) {\n\tvar burnedVolts = uint64(0)\n\n\tstore := ctx.KVStore(gk.key)\n\tburnedVoltsAsBytes := store.Get(types.BurnedVolts)\n\tif burnedVoltsAsBytes != nil {\n\t\tburnedVolts = sdk.BigEndianToUint64(burnedVoltsAsBytes)\n\t}\n\n\tstore.Set(types.BurnedVolts, sdk.Uint64ToBigEndian(burnedVolts+toBurn))\n}\n\nfunc (gk GraphKeeper) GetBurnedAmperes(ctx sdk.Context) uint64 {\n\tstore := ctx.KVStore(gk.key)\n\tburnedAmperesAsBytes := store.Get(types.BurnedAmperes)\n\n\tif burnedAmperesAsBytes == nil {\n\t\treturn 0\n\t}\n\treturn sdk.BigEndianToUint64(burnedAmperesAsBytes)\n}\n\nfunc (gk GraphKeeper) AddBurnedAmperes(ctx sdk.Context, toBurn uint64) {\n\tvar burnedAmperes = uint64(0)\n\n\tstore := ctx.KVStore(gk.key)\n\tburnedAmperesAsBytes := store.Get(types.BurnedAmperes)\n\tif burnedAmperesAsBytes != nil {\n\t\tburnedAmperes = sdk.BigEndianToUint64(burnedAmperesAsBytes)\n\t}\n\n\tstore.Set(types.BurnedAmperes, sdk.Uint64ToBigEndian(burnedAmperes+toBurn))\n}\n\n// write links to writer in binary format: <links_count><cid_number_from><cid_number_to><acc_number>...\nfunc (gk GraphKeeper) WriteLinks(ctx sdk.Context, writer io.Writer) (err error) {\n\tuintAsBytes := make([]byte, 8)\n\tlinksCount := gk.GetLinksCount(ctx)\n\tbinary.LittleEndian.PutUint64(uintAsBytes, linksCount)\n\t_, err = writer.Write(uintAsBytes)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tgk.IterateLinks(ctx, func(link types.CompactLink) {\n\t\tbytes := link.MarshalBinaryLink()\n\t\t_, err = writer.Write(bytes)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t})\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/graph/keeper/grpc_query.go",
    "content": "package keeper\n\nimport (\n\t\"context\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n)\n\nvar _ types.QueryServer = GraphKeeper{}\n\nfunc (gk GraphKeeper) GraphStats(goCtx context.Context, _ *types.QueryGraphStatsRequest) (*types.QueryGraphStatsResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tlinks := gk.GetLinksCount(ctx)\n\tcids := gk.GetCidsCount(ctx)\n\n\treturn &types.QueryGraphStatsResponse{Cyberlinks: links, Particles: cids}, nil\n}\n\nfunc (gk GraphKeeper) BurnStats(goCtx context.Context, _ *types.QueryBurnStatsRequest) (*types.QueryBurnStatsResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tmillivolts := gk.GetBurnedVolts(ctx)\n\tmilliamperes := gk.GetBurnedAmperes(ctx)\n\n\treturn &types.QueryBurnStatsResponse{millivolts, milliamperes}, nil\n}\n"
  },
  {
    "path": "x/graph/keeper/index.go",
    "content": "package keeper\n\nimport (\n\t\"encoding/binary\"\n\t\"io\"\n\n\tstoretypes \"github.com/cosmos/cosmos-sdk/store/types\"\n\n\tctypes \"github.com/cybercongress/go-cyber/v7/types\"\n\t\"github.com/cybercongress/go-cyber/v7/utils\"\n\t\"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n\n\ttmos \"github.com/cometbft/cometbft/libs/os\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\ntype IndexKeeper struct {\n\tGraphKeeper\n\n\t// Actual links for current rank calculated state.\n\tcurrentRankInLinks  types.Links\n\tcurrentRankOutLinks types.Links\n\n\t// New links for the next rank calculation.\n\tnextRankInLinks  types.Links\n\tnextRankOutLinks types.Links\n\n\t// Inter-block cache for cyberlinks, reset on every block during Commit\n\ttkey *storetypes.TransientStoreKey\n\n\t// currentBlockLinks []types.CompactLink\n}\n\nfunc NewIndexKeeper(gk GraphKeeper, tkey *storetypes.TransientStoreKey) *IndexKeeper {\n\treturn &IndexKeeper{\n\t\tGraphKeeper: gk,\n\t\ttkey:        tkey,\n\t}\n}\n\nfunc (i *IndexKeeper) LoadState(rankCtx sdk.Context, freshCtx sdk.Context) {\n\tinLinks, outLinks, err := i.GraphKeeper.GetAllLinks(rankCtx)\n\tif err != nil {\n\t\ttmos.Exit(err.Error())\n\t}\n\n\ti.currentRankInLinks = inLinks\n\ti.currentRankOutLinks = outLinks\n\n\tnewInLinks, newOutLinks, err := i.GraphKeeper.GetAllLinksFiltered(freshCtx, func(l types.CompactLink) bool {\n\t\treturn !i.currentRankOutLinks.IsLinkExist(types.CidNumber(l.From), types.CidNumber(l.To), ctypes.AccNumber(l.Account))\n\t})\n\tif err != nil {\n\t\ttmos.Exit(err.Error())\n\t}\n\n\ti.nextRankInLinks = newInLinks\n\ti.nextRankOutLinks = newOutLinks\n}\n\nfunc (i *IndexKeeper) UpdateRankLinks() {\n\ti.currentRankInLinks.PutAll(i.nextRankInLinks)\n\ti.currentRankOutLinks.PutAll(i.nextRankOutLinks)\n\n\ti.nextRankInLinks = make(types.Links)\n\ti.nextRankOutLinks = make(types.Links)\n}\n\nfunc (i *IndexKeeper) MergeContextLinks(ctx sdk.Context) {\n\tlenLinks := uint64(0)\n\titerator := sdk.KVStorePrefixIterator(ctx.TransientStore(i.tkey), types.CyberlinkTStoreKeyPrefix)\n\n\tdefer iterator.Close()\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tlink := types.UnmarshalBinaryLink(iterator.Key()[1:])\n\t\ti.nextRankOutLinks.Put(types.CidNumber(link.From), types.CidNumber(link.To), ctypes.AccNumber(link.Account))\n\t\ti.nextRankInLinks.Put(types.CidNumber(link.To), types.CidNumber(link.From), ctypes.AccNumber(link.Account))\n\t\tlenLinks++\n\t}\n\n\tif lenLinks > 0 {\n\t\tstore := ctx.TransientStore(i.tkey)\n\t\tstore.Set(types.HasNewLinks, sdk.Uint64ToBigEndian(lenLinks))\n\t}\n}\n\nfunc (i *IndexKeeper) HasNewLinks(ctx sdk.Context) bool {\n\tstore := ctx.TransientStore(i.tkey)\n\thasLinks := store.Get(types.HasNewLinks)\n\tif hasLinks == nil {\n\t\treturn false\n\t}\n\treturn sdk.BigEndianToUint64(hasLinks) > 0\n}\n\n// Use transient store because need to commit cyberlinks to cache only when transaction is successful\nfunc (i *IndexKeeper) PutLink(ctx sdk.Context, link types.CompactLink) {\n\tstore := ctx.TransientStore(i.tkey)\n\tstore.Set(types.CyberlinksTStoreKey(link.MarshalBinaryLink()), []byte{1})\n}\n\nfunc (i *IndexKeeper) GetOutLinks() types.Links {\n\treturn i.currentRankOutLinks\n}\n\nfunc (i *IndexKeeper) GetInLinks() types.Links {\n\treturn i.currentRankInLinks\n}\n\nfunc (i *IndexKeeper) GetNextOutLinks() types.Links {\n\treturn i.nextRankOutLinks\n}\n\nfunc (i *IndexKeeper) GetCurrentBlockNewLinks(ctx sdk.Context) []types.CompactLink {\n\tresult := make([]types.CompactLink, 0, 1000)\n\n\titerator := sdk.KVStorePrefixIterator(ctx.TransientStore(i.tkey), types.CyberlinkTStoreKeyPrefix)\n\n\tdefer iterator.Close()\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tlink := types.UnmarshalBinaryLink(iterator.Key()[1:])\n\t\tif !i.IsAnyLinkExist(types.CidNumber(link.From), types.CidNumber(link.To)) {\n\t\t\tresult = append(result, link)\n\t\t}\n\t}\n\n\treturn result\n}\n\nfunc (i *IndexKeeper) IsAnyLinkExist(from types.CidNumber, to types.CidNumber) bool {\n\treturn i.currentRankOutLinks.IsAnyLinkExist(from, to) || i.nextRankOutLinks.IsAnyLinkExist(from, to)\n}\n\nfunc (i *IndexKeeper) IsLinkExist(link types.CompactLink) bool {\n\treturn i.currentRankOutLinks.IsLinkExist(types.CidNumber(link.From), types.CidNumber(link.To), ctypes.AccNumber(link.Account)) ||\n\t\ti.nextRankOutLinks.IsLinkExist(types.CidNumber(link.From), types.CidNumber(link.To), ctypes.AccNumber(link.Account))\n}\n\nfunc (i *IndexKeeper) IsLinkExistInCache(ctx sdk.Context, link types.CompactLink) bool {\n\tstore := ctx.TransientStore(i.tkey)\n\treturn store.Has(link.MarshalBinaryLink())\n}\n\nfunc (i *IndexKeeper) LoadFromReader(ctx sdk.Context, reader io.Reader) (err error) {\n\tlinksCountBytes, err := utils.ReadExactlyNBytes(reader, LinksCountBytesSize)\n\tif err != nil {\n\t\treturn\n\t}\n\tlinksCount := binary.LittleEndian.Uint64(linksCountBytes)\n\n\tfor j := uint64(0); j < linksCount; j++ {\n\t\tlinkBytes, err := utils.ReadExactlyNBytes(reader, LinkBytesSize)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcompactLink := types.UnmarshalBinaryLink(linkBytes)\n\n\t\ti.GraphKeeper.neudeg[compactLink.Account] += 1\n\t\ti.GraphKeeper.rankNeudeg[compactLink.Account] += 1\n\n\t\ti.GraphKeeper.SaveLink(ctx, compactLink)\n\t\ti.PutLink(ctx, compactLink)\n\t}\n\n\tfor acc, links := range i.GraphKeeper.neudeg {\n\t\ti.GraphKeeper.SaveNeudeg(ctx, acc, links)\n\t}\n\n\treturn\n}\n"
  },
  {
    "path": "x/graph/keeper/msg_server.go",
    "content": "package keeper\n\nimport (\n\t\"context\"\n\n\tsdkerrors \"github.com/cosmos/cosmos-sdk/types/errors\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tauthkeeper \"github.com/cosmos/cosmos-sdk/x/auth/keeper\"\n\n\tctypes \"github.com/cybercongress/go-cyber/v7/types\"\n\tbandwidthkeeper \"github.com/cybercongress/go-cyber/v7/x/bandwidth/keeper\"\n\tbandwidthtypes \"github.com/cybercongress/go-cyber/v7/x/bandwidth/types\"\n\tcyberbankkeeper \"github.com/cybercongress/go-cyber/v7/x/cyberbank/keeper\"\n\n\t// sdkerrors \"github.com/cosmos/cosmos-sdk/types/errors\"\n\t\"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n)\n\ntype msgServer struct {\n\t*GraphKeeper\n\t*IndexKeeper\n\tauthkeeper.AccountKeeper\n\t*cyberbankkeeper.IndexedKeeper\n\t*bandwidthkeeper.BandwidthMeter\n}\n\n// NewMsgServerImpl returns an implementation of the stored MsgServer interface\n// for the provided Keeper.\nfunc NewMsgServerImpl(\n\tgk *GraphKeeper,\n\tik *IndexKeeper,\n\tak authkeeper.AccountKeeper,\n\tbk *cyberbankkeeper.IndexedKeeper,\n\tbm *bandwidthkeeper.BandwidthMeter,\n) types.MsgServer {\n\treturn &msgServer{\n\t\tgk,\n\t\tik,\n\t\tak,\n\t\tbk,\n\t\tbm,\n\t}\n}\n\nvar _ types.MsgServer = msgServer{}\n\nfunc (k msgServer) Cyberlink(goCtx context.Context, msg *types.MsgCyberlink) (*types.MsgCyberlinkResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tvar accNumber ctypes.AccNumber\n\taddr, err := sdk.AccAddressFromBech32(msg.Neuron)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tacc := k.GetAccount(ctx, addr)\n\tif acc != nil {\n\t\taccNumber = ctypes.AccNumber(acc.GetAccountNumber())\n\t} else {\n\t\treturn nil, sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, \"Invalid neuron address\")\n\t}\n\n\t// TODO move to ante and contract case below\n\tif ampers, ok := k.GetTotalStakesAmpere()[uint64(accNumber)]; ok {\n\t\tif ampers == 0 {\n\t\t\treturn nil, types.ErrZeroPower\n\t\t}\n\t} else {\n\t\treturn nil, types.ErrZeroPower\n\t}\n\n\tcost := uint64(k.GetCurrentCreditPrice().MulInt64(int64(len(msg.Links) * 1000)).TruncateInt64())\n\n\tcurrentBlockSpentBandwidth := k.GetCurrentBlockSpentBandwidth(ctx)\n\tmaxBlockBandwidth := k.GetMaxBlockBandwidth(ctx)\n\n\tif !k.HasEnoughAccountBandwidthVolt(ctx, cost, addr) {\n\t\treturn nil, bandwidthtypes.ErrNotEnoughBandwidth\n\t}\n\n\tif (cost + currentBlockSpentBandwidth) > maxBlockBandwidth {\n\t\treturn nil, bandwidthtypes.ErrExceededMaxBlockBandwidth\n\t}\n\n\terr = k.BurnAccountBandwidthVolt(ctx, cost, addr)\n\tif err != nil {\n\t\treturn nil, bandwidthtypes.ErrNotEnoughBandwidth\n\t}\n\n\tk.AddToBlockBandwidth(ctx, cost)\n\tk.AddBurnedVolts(ctx, cost)\n\n\tfor _, link := range msg.Links {\n\t\t// if cid not exists it automatically means that this is new link\n\t\tfromCidNumber, exists := k.GetCidNumber(ctx, types.Cid(link.From))\n\t\tif !exists {\n\t\t\tcontinue\n\t\t}\n\t\ttoCidNumber, exists := k.GetCidNumber(ctx, types.Cid(link.To))\n\t\tif !exists {\n\t\t\tcontinue\n\t\t}\n\n\t\tcompactLink := types.NewLink(fromCidNumber, toCidNumber, accNumber)\n\n\t\tif k.IndexKeeper.IsLinkExist(compactLink) {\n\t\t\treturn nil, types.ErrCyberlinkExist\n\t\t}\n\n\t\tif k.IndexKeeper.IsLinkExistInCache(ctx, compactLink) {\n\t\t\treturn nil, types.ErrCyberlinkExist\n\t\t}\n\t}\n\n\tfor _, link := range msg.Links {\n\t\tfromCidNumber := k.GetOrPutCidNumber(ctx, types.Cid(link.From))\n\t\ttoCidNumber := k.GetOrPutCidNumber(ctx, types.Cid(link.To))\n\n\t\tk.GraphKeeper.SaveLink(ctx, types.NewLink(fromCidNumber, toCidNumber, accNumber))\n\t\tk.GraphKeeper.IncrementNeudeg(ctx, uint64(accNumber))\n\t\tk.IndexKeeper.PutLink(ctx, types.NewLink(fromCidNumber, toCidNumber, accNumber))\n\n\t\tctx.EventManager().EmitEvent(\n\t\t\tsdk.NewEvent(\n\t\t\t\ttypes.EventTypeCyberlink,\n\t\t\t\tsdk.NewAttribute(types.AttributeKeyParticleFrom, link.From),\n\t\t\t\tsdk.NewAttribute(types.AttributeKeyParticleTo, link.To),\n\t\t\t),\n\t\t)\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeCyberlink,\n\t\t\tsdk.NewAttribute(types.AttributeKeyNeuron, msg.Neuron),\n\t\t),\n\t\tsdk.NewEvent(\n\t\t\tsdk.EventTypeMessage,\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),\n\t\t\tsdk.NewAttribute(sdk.AttributeKeySender, msg.Neuron),\n\t\t),\n\t})\n\n\treturn &types.MsgCyberlinkResponse{}, nil\n}\n"
  },
  {
    "path": "x/graph/keeper/neudeg.go",
    "content": "package keeper\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n)\n\n// In order to calculate the flow of amperes through cyberlinks created by given agents than need to compute neurons out-degree\n// transient store used to sync values to in-memory at the end block\nfunc (gk *GraphKeeper) LoadNeudeg(rankCtx sdk.Context, freshCtx sdk.Context) {\n\titerator := sdk.KVStorePrefixIterator(rankCtx.KVStore(gk.key), types.NeudegStoreKeyPrefix)\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tacc := sdk.BigEndianToUint64(iterator.Key()[1:])\n\t\tgk.rankNeudeg[acc] = sdk.BigEndianToUint64(iterator.Value())\n\t}\n\titerator.Close()\n\n\titerator = sdk.KVStorePrefixIterator(freshCtx.KVStore(gk.key), types.NeudegStoreKeyPrefix)\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tacc := sdk.BigEndianToUint64(iterator.Key()[1:])\n\t\tgk.neudeg[acc] = sdk.BigEndianToUint64(iterator.Value())\n\t}\n\titerator.Close()\n}\n\n// NOTE: used when load from exported graph with links\nfunc (gk GraphKeeper) SaveNeudeg(ctx sdk.Context, accNumber uint64, neudeg uint64) {\n\tstore := ctx.KVStore(gk.key)\n\tstore.Set(types.NeudegStoreKey(accNumber), sdk.Uint64ToBigEndian(neudeg))\n}\n\nfunc (gk GraphKeeper) IncrementNeudeg(ctx sdk.Context, accNumber uint64) {\n\tstore := ctx.KVStore(gk.key)\n\tneudeg := gk.GetNeudeg(ctx, accNumber) + 1\n\tstore.Set(types.NeudegStoreKey(accNumber), sdk.Uint64ToBigEndian(neudeg))\n\n\tstore = ctx.TransientStore(gk.tkey)\n\ttneudeg := gk.GetTNeudeg(ctx, accNumber) + 1\n\tstore.Set(types.NeudegTStoreKey(accNumber), sdk.Uint64ToBigEndian(tneudeg))\n}\n\nfunc (gk GraphKeeper) GetNeudeg(ctx sdk.Context, accNumber uint64) uint64 {\n\tstore := ctx.KVStore(gk.key)\n\tneudeg := store.Get(types.NeudegStoreKey(accNumber))\n\tif neudeg == nil {\n\t\treturn 0\n\t}\n\treturn sdk.BigEndianToUint64(neudeg)\n}\n\nfunc (gk GraphKeeper) GetTNeudeg(ctx sdk.Context, accNumber uint64) uint64 {\n\tstore := ctx.TransientStore(gk.tkey)\n\tneudeg := store.Get(types.NeudegTStoreKey(accNumber))\n\tif neudeg == nil {\n\t\treturn 0\n\t}\n\treturn sdk.BigEndianToUint64(neudeg)\n}\n\nfunc (gk *GraphKeeper) GetNeudegs() map[uint64]uint64 {\n\treturn gk.rankNeudeg\n}\n\nfunc (gk *GraphKeeper) UpdateMemNeudegs(ctx sdk.Context) {\n\titerator := sdk.KVStorePrefixIterator(ctx.TransientStore(gk.tkey), types.NeudegTStoreKeyPrefix)\n\n\tdefer iterator.Close()\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tacc := sdk.BigEndianToUint64(iterator.Key()[1:])\n\t\tgk.neudeg[acc] += sdk.BigEndianToUint64(iterator.Value())\n\t}\n}\n\nfunc (gk *GraphKeeper) UpdateRankNeudegs() {\n\tfor acc := range gk.neudeg {\n\t\tgk.rankNeudeg[acc] = gk.neudeg[acc]\n\t}\n}\n"
  },
  {
    "path": "x/graph/keeper/particles.go",
    "content": "package keeper\n\nimport (\n\t\"encoding/binary\"\n\t\"io\"\n\n\t\"github.com/cosmos/cosmos-sdk/telemetry\"\n\n\t\"github.com/cybercongress/go-cyber/v7/utils\"\n\t\"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\nconst (\n\tCidLengthBytesSize = uint64(1)\n\tCidNumberBytesSize = uint64(8)\n\tCidCountBytesSize  = uint64(8)\n)\n\n// Return cid number and true, if cid exists\nfunc (gk GraphKeeper) GetCidNumber(ctx sdk.Context, cid types.Cid) (types.CidNumber, bool) {\n\tstore := ctx.KVStore(gk.key)\n\tcidIndexAsBytes := store.Get(types.CidStoreKey(cid))\n\n\tif cidIndexAsBytes != nil {\n\t\treturn types.CidNumber(sdk.BigEndianToUint64(cidIndexAsBytes)), true\n\t}\n\n\treturn 0, false\n}\n\nfunc (gk GraphKeeper) GetCid(ctx sdk.Context, num types.CidNumber) types.Cid {\n\tstore := ctx.KVStore(gk.key)\n\tcidAsBytes := store.Get(types.CidReverseStoreKey(num))\n\n\treturn types.Cid(cidAsBytes)\n}\n\n// CIDs index is array of all added CIDs, sorted asc by first link time.\n// for given link, CIDs added in order [CID1, CID2] (if they both new to chain)\n// This method performs lookup of CIDs, returns index value, or create and put in index new value if not exists.\nfunc (gk GraphKeeper) GetOrPutCidNumber(ctx sdk.Context, cid types.Cid) types.CidNumber {\n\tstore := ctx.KVStore(gk.key)\n\tcidIndexAsBytes := store.Get(types.CidStoreKey(cid))\n\n\tif cidIndexAsBytes == nil {\n\t\tlastIndex := gk.GetCidsCount(ctx)\n\t\tstore.Set(types.CidStoreKey(cid), sdk.Uint64ToBigEndian(lastIndex))\n\t\tstore.Set(types.CidReverseStoreKey(types.CidNumber(lastIndex)), []byte(cid))\n\t\tstore.Set(types.LastCidNumber, sdk.Uint64ToBigEndian(lastIndex))\n\n\t\ttelemetry.IncrCounter(1.0, types.ModuleName, \"cids\")\n\n\t\treturn types.CidNumber(lastIndex)\n\t}\n\treturn types.CidNumber(sdk.BigEndianToUint64(cidIndexAsBytes))\n}\n\nfunc (gk GraphKeeper) GetCidsCount(ctx sdk.Context) uint64 {\n\tstore := ctx.KVStore(gk.key)\n\tlastIndexAsBytes := store.Get(types.LastCidNumber)\n\n\tif lastIndexAsBytes == nil {\n\t\treturn 0\n\t}\n\n\treturn sdk.BigEndianToUint64(lastIndexAsBytes) + 1\n}\n\nfunc (gk GraphKeeper) SetLastCidIndex(ctx sdk.Context, lastCidIndex uint64) {\n\tstore := ctx.KVStore(gk.key)\n\tstore.Set(types.LastCidNumber, sdk.Uint64ToBigEndian(lastCidIndex))\n}\n\nfunc (gk GraphKeeper) PutCid(ctx sdk.Context, cid types.Cid, cidNumber types.CidNumber) {\n\tstore := ctx.KVStore(gk.key)\n\n\tstore.Set(types.CidStoreKey(cid), sdk.Uint64ToBigEndian(uint64(cidNumber)))\n\tstore.Set(types.CidReverseStoreKey(cidNumber), []byte(cid))\n}\n\nfunc (gk GraphKeeper) IterateCids(ctx sdk.Context, process func(types.Cid, types.CidNumber)) {\n\tstore := ctx.KVStore(gk.key)\n\titerator := sdk.KVStorePrefixIterator(store, types.CidStoreKeyPrefix)\n\tdefer iterator.Close()\n\n\tfor iterator.Valid() {\n\t\t// [1:0] because we have prefix []byte{0x01} for cids\n\t\tprocess(types.Cid(iterator.Key()[1:]), types.CidNumber(sdk.BigEndianToUint64(iterator.Value())))\n\t\titerator.Next()\n\t}\n}\n\n// write CIDs to writer in binary format: <n><cid1_size><cid1><cid1_number><cid2_size><cid2><cid2_number>....<cidn_size><cidn><cidn_number>\nfunc (gk GraphKeeper) WriteCids(ctx sdk.Context, writer io.Writer) (err error) {\n\tuintAsBytes := make([]byte, 8) // common bytes array to convert uints\n\n\tcidsCount := gk.GetCidsCount(ctx)\n\tbinary.LittleEndian.PutUint64(uintAsBytes, cidsCount)\n\t_, err = writer.Write(uintAsBytes)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tgk.IterateCids(ctx, func(cid types.Cid, number types.CidNumber) {\n\t\tcidLength := len(cid)\n\t\tif cidLength > 255 {\n\t\t\t// err = errors.New(\"cid length cannot be over 255\")\n\t\t\treturn\n\t\t}\n\n\t\t_, err = writer.Write([]byte{byte(cidLength)})\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\t_, err = writer.Write([]byte(cid))\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tbinary.LittleEndian.PutUint64(uintAsBytes, uint64(number))\n\t\t_, err = writer.Write(uintAsBytes)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t})\n\treturn //nolint:nakedret\n}\n\nfunc (gk GraphKeeper) LoadFromReader(ctx sdk.Context, reader io.Reader) (err error) {\n\tcidCountBytes, err := utils.ReadExactlyNBytes(reader, CidCountBytesSize)\n\tif err != nil {\n\t\treturn\n\t}\n\tcidCount := binary.LittleEndian.Uint64(cidCountBytes)\n\n\tfor i := uint64(0); i < cidCount; i++ {\n\t\tcidLengthBytes, err := utils.ReadExactlyNBytes(reader, CidLengthBytesSize)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcidBytes, err := utils.ReadExactlyNBytes(reader, uint64(cidLengthBytes[0]))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcid := types.Cid(cidBytes)\n\t\tcidNumberBytes, err := utils.ReadExactlyNBytes(reader, CidNumberBytesSize)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcidNumber := types.CidNumber(binary.LittleEndian.Uint64(cidNumberBytes))\n\t\tgk.PutCid(ctx, cid, cidNumber)\n\t}\n\n\tlastCidIndex := cidCount - 1\n\tgk.SetLastCidIndex(ctx, lastCidIndex)\n\n\treturn\n}\n"
  },
  {
    "path": "x/graph/keeper/snapshotter.go",
    "content": "package keeper\n\nimport (\n\t\"github.com/cometbft/cometbft/libs/log\"\n\ttmproto \"github.com/cometbft/cometbft/proto/tendermint/types\"\n\tsnapshot \"github.com/cosmos/cosmos-sdk/snapshots/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n)\n\nvar _ snapshot.ExtensionSnapshotter = &GraphSnapshotter{}\n\nconst SnapshotFormat = 1\n\ntype GraphSnapshotter struct {\n\tgraphKeeper *GraphKeeper\n\tindexKeeper *IndexKeeper\n\tcms         sdk.MultiStore\n}\n\nfunc NewGraphSnapshotter(cms sdk.MultiStore, graphKeeper *GraphKeeper, indexKeeper *IndexKeeper) *GraphSnapshotter {\n\treturn &GraphSnapshotter{\n\t\tgraphKeeper: graphKeeper,\n\t\tindexKeeper: indexKeeper,\n\t\tcms:         cms,\n\t}\n}\n\nfunc (gs *GraphSnapshotter) SnapshotName() string {\n\treturn types.ModuleName\n}\n\nfunc (gs *GraphSnapshotter) SnapshotFormat() uint32 {\n\treturn SnapshotFormat\n}\n\nfunc (gs *GraphSnapshotter) SupportedFormats() []uint32 {\n\t// If we support older formats, add them here and handle them in Restore\n\treturn []uint32{SnapshotFormat}\n}\n\nfunc (gs *GraphSnapshotter) SnapshotExtension(_ uint64, _ snapshot.ExtensionPayloadWriter) error {\n\treturn nil\n}\n\nfunc (gs *GraphSnapshotter) RestoreExtension(height uint64, format uint32, _ snapshot.ExtensionPayloadReader) error {\n\tif format == SnapshotFormat {\n\t\tfreshCtx := sdk.NewContext(gs.cms, tmproto.Header{Height: int64(height)}, false, log.NewNopLogger())\n\n\t\t// TODO revisit with get params and case of increased rank computation blocks\n\t\tcalculationPeriod := int64(5)\n\t\trankRoundBlockNumber := (freshCtx.BlockHeight() / calculationPeriod) * calculationPeriod\n\n\t\tstore, err := gs.cms.CacheMultiStoreWithVersion(rankRoundBlockNumber)\n\t\tif err != nil {\n\t\t\tprintln(\"Error: \", err)\n\t\t}\n\t\trankCtx := sdk.NewContext(store, tmproto.Header{Height: rankRoundBlockNumber}, false, log.NewNopLogger())\n\n\t\tgs.indexKeeper.LoadState(rankCtx, freshCtx)\n\t\tgs.graphKeeper.LoadNeudeg(rankCtx, freshCtx)\n\n\t\treturn nil\n\t}\n\treturn snapshot.ErrUnknownFormat\n}\n"
  },
  {
    "path": "x/graph/module.go",
    "content": "package graph\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\n\tabci \"github.com/cometbft/cometbft/abci/types\"\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\tcodectypes \"github.com/cosmos/cosmos-sdk/codec/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/module\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/runtime\"\n\n\tbandwidthkeeper \"github.com/cybercongress/go-cyber/v7/x/bandwidth/keeper\"\n\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tauthkeeper \"github.com/cosmos/cosmos-sdk/x/auth/keeper\"\n\t\"github.com/spf13/cobra\"\n\n\tcyberbankkeeper \"github.com/cybercongress/go-cyber/v7/x/cyberbank/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/graph/client/cli\"\n\t\"github.com/cybercongress/go-cyber/v7/x/graph/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n)\n\nvar (\n\t_ module.AppModule      = AppModule{}\n\t_ module.AppModuleBasic = AppModuleBasic{}\n)\n\ntype AppModuleBasic struct {\n\tcdc codec.Codec\n}\n\nfunc (AppModuleBasic) Name() string { return types.ModuleName }\n\nfunc (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {\n\ttypes.RegisterLegacyAminoCodec(cdc)\n}\n\nfunc (AppModuleBasic) DefaultGenesis(_ codec.JSONCodec) json.RawMessage { return nil }\n\nfunc (AppModuleBasic) ValidateGenesis(_ codec.JSONCodec, _ client.TxEncodingConfig, _ json.RawMessage) error {\n\treturn nil\n}\n\nfunc (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) {\n\tif err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc (AppModuleBasic) GetTxCmd() *cobra.Command {\n\treturn cli.NewTxCmd()\n}\n\nfunc (AppModuleBasic) GetQueryCmd() *cobra.Command {\n\treturn cli.GetQueryCmd()\n}\n\nfunc (AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) {\n\ttypes.RegisterInterfaces(registry)\n}\n\ntype AppModule struct {\n\tAppModuleBasic\n\n\tgk *keeper.GraphKeeper\n\tik *keeper.IndexKeeper\n\tak authkeeper.AccountKeeper\n\tbk *cyberbankkeeper.IndexedKeeper\n\tbm *bandwidthkeeper.BandwidthMeter\n}\n\nfunc NewAppModule(\n\tcdc codec.Codec,\n\tgraphKeeper *keeper.GraphKeeper,\n\tindexKeeper *keeper.IndexKeeper,\n\taccountKeeper authkeeper.AccountKeeper,\n\tbankKeeper *cyberbankkeeper.IndexedKeeper,\n\tbandwidthKeeper *bandwidthkeeper.BandwidthMeter,\n) AppModule {\n\treturn AppModule{\n\t\tAppModuleBasic: AppModuleBasic{cdc: cdc},\n\t\tgk:             graphKeeper,\n\t\tik:             indexKeeper,\n\t\tak:             accountKeeper,\n\t\tbk:             bankKeeper,\n\t\tbm:             bandwidthKeeper,\n\t}\n}\n\nfunc (AppModule) Name() string { return types.ModuleName }\n\nfunc (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {}\n\nfunc (am AppModule) RegisterServices(cfg module.Configurator) {\n\ttypes.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.gk, am.ik, am.ak, am.bk, am.bm))\n\ttypes.RegisterQueryServer(cfg.QueryServer(), am.gk)\n}\n\nfunc (am AppModule) InitGenesis(ctx sdk.Context, _ codec.JSONCodec, _ json.RawMessage) []abci.ValidatorUpdate {\n\t_ = keeper.InitGenesis(ctx, *am.gk, am.ik)\n\treturn []abci.ValidatorUpdate{}\n}\n\nfunc (am AppModule) ExportGenesis(ctx sdk.Context, _ codec.JSONCodec) json.RawMessage {\n\terr := keeper.WriteGenesis(ctx, *am.gk, am.ik)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn nil\n}\n\nfunc (am AppModule) ConsensusVersion() uint64 {\n\treturn 1\n}\n\nfunc (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {}\n\nfunc (am AppModule) EndBlock(ctx sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate {\n\tEndBlocker(ctx, am.gk, am.ik)\n\treturn []abci.ValidatorUpdate{}\n}\n"
  },
  {
    "path": "x/graph/types/codec.go",
    "content": "package types\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\t\"github.com/cosmos/cosmos-sdk/codec/legacy\"\n\t\"github.com/cosmos/cosmos-sdk/codec/types\"\n\tcryptocodec \"github.com/cosmos/cosmos-sdk/crypto/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/msgservice\"\n\tauthzcodec \"github.com/cosmos/cosmos-sdk/x/authz/codec\"\n\tgovcodec \"github.com/cosmos/cosmos-sdk/x/gov/codec\"\n)\n\nfunc RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {\n\tlegacy.RegisterAminoMsg(cdc, &MsgCyberlink{}, \"cyber/MsgCyberlink\")\n}\n\nfunc RegisterInterfaces(registry types.InterfaceRegistry) {\n\tregistry.RegisterImplementations((*sdk.Msg)(nil),\n\t\t&MsgCyberlink{},\n\t)\n\n\tmsgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc)\n}\n\nvar (\n\tamino     = codec.NewLegacyAmino()\n\tModuleCdc = codec.NewAminoCodec(amino)\n)\n\nfunc init() {\n\tRegisterLegacyAminoCodec(amino)\n\tcryptocodec.RegisterCrypto(amino)\n\tsdk.RegisterLegacyAminoCodec(amino)\n\n\tRegisterLegacyAminoCodec(authzcodec.Amino)\n\tRegisterLegacyAminoCodec(govcodec.Amino)\n}\n"
  },
  {
    "path": "x/graph/types/compact_link.go",
    "content": "package types\n\nimport (\n\t\"encoding/binary\"\n\n\t\"github.com/cybercongress/go-cyber/v7/types\"\n)\n\ntype CompactLink struct {\n\tFrom    uint64\n\tTo      uint64\n\tAccount uint64\n}\n\ntype LinkFilter func(CompactLink) bool\n\nfunc NewLink(from CidNumber, to CidNumber, acc types.AccNumber) CompactLink {\n\treturn CompactLink{\n\t\tFrom:    uint64(from),\n\t\tTo:      uint64(to),\n\t\tAccount: uint64(acc),\n\t}\n}\n\nfunc UnmarshalBinaryLink(b []byte) CompactLink {\n\treturn NewLink(\n\t\tCidNumber(binary.LittleEndian.Uint64(b[0:8])),\n\t\tCidNumber(binary.LittleEndian.Uint64(b[8:16])),\n\t\ttypes.AccNumber(binary.LittleEndian.Uint64(b[16:24])),\n\t)\n}\n\nfunc (l CompactLink) MarshalBinaryLink() []byte {\n\tb := make([]byte, 24)\n\tbinary.LittleEndian.PutUint64(b[0:8], l.From)\n\tbinary.LittleEndian.PutUint64(b[8:16], l.To)\n\tbinary.LittleEndian.PutUint64(b[16:24], l.Account)\n\treturn b\n}\n"
  },
  {
    "path": "x/graph/types/cyberlinks.go",
    "content": "package types\n\nimport \"github.com/cybercongress/go-cyber/v7/types\"\n\n// map of map, where first key is cid, second key is account.String()\n// second map is used as set for fast contains check\ntype (\n\tLinks    map[CidNumber]CidLinks\n\tCidLinks map[CidNumber]map[types.AccNumber]struct{}\n)\n\ntype (\n\tCid       string\n\tCidNumber uint64\n)\n\nfunc (links Links) Put(from CidNumber, to CidNumber, acc types.AccNumber) {\n\tcidLinks := links[from]\n\tif cidLinks == nil {\n\t\tcidLinks = make(CidLinks)\n\t}\n\tusers := cidLinks[to]\n\tif users == nil {\n\t\tusers = make(map[types.AccNumber]struct{})\n\t}\n\tusers[acc] = struct{}{}\n\tcidLinks[to] = users\n\tlinks[from] = cidLinks\n}\n\nfunc (links Links) PutAll(newLinks Links) {\n\tfor from := range newLinks {\n\t\tfor to := range newLinks[from] {\n\t\t\tfor u := range newLinks[from][to] {\n\t\t\t\tlinks.Put(from, to, u)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (links Links) Copy() Links {\n\tlinksCopy := make(Links, len(links))\n\n\tfor from := range links {\n\t\tfromLinks := make(CidLinks, len(links[from]))\n\t\tfor to := range links[from] {\n\t\t\tusers := make(map[types.AccNumber]struct{}, len(links[from][to]))\n\t\t\tfor u := range links[from][to] {\n\t\t\t\tusers[u] = struct{}{}\n\t\t\t}\n\t\t\tfromLinks[to] = users\n\t\t}\n\t\tlinksCopy[from] = fromLinks\n\t}\n\treturn linksCopy\n}\n\nfunc (links Links) IsAnyLinkExist(from CidNumber, to CidNumber) bool {\n\ttoLinks, fromExists := links[from]\n\tif fromExists {\n\t\tlinkAccs, toExists := toLinks[to]\n\n\t\tif toExists && len(linkAccs) != 0 {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc (links Links) IsLinkExist(from CidNumber, to CidNumber, acc types.AccNumber) bool {\n\ttoLinks, fromExists := links[from]\n\tif fromExists {\n\t\tlinkAccs, toExists := toLinks[to]\n\n\t\tif toExists && len(linkAccs) != 0 {\n\t\t\t_, exists := linkAccs[acc]\n\t\t\treturn exists\n\t\t}\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "x/graph/types/errors.go",
    "content": "package types\n\nimport (\n\terrorsmod \"cosmossdk.io/errors\"\n)\n\nvar (\n\tErrCyberlinkExist  = errorsmod.Register(ModuleName, 2, \"your cyberlink already exists\")\n\tErrZeroLinks       = errorsmod.Register(ModuleName, 3, \"cyberlinks not found\")\n\tErrSelfLink        = errorsmod.Register(ModuleName, 4, \"loop cyberlink not allowed\")\n\tErrInvalidParticle = errorsmod.Register(ModuleName, 5, \"invalid particle\")\n\tErrCidNotFound     = errorsmod.Register(ModuleName, 6, \"particle not found\")\n\tErrCidVersion      = errorsmod.Register(ModuleName, 7, \"unsupported cid version\")\n\tErrZeroPower       = errorsmod.Register(ModuleName, 8, \"neuron has zero power\")\n)\n"
  },
  {
    "path": "x/graph/types/events.go",
    "content": "package types\n\nconst (\n\tEventTypeCyberlink = \"cyberlink\"\n\n\tAttributeKeyParticleFrom = \"particleFrom\"\n\tAttributeKeyParticleTo   = \"particleTo\"\n\tAttributeKeyNeuron       = \"neuron\"\n\n\tAttributeValueCategory = ModuleName\n)\n"
  },
  {
    "path": "x/graph/types/keys.go",
    "content": "package types\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\nconst (\n\tModuleName = \"graph\"\n\tRouterKey  = ModuleName\n\tStoreKey   = ModuleName\n\n\tTStoreKey = \"transient_index\"\n)\n\nvar (\n\tGlobalStoreKeyPrefix     = []byte{0x00}\n\tCidStoreKeyPrefix        = []byte{0x01}\n\tCidReverseStoreKeyPrefix = []byte{0x02}\n\tCyberlinkStoreKeyPrefix  = []byte{0x03}\n\tCyberlinkTStoreKeyPrefix = []byte{0x04} // inter-block cache for cyberlinks\n\tNeudegStoreKeyPrefix     = []byte{0x05}\n\tNeudegTStoreKeyPrefix    = []byte{0x06} // inter-block cache for neurons cyberlink' degree\n\n\tLastCidNumber = append(GlobalStoreKeyPrefix, []byte(\"lastParticleNumber\")...)\n\tLinksCount    = append(GlobalStoreKeyPrefix, []byte(\"cyberlinksAmount\")...)\n\tHasNewLinks   = append(GlobalStoreKeyPrefix, []byte(\"blockHasNewLinks\")...)\n\tBurnedVolts   = append(GlobalStoreKeyPrefix, []byte(\"burnedVolts\")...)\n\tBurnedAmperes = append(GlobalStoreKeyPrefix, []byte(\"burnedAmperes\")...)\n)\n\nfunc CidStoreKey(cid Cid) []byte {\n\treturn append(CidStoreKeyPrefix, []byte(cid)...)\n}\n\nfunc CidReverseStoreKey(num CidNumber) []byte {\n\treturn append(CidReverseStoreKeyPrefix, sdk.Uint64ToBigEndian(uint64(num))...)\n}\n\nfunc CyberlinksStoreKey(linkKey []byte) []byte {\n\treturn append(CyberlinkStoreKeyPrefix, linkKey...)\n}\n\nfunc CyberlinksTStoreKey(link []byte) []byte {\n\treturn append(CyberlinkTStoreKeyPrefix, link...)\n}\n\nfunc NeudegStoreKey(accNumber uint64) []byte {\n\treturn append(NeudegStoreKeyPrefix, sdk.Uint64ToBigEndian(accNumber)...)\n}\n\nfunc NeudegTStoreKey(accNumber uint64) []byte {\n\treturn append(NeudegTStoreKeyPrefix, sdk.Uint64ToBigEndian(accNumber)...)\n}\n\nfunc CyberlinkRawKey(link CompactLink) []byte {\n\tkeyAsBytes := make([]byte, 24)\n\tcopy(keyAsBytes[0:8], sdk.Uint64ToBigEndian(link.From))\n\tcopy(keyAsBytes[8:16], sdk.Uint64ToBigEndian(link.Account))\n\tcopy(keyAsBytes[16:24], sdk.Uint64ToBigEndian(link.To))\n\treturn keyAsBytes\n}\n"
  },
  {
    "path": "x/graph/types/msgs.go",
    "content": "package types\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tsdkerrors \"github.com/cosmos/cosmos-sdk/types/errors\"\n\t\"github.com/ipfs/go-cid\"\n)\n\nconst (\n\tTypeMsgCyberlink = \"cyberlink\"\n)\n\nvar _ sdk.Msg = &MsgCyberlink{}\n\nfunc NewMsgCyberlink(address sdk.AccAddress, links []Link) *MsgCyberlink {\n\treturn &MsgCyberlink{\n\t\tNeuron: address.String(),\n\t\tLinks:  links,\n\t}\n}\n\nfunc (msg MsgCyberlink) Route() string { return RouterKey }\n\nfunc (msg MsgCyberlink) Type() string { return TypeMsgCyberlink }\n\nfunc (msg MsgCyberlink) GetSigners() []sdk.AccAddress {\n\taddr, _ := sdk.AccAddressFromBech32(msg.Neuron)\n\treturn []sdk.AccAddress{addr}\n}\n\nfunc (msg MsgCyberlink) GetSignBytes() []byte {\n\treturn sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg))\n}\n\nfunc (msg MsgCyberlink) ValidateBasic() error {\n\t_, err := sdk.AccAddressFromBech32(msg.Neuron)\n\tif err != nil {\n\t\treturn sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid neuron address: %s\", err)\n\t}\n\n\tif len(msg.Links) == 0 {\n\t\treturn ErrZeroLinks\n\t}\n\n\tfilter := make(CidsFilter)\n\tfor _, link := range msg.Links {\n\t\tif link.From == link.To {\n\t\t\treturn ErrSelfLink\n\t\t}\n\n\t\tfromCid, err := cid.Decode(link.From)\n\t\tif err != nil {\n\t\t\treturn ErrInvalidParticle\n\t\t}\n\n\t\tif fromCid.Version() != 0 {\n\t\t\treturn ErrCidVersion\n\t\t}\n\n\t\ttoCid, err := cid.Decode(link.To)\n\t\tif err != nil {\n\t\t\treturn ErrInvalidParticle\n\t\t}\n\n\t\tif toCid.Version() != 0 {\n\t\t\treturn ErrCidVersion\n\t\t}\n\n\t\tif filter.Contains(Cid(link.From), Cid(link.To)) {\n\t\t\treturn ErrCyberlinkExist\n\t\t}\n\n\t\tfilter.Put(Cid(link.From), Cid(link.To))\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/graph/types/particles_filter.go",
    "content": "package types\n\ntype CidsFilter map[Cid]map[Cid]struct{}\n\nfunc (cf CidsFilter) Put(from Cid, to Cid) {\n\tcidLinks := cf[from]\n\tif cidLinks == nil {\n\t\tcidLinks = make(map[Cid]struct{})\n\t}\n\tcidLinks[to] = struct{}{}\n\tcf[from] = cidLinks\n}\n\nfunc (cf CidsFilter) Contains(from Cid, to Cid) bool {\n\tcidLinks := cf[from]\n\tif cidLinks == nil {\n\t\treturn false\n\t}\n\t_, contains := cidLinks[to]\n\treturn contains\n}\n"
  },
  {
    "path": "x/graph/types/querier.go",
    "content": "package types\n\nconst (\n\tQueryGraphStats = \"graph_stats\"\n)\n"
  },
  {
    "path": "x/graph/types/query.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/graph/v1beta1/query.proto\n\npackage types\n\nimport (\n\tcontext \"context\"\n\tfmt \"fmt\"\n\tgrpc1 \"github.com/cosmos/gogoproto/grpc\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype QueryGraphStatsRequest struct {\n}\n\nfunc (m *QueryGraphStatsRequest) Reset()         { *m = QueryGraphStatsRequest{} }\nfunc (m *QueryGraphStatsRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryGraphStatsRequest) ProtoMessage()    {}\nfunc (*QueryGraphStatsRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_1588f994db3ad35c, []int{0}\n}\nfunc (m *QueryGraphStatsRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryGraphStatsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryGraphStatsRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryGraphStatsRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryGraphStatsRequest.Merge(m, src)\n}\nfunc (m *QueryGraphStatsRequest) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryGraphStatsRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryGraphStatsRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryGraphStatsRequest proto.InternalMessageInfo\n\ntype QueryGraphStatsResponse struct {\n\tCyberlinks uint64 `protobuf:\"varint,1,opt,name=cyberlinks,proto3\" json:\"cyberlinks,omitempty\"`\n\tParticles  uint64 `protobuf:\"varint,2,opt,name=particles,proto3\" json:\"particles,omitempty\"`\n}\n\nfunc (m *QueryGraphStatsResponse) Reset()         { *m = QueryGraphStatsResponse{} }\nfunc (m *QueryGraphStatsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryGraphStatsResponse) ProtoMessage()    {}\nfunc (*QueryGraphStatsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_1588f994db3ad35c, []int{1}\n}\nfunc (m *QueryGraphStatsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryGraphStatsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryGraphStatsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryGraphStatsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryGraphStatsResponse.Merge(m, src)\n}\nfunc (m *QueryGraphStatsResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryGraphStatsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryGraphStatsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryGraphStatsResponse proto.InternalMessageInfo\n\nfunc (m *QueryGraphStatsResponse) GetCyberlinks() uint64 {\n\tif m != nil {\n\t\treturn m.Cyberlinks\n\t}\n\treturn 0\n}\n\nfunc (m *QueryGraphStatsResponse) GetParticles() uint64 {\n\tif m != nil {\n\t\treturn m.Particles\n\t}\n\treturn 0\n}\n\ntype QueryBurnStatsRequest struct {\n}\n\nfunc (m *QueryBurnStatsRequest) Reset()         { *m = QueryBurnStatsRequest{} }\nfunc (m *QueryBurnStatsRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryBurnStatsRequest) ProtoMessage()    {}\nfunc (*QueryBurnStatsRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_1588f994db3ad35c, []int{2}\n}\nfunc (m *QueryBurnStatsRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryBurnStatsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryBurnStatsRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryBurnStatsRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryBurnStatsRequest.Merge(m, src)\n}\nfunc (m *QueryBurnStatsRequest) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryBurnStatsRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryBurnStatsRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryBurnStatsRequest proto.InternalMessageInfo\n\ntype QueryBurnStatsResponse struct {\n\tMillivolt   uint64 `protobuf:\"varint,1,opt,name=millivolt,proto3\" json:\"millivolt,omitempty\"`\n\tMilliampere uint64 `protobuf:\"varint,2,opt,name=milliampere,proto3\" json:\"milliampere,omitempty\"`\n}\n\nfunc (m *QueryBurnStatsResponse) Reset()         { *m = QueryBurnStatsResponse{} }\nfunc (m *QueryBurnStatsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryBurnStatsResponse) ProtoMessage()    {}\nfunc (*QueryBurnStatsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_1588f994db3ad35c, []int{3}\n}\nfunc (m *QueryBurnStatsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryBurnStatsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryBurnStatsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryBurnStatsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryBurnStatsResponse.Merge(m, src)\n}\nfunc (m *QueryBurnStatsResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryBurnStatsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryBurnStatsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryBurnStatsResponse proto.InternalMessageInfo\n\nfunc (m *QueryBurnStatsResponse) GetMillivolt() uint64 {\n\tif m != nil {\n\t\treturn m.Millivolt\n\t}\n\treturn 0\n}\n\nfunc (m *QueryBurnStatsResponse) GetMilliampere() uint64 {\n\tif m != nil {\n\t\treturn m.Milliampere\n\t}\n\treturn 0\n}\n\nfunc init() {\n\tproto.RegisterType((*QueryGraphStatsRequest)(nil), \"cyber.graph.v1beta1.QueryGraphStatsRequest\")\n\tproto.RegisterType((*QueryGraphStatsResponse)(nil), \"cyber.graph.v1beta1.QueryGraphStatsResponse\")\n\tproto.RegisterType((*QueryBurnStatsRequest)(nil), \"cyber.graph.v1beta1.QueryBurnStatsRequest\")\n\tproto.RegisterType((*QueryBurnStatsResponse)(nil), \"cyber.graph.v1beta1.QueryBurnStatsResponse\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/graph/v1beta1/query.proto\", fileDescriptor_1588f994db3ad35c) }\n\nvar fileDescriptor_1588f994db3ad35c = []byte{\n\t// 361 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0xc1, 0x4e, 0x2a, 0x31,\n\t0x14, 0xa5, 0xe4, 0x3d, 0x13, 0xea, 0xae, 0x46, 0x21, 0x84, 0x14, 0x9c, 0x8d, 0x44, 0x74, 0x1a,\n\t0xf4, 0x0f, 0xd8, 0x18, 0x97, 0xe2, 0x42, 0xe3, 0xc6, 0x74, 0x26, 0xcd, 0xd0, 0x38, 0xb4, 0xa5,\n\t0xed, 0x10, 0xd9, 0xba, 0x37, 0xd1, 0xf8, 0x19, 0xfe, 0x88, 0x4b, 0x12, 0x37, 0x2e, 0x0d, 0xf8,\n\t0x21, 0x86, 0x4e, 0x23, 0xa8, 0x63, 0xc2, 0xf2, 0x9e, 0x7b, 0xee, 0x39, 0xe7, 0xde, 0x16, 0x36,\n\t0xe3, 0x49, 0xc4, 0x34, 0x49, 0x34, 0x55, 0x03, 0x32, 0xee, 0x46, 0xcc, 0xd2, 0x2e, 0x19, 0x65,\n\t0x4c, 0x4f, 0x42, 0xa5, 0xa5, 0x95, 0x68, 0xcb, 0x11, 0x42, 0x47, 0x08, 0x3d, 0xa1, 0xde, 0x48,\n\t0xa4, 0x4c, 0x52, 0x46, 0xa8, 0xe2, 0x84, 0x0a, 0x21, 0x2d, 0xb5, 0x5c, 0x0a, 0x93, 0x8f, 0x04,\n\t0x35, 0xb8, 0x73, 0xb6, 0x50, 0x38, 0x59, 0xcc, 0x9c, 0x5b, 0x6a, 0x4d, 0x9f, 0x8d, 0x32, 0x66,\n\t0x6c, 0x70, 0x01, 0xab, 0xbf, 0x3a, 0x46, 0x49, 0x61, 0x18, 0xc2, 0x10, 0x3a, 0xa7, 0x94, 0x8b,\n\t0x1b, 0x53, 0x03, 0x2d, 0xd0, 0xfe, 0xd7, 0x5f, 0x41, 0x50, 0x03, 0x56, 0x14, 0xd5, 0x96, 0xc7,\n\t0x29, 0x33, 0xb5, 0xb2, 0x6b, 0x2f, 0x81, 0xa0, 0x0a, 0xb7, 0x9d, 0x70, 0x2f, 0xd3, 0xe2, 0x9b,\n\t0xe3, 0xa5, 0xcf, 0xb2, 0xd2, 0xf0, 0x86, 0x0d, 0x58, 0x19, 0xf2, 0x34, 0xe5, 0x63, 0x99, 0x5a,\n\t0xef, 0xb7, 0x04, 0x50, 0x0b, 0x6e, 0xba, 0x82, 0x0e, 0x15, 0xd3, 0xcc, 0x1b, 0xae, 0x42, 0x47,\n\t0xcf, 0x65, 0xf8, 0xdf, 0x49, 0xa3, 0x47, 0x00, 0xe1, 0x72, 0x23, 0xd4, 0x09, 0x0b, 0x4e, 0x16,\n\t0x16, 0x5f, 0xa4, 0x7e, 0xb0, 0x1e, 0x39, 0xcf, 0x1c, 0xb4, 0xef, 0x5e, 0x3f, 0x9e, 0xca, 0x01,\n\t0x6a, 0x91, 0xa2, 0x67, 0x73, 0xd5, 0xb5, 0x71, 0x21, 0xee, 0x01, 0xac, 0x7c, 0xed, 0x8c, 0xf6,\n\t0xff, 0x76, 0xf9, 0x79, 0xb1, 0x7a, 0x67, 0x2d, 0xae, 0x0f, 0xb4, 0xe7, 0x02, 0xed, 0xa2, 0x66,\n\t0x61, 0xa0, 0x28, 0xd3, 0x22, 0xcf, 0xd3, 0x3b, 0x7d, 0x99, 0x61, 0x30, 0x9d, 0x61, 0xf0, 0x3e,\n\t0xc3, 0xe0, 0x61, 0x8e, 0x4b, 0xd3, 0x39, 0x2e, 0xbd, 0xcd, 0x71, 0xe9, 0x8a, 0x24, 0xdc, 0x0e,\n\t0xb2, 0x28, 0x8c, 0xe5, 0x30, 0x17, 0x89, 0xa5, 0x48, 0x34, 0x33, 0x86, 0x24, 0xf2, 0x30, 0x57,\n\t0xbd, 0xf5, 0xba, 0x76, 0xa2, 0x98, 0x89, 0x36, 0xdc, 0x2f, 0x3b, 0xfe, 0x0c, 0x00, 0x00, 0xff,\n\t0xff, 0x55, 0x5d, 0xaf, 0x89, 0xbb, 0x02, 0x00, 0x00,\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ context.Context\nvar _ grpc.ClientConn\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// QueryClient is the client API for Query service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype QueryClient interface {\n\tGraphStats(ctx context.Context, in *QueryGraphStatsRequest, opts ...grpc.CallOption) (*QueryGraphStatsResponse, error)\n\tBurnStats(ctx context.Context, in *QueryBurnStatsRequest, opts ...grpc.CallOption) (*QueryBurnStatsResponse, error)\n}\n\ntype queryClient struct {\n\tcc grpc1.ClientConn\n}\n\nfunc NewQueryClient(cc grpc1.ClientConn) QueryClient {\n\treturn &queryClient{cc}\n}\n\nfunc (c *queryClient) GraphStats(ctx context.Context, in *QueryGraphStatsRequest, opts ...grpc.CallOption) (*QueryGraphStatsResponse, error) {\n\tout := new(QueryGraphStatsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.graph.v1beta1.Query/GraphStats\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) BurnStats(ctx context.Context, in *QueryBurnStatsRequest, opts ...grpc.CallOption) (*QueryBurnStatsResponse, error) {\n\tout := new(QueryBurnStatsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.graph.v1beta1.Query/BurnStats\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// QueryServer is the server API for Query service.\ntype QueryServer interface {\n\tGraphStats(context.Context, *QueryGraphStatsRequest) (*QueryGraphStatsResponse, error)\n\tBurnStats(context.Context, *QueryBurnStatsRequest) (*QueryBurnStatsResponse, error)\n}\n\n// UnimplementedQueryServer can be embedded to have forward compatible implementations.\ntype UnimplementedQueryServer struct {\n}\n\nfunc (*UnimplementedQueryServer) GraphStats(ctx context.Context, req *QueryGraphStatsRequest) (*QueryGraphStatsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method GraphStats not implemented\")\n}\nfunc (*UnimplementedQueryServer) BurnStats(ctx context.Context, req *QueryBurnStatsRequest) (*QueryBurnStatsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method BurnStats not implemented\")\n}\n\nfunc RegisterQueryServer(s grpc1.Server, srv QueryServer) {\n\ts.RegisterService(&_Query_serviceDesc, srv)\n}\n\nfunc _Query_GraphStats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryGraphStatsRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).GraphStats(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.graph.v1beta1.Query/GraphStats\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).GraphStats(ctx, req.(*QueryGraphStatsRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_BurnStats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryBurnStatsRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).BurnStats(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.graph.v1beta1.Query/BurnStats\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).BurnStats(ctx, req.(*QueryBurnStatsRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _Query_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"cyber.graph.v1beta1.Query\",\n\tHandlerType: (*QueryServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"GraphStats\",\n\t\t\tHandler:    _Query_GraphStats_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"BurnStats\",\n\t\t\tHandler:    _Query_BurnStats_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"cyber/graph/v1beta1/query.proto\",\n}\n\nfunc (m *QueryGraphStatsRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryGraphStatsRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryGraphStatsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryGraphStatsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryGraphStatsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryGraphStatsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Particles != 0 {\n\t\ti = encodeVarintQuery(dAtA, i, uint64(m.Particles))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif m.Cyberlinks != 0 {\n\t\ti = encodeVarintQuery(dAtA, i, uint64(m.Cyberlinks))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryBurnStatsRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryBurnStatsRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryBurnStatsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryBurnStatsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryBurnStatsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryBurnStatsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Milliampere != 0 {\n\t\ti = encodeVarintQuery(dAtA, i, uint64(m.Milliampere))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif m.Millivolt != 0 {\n\t\ti = encodeVarintQuery(dAtA, i, uint64(m.Millivolt))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintQuery(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovQuery(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\nfunc (m *QueryGraphStatsRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *QueryGraphStatsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.Cyberlinks != 0 {\n\t\tn += 1 + sovQuery(uint64(m.Cyberlinks))\n\t}\n\tif m.Particles != 0 {\n\t\tn += 1 + sovQuery(uint64(m.Particles))\n\t}\n\treturn n\n}\n\nfunc (m *QueryBurnStatsRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *QueryBurnStatsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.Millivolt != 0 {\n\t\tn += 1 + sovQuery(uint64(m.Millivolt))\n\t}\n\tif m.Milliampere != 0 {\n\t\tn += 1 + sovQuery(uint64(m.Milliampere))\n\t}\n\treturn n\n}\n\nfunc sovQuery(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\nfunc sozQuery(x uint64) (n int) {\n\treturn sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\nfunc (m *QueryGraphStatsRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryGraphStatsRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryGraphStatsRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *QueryGraphStatsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryGraphStatsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryGraphStatsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Cyberlinks\", wireType)\n\t\t\t}\n\t\t\tm.Cyberlinks = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Cyberlinks |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Particles\", wireType)\n\t\t\t}\n\t\t\tm.Particles = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Particles |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *QueryBurnStatsRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryBurnStatsRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryBurnStatsRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *QueryBurnStatsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryBurnStatsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryBurnStatsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Millivolt\", wireType)\n\t\t\t}\n\t\t\tm.Millivolt = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Millivolt |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Milliampere\", wireType)\n\t\t\t}\n\t\t\tm.Milliampere = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Milliampere |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc skipQuery(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupQuery\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthQuery\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthQuery        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowQuery          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupQuery = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/graph/types/query.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: cyber/graph/v1beta1/query.proto\n\n/*\nPackage types is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage types\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/golang/protobuf/descriptor\"\n\t\"github.com/golang/protobuf/proto\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// Suppress \"imported and not used\" errors\nvar _ codes.Code\nvar _ io.Reader\nvar _ status.Status\nvar _ = runtime.String\nvar _ = utilities.NewDoubleArray\nvar _ = descriptor.ForMessage\nvar _ = metadata.Join\n\nfunc request_Query_GraphStats_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryGraphStatsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := client.GraphStats(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n\n}\n\nfunc local_request_Query_GraphStats_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryGraphStatsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := server.GraphStats(ctx, &protoReq)\n\treturn msg, metadata, err\n\n}\n\nfunc request_Query_BurnStats_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryBurnStatsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := client.BurnStats(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n\n}\n\nfunc local_request_Query_BurnStats_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryBurnStatsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := server.BurnStats(ctx, &protoReq)\n\treturn msg, metadata, err\n\n}\n\n// RegisterQueryHandlerServer registers the http handlers for service Query to \"mux\".\n// UnaryRPC     :call QueryServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead.\nfunc RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error {\n\n\tmux.Handle(\"GET\", pattern_Query_GraphStats_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_GraphStats_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_GraphStats_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_BurnStats_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_BurnStats_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_BurnStats_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\treturn nil\n}\n\n// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.Dial(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Infof(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Infof(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\n\treturn RegisterQueryHandler(ctx, mux, conn)\n}\n\n// RegisterQueryHandler registers the http handlers for service Query to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn))\n}\n\n// RegisterQueryHandlerClient registers the http handlers for service Query\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"QueryClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"QueryClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"QueryClient\" to call the correct interceptors.\nfunc RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error {\n\n\tmux.Handle(\"GET\", pattern_Query_GraphStats_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_GraphStats_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_GraphStats_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_BurnStats_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_BurnStats_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_BurnStats_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\treturn nil\n}\n\nvar (\n\tpattern_Query_GraphStats_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"cyber\", \"graph\", \"v1beta1\", \"graph_stats\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_BurnStats_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"cyber\", \"graph\", \"v1beta1\", \"burn_stats\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n)\n\nvar (\n\tforward_Query_GraphStats_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_BurnStats_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "x/graph/types/tx.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/graph/v1beta1/tx.proto\n\npackage types\n\nimport (\n\tcontext \"context\"\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tgrpc1 \"github.com/cosmos/gogoproto/grpc\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype MsgCyberlink struct {\n\tNeuron string `protobuf:\"bytes,1,opt,name=neuron,proto3\" json:\"neuron,omitempty\"`\n\tLinks  []Link `protobuf:\"bytes,2,rep,name=links,proto3\" json:\"links\"`\n}\n\nfunc (m *MsgCyberlink) Reset()         { *m = MsgCyberlink{} }\nfunc (m *MsgCyberlink) String() string { return proto.CompactTextString(m) }\nfunc (*MsgCyberlink) ProtoMessage()    {}\nfunc (*MsgCyberlink) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_39ffdb6b83edbf38, []int{0}\n}\n\nfunc (m *MsgCyberlink) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgCyberlink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgCyberlink.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgCyberlink) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgCyberlink.Merge(m, src)\n}\n\nfunc (m *MsgCyberlink) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgCyberlink) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgCyberlink.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgCyberlink proto.InternalMessageInfo\n\ntype MsgCyberlinkResponse struct{}\n\nfunc (m *MsgCyberlinkResponse) Reset()         { *m = MsgCyberlinkResponse{} }\nfunc (m *MsgCyberlinkResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgCyberlinkResponse) ProtoMessage()    {}\nfunc (*MsgCyberlinkResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_39ffdb6b83edbf38, []int{1}\n}\n\nfunc (m *MsgCyberlinkResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgCyberlinkResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgCyberlinkResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgCyberlinkResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgCyberlinkResponse.Merge(m, src)\n}\n\nfunc (m *MsgCyberlinkResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgCyberlinkResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgCyberlinkResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgCyberlinkResponse proto.InternalMessageInfo\n\nfunc init() {\n\tproto.RegisterType((*MsgCyberlink)(nil), \"cyber.graph.v1beta1.MsgCyberlink\")\n\tproto.RegisterType((*MsgCyberlinkResponse)(nil), \"cyber.graph.v1beta1.MsgCyberlinkResponse\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/graph/v1beta1/tx.proto\", fileDescriptor_39ffdb6b83edbf38) }\n\nvar fileDescriptor_39ffdb6b83edbf38 = []byte{\n\t// 270 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x49, 0xae, 0x4c, 0x4a,\n\t0x2d, 0xd2, 0x4f, 0x2f, 0x4a, 0x2c, 0xc8, 0xd0, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4,\n\t0x2f, 0xa9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x06, 0xcb, 0xea, 0x81, 0x65, 0xf5,\n\t0xa0, 0xb2, 0x52, 0x22, 0xe9, 0xf9, 0xe9, 0xf9, 0x60, 0x79, 0x7d, 0x10, 0x0b, 0xa2, 0x54, 0x4a,\n\t0x1e, 0xab, 0x41, 0x95, 0x05, 0xa9, 0xc5, 0x10, 0x05, 0x4a, 0xe9, 0x5c, 0x3c, 0xbe, 0xc5, 0xe9,\n\t0xce, 0x20, 0x55, 0x39, 0x99, 0x79, 0xd9, 0x42, 0x62, 0x5c, 0x6c, 0x79, 0xa9, 0xa5, 0x45, 0xf9,\n\t0x79, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x50, 0x9e, 0x90, 0x29, 0x17, 0x2b, 0x48, 0xbe,\n\t0x58, 0x82, 0x49, 0x81, 0x59, 0x83, 0xdb, 0x48, 0x52, 0x0f, 0x8b, 0x1b, 0xf4, 0x7c, 0x32, 0xf3,\n\t0xb2, 0x9d, 0x58, 0x4e, 0xdc, 0x93, 0x67, 0x08, 0x82, 0xa8, 0xb6, 0xe2, 0xe8, 0x58, 0x20, 0xcf,\n\t0xf0, 0x62, 0x81, 0x3c, 0x83, 0x92, 0x18, 0x97, 0x08, 0xb2, 0x45, 0x41, 0xa9, 0xc5, 0x05, 0xf9,\n\t0x79, 0xc5, 0xa9, 0x46, 0x09, 0x5c, 0xcc, 0xbe, 0xc5, 0xe9, 0x42, 0x91, 0x5c, 0x9c, 0x08, 0x47,\n\t0x28, 0x62, 0x35, 0x1d, 0x59, 0xbb, 0x94, 0x26, 0x41, 0x25, 0x30, 0x1b, 0x9c, 0x3c, 0x4f, 0x3c,\n\t0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e,\n\t0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, 0x21, 0x4a, 0x3f, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49,\n\t0x2f, 0x39, 0x3f, 0x57, 0x1f, 0x6c, 0x5c, 0x72, 0x7e, 0x5e, 0x7a, 0x51, 0x6a, 0x71, 0xb1, 0x7e,\n\t0x7a, 0xbe, 0x2e, 0x24, 0xe4, 0x2a, 0xa0, 0x61, 0x07, 0x0e, 0xb3, 0x24, 0x36, 0x70, 0xa0, 0x19,\n\t0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x06, 0xfa, 0xf1, 0xe3, 0xa0, 0x01, 0x00, 0x00,\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ context.Context\n\t_ grpc.ClientConn\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// MsgClient is the client API for Msg service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype MsgClient interface {\n\tCyberlink(ctx context.Context, in *MsgCyberlink, opts ...grpc.CallOption) (*MsgCyberlinkResponse, error)\n}\n\ntype msgClient struct {\n\tcc grpc1.ClientConn\n}\n\nfunc NewMsgClient(cc grpc1.ClientConn) MsgClient {\n\treturn &msgClient{cc}\n}\n\nfunc (c *msgClient) Cyberlink(ctx context.Context, in *MsgCyberlink, opts ...grpc.CallOption) (*MsgCyberlinkResponse, error) {\n\tout := new(MsgCyberlinkResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.graph.v1beta1.Msg/Cyberlink\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// MsgServer is the server API for Msg service.\ntype MsgServer interface {\n\tCyberlink(context.Context, *MsgCyberlink) (*MsgCyberlinkResponse, error)\n}\n\n// UnimplementedMsgServer can be embedded to have forward compatible implementations.\ntype UnimplementedMsgServer struct{}\n\nfunc (*UnimplementedMsgServer) Cyberlink(ctx context.Context, req *MsgCyberlink) (*MsgCyberlinkResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Cyberlink not implemented\")\n}\n\nfunc RegisterMsgServer(s grpc1.Server, srv MsgServer) {\n\ts.RegisterService(&_Msg_serviceDesc, srv)\n}\n\nfunc _Msg_Cyberlink_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgCyberlink)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).Cyberlink(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.graph.v1beta1.Msg/Cyberlink\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).Cyberlink(ctx, req.(*MsgCyberlink))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _Msg_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"cyber.graph.v1beta1.Msg\",\n\tHandlerType: (*MsgServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Cyberlink\",\n\t\t\tHandler:    _Msg_Cyberlink_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"cyber/graph/v1beta1/tx.proto\",\n}\n\nfunc (m *MsgCyberlink) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgCyberlink) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgCyberlink) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Links) > 0 {\n\t\tfor iNdEx := len(m.Links) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.Links[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0x12\n\t\t}\n\t}\n\tif len(m.Neuron) > 0 {\n\t\ti -= len(m.Neuron)\n\t\tcopy(dAtA[i:], m.Neuron)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Neuron)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgCyberlinkResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgCyberlinkResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgCyberlinkResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintTx(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovTx(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *MsgCyberlink) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Neuron)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tif len(m.Links) > 0 {\n\t\tfor _, e := range m.Links {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovTx(uint64(l))\n\t\t}\n\t}\n\treturn n\n}\n\nfunc (m *MsgCyberlinkResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc sovTx(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozTx(x uint64) (n int) {\n\treturn sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *MsgCyberlink) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgCyberlink: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgCyberlink: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Neuron\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Neuron = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Links\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Links = append(m.Links, Link{})\n\t\t\tif err := m.Links[len(m.Links)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgCyberlinkResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgCyberlinkResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgCyberlinkResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipTx(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthTx\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupTx\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthTx\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthTx        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowTx          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupTx = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/graph/types/types.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/graph/v1beta1/types.proto\n\npackage types\n\nimport (\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype Link struct {\n\tFrom string `protobuf:\"bytes,1,opt,name=from,proto3\" json:\"from,omitempty\"`\n\tTo   string `protobuf:\"bytes,2,opt,name=to,proto3\" json:\"to,omitempty\"`\n}\n\nfunc (m *Link) Reset()         { *m = Link{} }\nfunc (m *Link) String() string { return proto.CompactTextString(m) }\nfunc (*Link) ProtoMessage()    {}\nfunc (*Link) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_71ff86aea4c7c827, []int{0}\n}\n\nfunc (m *Link) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *Link) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_Link.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *Link) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Link.Merge(m, src)\n}\n\nfunc (m *Link) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *Link) XXX_DiscardUnknown() {\n\txxx_messageInfo_Link.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Link proto.InternalMessageInfo\n\nfunc init() {\n\tproto.RegisterType((*Link)(nil), \"cyber.graph.v1beta1.Link\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/graph/v1beta1/types.proto\", fileDescriptor_71ff86aea4c7c827) }\n\nvar fileDescriptor_71ff86aea4c7c827 = []byte{\n\t// 195 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0xae, 0x4c, 0x4a,\n\t0x2d, 0xd2, 0x4f, 0x2f, 0x4a, 0x2c, 0xc8, 0xd0, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4,\n\t0x2f, 0xa9, 0x2c, 0x48, 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x06, 0x2b, 0xd0,\n\t0x03, 0x2b, 0xd0, 0x83, 0x2a, 0x90, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0xcb, 0xeb, 0x83, 0x58,\n\t0x10, 0xa5, 0x4a, 0x26, 0x5c, 0x2c, 0x3e, 0x99, 0x79, 0xd9, 0x42, 0x42, 0x5c, 0x2c, 0x69, 0x45,\n\t0xf9, 0xb9, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x60, 0xb6, 0x10, 0x1f, 0x17, 0x53, 0x49,\n\t0xbe, 0x04, 0x13, 0x58, 0x84, 0xa9, 0x24, 0xdf, 0x8a, 0xa3, 0x63, 0x81, 0x3c, 0xc3, 0x8b, 0x05,\n\t0xf2, 0x0c, 0x4e, 0x9e, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c,\n\t0xe3, 0x84, 0xc7, 0x72, 0x0c, 0x17, 0x1e, 0xcb, 0x31, 0xdc, 0x78, 0x2c, 0xc7, 0x10, 0xa5, 0x9f,\n\t0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x0f, 0x76, 0x45, 0x72, 0x7e, 0x5e,\n\t0x7a, 0x51, 0x6a, 0x71, 0xb1, 0x7e, 0x7a, 0xbe, 0x2e, 0xc4, 0xdd, 0x15, 0x50, 0x97, 0x83, 0x5d,\n\t0x9c, 0xc4, 0x06, 0x76, 0x87, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x2c, 0x2d, 0xc4, 0xc5, 0xd5,\n\t0x00, 0x00, 0x00,\n}\n\nfunc (m *Link) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *Link) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *Link) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.To) > 0 {\n\t\ti -= len(m.To)\n\t\tcopy(dAtA[i:], m.To)\n\t\ti = encodeVarintTypes(dAtA, i, uint64(len(m.To)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.From) > 0 {\n\t\ti -= len(m.From)\n\t\tcopy(dAtA[i:], m.From)\n\t\ti = encodeVarintTypes(dAtA, i, uint64(len(m.From)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintTypes(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovTypes(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *Link) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.From)\n\tif l > 0 {\n\t\tn += 1 + l + sovTypes(uint64(l))\n\t}\n\tl = len(m.To)\n\tif l > 0 {\n\t\tn += 1 + l + sovTypes(uint64(l))\n\t}\n\treturn n\n}\n\nfunc sovTypes(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozTypes(x uint64) (n int) {\n\treturn sovTypes(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *Link) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: Link: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: Link: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field From\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.From = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field To\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.To = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTypes(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipTypes(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowTypes\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupTypes\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthTypes\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthTypes        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowTypes          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupTypes = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/graph/wasm/interface.go",
    "content": "package wasm\n\nimport (\n\t\"encoding/json\"\n\n\terrorsmod \"cosmossdk.io/errors\"\n\n\twasmvmtypes \"github.com/CosmWasm/wasmvm/types\"\n\tauthkeeper \"github.com/cosmos/cosmos-sdk/x/auth/keeper\"\n\n\tpluginstypes \"github.com/cybercongress/go-cyber/v7/plugins/types\"\n\tbandwidthkeeper \"github.com/cybercongress/go-cyber/v7/x/bandwidth/keeper\"\n\tcyberbankkeeper \"github.com/cybercongress/go-cyber/v7/x/cyberbank/keeper\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/graph/keeper\"\n)\n\ntype Messenger struct {\n\tgk *keeper.GraphKeeper\n\tik *keeper.IndexKeeper\n\tak *authkeeper.AccountKeeper\n\tbk *cyberbankkeeper.IndexedKeeper\n\tbm *bandwidthkeeper.BandwidthMeter\n}\n\nfunc NewMessenger(\n\tgk *keeper.GraphKeeper,\n\tik *keeper.IndexKeeper,\n\tak *authkeeper.AccountKeeper,\n\tbk *cyberbankkeeper.IndexedKeeper,\n\tbm *bandwidthkeeper.BandwidthMeter,\n) *Messenger {\n\treturn &Messenger{\n\t\tgk,\n\t\tik,\n\t\tak,\n\t\tbk,\n\t\tbm,\n\t}\n}\n\nfunc (m *Messenger) HandleMsg(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg pluginstypes.CyberMsg) ([]sdk.Event, [][]byte, error) {\n\tswitch {\n\tcase msg.Cyberlink != nil:\n\t\tif msg.Cyberlink.Neuron != contractAddr.String() {\n\t\t\treturn nil, nil, wasmvmtypes.InvalidRequest{Err: \"cyberlink wrong neuron\"}\n\t\t}\n\n\t\tmsgServer := keeper.NewMsgServerImpl(m.gk, m.ik, *m.ak, m.bk, m.bm)\n\n\t\tif err := msg.Cyberlink.ValidateBasic(); err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed validating msg\")\n\t\t}\n\n\t\tres, err := msgServer.Cyberlink(\n\t\t\tsdk.WrapSDKContext(ctx),\n\t\t\tmsg.Cyberlink,\n\t\t)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"cyberlink msg\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(*res)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed to serialize cyberlink response\")\n\t\t}\n\n\t\tresp := [][]byte{responseBytes}\n\n\t\treturn nil, resp, nil\n\tdefault:\n\t\treturn nil, nil, pluginstypes.ErrHandleMsg\n\t}\n}\n\ntype Querier struct {\n\t*keeper.GraphKeeper\n}\n\nfunc NewWasmQuerier(keeper *keeper.GraphKeeper) *Querier {\n\treturn &Querier{keeper}\n}\n\nfunc (querier *Querier) HandleQuery(ctx sdk.Context, query pluginstypes.CyberQuery) ([]byte, error) {\n\tswitch {\n\tcase query.GraphStats != nil:\n\t\tres, err := querier.GraphKeeper.GraphStats(ctx, query.GraphStats)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to get graph stats\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(res)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to serialize graph stats response\")\n\t\t}\n\t\treturn responseBytes, nil\n\n\tdefault:\n\t\treturn nil, pluginstypes.ErrHandleQuery\n\t}\n}\n"
  },
  {
    "path": "x/grid/client/cli/query.go",
    "content": "package cli\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/cosmos/cosmos-sdk/client/flags\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/grid/types\"\n)\n\nfunc GetQueryCmd() *cobra.Command {\n\tqueryCmd := &cobra.Command{\n\t\tUse:                        types.ModuleName,\n\t\tShort:                      fmt.Sprintf(\"Querying commands for the %s module\", types.ModuleName),\n\t\tDisableFlagParsing:         true,\n\t\tSuggestionsMinimumDistance: 2,\n\t\tRunE:                       client.ValidateCmd,\n\t}\n\n\tqueryCmd.AddCommand(\n\t\tGetCmdQueryParams(),\n\t\tGetCmdQuerySourceRoutes(),\n\t\tGetCmdQueryDestinationRoutes(),\n\t\tGetCmdQuerySourceRoutedEnergy(),\n\t\tGetCmdQueryDestinationRoutedEnergy(),\n\t\tGetCmdQueryRoute(),\n\t\tGetCmdQueryRoutes(),\n\t)\n\n\treturn queryCmd\n}\n\nfunc GetCmdQueryParams() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"params\",\n\t\tShort: \"Query the current grid module parameters information\",\n\t\tArgs:  cobra.NoArgs,\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tres, err := queryClient.Params(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryParamsRequest{},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQuerySourceRoutes() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"routes-from [source]\",\n\t\tShort: \"Query all grid routes that made from source account\",\n\t\tArgs:  cobra.ExactArgs(1),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tsrc, err := sdk.AccAddressFromBech32(args[0])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tres, err := queryClient.SourceRoutes(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QuerySourceRequest{Source: src.String()},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryDestinationRoutes() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"routes-to [destination]\",\n\t\tShort: \"Query all grid routes that routed to destination account\",\n\t\tArgs:  cobra.ExactArgs(1),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tdst, err := sdk.AccAddressFromBech32(args[0])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tres, err := queryClient.DestinationRoutes(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryDestinationRequest{Destination: dst.String()},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQuerySourceRoutedEnergy() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"routed-from [source]\",\n\t\tShort: \"Query grid value that routed from source account\",\n\t\tArgs:  cobra.ExactArgs(1),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tsrc, err := sdk.AccAddressFromBech32(args[0])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tres, err := queryClient.SourceRoutedEnergy(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QuerySourceRequest{Source: src.String()},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryDestinationRoutedEnergy() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"routed-to [destination]\",\n\t\tShort: \"Query grid value that routed to destination account\",\n\t\tArgs:  cobra.ExactArgs(1),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tdst, err := sdk.AccAddressFromBech32(args[0])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tres, err := queryClient.DestinationRoutedEnergy(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryDestinationRequest{Destination: dst.String()},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryRoute() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"route  [source] [destination]\",\n\t\tShort: \"Query grid route that routes for given source and destination accounts\",\n\t\tArgs:  cobra.ExactArgs(2),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tsrc, err := sdk.AccAddressFromBech32(args[0])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tdst, err := sdk.AccAddressFromBech32(args[1])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tres, err := queryClient.Route(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryRouteRequest{\n\t\t\t\t\tSource:      src.String(),\n\t\t\t\t\tDestination: dst.String(),\n\t\t\t\t},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryRoutes() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"routes\",\n\t\tShort: \"Query all grid routes\",\n\t\tArgs:  cobra.ExactArgs(0),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tpageReq, err := client.ReadPageRequest(cmd.Flags())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tres, err := queryClient.Routes(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryRoutesRequest{\n\t\t\t\t\tPagination: pageReq,\n\t\t\t\t},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n"
  },
  {
    "path": "x/grid/client/cli/tx.go",
    "content": "package cli\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cosmos/cosmos-sdk/client/tx\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/cosmos/cosmos-sdk/client/flags\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/grid/types\"\n)\n\n// GetTxCmd returns the transaction commands for this module\nfunc NewTxCmd() *cobra.Command {\n\ttxCmd := &cobra.Command{\n\t\tUse:                        types.ModuleName,\n\t\tShort:                      fmt.Sprintf(\"%s transactions subcommands\", types.ModuleName),\n\t\tDisableFlagParsing:         true,\n\t\tSuggestionsMinimumDistance: 2,\n\t\tRunE:                       client.ValidateCmd,\n\t}\n\n\ttxCmd.AddCommand(\n\t\tGetCmdCreateRoute(),\n\t\tGetCmdEditRoute(),\n\t\tGetCmdDeleteRoute(),\n\t\tGetCmdEditRouteName(),\n\t)\n\n\treturn txCmd\n}\n\nfunc GetCmdCreateRoute() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"create-route [destination] [name]\",\n\t\tArgs:  cobra.ExactArgs(2),\n\t\tShort: \"Create grid route from your address to destination address with provided name\",\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tsrc := clientCtx.GetFromAddress()\n\t\t\tdst, err := sdk.AccAddressFromBech32(args[0])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tmsg := types.NewMsgCreateRoute(src, dst, args[1])\n\n\t\t\terr = msg.ValidateBasic()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)\n\t\t},\n\t}\n\n\tflags.AddTxFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdEditRoute() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"edit-route [destination] [value]\",\n\t\tArgs:  cobra.ExactArgs(2),\n\t\tShort: \"Set value of grid route to destination address\",\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tamount, err := sdk.ParseCoinNormalized(args[1])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tsrc := clientCtx.GetFromAddress()\n\t\t\tdst, err := sdk.AccAddressFromBech32(args[0])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tmsg := types.NewMsgEditRoute(src, dst, amount)\n\n\t\t\terr = msg.ValidateBasic()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)\n\t\t},\n\t}\n\n\tflags.AddTxFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdDeleteRoute() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"delete-route [destination]\",\n\t\tArgs:  cobra.ExactArgs(1),\n\t\tShort: \"Delete your grid route to given destination address\",\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tsrc := clientCtx.GetFromAddress()\n\t\t\tdst, err := sdk.AccAddressFromBech32(args[0])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tmsg := types.NewMsgDeleteRoute(src, dst)\n\t\t\terr = msg.ValidateBasic()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)\n\t\t},\n\t}\n\n\tflags.AddTxFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdEditRouteName() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"edit-route-name [destination] [name]\",\n\t\tArgs:  cobra.ExactArgs(2),\n\t\tShort: \"Edit name of grid route to given destination address\",\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tsrc := clientCtx.GetFromAddress()\n\t\t\tdst, err := sdk.AccAddressFromBech32(args[0])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tmsg := types.NewMsgEditRouteName(src, dst, args[1])\n\n\t\t\terr = msg.ValidateBasic()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)\n\t\t},\n\t}\n\n\tflags.AddTxFlagsToCmd(cmd)\n\n\treturn cmd\n}\n"
  },
  {
    "path": "x/grid/exported/exported.go",
    "content": "package exported\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tparamtypes \"github.com/cosmos/cosmos-sdk/x/params/types\"\n)\n\ntype EnergyKeeper interface {\n\tGetRoutedToEnergy(ctx sdk.Context, delegate sdk.AccAddress) sdk.Coins\n}\n\ntype (\n\tParamSet = paramtypes.ParamSet\n\n\t// Subspace defines an interface that implements the legacy x/params Subspace\n\t// type.\n\t//\n\t// NOTE: This is used solely for migration of x/params managed parameters.\n\tSubspace interface {\n\t\tGetParamSet(ctx sdk.Context, ps ParamSet)\n\t}\n)\n"
  },
  {
    "path": "x/grid/keeper/genesis.go",
    "content": "package keeper\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/grid/types\"\n)\n\nfunc InitGenesis(ctx sdk.Context, k Keeper, data types.GenesisState) {\n\t// TODO check EnergyGrid balance aggregated value on genesis\n\tif err := k.SetParams(ctx, data.Params); err != nil {\n\t\tpanic(err)\n\t}\n\terr := k.SetRoutes(ctx, data.Routes)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc ExportGenesis(ctx sdk.Context, k Keeper) *types.GenesisState {\n\tparams := k.GetParams(ctx)\n\t//routes := k.GetAllRoutes(ctx)\n\t// Create an empty slice of types.Route\n\tvar routes []types.Route\n\n\treturn types.NewGenesisState(params, routes)\n}\n"
  },
  {
    "path": "x/grid/keeper/grpc_query.go",
    "content": "package keeper\n\nimport (\n\t\"context\"\n\n\t\"github.com/cosmos/cosmos-sdk/store/prefix\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/query\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/status\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/grid/types\"\n)\n\nvar _ types.QueryServer = Keeper{}\n\nfunc (k Keeper) Params(goCtx context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\tparams := k.GetParams(ctx)\n\n\treturn &types.QueryParamsResponse{Params: params}, nil\n}\n\nfunc (k Keeper) SourceRoutes(goCtx context.Context, request *types.QuerySourceRequest) (*types.QueryRoutesResponse, error) {\n\tif request == nil {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tif request.Source == \"\" {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"source address cannot be empty\")\n\t}\n\n\taddr, err := sdk.AccAddressFromBech32(request.Source)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\troutes := k.GetSourceRoutes(ctx, addr, 16)\n\n\treturn &types.QueryRoutesResponse{Routes: routes}, nil\n}\n\n// DestinationRoutes TODO add pagination\nfunc (k Keeper) DestinationRoutes(goCtx context.Context, request *types.QueryDestinationRequest) (*types.QueryRoutesResponse, error) {\n\tif request == nil {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tif request.Destination == \"\" {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"destination address cannot be empty\")\n\t}\n\n\taddr, err := sdk.AccAddressFromBech32(request.Destination)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\troutes := k.GetDestinationRoutes(ctx, addr)\n\n\treturn &types.QueryRoutesResponse{Routes: routes}, nil\n}\n\nfunc (k Keeper) DestinationRoutedEnergy(goCtx context.Context, request *types.QueryDestinationRequest) (*types.QueryRoutedEnergyResponse, error) {\n\tif request == nil {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tif request.Destination == \"\" {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"destination address cannot be empty\")\n\t}\n\n\taddr, err := sdk.AccAddressFromBech32(request.Destination)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\troutedEnergy := k.GetRoutedToEnergy(ctx, addr)\n\n\treturn &types.QueryRoutedEnergyResponse{Value: routedEnergy}, nil\n}\n\nfunc (k Keeper) SourceRoutedEnergy(goCtx context.Context, request *types.QuerySourceRequest) (*types.QueryRoutedEnergyResponse, error) {\n\tif request == nil {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tif request.Source == \"\" {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"source address cannot be empty\")\n\t}\n\n\taddr, err := sdk.AccAddressFromBech32(request.Source)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\troutedEnergy := k.GetRoutedFromEnergy(ctx, addr)\n\n\treturn &types.QueryRoutedEnergyResponse{Value: routedEnergy}, nil\n}\n\nfunc (k Keeper) Route(goCtx context.Context, request *types.QueryRouteRequest) (*types.QueryRouteResponse, error) {\n\tif request == nil {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tif request.Source == \"\" {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"source address cannot be empty\")\n\t}\n\tif request.Destination == \"\" {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"destination address cannot be empty\")\n\t}\n\n\tsrc, err := sdk.AccAddressFromBech32(request.Source)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdst, err := sdk.AccAddressFromBech32(request.Destination)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\troute, found := k.GetRoute(ctx, src, dst)\n\tif !found {\n\t\treturn nil, status.Errorf(\n\t\t\tcodes.NotFound,\n\t\t\t\"route with source %s and destination %s not found\",\n\t\t\trequest.Source, request.Destination)\n\t}\n\n\treturn &types.QueryRouteResponse{Route: route}, nil\n}\n\nfunc (k Keeper) Routes(goCtx context.Context, request *types.QueryRoutesRequest) (*types.QueryRoutesResponse, error) {\n\tif request == nil {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tif request.Pagination == nil {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"pagination cannot be empty\")\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\tvar routes types.Routes\n\n\tstore := ctx.KVStore(k.storeKey)\n\troutesStore := prefix.NewStore(store, types.RouteKey)\n\tpageRes, err := query.Paginate(routesStore, request.Pagination, func(key []byte, value []byte) error {\n\t\troute, err := types.UnmarshalRoute(k.cdc, value)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\troutes = append(routes, route)\n\t\treturn nil\n\t})\n\tif err != nil {\n\t\treturn nil, status.Error(codes.Internal, err.Error())\n\t}\n\n\treturn &types.QueryRoutesResponse{Routes: routes, Pagination: pageRes}, nil\n}\n"
  },
  {
    "path": "x/grid/keeper/keeper.go",
    "content": "package keeper\n\nimport (\n\t\"fmt\"\n\tstoretypes \"github.com/cosmos/cosmos-sdk/store/types\"\n\n\t\"github.com/cometbft/cometbft/libs/log\"\n\t\"github.com/cosmos/cosmos-sdk/telemetry\"\n\n\tctypes \"github.com/cybercongress/go-cyber/v7/types\"\n\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/grid/exported\"\n\t\"github.com/cybercongress/go-cyber/v7/x/grid/types\"\n)\n\nvar _ = exported.EnergyKeeper(nil)\n\ntype Keeper struct {\n\tstoreKey      storetypes.StoreKey\n\tcdc           codec.BinaryCodec\n\taccountKeeper types.AccountKeeper\n\tproxyKeeper   types.CyberbankKeeper\n\n\tauthority string\n}\n\nfunc NewKeeper(\n\tcdc codec.BinaryCodec,\n\tkey storetypes.StoreKey,\n\tbk types.CyberbankKeeper,\n\tak types.AccountKeeper,\n\tauthority string,\n) Keeper {\n\tif addr := ak.GetModuleAddress(types.GridPoolName); addr == nil {\n\t\tpanic(fmt.Sprintf(\"%s module account has not been set\", types.GridPoolName))\n\t}\n\n\tkeeper := Keeper{\n\t\tstoreKey:      key,\n\t\tcdc:           cdc,\n\t\tproxyKeeper:   bk,\n\t\taccountKeeper: ak,\n\t\tauthority:     authority,\n\t}\n\treturn keeper\n}\n\n// GetAuthority returns the x/mint module's authority.\nfunc (k Keeper) GetAuthority() string { return k.authority }\n\nfunc (k Keeper) Logger(ctx sdk.Context) log.Logger {\n\treturn ctx.Logger().With(\"module\", fmt.Sprintf(\"x/%s\", types.ModuleName))\n}\n\nfunc (k Keeper) SetParams(ctx sdk.Context, p types.Params) error {\n\tif err := p.Validate(); err != nil {\n\t\treturn err\n\t}\n\n\tstore := ctx.KVStore(k.storeKey)\n\tbz := k.cdc.MustMarshal(&p)\n\tstore.Set(types.ParamsKey, bz)\n\n\treturn nil\n}\n\nfunc (k Keeper) GetParams(ctx sdk.Context) (p types.Params) {\n\tstore := ctx.KVStore(k.storeKey)\n\tbz := store.Get(types.ParamsKey)\n\tif bz == nil {\n\t\treturn p\n\t}\n\n\tk.cdc.MustUnmarshal(bz, &p)\n\treturn p\n}\n\nfunc (k Keeper) CreateEnergyRoute(ctx sdk.Context, src, dst sdk.AccAddress, name string) error {\n\tif src.Equals(dst) {\n\t\treturn types.ErrSelfRoute\n\t}\n\n\t_, found := k.GetRoute(ctx, src, dst)\n\tif found {\n\t\treturn types.ErrRouteExist\n\t}\n\n\troutes := k.GetSourceRoutes(ctx, src, k.MaxSourceRoutes(ctx))\n\tif uint32(len(routes)) == k.MaxSourceRoutes(ctx) {\n\t\treturn types.ErrMaxRoutes\n\t}\n\n\tacc := k.accountKeeper.GetAccount(ctx, dst)\n\tif acc == nil {\n\t\tacc = k.accountKeeper.NewAccountWithAddress(ctx, dst)\n\t\tk.accountKeeper.SetAccount(ctx, acc)\n\t}\n\n\tk.SetRoute(ctx, src, dst, types.NewRoute(src, dst, name, sdk.Coins{}))\n\n\tk.proxyKeeper.OnCoinsTransfer(ctx, nil, dst)\n\n\treturn nil\n}\n\nfunc (k Keeper) EditEnergyRoute(ctx sdk.Context, src, dst sdk.AccAddress, value sdk.Coin) error {\n\tdefer telemetry.IncrCounter(1.0, types.ModuleName, \"grid routed\")\n\n\troute, found := k.GetRoute(ctx, src, dst)\n\tif !found {\n\t\treturn types.ErrRouteNotExist\n\t}\n\n\tenergy := k.GetRoutedToEnergy(ctx, dst)\n\n\tif !route.Value.IsValid() {\n\t\tcoins := sdk.NewCoins(value)\n\t\tif err := k.proxyKeeper.SendCoinsFromAccountToModule(ctx, src, types.GridPoolName, coins); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tk.SetRoutedEnergy(ctx, dst, sdk.NewCoins(value))\n\t} else {\n\t\tif value.Amount.GT(route.Value.AmountOf(value.Denom)) {\n\t\t\tdiff := sdk.NewCoin(value.Denom, value.Amount.Sub(route.Value.AmountOf(value.Denom)))\n\t\t\tcoins := sdk.NewCoins(diff)\n\n\t\t\tif err := k.proxyKeeper.SendCoinsFromAccountToModule(ctx, src, types.GridPoolName, coins); err != nil {\n\t\t\t\treturn err // should never happen\n\t\t\t}\n\t\t\tk.SetRoutedEnergy(ctx, dst, energy.Sort().Add(diff))\n\t\t} else {\n\t\t\tdiff := sdk.NewCoin(value.Denom, route.Value.AmountOf(value.Denom).Sub(value.Amount))\n\t\t\tcoins := sdk.NewCoins(diff)\n\n\t\t\tif err := k.proxyKeeper.SendCoinsFromModuleToAccount(ctx, types.GridPoolName, src, coins); err != nil {\n\t\t\t\treturn err // should never happen\n\t\t\t}\n\n\t\t\tk.SetRoutedEnergy(ctx, dst, energy.Sort().Sub(coins...))\n\t\t}\n\t}\n\n\tampers := route.Value.AmountOf(ctypes.AMPERE)\n\tvolts := route.Value.AmountOf(ctypes.VOLT)\n\n\tvar newValues sdk.Coins\n\tif value.Denom == ctypes.VOLT {\n\t\tnewValues = sdk.NewCoins(value, sdk.NewCoin(ctypes.AMPERE, ampers))\n\t} else {\n\t\tnewValues = sdk.NewCoins(sdk.NewCoin(ctypes.VOLT, volts), value)\n\t}\n\n\tk.SetRoute(ctx, src, dst, types.NewRoute(src, dst, route.Name, newValues.Sort()))\n\n\tk.proxyKeeper.OnCoinsTransfer(ctx, src, dst)\n\n\treturn nil\n}\n\nfunc (k Keeper) DeleteEnergyRoute(ctx sdk.Context, src, dst sdk.AccAddress) error {\n\troute, found := k.GetRoute(ctx, src, dst)\n\tif !found {\n\t\treturn types.ErrRouteNotExist\n\t}\n\n\tif err := k.proxyKeeper.SendCoinsFromModuleToAccount(ctx, types.GridPoolName, src, route.Value); err != nil {\n\t\treturn err // should never happen\n\t}\n\n\tenergy := k.GetRoutedToEnergy(ctx, dst)\n\tk.SetRoutedEnergy(ctx, dst, energy.Sub(route.Value...))\n\n\tk.RemoveRoute(ctx, src, dst)\n\n\tk.proxyKeeper.OnCoinsTransfer(ctx, src, dst)\n\n\treturn nil\n}\n\nfunc (k Keeper) EditEnergyRouteName(ctx sdk.Context, src, dst sdk.AccAddress, name string) error {\n\troute, found := k.GetRoute(ctx, src, dst)\n\tif !found {\n\t\treturn types.ErrRouteNotExist\n\t}\n\n\tk.SetRoute(ctx, src, dst, types.NewRoute(src, dst, name, route.Value))\n\n\treturn nil\n}\n\nfunc (k Keeper) SetRoutes(ctx sdk.Context, routes types.Routes) error {\n\t// TODO add check that source and destinations addresses already exist\n\tfor _, route := range routes {\n\t\tsrc, err := sdk.AccAddressFromBech32(route.Source)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdst, err := sdk.AccAddressFromBech32(route.Destination)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tenergy := k.GetRoutedToEnergy(ctx, dst)\n\t\tif !energy.IsValid() {\n\t\t\tk.SetRoutedEnergy(ctx, dst, route.Value)\n\t\t} else {\n\t\t\tk.SetRoutedEnergy(ctx, dst, energy.Add(route.Value...))\n\t\t}\n\n\t\tk.SetRoute(ctx, src, dst, types.NewRoute(src, dst, route.Name, route.Value))\n\t\tk.proxyKeeper.OnCoinsTransfer(ctx, src, dst)\n\t}\n\treturn nil\n}\n\nfunc (k Keeper) MaxSourceRoutes(ctx sdk.Context) (res uint32) {\n\treturn k.GetParams(ctx).MaxRoutes\n}\n\nfunc (k Keeper) SetRoute(ctx sdk.Context, src, dst sdk.AccAddress, route types.Route) {\n\tstore := ctx.KVStore(k.storeKey)\n\n\tstore.Set(types.GetRouteKey(src, dst), types.MustMarshalRoute(k.cdc, route))\n}\n\nfunc (k Keeper) RemoveRoute(ctx sdk.Context, src, dst sdk.AccAddress) {\n\tstore := ctx.KVStore(k.storeKey)\n\n\tstore.Delete(types.GetRouteKey(src, dst))\n}\n\nfunc (k Keeper) SetRoutedEnergy(ctx sdk.Context, dst sdk.AccAddress, amount sdk.Coins) {\n\tstore := ctx.KVStore(k.storeKey)\n\tvalue := types.NewValue(amount)\n\n\tstore.Set(types.GetRoutedEnergyByDestinationKey(dst), k.cdc.MustMarshal(&value))\n}\n\nfunc (k Keeper) GetRoute(ctx sdk.Context, src, dst sdk.AccAddress) (route types.Route, found bool) {\n\tstore := ctx.KVStore(k.storeKey)\n\tkey := types.GetRouteKey(src, dst)\n\n\tvalue := store.Get(key)\n\tif value == nil {\n\t\treturn route, false\n\t}\n\n\troute = types.MustUnmarshalRoute(k.cdc, value)\n\n\treturn route, true\n}\n\nfunc (k Keeper) GetAllRoutes(ctx sdk.Context) (routes []types.Route) {\n\tk.IterateAllRoutes(ctx, func(route types.Route) bool {\n\t\troutes = append(routes, route)\n\t\treturn false\n\t})\n\n\treturn routes\n}\n\n// Deprecated: enable after debug with empty routes\nfunc (k Keeper) IterateAllRoutes(ctx sdk.Context, cb func(route types.Route) (stop bool)) {\n\tstore := ctx.KVStore(k.storeKey)\n\n\titerator := sdk.KVStorePrefixIterator(store, types.RouteKey)\n\tdefer iterator.Close()\n\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\troute, err := types.UnmarshalRoute(k.cdc, iterator.Value())\n\t\tif err != nil {\n\t\t\t// TODO fix empty case\n\t\t\t//\"grid\" : {\n\t\t\t//\t\"routes\" : [{\n\t\t\t//\t\t\"destination\" : \"\",\n\t\t\t//\t\t\"value\" : [],\n\t\t\t//\t\t\"source\" : \"\",\n\t\t\t//\t\t\"name\" : \"\"\n\t\t\t//\t}],\n\t\t\t//\t\"params\" : {\n\t\t\t//\t\t\"max_routes\" : 16\n\t\t\t//\t}\n\t\t\t//}\n\t\t\tbreak\n\t\t}\n\t\tif cb(route) {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\nfunc (k Keeper) GetDestinationRoutes(ctx sdk.Context, dst sdk.AccAddress) (routes []types.Route) {\n\tstore := ctx.KVStore(k.storeKey)\n\n\titerator := sdk.KVStorePrefixIterator(store, types.RouteKey)\n\tdefer iterator.Close()\n\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\troute := types.MustUnmarshalRoute(k.cdc, iterator.Value())\n\t\trdst, _ := sdk.AccAddressFromBech32(route.Destination)\n\t\tif rdst.Equals(dst) {\n\t\t\troutes = append(routes, route)\n\t\t}\n\t}\n\n\treturn routes\n}\n\nfunc (k Keeper) GetSourceRoutes(ctx sdk.Context, src sdk.AccAddress, maxRetrieve uint32) (routes []types.Route) {\n\troutes = make([]types.Route, maxRetrieve)\n\tstore := ctx.KVStore(k.storeKey)\n\tsourcePrefixKey := types.GetRoutesKey(src)\n\n\titerator := sdk.KVStorePrefixIterator(store, sourcePrefixKey)\n\tdefer iterator.Close()\n\n\ti := 0\n\tfor ; iterator.Valid() && i < int(maxRetrieve); iterator.Next() {\n\t\troute := types.MustUnmarshalRoute(k.cdc, iterator.Value())\n\t\troutes[i] = route\n\t\ti++\n\t}\n\n\treturn routes[:i] // trim if the array length < maxRetrieve\n}\n\nfunc (k Keeper) GetRoutedToEnergy(ctx sdk.Context, dst sdk.AccAddress) sdk.Coins {\n\tstore := ctx.KVStore(k.storeKey)\n\tbz := store.Get(types.GetRoutedEnergyByDestinationKey(dst))\n\tif bz == nil {\n\t\treturn sdk.Coins{}\n\t}\n\tamount := types.Value{}\n\tk.cdc.MustUnmarshal(bz, &amount)\n\n\treturn amount.Value\n}\n\nfunc (k Keeper) GetRoutedFromEnergy(ctx sdk.Context, src sdk.AccAddress) (amount sdk.Coins) {\n\tstore := ctx.KVStore(k.storeKey)\n\tsourcePrefixKey := types.GetRoutesKey(src)\n\n\titerator := sdk.KVStorePrefixIterator(store, sourcePrefixKey)\n\tamount = sdk.Coins{}\n\n\tdefer iterator.Close()\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tvar route types.Route\n\t\tk.cdc.MustUnmarshal(iterator.Value(), &route)\n\t\tif amount.IsValid() {\n\t\t\tamount = amount.Add(route.Value...)\n\t\t} else {\n\t\t\tamount = route.Value\n\t\t}\n\t}\n\n\treturn amount\n}\n"
  },
  {
    "path": "x/grid/keeper/migrator.go",
    "content": "package keeper\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/grid/exported\"\n\tv2 \"github.com/cybercongress/go-cyber/v7/x/grid/migrations/v2\"\n)\n\n// Migrator is a struct for handling in-place state migrations.\ntype Migrator struct {\n\tkeeper         Keeper\n\tlegacySubspace exported.Subspace\n}\n\nfunc NewMigrator(k Keeper, ss exported.Subspace) Migrator {\n\treturn Migrator{\n\t\tkeeper:         k,\n\t\tlegacySubspace: ss,\n\t}\n}\n\nfunc (m Migrator) Migrate1to2(ctx sdk.Context) error {\n\treturn v2.Migrate(ctx, ctx.KVStore(m.keeper.storeKey), m.legacySubspace, m.keeper.cdc)\n}\n"
  },
  {
    "path": "x/grid/keeper/msg_server.go",
    "content": "package keeper\n\nimport (\n\t\"context\"\n\n\tgovtypes \"github.com/cosmos/cosmos-sdk/x/gov/types\"\n\n\t\"cosmossdk.io/errors\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/grid/types\"\n)\n\ntype msgServer struct {\n\tKeeper\n}\n\nfunc NewMsgServerImpl(\n\tkeeper Keeper,\n) types.MsgServer {\n\treturn &msgServer{\n\t\tkeeper,\n\t}\n}\n\nvar _ types.MsgServer = msgServer{}\n\nfunc (k msgServer) CreateRoute(goCtx context.Context, msg *types.MsgCreateRoute) (*types.MsgCreateRouteResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tsrc, err := sdk.AccAddressFromBech32(msg.Source)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdst, err := sdk.AccAddressFromBech32(msg.Destination)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = k.Keeper.CreateEnergyRoute(ctx, src, dst, msg.Name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\tsdk.EventTypeMessage,\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),\n\t\t\tsdk.NewAttribute(sdk.AttributeKeySender, msg.Source),\n\t\t),\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeCreateRoute,\n\t\t\tsdk.NewAttribute(types.AttributeKeySource, msg.Source),\n\t\t\tsdk.NewAttribute(types.AttributeKeyDestination, msg.Destination),\n\t\t\tsdk.NewAttribute(types.AttributeKeyName, msg.Name),\n\t\t),\n\t})\n\n\treturn &types.MsgCreateRouteResponse{}, nil\n}\n\nfunc (k msgServer) EditRoute(goCtx context.Context, msg *types.MsgEditRoute) (*types.MsgEditRouteResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tsrc, err := sdk.AccAddressFromBech32(msg.Source)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdst, err := sdk.AccAddressFromBech32(msg.Destination)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = k.Keeper.EditEnergyRoute(ctx, src, dst, msg.Value)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\tsdk.EventTypeMessage,\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),\n\t\t\tsdk.NewAttribute(sdk.AttributeKeySender, msg.Source),\n\t\t),\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeEditRoute,\n\t\t\tsdk.NewAttribute(types.AttributeKeySource, msg.Source),\n\t\t\tsdk.NewAttribute(types.AttributeKeyDestination, msg.Destination),\n\t\t\tsdk.NewAttribute(types.AttributeKeyValue, msg.Value.String()),\n\t\t),\n\t})\n\n\treturn &types.MsgEditRouteResponse{}, nil\n}\n\nfunc (k msgServer) DeleteRoute(goCtx context.Context, msg *types.MsgDeleteRoute) (*types.MsgDeleteRouteResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tsrc, err := sdk.AccAddressFromBech32(msg.Source)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdst, err := sdk.AccAddressFromBech32(msg.Destination)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = k.Keeper.DeleteEnergyRoute(ctx, src, dst)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\tsdk.EventTypeMessage,\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),\n\t\t\tsdk.NewAttribute(sdk.AttributeKeySender, msg.Source),\n\t\t),\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeDeleteRoute,\n\t\t\tsdk.NewAttribute(types.AttributeKeySource, msg.Source),\n\t\t\tsdk.NewAttribute(types.AttributeKeyDestination, msg.Destination),\n\t\t),\n\t})\n\n\treturn &types.MsgDeleteRouteResponse{}, nil\n}\n\nfunc (k msgServer) EditRouteName(goCtx context.Context, msg *types.MsgEditRouteName) (*types.MsgEditRouteNameResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tsrc, err := sdk.AccAddressFromBech32(msg.Source)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdst, err := sdk.AccAddressFromBech32(msg.Destination)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = k.Keeper.EditEnergyRouteName(ctx, src, dst, msg.Name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\tsdk.EventTypeMessage,\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),\n\t\t\tsdk.NewAttribute(sdk.AttributeKeySender, msg.Source),\n\t\t),\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeEditRouteName,\n\t\t\tsdk.NewAttribute(types.AttributeKeySource, msg.Source),\n\t\t\tsdk.NewAttribute(types.AttributeKeyDestination, msg.Destination),\n\t\t\tsdk.NewAttribute(types.AttributeKeyName, msg.Name),\n\t\t),\n\t})\n\n\treturn &types.MsgEditRouteNameResponse{}, nil\n}\n\nfunc (server msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) {\n\tif server.authority != req.Authority {\n\t\treturn nil, errors.Wrapf(govtypes.ErrInvalidSigner, \"invalid authority; expected %s, got %s\", server.authority, req.Authority)\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\tif err := server.SetParams(ctx, req.Params); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &types.MsgUpdateParamsResponse{}, nil\n}\n"
  },
  {
    "path": "x/grid/migrations/v2/migrate.go",
    "content": "package v2\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/grid/exported\"\n\t\"github.com/cybercongress/go-cyber/v7/x/grid/types\"\n)\n\nfunc Migrate(\n\tctx sdk.Context,\n\tstore sdk.KVStore,\n\tlegacySubspace exported.Subspace,\n\tcdc codec.BinaryCodec,\n) error {\n\tvar currParams types.Params\n\tlegacySubspace.GetParamSet(ctx, &currParams)\n\n\tif err := currParams.Validate(); err != nil {\n\t\treturn err\n\t}\n\n\tbz := cdc.MustMarshal(&currParams)\n\tstore.Set(types.ParamsKey, bz)\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/grid/module.go",
    "content": "package energy\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\tcodectypes \"github.com/cosmos/cosmos-sdk/codec/types\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/runtime\"\n\t\"github.com/spf13/cobra\"\n\n\tabci \"github.com/cometbft/cometbft/abci/types\"\n\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/module\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/grid/client/cli\"\n\t\"github.com/cybercongress/go-cyber/v7/x/grid/exported\"\n\t\"github.com/cybercongress/go-cyber/v7/x/grid/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/grid/types\"\n)\n\nvar (\n\t_ module.AppModule      = AppModule{}\n\t_ module.AppModuleBasic = AppModuleBasic{}\n)\n\ntype AppModuleBasic struct {\n\tcdc codec.Codec\n}\n\nfunc (AppModuleBasic) Name() string { return types.ModuleName }\n\n// RegisterLegacyAminoCodec registers the reports module's types for the given codec.\nfunc (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {\n\ttypes.RegisterLegacyAminoCodec(cdc)\n}\n\nfunc (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage {\n\treturn cdc.MustMarshalJSON(types.DefaultGenesisState())\n}\n\nfunc (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, _ client.TxEncodingConfig, bz json.RawMessage) error {\n\tvar data types.GenesisState\n\terr := cdc.UnmarshalJSON(bz, &data)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to unmarshal %s genesis state: %w\", types.ModuleName, err)\n\t}\n\treturn types.ValidateGenesis(data)\n}\n\nfunc (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) {\n\tif err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc (AppModuleBasic) GetTxCmd() *cobra.Command {\n\treturn cli.NewTxCmd()\n}\n\nfunc (AppModuleBasic) GetQueryCmd() *cobra.Command {\n\treturn cli.GetQueryCmd()\n}\n\nfunc (AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) {\n\ttypes.RegisterInterfaces(registry)\n}\n\ntype AppModule struct {\n\tAppModuleBasic\n\n\tkeeper         keeper.Keeper\n\tlegacySubspace exported.Subspace\n}\n\nfunc NewAppModule(\n\tcdc codec.Codec,\n\tk keeper.Keeper,\n\tss exported.Subspace,\n) AppModule {\n\treturn AppModule{\n\t\tAppModuleBasic: AppModuleBasic{cdc: cdc},\n\t\tkeeper:         k,\n\t\tlegacySubspace: ss,\n\t}\n}\n\nfunc (AppModule) Name() string { return types.ModuleName }\n\nfunc (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {}\n\nfunc (am AppModule) RegisterServices(cfg module.Configurator) {\n\ttypes.RegisterQueryServer(cfg.QueryServer(), am.keeper)\n\ttypes.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper))\n\n\tm := keeper.NewMigrator(am.keeper, am.legacySubspace)\n\tif err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil {\n\t\tpanic(fmt.Sprintf(\"failed to migrate x/%s from version 1 to 2: %v\", types.ModuleName, err))\n\t}\n}\n\nfunc (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate {\n\t// TODO add validation of grid balance in genesis\n\tvar genesisState types.GenesisState\n\tcdc.MustUnmarshalJSON(data, &genesisState)\n\tkeeper.InitGenesis(ctx, am.keeper, genesisState)\n\treturn []abci.ValidatorUpdate{}\n}\n\nfunc (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage {\n\tgs := keeper.ExportGenesis(ctx, am.keeper)\n\treturn cdc.MustMarshalJSON(gs)\n}\n\nfunc (am AppModule) ConsensusVersion() uint64 {\n\treturn 2\n}\n\nfunc (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {}\n\nfunc (am AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate {\n\treturn []abci.ValidatorUpdate{}\n}\n"
  },
  {
    "path": "x/grid/spec/00_concepts.md",
    "content": "# Concepts\n\n## Routes\nThe route is an energy route that routes Volts (changing cyberlinks bandwidth of destination) and Amperes (changing graph power of destination) to the given account.\n\nThe route is consists of a source, destination, value (volts and amperes), and alias.\n\nAccount or contract may only have fixed amount routes that adjust with the `MaxRoutes` parameter with network governance.\n\n## Routing of Energy\n\n- routing of volts will increase or decrease the bandwidth of the dedicated account\n    - onboard new neurons to a network allowing creating of cyberlinks\n    - adjust maximum cyberlinks rate of given dedicated account\n    - adjust maximum cyberlinks rate of a given business\n    - adjust maximum cyberlinks rate of a given community\n- routing of amperes will increase or decrease graph power of dedicated account\n    - onboard new neurons to a network allowing change ranks of knowledge graph\n    - adjusting ranks of personal knowledge subgraph\n    - adjusting ranks of business knowledge subgraph\n    - adjusting ranks of community knowledge subgraph\n- routing of volts and amperes will change your personal balance\n    - routed volts and amperes will be sent to the `EnergyGrid` account\n    - routed volts and amperes will be sent back to your account from the `EnergyGrid` account\n\n## Graph Circuits\nGraph circuit is a bundle of routes of a given account.\nThe circuit allows an agent to dynamically reflect and affect what is going on in the knowledge graph.\nAll agent's graph circuits are formed global network circuit.\n\n## Energy Grid\nEnergy flows through the global network's circuit and forms a global energy grid.\n\n## Accounting\nWhile editing the route, you choose what value to SET, the target value of the route that you would like to be after messages will be applied. You will send tokens if you increase route value and will receive if decreasing.\n\n\n\n"
  },
  {
    "path": "x/grid/spec/01_api.md",
    "content": "# API\n\n# REST\n\n| Path                                  | Parameters    | Description    |\n| --------------------------------------| ------------- | ------------------ |\n| /energy/parameters                    |                     | get module params                          |\n| /energy/{%s}/source_routes            | {sourceAddress}     | get routes from source                     |\n| /energy/{%s}/destination_routes       | {destinationAddress}| get routes to destination                  |\n| /energy/{%s}/source_routed_energy     | {sourceAddress}     | get routed total energy from source        |\n| /energy/{%s}/destination_routed_energy| {destinationAddress}| get routed total energy to destination     |\n| /energy/route/{%s}/{%s}               | {sourceAddress} and {destinationAddress} | get given route information |\n| /energy/routes                        | page and limit      | get all routes                             |\n\n# GRPC\n\n| Path                                  | Parameters    | Description    |\n| --------------------------------------| ------------- | ------------------ |\n| /cyber/energy/v1beta1/energy/params                   |                     | get module params                          |\n| /cyber/energy/v1beta1/energy/source_routes            | {sourceAddress}     | get routes from source                     |\n| /cyber/energy/v1beta1/energy/destination_routes       | {destinationAddress}| get routes to destination                  |\n| /cyber/energy/v1beta1/energy/destination_routed_energy| {sourceAddress}     | get routed total energy from source        |\n| /cyber/energy/v1beta1/energy/source_routed_energy     | {destinationAddress}| get routed total energy to destination     |\n| /cyber/energy/v1beta1/energy/route                    | {sourceAddress} and {destinationAddress} | get given route information |\n| /cyber/energy/v1beta1/energy/routes                   | page and limit      | get all routes      "
  },
  {
    "path": "x/grid/spec/02_state.md",
    "content": "# State\n\n## Route\n\nRoute is used for tracking amount of volts and amperes routed to given account.\n\nRoute type has the following structure:\n```\ntype Route struct {\n    source         string       // source account address, route from\n    destination    string       // destination account address, route to\n    alias          string       // releated alias or tag\n    value          []sdk.Coin   // amount of volts and amperes in this route\n}\n```\n\n## Value\nValue is used to store up-to-date summarized value of all routes routed to given destination.\n\n```\ntype Value struct {\n    value          []sdk.Coin   // amount of volts and amperes in this route\n}\n```\n\n-------\n\n## Keys\n\n- Route: `0x00 | Source | Destination -> ProtocolBuffer(Route)`\n- Value: `0x01 | Destination -> ProtocolBuffer(Value)`\n- ModuleName, RouterKey, StoreKey: `energy`\n- EnergyPoolName: `energy_grid`"
  },
  {
    "path": "x/grid/spec/03_state_transitions.md",
    "content": "# State Transitions\n\nThese messages (Msg) in the energy module trigger state transitions.\n\n```\nValue may represents {V}, {A} and {A,V}\n\nRoute Key-Value storage is `0x00 | Source | Destination -> ProtocolBuffer(Route)`\n\nValue Key-Value storage is `0x01 | Destination -> ProtocolBuffer(Value)`\n```\n\n## Route creation\n1. Save destination account if account not already exist in storage (sdk's account keeper)\n2. Save route with given source, destination, alias and empty route value if route not already exist\n3. Call `OnCoinsTransfer` cyberbank's module hook to trigger index of balances to update with destination account (not storage)\n\n## Route set\n1. If route have zero value than escrow new value into `EnergyGrid` account\n2. If route have old value more than new value to set than send `SendCoinsFromModuleToAccount` from `EnergyGrid` account to source account difference between old and new values (old-new)\n3. If route have old value less than new value to set than escrow with `SendCoinsFromAccountToModule` from source account to `EnergyGrid` account difference between new and old values (new-old)\n4. Update routed to destination energy value (add of sub value)\n5. Update route with updated value\n6. Call `OnCoinsTransfer` cyberbank's module hook to trigger index of balances to update with source and destination accounts (not storage)\n\n## Route's alias edit\n1. Update route with new alias\n\n## Route remove\n1. Send `SendCoinsFromModuleToAccount` from `EnergyGrid` account to source account route value (volts and amperes)\n2. Update routed to destination energy value (sub value)\n3. Remove route\n4. Call `OnCoinsTransfer` cyberbank's module hook to trigger index of balances to update with source and destination accounts (not storage)\n\n## Import routes on genesis\n1. Initialize or update (add) routed to destination value\n2. Set route\n3. Call `OnCoinsTransfer` cyberbank's module hook to trigger index of balances to update with source and destination accounts (not storage)"
  },
  {
    "path": "x/grid/spec/04_messages.md",
    "content": "# Messages\n\nMessages (Msg) are objects that trigger state transitions. \nMsgs are wrapped in transactions (Txs) that clients submit to the network. \nThe Cosmos SDK wraps and unwraps energy module messages from transactions.\n\n## MsgCreateRoute\n\nA route is created with zero initial value with the `MsgCreateRoute` message.\n\n```go\ntype MsgCreateRoute struct {\n    source       string     // account address of the origin of this message\n    destination  string     // account address routing to\n    alias        string     // related alias or tag\n}\n```\n\n### Validity Checks\n\nValidity checks are performed for MsgCreatePool messages. The transaction that is triggered with `MsgCreateRoute` fails if:\n\n- Stateless\n    - if msg.Source is not valid address\n    - if msg.Destination is not valid address\n    - if msg.Alias is equal 0 or more than 32 bytes\n- Stateful \n    - if route with given msg.Source and msg.Destination exist\n    - if total amount of routes from msg.Source in store more than or equal max_routes param.\n\n## MsgEditRoute\n\nSET value (volts or amperes) to given route with the `MsgEditRoute` message.\n\n```go\ntype MsgEditRoute struct {\n    source       string       // account address of the origin of this message\n    destination  string       // account address editing to\n    value        sdk.Coin     // value volts are amperes to set\n}\n```\n\nNote: SET means that you are setting value of volts and amperes to be routed to. \nDepending of the state of the given route msg.Source will need to provide more coins (if value increased) to `EnergyGrid` or will receive coins (if value decreased) from `EnergyGrid`.\n\n### Validity Checks\n\nValidity checks are performed for MsgEditRoute messages. The transaction that is triggered with `MsgEditRoute` fails if:\n\n- Stateless\n    - if msg.Source is not valid address\n    - if msg.Destination is not valid address\n    - if msg.Value denom is not equal denoms of volts or amperes\n- Stateful\n    - if Route with given msg.Source and msg.Destination not exist\n    - if the balance of `Source` does not have enough amount of coins for `SendCoinsFromAccountToModule` to `EnergyGrid`\n\n## MsgDeleteRoute\n\nDelete the given route with the `MsgDeleteRoute` message.\n\n```go\ntype MsgDeleteRoute struct {\n    source       string       // account address of the origin of this message\n    destination  string       // account address deleting to\n}\n```\n\n### Validity Checks\n\nValidity checks are performed for MsgDeleteRoute messages. The transaction that is triggered with `MsgDeleteRoute` fails if:\n\n- Stateless\n    - if msg.Source is not valid address\n    - if msg.Destination is not valid address\n- Stateful\n    - if Route with given msg.Source and msg.Destination not exist\n\n## MsgEditRouteAlias\n\nSET value (volts or amperes) to given route with the `MsgEditRoute` message.\n\n```go\ntype MsgEditRouteAlias struct {\n    source       string       // account address of the origin of this message\n    destination  string       // account address editing to \n    alias        string       // new related alias or tag\n}\n```\n\n### Validity Checks\n\nValidity checks are performed for MsgEditRoute messages. The transaction that is triggered with `MsgEditRoute` fails if:\n\n- Stateless\n    - if msg.Source is not valid address\n    - if msg.Destination is not valid address\n    - if msg.Alias is equal 0 or more than 32 bytes\n- Stateful\n    - if Route with given msg.Source and msg.Destination not exist\n"
  },
  {
    "path": "x/grid/spec/05_events.md",
    "content": "# Events\n\nThe energy module emits the following events:\n\n## Msg's\n\n### MsgCreateRoute\n| Type             | Attribute Key | Attribute Value    |\n| ---------------- | ------------- | ------------------ |\n| message          | module        | energy             |\n| message          | action        | create_route       |\n| create_route     | source        | {sourceAddress}    |\n| create_route     | destination   | {destinationAddress} |\n| create_route     | alias         | {alias}            |\n\n### MsgEditRoute\n| Type             | Attribute Key | Attribute Value    |\n| ---------------- | ------------- | ------------------ |\n| message          | module        | energy             |\n| message          | action        | edit_route         |\n| edit_route       | source        | {sourceAddress}    |\n| edit_route       | destination   | {destinationAddress} |\n| edit_route       | value         | {value}            |\n\n### MsgDeleteRoute\n| Type             | Attribute Key | Attribute Value    |\n| ---------------- | ------------- | ------------------ |\n| message          | module        | energy             |\n| message          | action        | delete_route       |\n| delete_route     | source        | {sourceAddress}    |\n| delete_route     | destination   | {destinationAddress} |\n\n### MsgEditRouteAlias\n| Type             | Attribute Key | Attribute Value    |\n| ---------------- | ------------- | ------------------ |\n| message          | module        | energy             |\n| message          | action        | edit_route_alias   |\n| edit_route_alias | source        | {sourceAddress}    |\n| edit_route_alias | destination   | {destinationAddress} |\n| edit_route_alias | alias         | {alias}            |"
  },
  {
    "path": "x/grid/spec/06_params.md",
    "content": "# Parameters\n\nThe energy module contains the following parameters:\n\n| Key                     | Type           | Example                |\n| ----------------------- | -------------- | ---------------------- |\n| MaxRoutes               | uint32         | 8                      |\n\n## Max Routes\nMaximum total number of outgoing routes that can be stored by account and contract."
  },
  {
    "path": "x/grid/spec/07_wasm.md",
    "content": "# WASM LINE\n\nIn addition to the core CosmWasm functionality, the energy module bindings include\n\n## Query support\n- SourceRoutes\n- SourceRoutedEnergy\n- DestinationRoutedEnergy\n- Route\n\n## Messages Encoding\n- MsgCreateRoute\n- MsgEditRoute\n- MsgEditRouteAlias\n- MsgDeleteRoute\n\n--------\n\nHack with [cw-cyber](https://github.com/cybercongress/cw-cyber) library\n"
  },
  {
    "path": "x/grid/spec/08_errors.md",
    "content": "# Errors\n\nThe energy module may return the following errors:\n\n| Type                     | Code  | Description                        |\n| ------------------------ | ------| ---------------------------------- |\n| ErrWrongAlias            | 2     | length of the alias isn't valid    |\n| ErrRouteNotExist         | 3     | the route isn't exist              |\n| ErrRouteExist            | 4     | the route is exist                 |\n| ErrWrongValueDenom       | 5     | the denom of value isn't supported |\n| ErrMaxRoutes             | 6     | max routes are exceeded            |\n| ErrSelfRoute             | 7     | routing to self is not allowed     |"
  },
  {
    "path": "x/grid/spec/09_cli.md",
    "content": "# CLI\n\n## Queries\n\nQuery all energy routes that made from source account:\n```bash\ncyber query grid routes-from [source-addr]\n```\n\nQuery all energy routes that routed to destination account:\n```bash\ncyber query grid routes-to [destination-addr]\n```\n\nQuery energy value that routed from source account:\n```bash\ncyber query grid routed-from [source-addr]\n```\n\nQuery energy value that routed to destination account:\n```bash\ncyber query grid routed-to [destination-addr]\n```\n\nQuery energy route that routes for given source and destination accounts:\n```bash\ncyber query grid route [source-addr] [destination-addr]\n```\n\nQuery all energy routes (pagination flags supported):\n```bash\ncyber query grid routes\n```\n\n## Transactions\n\nCreate energy route from your address to destination address with provided alias:\n```bash\ncyber tx grid create-route [destination-addr] [alias]\n```\n\nSet value of energy route to destination address:\n```bash\ncyber tx grid edit-route [destination-addr] [value]\n```\n\nDelete your energy route to given destination address:\n```bash\ncyber tx grid delete-route [destination-addr]\n```\n\nEdit alias of energy route to given destination address:\n```bash\ncyber tx grid edit-route-alias [destination-addr] [new-alias]\n```"
  },
  {
    "path": "x/grid/spec/README.md",
    "content": "# `energy`\n\n## Abstract\n\nThe energy module allows neurons to dynamically route power and bandwidth through the network.\n\n## Contents\n\n1. **[Concepts](00_concepts.md)**\n2. **[API](01_api.md)**\n3. **[State](02_state.md)**\n4. **[State Transitions](03_state_transitions.md)**\n5. **[Messages](04_messages.md)**\n6. **[Events](05_events.md)**\n7. **[Parameters](06_params.md)**\n8. **[WASM](07_wasm.md)**\n9. **[Errors](08_errors.md)**\n10. **[CLI](09_cli.md)**"
  },
  {
    "path": "x/grid/types/codec.go",
    "content": "package types\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\t\"github.com/cosmos/cosmos-sdk/codec/legacy\"\n\tcodectypes \"github.com/cosmos/cosmos-sdk/codec/types\"\n\tcryptocodec \"github.com/cosmos/cosmos-sdk/crypto/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/msgservice\"\n\tauthzcodec \"github.com/cosmos/cosmos-sdk/x/authz/codec\"\n\tgovcodec \"github.com/cosmos/cosmos-sdk/x/gov/codec\"\n)\n\nfunc RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {\n\tlegacy.RegisterAminoMsg(cdc, &MsgCreateRoute{}, \"cyber/grid/MsgCreateRoute\")\n\tlegacy.RegisterAminoMsg(cdc, &MsgEditRoute{}, \"cyber/grid/MsgEditRoute\")\n\tlegacy.RegisterAminoMsg(cdc, &MsgDeleteRoute{}, \"cyber/grid/MsgDeleteRoute\")\n\tlegacy.RegisterAminoMsg(cdc, &MsgEditRouteName{}, \"cyber/grid/MsgEditRouteName\")\n\tlegacy.RegisterAminoMsg(cdc, &MsgUpdateParams{}, \"cyber/grid/MsgUpdateParams\")\n\n\tcdc.RegisterConcrete(Params{}, \"cyber/grid/Params\", nil)\n}\n\nfunc RegisterInterfaces(registry codectypes.InterfaceRegistry) {\n\tregistry.RegisterImplementations((*sdk.Msg)(nil),\n\t\t&MsgCreateRoute{},\n\t\t&MsgEditRoute{},\n\t\t&MsgDeleteRoute{},\n\t\t&MsgEditRouteName{},\n\t\t&MsgUpdateParams{},\n\t)\n\n\tmsgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc)\n}\n\nvar (\n\tamino     = codec.NewLegacyAmino()\n\tModuleCdc = codec.NewAminoCodec(amino)\n)\n\nfunc init() {\n\tRegisterLegacyAminoCodec(amino)\n\tcryptocodec.RegisterCrypto(amino)\n\tsdk.RegisterLegacyAminoCodec(amino)\n\n\tRegisterLegacyAminoCodec(authzcodec.Amino)\n\tRegisterLegacyAminoCodec(govcodec.Amino)\n}\n"
  },
  {
    "path": "x/grid/types/errors.go",
    "content": "package types\n\nimport (\n\terrorsmod \"cosmossdk.io/errors\"\n)\n\nvar (\n\tErrWrongName       = errorsmod.Register(ModuleName, 2, \"length of the name is not valid\")\n\tErrRouteNotExist   = errorsmod.Register(ModuleName, 3, \"the route does not exist\")\n\tErrRouteExist      = errorsmod.Register(ModuleName, 4, \"the route exists\")\n\tErrWrongValueDenom = errorsmod.Register(ModuleName, 5, \"the denom of value is not supported\")\n\tErrMaxRoutes       = errorsmod.Register(ModuleName, 6, \"max routes are exceeded\")\n\tErrSelfRoute       = errorsmod.Register(ModuleName, 7, \"routing to self is not allowed\")\n)\n"
  },
  {
    "path": "x/grid/types/events.go",
    "content": "package types\n\nconst (\n\tEventTypeCreateRoute   = \"create_route\"\n\tEventTypeEditRoute     = \"edit_route\"\n\tEventTypeDeleteRoute   = \"delete_route\"\n\tEventTypeEditRouteName = \"edit_route_name\"\n\n\tAttributeKeySource      = \"source\"\n\tAttributeKeyDestination = \"destination\"\n\tAttributeKeyName        = \"name\"\n\tAttributeKeyValue       = \"value\"\n\n\tAttributeValueCategory = ModuleName\n)\n"
  },
  {
    "path": "x/grid/types/expected_keepers.go",
    "content": "package types\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tauthtypes \"github.com/cosmos/cosmos-sdk/x/auth/types\"\n)\n\ntype CyberbankKeeper interface {\n\tOnCoinsTransfer(ctx sdk.Context, from sdk.AccAddress, to sdk.AccAddress)\n\tSendCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error\n\tSendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error\n}\n\ntype AccountKeeper interface {\n\tGetAccount(ctx sdk.Context, addr sdk.AccAddress) authtypes.AccountI\n\tSetAccount(ctx sdk.Context, acc authtypes.AccountI)\n\tGetModuleAddress(name string) sdk.AccAddress\n\tNewAccountWithAddress(ctx sdk.Context, addr sdk.AccAddress) authtypes.AccountI\n}\n"
  },
  {
    "path": "x/grid/types/genesis.go",
    "content": "package types\n\nfunc NewGenesisState(params Params, routes []Route) *GenesisState {\n\treturn &GenesisState{\n\t\tParams: params,\n\t\tRoutes: routes,\n\t}\n}\n\nfunc DefaultGenesisState() *GenesisState {\n\treturn &GenesisState{\n\t\tParams: DefaultParams(),\n\t}\n}\n\nfunc ValidateGenesis(state GenesisState) error {\n\treturn state.Params.Validate()\n}\n"
  },
  {
    "path": "x/grid/types/genesis.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/grid/v1beta1/genesis.proto\n\npackage types\n\nimport (\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype GenesisState struct {\n\tParams Params `protobuf:\"bytes,1,opt,name=params,proto3\" json:\"params\"`\n\tRoutes Routes `protobuf:\"bytes,2,rep,name=routes,proto3,castrepeated=Routes\" json:\"routes\"`\n}\n\nfunc (m *GenesisState) Reset()         { *m = GenesisState{} }\nfunc (m *GenesisState) String() string { return proto.CompactTextString(m) }\nfunc (*GenesisState) ProtoMessage()    {}\nfunc (*GenesisState) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e1ab9a0f068eb924, []int{0}\n}\n\nfunc (m *GenesisState) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_GenesisState.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *GenesisState) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GenesisState.Merge(m, src)\n}\n\nfunc (m *GenesisState) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *GenesisState) XXX_DiscardUnknown() {\n\txxx_messageInfo_GenesisState.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GenesisState proto.InternalMessageInfo\n\nfunc (m *GenesisState) GetParams() Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn Params{}\n}\n\nfunc (m *GenesisState) GetRoutes() Routes {\n\tif m != nil {\n\t\treturn m.Routes\n\t}\n\treturn nil\n}\n\nfunc init() {\n\tproto.RegisterType((*GenesisState)(nil), \"cyber.grid.v1beta1.GenesisState\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/grid/v1beta1/genesis.proto\", fileDescriptor_e1ab9a0f068eb924) }\n\nvar fileDescriptor_e1ab9a0f068eb924 = []byte{\n\t// 244 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x48, 0xae, 0x4c, 0x4a,\n\t0x2d, 0xd2, 0x4f, 0x2f, 0xca, 0x4c, 0xd1, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x4f,\n\t0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x02, 0xab,\n\t0xd0, 0x03, 0xa9, 0xd0, 0x83, 0xaa, 0x90, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0x4b, 0xeb, 0x83,\n\t0x58, 0x10, 0x95, 0x52, 0x72, 0x58, 0xcc, 0x2a, 0xa9, 0x2c, 0x48, 0x85, 0x9a, 0xa4, 0xd4, 0xcd,\n\t0xc8, 0xc5, 0xe3, 0x0e, 0x31, 0x3b, 0xb8, 0x24, 0xb1, 0x24, 0x55, 0xc8, 0x82, 0x8b, 0xad, 0x20,\n\t0xb1, 0x28, 0x31, 0xb7, 0x58, 0x82, 0x51, 0x81, 0x51, 0x83, 0xdb, 0x48, 0x4a, 0x0f, 0xd3, 0x2e,\n\t0xbd, 0x00, 0xb0, 0x0a, 0x27, 0x96, 0x13, 0xf7, 0xe4, 0x19, 0x82, 0xa0, 0xea, 0x85, 0x1c, 0xb9,\n\t0xd8, 0x8a, 0xf2, 0x4b, 0x4b, 0x52, 0x8b, 0x25, 0x98, 0x14, 0x98, 0x35, 0xb8, 0x8d, 0x24, 0xb1,\n\t0xe9, 0x0c, 0x02, 0xa9, 0x70, 0xe2, 0x03, 0x69, 0x5c, 0x75, 0x5f, 0x9e, 0x0d, 0xcc, 0x2d, 0x0e,\n\t0x82, 0x6a, 0x74, 0xf2, 0x38, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4,\n\t0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xbd,\n\t0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0x7d, 0xb0, 0xb1, 0xc9, 0xf9, 0x79,\n\t0xe9, 0x45, 0xa9, 0xc5, 0xc5, 0xfa, 0xe9, 0xf9, 0xba, 0x10, 0x3f, 0x56, 0x40, 0x7c, 0x09, 0xf6,\n\t0x5d, 0x12, 0x1b, 0xd8, 0x7b, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x27, 0xac, 0xd8, 0xcd,\n\t0x4c, 0x01, 0x00, 0x00,\n}\n\nfunc (m *GenesisState) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *GenesisState) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Routes) > 0 {\n\t\tfor iNdEx := len(m.Routes) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.Routes[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintGenesis(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0x12\n\t\t}\n\t}\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintGenesis(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintGenesis(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovGenesis(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *GenesisState) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Params.Size()\n\tn += 1 + l + sovGenesis(uint64(l))\n\tif len(m.Routes) > 0 {\n\t\tfor _, e := range m.Routes {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovGenesis(uint64(l))\n\t\t}\n\t}\n\treturn n\n}\n\nfunc sovGenesis(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozGenesis(x uint64) (n int) {\n\treturn sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *GenesisState) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: GenesisState: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: GenesisState: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Routes\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Routes = append(m.Routes, Route{})\n\t\t\tif err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipGenesis(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipGenesis(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupGenesis\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthGenesis\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthGenesis        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowGenesis          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupGenesis = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/grid/types/keys.go",
    "content": "package types\n\nimport sdk \"github.com/cosmos/cosmos-sdk/types\"\n\nconst (\n\tModuleName = \"grid\"\n\tStoreKey   = ModuleName\n\tRouterKey  = ModuleName\n\n\tGridPoolName = \"energy_grid\"\n)\n\nvar (\n\tRouteKey                     = []byte{0x00}\n\tRoutedEnergyByDestinationKey = []byte{0x01}\n\tParamsKey                    = []byte{0x02}\n)\n\nfunc GetRoutedEnergyByDestinationKey(dst sdk.AccAddress) []byte {\n\treturn append(RoutedEnergyByDestinationKey, dst.Bytes()...)\n}\n\nfunc GetRouteKey(src sdk.AccAddress, dst sdk.AccAddress) []byte {\n\treturn append(GetRoutesKey(src), dst.Bytes()...)\n}\n\nfunc GetRoutesKey(src sdk.AccAddress) []byte {\n\treturn append(RouteKey, src.Bytes()...)\n}\n"
  },
  {
    "path": "x/grid/types/msgs.go",
    "content": "package types\n\nimport (\n\terrorsmod \"cosmossdk.io/errors\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tsdkerrors \"github.com/cosmos/cosmos-sdk/types/errors\"\n\n\tctypes \"github.com/cybercongress/go-cyber/v7/types\"\n)\n\nconst (\n\tActionCreateRoute   = \"create_route\"\n\tActionEditRoute     = \"edit_route\"\n\tActionDeleteRoute   = \"delete_route\"\n\tActionEditRouteName = \"edit_route_name\"\n)\n\nvar (\n\t_ sdk.Msg = &MsgCreateRoute{}\n\t_ sdk.Msg = &MsgEditRoute{}\n\t_ sdk.Msg = &MsgDeleteRoute{}\n\t_ sdk.Msg = &MsgEditRouteName{}\n\t_ sdk.Msg = &MsgUpdateParams{}\n)\n\nfunc NewMsgCreateRoute(src sdk.AccAddress, dst sdk.AccAddress, name string) *MsgCreateRoute {\n\treturn &MsgCreateRoute{\n\t\tSource:      src.String(),\n\t\tDestination: dst.String(),\n\t\tName:        name,\n\t}\n}\n\nfunc (msg MsgCreateRoute) Route() string { return RouterKey }\n\nfunc (msg MsgCreateRoute) Type() string { return ActionCreateRoute }\n\nfunc (msg MsgCreateRoute) ValidateBasic() error {\n\t_, err := sdk.AccAddressFromBech32(msg.Source)\n\tif err != nil {\n\t\treturn sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid source address (%s)\", err)\n\t}\n\t_, err = sdk.AccAddressFromBech32(msg.Destination)\n\tif err != nil {\n\t\treturn sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid destination address (%s)\", err)\n\t}\n\tif len(msg.Name) == 0 || len(msg.Name) > 32 { // TODO fix validation\n\t\treturn ErrWrongName\n\t}\n\n\treturn nil\n}\n\nfunc (msg MsgCreateRoute) GetSignBytes() []byte {\n\tbz := ModuleCdc.MustMarshalJSON(&msg)\n\treturn sdk.MustSortJSON(bz)\n}\n\nfunc (msg MsgCreateRoute) GetSigners() []sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(msg.Source)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn []sdk.AccAddress{addr}\n}\n\nfunc NewMsgEditRoute(src sdk.AccAddress, dst sdk.AccAddress, value sdk.Coin) *MsgEditRoute {\n\treturn &MsgEditRoute{\n\t\tSource:      src.String(),\n\t\tDestination: dst.String(),\n\t\tValue:       value,\n\t}\n}\n\nfunc (msg MsgEditRoute) Route() string { return RouterKey }\n\nfunc (msg MsgEditRoute) Type() string { return ActionEditRoute }\n\nfunc (msg MsgEditRoute) ValidateBasic() error {\n\t_, err := sdk.AccAddressFromBech32(msg.Source)\n\tif err != nil {\n\t\treturn sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid source address (%s)\", err)\n\t}\n\t_, err = sdk.AccAddressFromBech32(msg.Destination)\n\tif err != nil {\n\t\treturn sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid destination address (%s)\", err)\n\t}\n\tif msg.Value.Denom != ctypes.AMPERE && msg.Value.Denom != ctypes.VOLT {\n\t\treturn ErrWrongValueDenom\n\t}\n\n\treturn nil\n}\n\nfunc (msg MsgEditRoute) GetSignBytes() []byte {\n\tbz := ModuleCdc.MustMarshalJSON(&msg)\n\treturn sdk.MustSortJSON(bz)\n}\n\nfunc (msg MsgEditRoute) GetSigners() []sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(msg.Source)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn []sdk.AccAddress{addr}\n}\n\nfunc NewMsgDeleteRoute(src sdk.AccAddress, dst sdk.AccAddress) *MsgDeleteRoute {\n\treturn &MsgDeleteRoute{\n\t\tSource:      src.String(),\n\t\tDestination: dst.String(),\n\t}\n}\n\nfunc (msg MsgDeleteRoute) Route() string { return RouterKey }\n\nfunc (msg MsgDeleteRoute) Type() string { return ActionDeleteRoute }\n\nfunc (msg MsgDeleteRoute) ValidateBasic() error {\n\t_, err := sdk.AccAddressFromBech32(msg.Source)\n\tif err != nil {\n\t\treturn sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid source address (%s)\", err)\n\t}\n\t_, err = sdk.AccAddressFromBech32(msg.Destination)\n\tif err != nil {\n\t\treturn sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid destination address (%s)\", err)\n\t}\n\n\treturn nil\n}\n\nfunc (msg MsgDeleteRoute) GetSignBytes() []byte {\n\tbz := ModuleCdc.MustMarshalJSON(&msg)\n\treturn sdk.MustSortJSON(bz)\n}\n\nfunc (msg MsgDeleteRoute) GetSigners() []sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(msg.Source)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn []sdk.AccAddress{addr}\n}\n\nfunc NewMsgEditRouteName(src sdk.AccAddress, dst sdk.AccAddress, name string) *MsgEditRouteName {\n\treturn &MsgEditRouteName{\n\t\tSource:      src.String(),\n\t\tDestination: dst.String(),\n\t\tName:        name,\n\t}\n}\n\nfunc (msg MsgEditRouteName) Route() string { return RouterKey }\n\nfunc (msg MsgEditRouteName) Type() string { return ActionEditRouteName }\n\nfunc (msg MsgEditRouteName) ValidateBasic() error {\n\t_, err := sdk.AccAddressFromBech32(msg.Source)\n\tif err != nil {\n\t\treturn sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid source address (%s)\", err)\n\t}\n\t_, err = sdk.AccAddressFromBech32(msg.Destination)\n\tif err != nil {\n\t\treturn sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid destination address (%s)\", err)\n\t}\n\tif len(msg.Name) == 0 || len(msg.Name) > 32 {\n\t\treturn ErrWrongName\n\t}\n\n\treturn nil\n}\n\nfunc (msg MsgEditRouteName) GetSignBytes() []byte {\n\tbz := ModuleCdc.MustMarshalJSON(&msg)\n\treturn sdk.MustSortJSON(bz)\n}\n\nfunc (msg MsgEditRouteName) GetSigners() []sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(msg.Source)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn []sdk.AccAddress{addr}\n}\n\n// GetSignBytes implements the LegacyMsg interface.\nfunc (m MsgUpdateParams) GetSignBytes() []byte {\n\treturn sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))\n}\n\n// GetSigners returns the expected signers for a MsgUpdateParams message.\nfunc (m *MsgUpdateParams) GetSigners() []sdk.AccAddress {\n\taddr, _ := sdk.AccAddressFromBech32(m.Authority)\n\treturn []sdk.AccAddress{addr}\n}\n\n// ValidateBasic does a sanity check on the provided data.\nfunc (m *MsgUpdateParams) ValidateBasic() error {\n\tif _, err := sdk.AccAddressFromBech32(m.Authority); err != nil {\n\t\treturn errorsmod.Wrap(err, \"invalid authority address\")\n\t}\n\n\treturn m.Params.Validate()\n}\n"
  },
  {
    "path": "x/grid/types/params.go",
    "content": "package types\n\nimport (\n\t\"fmt\"\n)\n\nfunc DefaultParams() Params {\n\treturn Params{\n\t\tMaxRoutes: uint32(8),\n\t}\n}\n\nfunc (p Params) Validate() error {\n\tif err := validateMaxRoutes(p.MaxRoutes); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc validateMaxRoutes(i interface{}) error {\n\tv, ok := i.(uint32)\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v == 0 {\n\t\treturn fmt.Errorf(\"max routes must be positive: %d\", v)\n\t}\n\n\tif v > 16 {\n\t\treturn fmt.Errorf(\"max routes must be less or equal than 16: %d\", v)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/grid/types/params_legacy.go",
    "content": "package types\n\nimport paramstypes \"github.com/cosmos/cosmos-sdk/x/params/types\"\n\nvar KeyMaxRoutes = []byte(\"MaxRoutes\")\n\n// Deprecated: Type declaration for parameters\nfunc ParamKeyTable() paramstypes.KeyTable {\n\treturn paramstypes.NewKeyTable().RegisterParamSet(&Params{})\n}\n\nfunc (p *Params) ParamSetPairs() paramstypes.ParamSetPairs {\n\treturn paramstypes.ParamSetPairs{\n\t\tparamstypes.NewParamSetPair(KeyMaxRoutes, &p.MaxRoutes, validateMaxRoutes),\n\t}\n}\n"
  },
  {
    "path": "x/grid/types/query.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/grid/v1beta1/query.proto\n\npackage types\n\nimport (\n\tcontext \"context\"\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\tgithub_com_cosmos_cosmos_sdk_types \"github.com/cosmos/cosmos-sdk/types\"\n\ttypes \"github.com/cosmos/cosmos-sdk/types\"\n\tquery \"github.com/cosmos/cosmos-sdk/types/query\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tgrpc1 \"github.com/cosmos/gogoproto/grpc\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype QueryParamsRequest struct{}\n\nfunc (m *QueryParamsRequest) Reset()         { *m = QueryParamsRequest{} }\nfunc (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryParamsRequest) ProtoMessage()    {}\nfunc (*QueryParamsRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f6ec0dbd7f0bdd2b, []int{0}\n}\n\nfunc (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryParamsRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryParamsRequest.Merge(m, src)\n}\n\nfunc (m *QueryParamsRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryParamsRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryParamsRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo\n\ntype QueryParamsResponse struct {\n\tParams Params `protobuf:\"bytes,1,opt,name=params,proto3\" json:\"params\"`\n}\n\nfunc (m *QueryParamsResponse) Reset()         { *m = QueryParamsResponse{} }\nfunc (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryParamsResponse) ProtoMessage()    {}\nfunc (*QueryParamsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f6ec0dbd7f0bdd2b, []int{1}\n}\n\nfunc (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryParamsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryParamsResponse.Merge(m, src)\n}\n\nfunc (m *QueryParamsResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryParamsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryParamsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo\n\nfunc (m *QueryParamsResponse) GetParams() Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn Params{}\n}\n\ntype QuerySourceRequest struct {\n\tSource string `protobuf:\"bytes,1,opt,name=source,proto3\" json:\"source,omitempty\"`\n}\n\nfunc (m *QuerySourceRequest) Reset()         { *m = QuerySourceRequest{} }\nfunc (m *QuerySourceRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QuerySourceRequest) ProtoMessage()    {}\nfunc (*QuerySourceRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f6ec0dbd7f0bdd2b, []int{2}\n}\n\nfunc (m *QuerySourceRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QuerySourceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QuerySourceRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QuerySourceRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QuerySourceRequest.Merge(m, src)\n}\n\nfunc (m *QuerySourceRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QuerySourceRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QuerySourceRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QuerySourceRequest proto.InternalMessageInfo\n\nfunc (m *QuerySourceRequest) GetSource() string {\n\tif m != nil {\n\t\treturn m.Source\n\t}\n\treturn \"\"\n}\n\ntype QueryDestinationRequest struct {\n\tDestination string `protobuf:\"bytes,1,opt,name=destination,proto3\" json:\"destination,omitempty\"`\n}\n\nfunc (m *QueryDestinationRequest) Reset()         { *m = QueryDestinationRequest{} }\nfunc (m *QueryDestinationRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryDestinationRequest) ProtoMessage()    {}\nfunc (*QueryDestinationRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f6ec0dbd7f0bdd2b, []int{3}\n}\n\nfunc (m *QueryDestinationRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryDestinationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryDestinationRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryDestinationRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryDestinationRequest.Merge(m, src)\n}\n\nfunc (m *QueryDestinationRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryDestinationRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryDestinationRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryDestinationRequest proto.InternalMessageInfo\n\nfunc (m *QueryDestinationRequest) GetDestination() string {\n\tif m != nil {\n\t\treturn m.Destination\n\t}\n\treturn \"\"\n}\n\ntype QueryRoutedEnergyResponse struct {\n\tValue github_com_cosmos_cosmos_sdk_types.Coins `protobuf:\"bytes,1,rep,name=value,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins\" json:\"value\"`\n}\n\nfunc (m *QueryRoutedEnergyResponse) Reset()         { *m = QueryRoutedEnergyResponse{} }\nfunc (m *QueryRoutedEnergyResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryRoutedEnergyResponse) ProtoMessage()    {}\nfunc (*QueryRoutedEnergyResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f6ec0dbd7f0bdd2b, []int{4}\n}\n\nfunc (m *QueryRoutedEnergyResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryRoutedEnergyResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryRoutedEnergyResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryRoutedEnergyResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryRoutedEnergyResponse.Merge(m, src)\n}\n\nfunc (m *QueryRoutedEnergyResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryRoutedEnergyResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryRoutedEnergyResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryRoutedEnergyResponse proto.InternalMessageInfo\n\nfunc (m *QueryRoutedEnergyResponse) GetValue() github_com_cosmos_cosmos_sdk_types.Coins {\n\tif m != nil {\n\t\treturn m.Value\n\t}\n\treturn nil\n}\n\ntype QueryRouteRequest struct {\n\tSource      string `protobuf:\"bytes,1,opt,name=source,proto3\" json:\"source,omitempty\"`\n\tDestination string `protobuf:\"bytes,2,opt,name=destination,proto3\" json:\"destination,omitempty\"`\n}\n\nfunc (m *QueryRouteRequest) Reset()         { *m = QueryRouteRequest{} }\nfunc (m *QueryRouteRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryRouteRequest) ProtoMessage()    {}\nfunc (*QueryRouteRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f6ec0dbd7f0bdd2b, []int{5}\n}\n\nfunc (m *QueryRouteRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryRouteRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryRouteRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryRouteRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryRouteRequest.Merge(m, src)\n}\n\nfunc (m *QueryRouteRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryRouteRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryRouteRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryRouteRequest proto.InternalMessageInfo\n\nfunc (m *QueryRouteRequest) GetSource() string {\n\tif m != nil {\n\t\treturn m.Source\n\t}\n\treturn \"\"\n}\n\nfunc (m *QueryRouteRequest) GetDestination() string {\n\tif m != nil {\n\t\treturn m.Destination\n\t}\n\treturn \"\"\n}\n\ntype QueryRouteResponse struct {\n\tRoute Route `protobuf:\"bytes,1,opt,name=route,proto3\" json:\"route\"`\n}\n\nfunc (m *QueryRouteResponse) Reset()         { *m = QueryRouteResponse{} }\nfunc (m *QueryRouteResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryRouteResponse) ProtoMessage()    {}\nfunc (*QueryRouteResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f6ec0dbd7f0bdd2b, []int{6}\n}\n\nfunc (m *QueryRouteResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryRouteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryRouteResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryRouteResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryRouteResponse.Merge(m, src)\n}\n\nfunc (m *QueryRouteResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryRouteResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryRouteResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryRouteResponse proto.InternalMessageInfo\n\nfunc (m *QueryRouteResponse) GetRoute() Route {\n\tif m != nil {\n\t\treturn m.Route\n\t}\n\treturn Route{}\n}\n\ntype QueryRoutesRequest struct {\n\tPagination *query.PageRequest `protobuf:\"bytes,1,opt,name=pagination,proto3\" json:\"pagination,omitempty\"`\n}\n\nfunc (m *QueryRoutesRequest) Reset()         { *m = QueryRoutesRequest{} }\nfunc (m *QueryRoutesRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryRoutesRequest) ProtoMessage()    {}\nfunc (*QueryRoutesRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f6ec0dbd7f0bdd2b, []int{7}\n}\n\nfunc (m *QueryRoutesRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryRoutesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryRoutesRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryRoutesRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryRoutesRequest.Merge(m, src)\n}\n\nfunc (m *QueryRoutesRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryRoutesRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryRoutesRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryRoutesRequest proto.InternalMessageInfo\n\nfunc (m *QueryRoutesRequest) GetPagination() *query.PageRequest {\n\tif m != nil {\n\t\treturn m.Pagination\n\t}\n\treturn nil\n}\n\ntype QueryRoutesResponse struct {\n\tRoutes     Routes              `protobuf:\"bytes,1,rep,name=routes,proto3,castrepeated=Routes\" json:\"routes\"`\n\tPagination *query.PageResponse `protobuf:\"bytes,2,opt,name=pagination,proto3\" json:\"pagination,omitempty\"`\n}\n\nfunc (m *QueryRoutesResponse) Reset()         { *m = QueryRoutesResponse{} }\nfunc (m *QueryRoutesResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryRoutesResponse) ProtoMessage()    {}\nfunc (*QueryRoutesResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f6ec0dbd7f0bdd2b, []int{8}\n}\n\nfunc (m *QueryRoutesResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryRoutesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryRoutesResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryRoutesResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryRoutesResponse.Merge(m, src)\n}\n\nfunc (m *QueryRoutesResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryRoutesResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryRoutesResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryRoutesResponse proto.InternalMessageInfo\n\nfunc (m *QueryRoutesResponse) GetRoutes() Routes {\n\tif m != nil {\n\t\treturn m.Routes\n\t}\n\treturn nil\n}\n\nfunc (m *QueryRoutesResponse) GetPagination() *query.PageResponse {\n\tif m != nil {\n\t\treturn m.Pagination\n\t}\n\treturn nil\n}\n\nfunc init() {\n\tproto.RegisterType((*QueryParamsRequest)(nil), \"cyber.grid.v1beta1.QueryParamsRequest\")\n\tproto.RegisterType((*QueryParamsResponse)(nil), \"cyber.grid.v1beta1.QueryParamsResponse\")\n\tproto.RegisterType((*QuerySourceRequest)(nil), \"cyber.grid.v1beta1.QuerySourceRequest\")\n\tproto.RegisterType((*QueryDestinationRequest)(nil), \"cyber.grid.v1beta1.QueryDestinationRequest\")\n\tproto.RegisterType((*QueryRoutedEnergyResponse)(nil), \"cyber.grid.v1beta1.QueryRoutedEnergyResponse\")\n\tproto.RegisterType((*QueryRouteRequest)(nil), \"cyber.grid.v1beta1.QueryRouteRequest\")\n\tproto.RegisterType((*QueryRouteResponse)(nil), \"cyber.grid.v1beta1.QueryRouteResponse\")\n\tproto.RegisterType((*QueryRoutesRequest)(nil), \"cyber.grid.v1beta1.QueryRoutesRequest\")\n\tproto.RegisterType((*QueryRoutesResponse)(nil), \"cyber.grid.v1beta1.QueryRoutesResponse\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/grid/v1beta1/query.proto\", fileDescriptor_f6ec0dbd7f0bdd2b) }\n\nvar fileDescriptor_f6ec0dbd7f0bdd2b = []byte{\n\t// 693 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x95, 0x5d, 0x6b, 0xd3, 0x5e,\n\t0x18, 0xc0, 0x9b, 0xfd, 0xff, 0x0d, 0x7a, 0x26, 0xc2, 0x8e, 0xc3, 0xb9, 0x22, 0xd9, 0x0c, 0xd8,\n\t0x15, 0x67, 0x13, 0xd7, 0x39, 0x10, 0xbd, 0x72, 0xbe, 0x82, 0x88, 0x1a, 0xef, 0x44, 0x18, 0x69,\n\t0x7b, 0x88, 0xc1, 0x2d, 0x27, 0xcb, 0x49, 0x86, 0xbd, 0xd9, 0xc5, 0xbe, 0x80, 0x82, 0xd7, 0x0a,\n\t0x7a, 0xe9, 0x9d, 0xdf, 0x62, 0x97, 0x03, 0x6f, 0xbc, 0x52, 0x69, 0xfd, 0x20, 0x92, 0xe7, 0x3c,\n\t0x69, 0x92, 0xb6, 0x69, 0xba, 0xab, 0x36, 0xcf, 0xeb, 0xef, 0x79, 0x4b, 0x88, 0xd6, 0xe9, 0xb5,\n\t0x59, 0x60, 0x3a, 0x81, 0xdb, 0x35, 0x0f, 0x36, 0xda, 0x2c, 0xb4, 0x37, 0xcc, 0xfd, 0x88, 0x05,\n\t0x3d, 0xc3, 0x0f, 0x78, 0xc8, 0x29, 0x05, 0xbd, 0x11, 0xeb, 0x0d, 0xd4, 0xd7, 0x16, 0x1d, 0xee,\n\t0x70, 0x50, 0x9b, 0xf1, 0x3f, 0x69, 0x59, 0xbb, 0xec, 0x70, 0xee, 0xec, 0x32, 0xd3, 0xf6, 0x5d,\n\t0xd3, 0xf6, 0x3c, 0x1e, 0xda, 0xa1, 0xcb, 0x3d, 0x81, 0xda, 0x49, 0x79, 0xc2, 0x9e, 0xcf, 0x52,\n\t0x3d, 0x17, 0x7b, 0x5c, 0x98, 0x6d, 0x5b, 0xb0, 0xa1, 0x41, 0x87, 0xbb, 0x1e, 0xea, 0xaf, 0x65,\n\t0xf5, 0x00, 0x38, 0xb4, 0xf2, 0x6d, 0xc7, 0xf5, 0x20, 0x99, 0xb4, 0xd5, 0x17, 0x09, 0x7d, 0x11,\n\t0x5b, 0x3c, 0xb7, 0x03, 0x7b, 0x4f, 0x58, 0x6c, 0x3f, 0x62, 0x22, 0xd4, 0x9f, 0x91, 0x0b, 0x39,\n\t0xa9, 0xf0, 0xb9, 0x27, 0x18, 0xbd, 0x45, 0x54, 0x1f, 0x24, 0x97, 0x94, 0x55, 0xa5, 0x31, 0xdf,\n\t0xaa, 0x19, 0xe3, 0x15, 0x1b, 0xd2, 0x67, 0xfb, 0xff, 0xe3, 0x5f, 0x2b, 0x15, 0x0b, 0xed, 0xf5,\n\t0xeb, 0x98, 0xe6, 0x25, 0x8f, 0x82, 0x0e, 0xc3, 0x34, 0xf4, 0x22, 0x51, 0x05, 0x08, 0x20, 0xde,\n\t0x59, 0x0b, 0x9f, 0xf4, 0x3b, 0x64, 0x09, 0xac, 0xef, 0x33, 0x11, 0x22, 0x6e, 0xe2, 0xb2, 0x4a,\n\t0xe6, 0xbb, 0xa9, 0x14, 0xfd, 0xb2, 0x22, 0xfd, 0x90, 0x2c, 0x83, 0xb3, 0xc5, 0xa3, 0x90, 0x75,\n\t0x1f, 0x78, 0x2c, 0x70, 0x7a, 0xc3, 0x0a, 0x6c, 0x52, 0x3d, 0xb0, 0x77, 0xa3, 0x38, 0xe1, 0x7f,\n\t0x8d, 0xf9, 0xd6, 0xb2, 0x21, 0x5b, 0x65, 0xc4, 0xad, 0x1a, 0x56, 0x70, 0x8f, 0xbb, 0xde, 0xf6,\n\t0x8d, 0x98, 0xff, 0xdb, 0xef, 0x95, 0x86, 0xe3, 0x86, 0x6f, 0xa2, 0xb6, 0xd1, 0xe1, 0x7b, 0x26,\n\t0xf6, 0x55, 0xfe, 0x34, 0x45, 0xf7, 0x2d, 0x8e, 0x25, 0x76, 0x10, 0x96, 0x8c, 0xac, 0x3f, 0x25,\n\t0x0b, 0x69, 0xfe, 0x92, 0x4a, 0x47, 0xcb, 0x99, 0x1b, 0x2f, 0xe7, 0x09, 0x76, 0x0e, 0xc3, 0x61,\n\t0x1d, 0x5b, 0xa4, 0x1a, 0xc4, 0x02, 0x1c, 0xc4, 0xf2, 0xa4, 0x41, 0x80, 0x07, 0xce, 0x41, 0x5a,\n\t0xeb, 0xaf, 0xb3, 0xc1, 0x92, 0x69, 0xd3, 0x87, 0x84, 0xa4, 0x7b, 0x81, 0x11, 0xeb, 0xb9, 0xce,\n\t0xc8, 0x2d, 0x4f, 0x27, 0xec, 0x24, 0x85, 0x59, 0x19, 0x4f, 0xfd, 0x8b, 0x82, 0x6b, 0x93, 0x84,\n\t0x47, 0xd8, 0xbb, 0x44, 0x85, 0xf4, 0x22, 0xed, 0x7a, 0x11, 0xed, 0x79, 0xec, 0xba, 0x8a, 0x21,\n\t0xd0, 0x91, 0x3e, 0xca, 0x21, 0xce, 0x01, 0xe2, 0x5a, 0x29, 0xa2, 0xcc, 0x9f, 0x65, 0x6c, 0x7d,\n\t0x3a, 0x43, 0xaa, 0xc0, 0x48, 0x8f, 0x14, 0xa2, 0xca, 0x5d, 0xa5, 0xf5, 0x49, 0x40, 0xe3, 0x67,\n\t0x51, 0x5b, 0x2b, 0xb5, 0x93, 0x19, 0xf5, 0xb5, 0xa3, 0x1f, 0x7f, 0x3f, 0xce, 0x5d, 0xa1, 0x2b,\n\t0xe6, 0x84, 0x53, 0x86, 0x07, 0x79, 0x17, 0xf4, 0xbd, 0x42, 0xce, 0xe1, 0x4d, 0xc8, 0x42, 0x8b,\n\t0x51, 0x72, 0xa7, 0x33, 0x05, 0x25, 0xdf, 0x7c, 0xdd, 0x00, 0x94, 0x06, 0xad, 0x17, 0xa2, 0xc8,\n\t0x55, 0xdc, 0xc1, 0x4e, 0x7f, 0x56, 0xc8, 0x42, 0xf6, 0xee, 0xa4, 0x74, 0xbd, 0x30, 0xdd, 0xf8,\n\t0x8d, 0xce, 0xce, 0xb6, 0x09, 0x6c, 0x4d, 0xba, 0x5e, 0xc8, 0x96, 0xb9, 0x84, 0x04, 0xf0, 0xbb,\n\t0x42, 0x96, 0x46, 0x01, 0xf1, 0xcc, 0x4f, 0x87, 0xd9, 0x9c, 0x8e, 0x39, 0xf2, 0xea, 0xd0, 0x6f,\n\t0x03, 0xec, 0x4d, 0xda, 0x9a, 0x1d, 0xb6, 0xbb, 0xc3, 0x24, 0xd7, 0x57, 0x85, 0xd0, 0xcc, 0x98,\n\t0x13, 0xdc, 0x59, 0x87, 0x7d, 0x4a, 0xd2, 0x2d, 0x20, 0x35, 0x69, 0x73, 0xa6, 0x91, 0x0f, 0x21,\n\t0x0f, 0x49, 0x15, 0xc2, 0xd1, 0xab, 0xd3, 0xd3, 0x25, 0x54, 0xf5, 0x32, 0x33, 0xc4, 0xa9, 0x03,\n\t0xce, 0x2a, 0xd5, 0x0a, 0x71, 0x80, 0x03, 0x0e, 0xb2, 0xf4, 0x0a, 0x72, 0x6f, 0xae, 0xd9, 0x37,\n\t0xad, 0xfc, 0x20, 0xe5, 0x76, 0x6d, 0x3f, 0x3e, 0xee, 0x6b, 0xca, 0x49, 0x5f, 0x53, 0xfe, 0xf4,\n\t0x35, 0xe5, 0xc3, 0x40, 0xab, 0x9c, 0x0c, 0xb4, 0xca, 0xcf, 0x81, 0x56, 0x79, 0x65, 0x64, 0x3f,\n\t0x04, 0x71, 0x90, 0x0e, 0xf7, 0x9c, 0x80, 0x09, 0x61, 0x3a, 0xbc, 0x29, 0xa3, 0xbe, 0x93, 0xa1,\n\t0xe0, 0xa3, 0xd0, 0x56, 0xe1, 0x03, 0xbb, 0xf9, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xc5, 0xea, 0x02,\n\t0xd4, 0x36, 0x08, 0x00, 0x00,\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ context.Context\n\t_ grpc.ClientConn\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// QueryClient is the client API for Query service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype QueryClient interface {\n\tParams(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error)\n\tSourceRoutes(ctx context.Context, in *QuerySourceRequest, opts ...grpc.CallOption) (*QueryRoutesResponse, error)\n\tDestinationRoutes(ctx context.Context, in *QueryDestinationRequest, opts ...grpc.CallOption) (*QueryRoutesResponse, error)\n\tDestinationRoutedEnergy(ctx context.Context, in *QueryDestinationRequest, opts ...grpc.CallOption) (*QueryRoutedEnergyResponse, error)\n\tSourceRoutedEnergy(ctx context.Context, in *QuerySourceRequest, opts ...grpc.CallOption) (*QueryRoutedEnergyResponse, error)\n\tRoute(ctx context.Context, in *QueryRouteRequest, opts ...grpc.CallOption) (*QueryRouteResponse, error)\n\tRoutes(ctx context.Context, in *QueryRoutesRequest, opts ...grpc.CallOption) (*QueryRoutesResponse, error)\n}\n\ntype queryClient struct {\n\tcc grpc1.ClientConn\n}\n\nfunc NewQueryClient(cc grpc1.ClientConn) QueryClient {\n\treturn &queryClient{cc}\n}\n\nfunc (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) {\n\tout := new(QueryParamsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.grid.v1beta1.Query/Params\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) SourceRoutes(ctx context.Context, in *QuerySourceRequest, opts ...grpc.CallOption) (*QueryRoutesResponse, error) {\n\tout := new(QueryRoutesResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.grid.v1beta1.Query/SourceRoutes\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) DestinationRoutes(ctx context.Context, in *QueryDestinationRequest, opts ...grpc.CallOption) (*QueryRoutesResponse, error) {\n\tout := new(QueryRoutesResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.grid.v1beta1.Query/DestinationRoutes\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) DestinationRoutedEnergy(ctx context.Context, in *QueryDestinationRequest, opts ...grpc.CallOption) (*QueryRoutedEnergyResponse, error) {\n\tout := new(QueryRoutedEnergyResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.grid.v1beta1.Query/DestinationRoutedEnergy\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) SourceRoutedEnergy(ctx context.Context, in *QuerySourceRequest, opts ...grpc.CallOption) (*QueryRoutedEnergyResponse, error) {\n\tout := new(QueryRoutedEnergyResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.grid.v1beta1.Query/SourceRoutedEnergy\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) Route(ctx context.Context, in *QueryRouteRequest, opts ...grpc.CallOption) (*QueryRouteResponse, error) {\n\tout := new(QueryRouteResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.grid.v1beta1.Query/Route\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) Routes(ctx context.Context, in *QueryRoutesRequest, opts ...grpc.CallOption) (*QueryRoutesResponse, error) {\n\tout := new(QueryRoutesResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.grid.v1beta1.Query/Routes\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// QueryServer is the server API for Query service.\ntype QueryServer interface {\n\tParams(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error)\n\tSourceRoutes(context.Context, *QuerySourceRequest) (*QueryRoutesResponse, error)\n\tDestinationRoutes(context.Context, *QueryDestinationRequest) (*QueryRoutesResponse, error)\n\tDestinationRoutedEnergy(context.Context, *QueryDestinationRequest) (*QueryRoutedEnergyResponse, error)\n\tSourceRoutedEnergy(context.Context, *QuerySourceRequest) (*QueryRoutedEnergyResponse, error)\n\tRoute(context.Context, *QueryRouteRequest) (*QueryRouteResponse, error)\n\tRoutes(context.Context, *QueryRoutesRequest) (*QueryRoutesResponse, error)\n}\n\n// UnimplementedQueryServer can be embedded to have forward compatible implementations.\ntype UnimplementedQueryServer struct{}\n\nfunc (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Params not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) SourceRoutes(ctx context.Context, req *QuerySourceRequest) (*QueryRoutesResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method SourceRoutes not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) DestinationRoutes(ctx context.Context, req *QueryDestinationRequest) (*QueryRoutesResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method DestinationRoutes not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) DestinationRoutedEnergy(ctx context.Context, req *QueryDestinationRequest) (*QueryRoutedEnergyResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method DestinationRoutedEnergy not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) SourceRoutedEnergy(ctx context.Context, req *QuerySourceRequest) (*QueryRoutedEnergyResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method SourceRoutedEnergy not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) Route(ctx context.Context, req *QueryRouteRequest) (*QueryRouteResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Route not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) Routes(ctx context.Context, req *QueryRoutesRequest) (*QueryRoutesResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Routes not implemented\")\n}\n\nfunc RegisterQueryServer(s grpc1.Server, srv QueryServer) {\n\ts.RegisterService(&_Query_serviceDesc, srv)\n}\n\nfunc _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryParamsRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).Params(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.grid.v1beta1.Query/Params\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_SourceRoutes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QuerySourceRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).SourceRoutes(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.grid.v1beta1.Query/SourceRoutes\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).SourceRoutes(ctx, req.(*QuerySourceRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_DestinationRoutes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryDestinationRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).DestinationRoutes(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.grid.v1beta1.Query/DestinationRoutes\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).DestinationRoutes(ctx, req.(*QueryDestinationRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_DestinationRoutedEnergy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryDestinationRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).DestinationRoutedEnergy(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.grid.v1beta1.Query/DestinationRoutedEnergy\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).DestinationRoutedEnergy(ctx, req.(*QueryDestinationRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_SourceRoutedEnergy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QuerySourceRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).SourceRoutedEnergy(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.grid.v1beta1.Query/SourceRoutedEnergy\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).SourceRoutedEnergy(ctx, req.(*QuerySourceRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_Route_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryRouteRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).Route(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.grid.v1beta1.Query/Route\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).Route(ctx, req.(*QueryRouteRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_Routes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryRoutesRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).Routes(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.grid.v1beta1.Query/Routes\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).Routes(ctx, req.(*QueryRoutesRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _Query_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"cyber.grid.v1beta1.Query\",\n\tHandlerType: (*QueryServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Params\",\n\t\t\tHandler:    _Query_Params_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"SourceRoutes\",\n\t\t\tHandler:    _Query_SourceRoutes_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"DestinationRoutes\",\n\t\t\tHandler:    _Query_DestinationRoutes_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"DestinationRoutedEnergy\",\n\t\t\tHandler:    _Query_DestinationRoutedEnergy_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"SourceRoutedEnergy\",\n\t\t\tHandler:    _Query_SourceRoutedEnergy_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Route\",\n\t\t\tHandler:    _Query_Route_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Routes\",\n\t\t\tHandler:    _Query_Routes_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"cyber/grid/v1beta1/query.proto\",\n}\n\nfunc (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QuerySourceRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QuerySourceRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QuerySourceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Source) > 0 {\n\t\ti -= len(m.Source)\n\t\tcopy(dAtA[i:], m.Source)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.Source)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryDestinationRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryDestinationRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryDestinationRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Destination) > 0 {\n\t\ti -= len(m.Destination)\n\t\tcopy(dAtA[i:], m.Destination)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.Destination)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryRoutedEnergyResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryRoutedEnergyResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryRoutedEnergyResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Value) > 0 {\n\t\tfor iNdEx := len(m.Value) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.Value[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0xa\n\t\t}\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryRouteRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryRouteRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryRouteRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Destination) > 0 {\n\t\ti -= len(m.Destination)\n\t\tcopy(dAtA[i:], m.Destination)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.Destination)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Source) > 0 {\n\t\ti -= len(m.Source)\n\t\tcopy(dAtA[i:], m.Source)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.Source)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryRouteResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryRouteResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryRouteResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Route.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryRoutesRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryRoutesRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryRoutesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Pagination != nil {\n\t\t{\n\t\t\tsize, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\ti -= size\n\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryRoutesResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryRoutesResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryRoutesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Pagination != nil {\n\t\t{\n\t\t\tsize, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\ti -= size\n\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Routes) > 0 {\n\t\tfor iNdEx := len(m.Routes) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.Routes[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0xa\n\t\t}\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintQuery(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovQuery(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *QueryParamsRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *QueryParamsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Params.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc (m *QuerySourceRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Source)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryDestinationRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Destination)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryRoutedEnergyResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif len(m.Value) > 0 {\n\t\tfor _, e := range m.Value {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovQuery(uint64(l))\n\t\t}\n\t}\n\treturn n\n}\n\nfunc (m *QueryRouteRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Source)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\tl = len(m.Destination)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryRouteResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Route.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc (m *QueryRoutesRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.Pagination != nil {\n\t\tl = m.Pagination.Size()\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryRoutesResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif len(m.Routes) > 0 {\n\t\tfor _, e := range m.Routes {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovQuery(uint64(l))\n\t\t}\n\t}\n\tif m.Pagination != nil {\n\t\tl = m.Pagination.Size()\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc sovQuery(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozQuery(x uint64) (n int) {\n\treturn sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *QueryParamsRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryParamsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QuerySourceRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QuerySourceRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QuerySourceRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Source\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Source = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryDestinationRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryDestinationRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryDestinationRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Destination\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Destination = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryRoutedEnergyResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryRoutedEnergyResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryRoutedEnergyResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Value\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Value = append(m.Value, types.Coin{})\n\t\t\tif err := m.Value[len(m.Value)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryRouteRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryRouteRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryRouteRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Source\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Source = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Destination\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Destination = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryRouteResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryRouteResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryRouteResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Route\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Route.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryRoutesRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryRoutesRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryRoutesRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Pagination\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif m.Pagination == nil {\n\t\t\t\tm.Pagination = &query.PageRequest{}\n\t\t\t}\n\t\t\tif err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryRoutesResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryRoutesResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryRoutesResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Routes\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Routes = append(m.Routes, Route{})\n\t\t\tif err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Pagination\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif m.Pagination == nil {\n\t\t\t\tm.Pagination = &query.PageResponse{}\n\t\t\t}\n\t\t\tif err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipQuery(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupQuery\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthQuery\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthQuery        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowQuery          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupQuery = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/grid/types/query.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: cyber/grid/v1beta1/query.proto\n\n/*\nPackage types is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage types\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/golang/protobuf/descriptor\"\n\t\"github.com/golang/protobuf/proto\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = descriptor.ForMessage\n\t_ = metadata.Join\n)\n\nfunc request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryParamsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryParamsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := server.Params(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Query_SourceRoutes_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_Query_SourceRoutes_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QuerySourceRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SourceRoutes_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.SourceRoutes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_SourceRoutes_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QuerySourceRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SourceRoutes_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.SourceRoutes(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Query_DestinationRoutes_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_Query_DestinationRoutes_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryDestinationRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_DestinationRoutes_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.DestinationRoutes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_DestinationRoutes_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryDestinationRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_DestinationRoutes_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.DestinationRoutes(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Query_DestinationRoutedEnergy_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_Query_DestinationRoutedEnergy_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryDestinationRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_DestinationRoutedEnergy_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.DestinationRoutedEnergy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_DestinationRoutedEnergy_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryDestinationRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_DestinationRoutedEnergy_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.DestinationRoutedEnergy(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Query_SourceRoutedEnergy_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_Query_SourceRoutedEnergy_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QuerySourceRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SourceRoutedEnergy_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.SourceRoutedEnergy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_SourceRoutedEnergy_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QuerySourceRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SourceRoutedEnergy_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.SourceRoutedEnergy(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Query_Route_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_Query_Route_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryRouteRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Route_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.Route(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_Route_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryRouteRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Route_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.Route(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Query_Routes_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_Query_Routes_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryRoutesRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Routes_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.Routes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_Routes_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryRoutesRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Routes_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.Routes(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterQueryHandlerServer registers the http handlers for service Query to \"mux\".\n// UnaryRPC     :call QueryServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead.\nfunc RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error {\n\tmux.Handle(\"GET\", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_SourceRoutes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_SourceRoutes_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_SourceRoutes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_DestinationRoutes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_DestinationRoutes_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_DestinationRoutes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_DestinationRoutedEnergy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_DestinationRoutedEnergy_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_DestinationRoutedEnergy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_SourceRoutedEnergy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_SourceRoutedEnergy_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_SourceRoutedEnergy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Route_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_Route_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Route_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Routes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_Routes_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Routes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.Dial(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Infof(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Infof(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\n\treturn RegisterQueryHandler(ctx, mux, conn)\n}\n\n// RegisterQueryHandler registers the http handlers for service Query to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn))\n}\n\n// RegisterQueryHandlerClient registers the http handlers for service Query\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"QueryClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"QueryClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"QueryClient\" to call the correct interceptors.\nfunc RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error {\n\tmux.Handle(\"GET\", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_SourceRoutes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_SourceRoutes_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_SourceRoutes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_DestinationRoutes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_DestinationRoutes_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_DestinationRoutes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_DestinationRoutedEnergy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_DestinationRoutedEnergy_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_DestinationRoutedEnergy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_SourceRoutedEnergy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_SourceRoutedEnergy_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_SourceRoutedEnergy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Route_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_Route_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Route_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Routes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_Routes_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Routes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\nvar (\n\tpattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"grid\", \"v1beta1\", \"params\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_SourceRoutes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"grid\", \"v1beta1\", \"source_routes\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_DestinationRoutes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"grid\", \"v1beta1\", \"destination_routes\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_DestinationRoutedEnergy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"grid\", \"v1beta1\", \"destination_routed_energy\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_SourceRoutedEnergy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"grid\", \"v1beta1\", \"source_routed_energy\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_Route_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"grid\", \"v1beta1\", \"route\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_Routes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"grid\", \"v1beta1\", \"routes\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n)\n\nvar (\n\tforward_Query_Params_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_SourceRoutes_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_DestinationRoutes_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_DestinationRoutedEnergy_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_SourceRoutedEnergy_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_Route_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_Routes_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "x/grid/types/route.go",
    "content": "package types\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\n// NewRoute creates a new route object\nfunc NewRoute(src sdk.AccAddress, dst sdk.AccAddress, name string, value sdk.Coins) Route {\n\treturn Route{\n\t\tSource:      src.String(),\n\t\tDestination: dst.String(),\n\t\tName:        name,\n\t\tValue:       value,\n\t}\n}\n\ntype Routes []Route\n\nfunc NewValue(coins sdk.Coins) Value {\n\treturn Value{coins}\n}\n\n// MustMarshalRoute returns the route bytes. Panics if fails\nfunc MustMarshalRoute(cdc codec.BinaryCodec, route Route) []byte {\n\treturn cdc.MustMarshal(&route)\n}\n\n// MustUnmarshalRoute return the unmarshaled route from bytes. Panics if fails.\nfunc MustUnmarshalRoute(cdc codec.BinaryCodec, value []byte) Route {\n\troute, err := UnmarshalRoute(cdc, value)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn route\n}\n\nfunc UnmarshalRoute(cdc codec.BinaryCodec, value []byte) (route Route, err error) {\n\terr = cdc.Unmarshal(value, &route)\n\treturn route, err\n}\n"
  },
  {
    "path": "x/grid/types/tx.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/grid/v1beta1/tx.proto\n\npackage types\n\nimport (\n\tcontext \"context\"\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\t_ \"github.com/cosmos/cosmos-proto\"\n\t_ \"github.com/cosmos/cosmos-sdk/types\"\n\tgithub_com_cosmos_cosmos_sdk_types \"github.com/cosmos/cosmos-sdk/types\"\n\t_ \"github.com/cosmos/cosmos-sdk/types/msgservice\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tgrpc1 \"github.com/cosmos/gogoproto/grpc\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype MsgCreateRoute struct {\n\tSource      string `protobuf:\"bytes,1,opt,name=source,proto3\" json:\"source,omitempty\"`\n\tDestination string `protobuf:\"bytes,2,opt,name=destination,proto3\" json:\"destination,omitempty\"`\n\tName        string `protobuf:\"bytes,3,opt,name=name,proto3\" json:\"name,omitempty\"`\n}\n\nfunc (m *MsgCreateRoute) Reset()         { *m = MsgCreateRoute{} }\nfunc (m *MsgCreateRoute) String() string { return proto.CompactTextString(m) }\nfunc (*MsgCreateRoute) ProtoMessage()    {}\nfunc (*MsgCreateRoute) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_c3762e80adb8270a, []int{0}\n}\n\nfunc (m *MsgCreateRoute) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgCreateRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgCreateRoute.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgCreateRoute) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgCreateRoute.Merge(m, src)\n}\n\nfunc (m *MsgCreateRoute) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgCreateRoute) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgCreateRoute.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgCreateRoute proto.InternalMessageInfo\n\nfunc (m *MsgCreateRoute) GetSource() string {\n\tif m != nil {\n\t\treturn m.Source\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgCreateRoute) GetDestination() string {\n\tif m != nil {\n\t\treturn m.Destination\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgCreateRoute) GetName() string {\n\tif m != nil {\n\t\treturn m.Name\n\t}\n\treturn \"\"\n}\n\ntype MsgEditRoute struct {\n\tSource      string                                  `protobuf:\"bytes,1,opt,name=source,proto3\" json:\"source,omitempty\"`\n\tDestination string                                  `protobuf:\"bytes,2,opt,name=destination,proto3\" json:\"destination,omitempty\"`\n\tValue       github_com_cosmos_cosmos_sdk_types.Coin `protobuf:\"bytes,3,opt,name=value,proto3,casttype=github.com/cosmos/cosmos-sdk/types.Coin\" json:\"value\"`\n}\n\nfunc (m *MsgEditRoute) Reset()         { *m = MsgEditRoute{} }\nfunc (m *MsgEditRoute) String() string { return proto.CompactTextString(m) }\nfunc (*MsgEditRoute) ProtoMessage()    {}\nfunc (*MsgEditRoute) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_c3762e80adb8270a, []int{1}\n}\n\nfunc (m *MsgEditRoute) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgEditRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgEditRoute.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgEditRoute) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgEditRoute.Merge(m, src)\n}\n\nfunc (m *MsgEditRoute) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgEditRoute) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgEditRoute.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgEditRoute proto.InternalMessageInfo\n\nfunc (m *MsgEditRoute) GetSource() string {\n\tif m != nil {\n\t\treturn m.Source\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgEditRoute) GetDestination() string {\n\tif m != nil {\n\t\treturn m.Destination\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgEditRoute) GetValue() github_com_cosmos_cosmos_sdk_types.Coin {\n\tif m != nil {\n\t\treturn m.Value\n\t}\n\treturn github_com_cosmos_cosmos_sdk_types.Coin{}\n}\n\ntype MsgDeleteRoute struct {\n\tSource      string `protobuf:\"bytes,1,opt,name=source,proto3\" json:\"source,omitempty\"`\n\tDestination string `protobuf:\"bytes,2,opt,name=destination,proto3\" json:\"destination,omitempty\"`\n}\n\nfunc (m *MsgDeleteRoute) Reset()         { *m = MsgDeleteRoute{} }\nfunc (m *MsgDeleteRoute) String() string { return proto.CompactTextString(m) }\nfunc (*MsgDeleteRoute) ProtoMessage()    {}\nfunc (*MsgDeleteRoute) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_c3762e80adb8270a, []int{2}\n}\n\nfunc (m *MsgDeleteRoute) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgDeleteRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgDeleteRoute.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgDeleteRoute) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgDeleteRoute.Merge(m, src)\n}\n\nfunc (m *MsgDeleteRoute) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgDeleteRoute) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgDeleteRoute.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgDeleteRoute proto.InternalMessageInfo\n\nfunc (m *MsgDeleteRoute) GetSource() string {\n\tif m != nil {\n\t\treturn m.Source\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgDeleteRoute) GetDestination() string {\n\tif m != nil {\n\t\treturn m.Destination\n\t}\n\treturn \"\"\n}\n\ntype MsgEditRouteName struct {\n\tSource      string `protobuf:\"bytes,1,opt,name=source,proto3\" json:\"source,omitempty\"`\n\tDestination string `protobuf:\"bytes,2,opt,name=destination,proto3\" json:\"destination,omitempty\"`\n\tName        string `protobuf:\"bytes,3,opt,name=name,proto3\" json:\"name,omitempty\"`\n}\n\nfunc (m *MsgEditRouteName) Reset()         { *m = MsgEditRouteName{} }\nfunc (m *MsgEditRouteName) String() string { return proto.CompactTextString(m) }\nfunc (*MsgEditRouteName) ProtoMessage()    {}\nfunc (*MsgEditRouteName) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_c3762e80adb8270a, []int{3}\n}\n\nfunc (m *MsgEditRouteName) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgEditRouteName) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgEditRouteName.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgEditRouteName) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgEditRouteName.Merge(m, src)\n}\n\nfunc (m *MsgEditRouteName) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgEditRouteName) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgEditRouteName.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgEditRouteName proto.InternalMessageInfo\n\nfunc (m *MsgEditRouteName) GetSource() string {\n\tif m != nil {\n\t\treturn m.Source\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgEditRouteName) GetDestination() string {\n\tif m != nil {\n\t\treturn m.Destination\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgEditRouteName) GetName() string {\n\tif m != nil {\n\t\treturn m.Name\n\t}\n\treturn \"\"\n}\n\ntype MsgUpdateParams struct {\n\tAuthority string `protobuf:\"bytes,1,opt,name=authority,proto3\" json:\"authority,omitempty\"`\n\tParams    Params `protobuf:\"bytes,2,opt,name=params,proto3\" json:\"params\"`\n}\n\nfunc (m *MsgUpdateParams) Reset()         { *m = MsgUpdateParams{} }\nfunc (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) }\nfunc (*MsgUpdateParams) ProtoMessage()    {}\nfunc (*MsgUpdateParams) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_c3762e80adb8270a, []int{4}\n}\n\nfunc (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgUpdateParams.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgUpdateParams) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgUpdateParams.Merge(m, src)\n}\n\nfunc (m *MsgUpdateParams) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgUpdateParams) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgUpdateParams.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo\n\nfunc (m *MsgUpdateParams) GetAuthority() string {\n\tif m != nil {\n\t\treturn m.Authority\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgUpdateParams) GetParams() Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn Params{}\n}\n\ntype MsgCreateRouteResponse struct{}\n\nfunc (m *MsgCreateRouteResponse) Reset()         { *m = MsgCreateRouteResponse{} }\nfunc (m *MsgCreateRouteResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgCreateRouteResponse) ProtoMessage()    {}\nfunc (*MsgCreateRouteResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_c3762e80adb8270a, []int{5}\n}\n\nfunc (m *MsgCreateRouteResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgCreateRouteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgCreateRouteResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgCreateRouteResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgCreateRouteResponse.Merge(m, src)\n}\n\nfunc (m *MsgCreateRouteResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgCreateRouteResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgCreateRouteResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgCreateRouteResponse proto.InternalMessageInfo\n\ntype MsgEditRouteResponse struct{}\n\nfunc (m *MsgEditRouteResponse) Reset()         { *m = MsgEditRouteResponse{} }\nfunc (m *MsgEditRouteResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgEditRouteResponse) ProtoMessage()    {}\nfunc (*MsgEditRouteResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_c3762e80adb8270a, []int{6}\n}\n\nfunc (m *MsgEditRouteResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgEditRouteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgEditRouteResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgEditRouteResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgEditRouteResponse.Merge(m, src)\n}\n\nfunc (m *MsgEditRouteResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgEditRouteResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgEditRouteResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgEditRouteResponse proto.InternalMessageInfo\n\ntype MsgDeleteRouteResponse struct{}\n\nfunc (m *MsgDeleteRouteResponse) Reset()         { *m = MsgDeleteRouteResponse{} }\nfunc (m *MsgDeleteRouteResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgDeleteRouteResponse) ProtoMessage()    {}\nfunc (*MsgDeleteRouteResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_c3762e80adb8270a, []int{7}\n}\n\nfunc (m *MsgDeleteRouteResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgDeleteRouteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgDeleteRouteResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgDeleteRouteResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgDeleteRouteResponse.Merge(m, src)\n}\n\nfunc (m *MsgDeleteRouteResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgDeleteRouteResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgDeleteRouteResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgDeleteRouteResponse proto.InternalMessageInfo\n\ntype MsgEditRouteNameResponse struct{}\n\nfunc (m *MsgEditRouteNameResponse) Reset()         { *m = MsgEditRouteNameResponse{} }\nfunc (m *MsgEditRouteNameResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgEditRouteNameResponse) ProtoMessage()    {}\nfunc (*MsgEditRouteNameResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_c3762e80adb8270a, []int{8}\n}\n\nfunc (m *MsgEditRouteNameResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgEditRouteNameResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgEditRouteNameResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgEditRouteNameResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgEditRouteNameResponse.Merge(m, src)\n}\n\nfunc (m *MsgEditRouteNameResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgEditRouteNameResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgEditRouteNameResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgEditRouteNameResponse proto.InternalMessageInfo\n\ntype MsgUpdateParamsResponse struct{}\n\nfunc (m *MsgUpdateParamsResponse) Reset()         { *m = MsgUpdateParamsResponse{} }\nfunc (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgUpdateParamsResponse) ProtoMessage()    {}\nfunc (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_c3762e80adb8270a, []int{9}\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgUpdateParamsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src)\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo\n\nfunc init() {\n\tproto.RegisterType((*MsgCreateRoute)(nil), \"cyber.grid.v1beta1.MsgCreateRoute\")\n\tproto.RegisterType((*MsgEditRoute)(nil), \"cyber.grid.v1beta1.MsgEditRoute\")\n\tproto.RegisterType((*MsgDeleteRoute)(nil), \"cyber.grid.v1beta1.MsgDeleteRoute\")\n\tproto.RegisterType((*MsgEditRouteName)(nil), \"cyber.grid.v1beta1.MsgEditRouteName\")\n\tproto.RegisterType((*MsgUpdateParams)(nil), \"cyber.grid.v1beta1.MsgUpdateParams\")\n\tproto.RegisterType((*MsgCreateRouteResponse)(nil), \"cyber.grid.v1beta1.MsgCreateRouteResponse\")\n\tproto.RegisterType((*MsgEditRouteResponse)(nil), \"cyber.grid.v1beta1.MsgEditRouteResponse\")\n\tproto.RegisterType((*MsgDeleteRouteResponse)(nil), \"cyber.grid.v1beta1.MsgDeleteRouteResponse\")\n\tproto.RegisterType((*MsgEditRouteNameResponse)(nil), \"cyber.grid.v1beta1.MsgEditRouteNameResponse\")\n\tproto.RegisterType((*MsgUpdateParamsResponse)(nil), \"cyber.grid.v1beta1.MsgUpdateParamsResponse\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/grid/v1beta1/tx.proto\", fileDescriptor_c3762e80adb8270a) }\n\nvar fileDescriptor_c3762e80adb8270a = []byte{\n\t// 570 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0x41, 0x8b, 0xd3, 0x40,\n\t0x14, 0x6e, 0xec, 0x5a, 0xe8, 0xeb, 0xba, 0xca, 0x50, 0xba, 0x69, 0x84, 0x6c, 0x89, 0x82, 0xcb,\n\t0x6a, 0x13, 0x5a, 0x41, 0xc4, 0x9b, 0x5d, 0x05, 0x11, 0x2a, 0x12, 0x11, 0x41, 0x58, 0xed, 0x34,\n\t0x19, 0x66, 0x83, 0x9b, 0x4c, 0xc9, 0x4c, 0xcb, 0xf6, 0xea, 0x2f, 0x10, 0xfc, 0x17, 0x9e, 0x3c,\n\t0xf8, 0x23, 0xf6, 0xb8, 0x78, 0xf2, 0xb4, 0x48, 0x7b, 0xf0, 0x3f, 0x78, 0x92, 0x64, 0xa6, 0x69,\n\t0xba, 0xb6, 0x74, 0x61, 0xf7, 0x94, 0x64, 0xbe, 0xef, 0x7d, 0x6f, 0xde, 0xc7, 0x97, 0x07, 0xb7,\n\t0xbd, 0x71, 0x9f, 0xc4, 0x0e, 0x8d, 0x03, 0xdf, 0x19, 0xb5, 0xfa, 0x44, 0xe0, 0x96, 0x23, 0x8e,\n\t0xed, 0x41, 0xcc, 0x04, 0x43, 0x28, 0x05, 0xed, 0x04, 0xb4, 0x15, 0x68, 0x54, 0x29, 0xa3, 0x2c,\n\t0x85, 0x9d, 0xe4, 0x4d, 0x32, 0x8d, 0x6d, 0x8f, 0xf1, 0x90, 0x71, 0x27, 0xe4, 0xd4, 0x19, 0xb5,\n\t0x92, 0x87, 0x02, 0xea, 0x12, 0xf8, 0x28, 0x2b, 0xe4, 0x87, 0x82, 0xcc, 0x65, 0xad, 0xc7, 0x03,\n\t0x32, 0xc7, 0xa5, 0x66, 0x1f, 0x73, 0x92, 0x11, 0x3c, 0x16, 0x44, 0x12, 0xb7, 0x3e, 0xc0, 0x56,\n\t0x97, 0xd3, 0xfd, 0x98, 0x60, 0x41, 0x5c, 0x36, 0x14, 0x04, 0xd5, 0xa0, 0xc4, 0xd9, 0x30, 0xf6,\n\t0x88, 0xae, 0x35, 0xb4, 0xdd, 0xb2, 0xab, 0xbe, 0x50, 0x03, 0x2a, 0x3e, 0xe1, 0x22, 0x88, 0xb0,\n\t0x08, 0x58, 0xa4, 0x5f, 0x4b, 0xc1, 0xfc, 0x11, 0x42, 0xb0, 0x11, 0xe1, 0x90, 0xe8, 0xc5, 0x14,\n\t0x4a, 0xdf, 0xad, 0x6f, 0x1a, 0x6c, 0x76, 0x39, 0x7d, 0xee, 0x07, 0xe2, 0xb2, 0xf2, 0x3d, 0xb8,\n\t0x3e, 0xc2, 0x47, 0x43, 0xa9, 0x5f, 0x69, 0xd7, 0x6d, 0x65, 0x44, 0x32, 0xda, 0xcc, 0x59, 0x7b,\n\t0x9f, 0x05, 0x51, 0xc7, 0x39, 0x39, 0xdb, 0x29, 0xfc, 0x3d, 0xdb, 0xb9, 0x47, 0x03, 0x71, 0x38,\n\t0xec, 0xdb, 0x1e, 0x0b, 0x95, 0x6b, 0xea, 0xd1, 0xe4, 0xfe, 0x27, 0x65, 0x53, 0x52, 0xe0, 0x4a,\n\t0x61, 0xeb, 0x65, 0x6a, 0xc6, 0x33, 0x72, 0x44, 0x2e, 0x6d, 0x86, 0xd5, 0x83, 0x5b, 0xf9, 0xb9,\n\t0x5f, 0xe1, 0xf0, 0xaa, 0xad, 0xfd, 0xaa, 0xc1, 0xcd, 0x2e, 0xa7, 0x6f, 0x07, 0x3e, 0x16, 0xe4,\n\t0x35, 0x8e, 0x71, 0xc8, 0xd1, 0x23, 0x28, 0xe3, 0xa1, 0x38, 0x64, 0x71, 0x20, 0xc6, 0xb2, 0x49,\n\t0x47, 0xff, 0xf9, 0xa3, 0x59, 0x55, 0x56, 0x3d, 0xf5, 0xfd, 0x98, 0x70, 0xfe, 0x46, 0xc4, 0x41,\n\t0x44, 0xdd, 0x39, 0x15, 0x3d, 0x86, 0xd2, 0x20, 0x55, 0x48, 0x9b, 0x57, 0xda, 0x86, 0xfd, 0x7f,\n\t0x6a, 0x6d, 0xd9, 0xa3, 0xb3, 0x91, 0xb8, 0xeb, 0x2a, 0xfe, 0x93, 0xad, 0xcf, 0x7f, 0xbe, 0xef,\n\t0xcd, 0x95, 0x2c, 0x1d, 0x6a, 0x8b, 0x81, 0x72, 0x09, 0x1f, 0xb0, 0x88, 0x13, 0xab, 0x06, 0xd5,\n\t0xbc, 0x23, 0xd9, 0xb9, 0xac, 0xc8, 0xb9, 0x9e, 0x21, 0x06, 0xe8, 0xe7, 0x3d, 0xcc, 0xb0, 0x3a,\n\t0x6c, 0x9f, 0x1b, 0x7e, 0x06, 0xb5, 0xa7, 0x45, 0x28, 0x76, 0x39, 0x45, 0x07, 0x50, 0xc9, 0x07,\n\t0xdb, 0x5a, 0x36, 0xd3, 0xe2, 0x5d, 0x8d, 0xbd, 0xf5, 0x9c, 0x59, 0x1b, 0xf4, 0x0e, 0xca, 0xf3,\n\t0x58, 0x37, 0x56, 0x14, 0x66, 0x0c, 0x63, 0x77, 0x1d, 0x23, 0x13, 0x3e, 0x80, 0x4a, 0x3e, 0x83,\n\t0xab, 0xee, 0x9d, 0xe3, 0xac, 0xbc, 0xf7, 0x12, 0x57, 0x91, 0x07, 0x37, 0x16, 0x63, 0x79, 0x77,\n\t0xdd, 0xcd, 0x12, 0x96, 0xf1, 0xe0, 0x22, 0xac, 0xac, 0x49, 0x0f, 0x36, 0x17, 0x82, 0x79, 0x67,\n\t0x45, 0x75, 0x9e, 0x64, 0xdc, 0xbf, 0x00, 0x69, 0xd6, 0xa1, 0xf3, 0xe2, 0x64, 0x62, 0x6a, 0xa7,\n\t0x13, 0x53, 0xfb, 0x3d, 0x31, 0xb5, 0x2f, 0x53, 0xb3, 0x70, 0x3a, 0x35, 0x0b, 0xbf, 0xa6, 0x66,\n\t0xe1, 0xbd, 0x9d, 0xff, 0xed, 0x13, 0x41, 0x8f, 0x45, 0x34, 0xc9, 0xbd, 0x43, 0x59, 0x53, 0xee,\n\t0xcb, 0x63, 0xb9, 0x31, 0xd3, 0x15, 0xd0, 0x2f, 0xa5, 0xab, 0xf0, 0xe1, 0xbf, 0x00, 0x00, 0x00,\n\t0xff, 0xff, 0x22, 0x43, 0x84, 0x7f, 0xc7, 0x05, 0x00, 0x00,\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ context.Context\n\t_ grpc.ClientConn\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// MsgClient is the client API for Msg service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype MsgClient interface {\n\tCreateRoute(ctx context.Context, in *MsgCreateRoute, opts ...grpc.CallOption) (*MsgCreateRouteResponse, error)\n\tEditRoute(ctx context.Context, in *MsgEditRoute, opts ...grpc.CallOption) (*MsgEditRouteResponse, error)\n\tDeleteRoute(ctx context.Context, in *MsgDeleteRoute, opts ...grpc.CallOption) (*MsgDeleteRouteResponse, error)\n\tEditRouteName(ctx context.Context, in *MsgEditRouteName, opts ...grpc.CallOption) (*MsgEditRouteNameResponse, error)\n\tUpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error)\n}\n\ntype msgClient struct {\n\tcc grpc1.ClientConn\n}\n\nfunc NewMsgClient(cc grpc1.ClientConn) MsgClient {\n\treturn &msgClient{cc}\n}\n\nfunc (c *msgClient) CreateRoute(ctx context.Context, in *MsgCreateRoute, opts ...grpc.CallOption) (*MsgCreateRouteResponse, error) {\n\tout := new(MsgCreateRouteResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.grid.v1beta1.Msg/CreateRoute\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) EditRoute(ctx context.Context, in *MsgEditRoute, opts ...grpc.CallOption) (*MsgEditRouteResponse, error) {\n\tout := new(MsgEditRouteResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.grid.v1beta1.Msg/EditRoute\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) DeleteRoute(ctx context.Context, in *MsgDeleteRoute, opts ...grpc.CallOption) (*MsgDeleteRouteResponse, error) {\n\tout := new(MsgDeleteRouteResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.grid.v1beta1.Msg/DeleteRoute\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) EditRouteName(ctx context.Context, in *MsgEditRouteName, opts ...grpc.CallOption) (*MsgEditRouteNameResponse, error) {\n\tout := new(MsgEditRouteNameResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.grid.v1beta1.Msg/EditRouteName\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) {\n\tout := new(MsgUpdateParamsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.grid.v1beta1.Msg/UpdateParams\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// MsgServer is the server API for Msg service.\ntype MsgServer interface {\n\tCreateRoute(context.Context, *MsgCreateRoute) (*MsgCreateRouteResponse, error)\n\tEditRoute(context.Context, *MsgEditRoute) (*MsgEditRouteResponse, error)\n\tDeleteRoute(context.Context, *MsgDeleteRoute) (*MsgDeleteRouteResponse, error)\n\tEditRouteName(context.Context, *MsgEditRouteName) (*MsgEditRouteNameResponse, error)\n\tUpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error)\n}\n\n// UnimplementedMsgServer can be embedded to have forward compatible implementations.\ntype UnimplementedMsgServer struct{}\n\nfunc (*UnimplementedMsgServer) CreateRoute(ctx context.Context, req *MsgCreateRoute) (*MsgCreateRouteResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CreateRoute not implemented\")\n}\n\nfunc (*UnimplementedMsgServer) EditRoute(ctx context.Context, req *MsgEditRoute) (*MsgEditRouteResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method EditRoute not implemented\")\n}\n\nfunc (*UnimplementedMsgServer) DeleteRoute(ctx context.Context, req *MsgDeleteRoute) (*MsgDeleteRouteResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method DeleteRoute not implemented\")\n}\n\nfunc (*UnimplementedMsgServer) EditRouteName(ctx context.Context, req *MsgEditRouteName) (*MsgEditRouteNameResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method EditRouteName not implemented\")\n}\n\nfunc (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method UpdateParams not implemented\")\n}\n\nfunc RegisterMsgServer(s grpc1.Server, srv MsgServer) {\n\ts.RegisterService(&_Msg_serviceDesc, srv)\n}\n\nfunc _Msg_CreateRoute_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgCreateRoute)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).CreateRoute(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.grid.v1beta1.Msg/CreateRoute\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).CreateRoute(ctx, req.(*MsgCreateRoute))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_EditRoute_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgEditRoute)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).EditRoute(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.grid.v1beta1.Msg/EditRoute\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).EditRoute(ctx, req.(*MsgEditRoute))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_DeleteRoute_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgDeleteRoute)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).DeleteRoute(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.grid.v1beta1.Msg/DeleteRoute\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).DeleteRoute(ctx, req.(*MsgDeleteRoute))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_EditRouteName_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgEditRouteName)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).EditRouteName(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.grid.v1beta1.Msg/EditRouteName\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).EditRouteName(ctx, req.(*MsgEditRouteName))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgUpdateParams)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).UpdateParams(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.grid.v1beta1.Msg/UpdateParams\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _Msg_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"cyber.grid.v1beta1.Msg\",\n\tHandlerType: (*MsgServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"CreateRoute\",\n\t\t\tHandler:    _Msg_CreateRoute_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"EditRoute\",\n\t\t\tHandler:    _Msg_EditRoute_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"DeleteRoute\",\n\t\t\tHandler:    _Msg_DeleteRoute_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"EditRouteName\",\n\t\t\tHandler:    _Msg_EditRouteName_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"UpdateParams\",\n\t\t\tHandler:    _Msg_UpdateParams_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"cyber/grid/v1beta1/tx.proto\",\n}\n\nfunc (m *MsgCreateRoute) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgCreateRoute) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgCreateRoute) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Name) > 0 {\n\t\ti -= len(m.Name)\n\t\tcopy(dAtA[i:], m.Name)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Name)))\n\t\ti--\n\t\tdAtA[i] = 0x1a\n\t}\n\tif len(m.Destination) > 0 {\n\t\ti -= len(m.Destination)\n\t\tcopy(dAtA[i:], m.Destination)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Destination)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Source) > 0 {\n\t\ti -= len(m.Source)\n\t\tcopy(dAtA[i:], m.Source)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Source)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgEditRoute) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgEditRoute) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgEditRoute) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Value.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x1a\n\tif len(m.Destination) > 0 {\n\t\ti -= len(m.Destination)\n\t\tcopy(dAtA[i:], m.Destination)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Destination)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Source) > 0 {\n\t\ti -= len(m.Source)\n\t\tcopy(dAtA[i:], m.Source)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Source)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgDeleteRoute) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgDeleteRoute) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgDeleteRoute) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Destination) > 0 {\n\t\ti -= len(m.Destination)\n\t\tcopy(dAtA[i:], m.Destination)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Destination)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Source) > 0 {\n\t\ti -= len(m.Source)\n\t\tcopy(dAtA[i:], m.Source)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Source)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgEditRouteName) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgEditRouteName) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgEditRouteName) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Name) > 0 {\n\t\ti -= len(m.Name)\n\t\tcopy(dAtA[i:], m.Name)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Name)))\n\t\ti--\n\t\tdAtA[i] = 0x1a\n\t}\n\tif len(m.Destination) > 0 {\n\t\ti -= len(m.Destination)\n\t\tcopy(dAtA[i:], m.Destination)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Destination)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Source) > 0 {\n\t\ti -= len(m.Source)\n\t\tcopy(dAtA[i:], m.Source)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Source)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x12\n\tif len(m.Authority) > 0 {\n\t\ti -= len(m.Authority)\n\t\tcopy(dAtA[i:], m.Authority)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Authority)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgCreateRouteResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgCreateRouteResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgCreateRouteResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgEditRouteResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgEditRouteResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgEditRouteResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgDeleteRouteResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgDeleteRouteResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgDeleteRouteResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgEditRouteNameResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgEditRouteNameResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgEditRouteNameResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintTx(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovTx(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *MsgCreateRoute) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Source)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.Destination)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.Name)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *MsgEditRoute) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Source)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.Destination)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = m.Value.Size()\n\tn += 1 + l + sovTx(uint64(l))\n\treturn n\n}\n\nfunc (m *MsgDeleteRoute) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Source)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.Destination)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *MsgEditRouteName) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Source)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.Destination)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.Name)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *MsgUpdateParams) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Authority)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = m.Params.Size()\n\tn += 1 + l + sovTx(uint64(l))\n\treturn n\n}\n\nfunc (m *MsgCreateRouteResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgEditRouteResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgDeleteRouteResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgEditRouteNameResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgUpdateParamsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc sovTx(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozTx(x uint64) (n int) {\n\treturn sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *MsgCreateRoute) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgCreateRoute: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgCreateRoute: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Source\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Source = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Destination\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Destination = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Name\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Name = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgEditRoute) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgEditRoute: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgEditRoute: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Source\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Source = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Destination\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Destination = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Value\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Value.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgDeleteRoute) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgDeleteRoute: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgDeleteRoute: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Source\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Source = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Destination\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Destination = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgEditRouteName) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgEditRouteName: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgEditRouteName: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Source\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Source = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Destination\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Destination = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Name\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Name = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgUpdateParams) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParams: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParams: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Authority\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Authority = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgCreateRouteResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgCreateRouteResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgCreateRouteResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgEditRouteResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgEditRouteResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgEditRouteResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgDeleteRouteResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgDeleteRouteResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgDeleteRouteResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgEditRouteNameResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgEditRouteNameResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgEditRouteNameResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParamsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipTx(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthTx\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupTx\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthTx\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthTx        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowTx          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupTx = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/grid/types/types.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/grid/v1beta1/types.proto\n\npackage types\n\nimport (\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\tgithub_com_cosmos_cosmos_sdk_types \"github.com/cosmos/cosmos-sdk/types\"\n\ttypes \"github.com/cosmos/cosmos-sdk/types\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype Params struct {\n\tMaxRoutes uint32 `protobuf:\"varint,1,opt,name=max_routes,json=maxRoutes,proto3\" json:\"max_routes,omitempty\"`\n}\n\nfunc (m *Params) Reset()         { *m = Params{} }\nfunc (m *Params) String() string { return proto.CompactTextString(m) }\nfunc (*Params) ProtoMessage()    {}\nfunc (*Params) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_1673181069a7f05c, []int{0}\n}\n\nfunc (m *Params) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_Params.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *Params) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Params.Merge(m, src)\n}\n\nfunc (m *Params) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *Params) XXX_DiscardUnknown() {\n\txxx_messageInfo_Params.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Params proto.InternalMessageInfo\n\nfunc (m *Params) GetMaxRoutes() uint32 {\n\tif m != nil {\n\t\treturn m.MaxRoutes\n\t}\n\treturn 0\n}\n\ntype Route struct {\n\tSource      string                                   `protobuf:\"bytes,1,opt,name=source,proto3\" json:\"source,omitempty\"`\n\tDestination string                                   `protobuf:\"bytes,2,opt,name=destination,proto3\" json:\"destination,omitempty\"`\n\tName        string                                   `protobuf:\"bytes,3,opt,name=name,proto3\" json:\"name,omitempty\"`\n\tValue       github_com_cosmos_cosmos_sdk_types.Coins `protobuf:\"bytes,4,rep,name=value,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins\" json:\"value\"`\n}\n\nfunc (m *Route) Reset()         { *m = Route{} }\nfunc (m *Route) String() string { return proto.CompactTextString(m) }\nfunc (*Route) ProtoMessage()    {}\nfunc (*Route) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_1673181069a7f05c, []int{1}\n}\n\nfunc (m *Route) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *Route) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_Route.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *Route) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Route.Merge(m, src)\n}\n\nfunc (m *Route) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *Route) XXX_DiscardUnknown() {\n\txxx_messageInfo_Route.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Route proto.InternalMessageInfo\n\ntype Value struct {\n\tValue github_com_cosmos_cosmos_sdk_types.Coins `protobuf:\"bytes,1,rep,name=value,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins\" json:\"value\"`\n}\n\nfunc (m *Value) Reset()         { *m = Value{} }\nfunc (m *Value) String() string { return proto.CompactTextString(m) }\nfunc (*Value) ProtoMessage()    {}\nfunc (*Value) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_1673181069a7f05c, []int{2}\n}\n\nfunc (m *Value) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *Value) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_Value.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *Value) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Value.Merge(m, src)\n}\n\nfunc (m *Value) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *Value) XXX_DiscardUnknown() {\n\txxx_messageInfo_Value.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Value proto.InternalMessageInfo\n\nfunc init() {\n\tproto.RegisterType((*Params)(nil), \"cyber.grid.v1beta1.Params\")\n\tproto.RegisterType((*Route)(nil), \"cyber.grid.v1beta1.Route\")\n\tproto.RegisterType((*Value)(nil), \"cyber.grid.v1beta1.Value\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/grid/v1beta1/types.proto\", fileDescriptor_1673181069a7f05c) }\n\nvar fileDescriptor_1673181069a7f05c = []byte{\n\t// 343 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x92, 0xbd, 0x4e, 0xc3, 0x30,\n\t0x10, 0xc7, 0x63, 0xfa, 0x21, 0xea, 0x8a, 0xc5, 0x42, 0x28, 0x54, 0xc2, 0xa9, 0x3a, 0x75, 0xa9,\n\t0x4d, 0x61, 0xeb, 0x58, 0x16, 0x46, 0x94, 0x81, 0x81, 0x05, 0x39, 0xa9, 0x15, 0x22, 0x48, 0xae,\n\t0xb2, 0x9d, 0xaa, 0x7d, 0x03, 0x46, 0x1e, 0xa1, 0x33, 0x8f, 0xc1, 0xd4, 0xb1, 0x23, 0x13, 0xa0,\n\t0x76, 0xe9, 0x63, 0xa0, 0xd8, 0x01, 0xfa, 0x02, 0x4c, 0x3e, 0xff, 0x7f, 0xe7, 0xfb, 0xf0, 0x1d,\n\t0xa6, 0xf1, 0x22, 0x92, 0x8a, 0x27, 0x2a, 0x9d, 0xf0, 0xd9, 0x30, 0x92, 0x46, 0x0c, 0xb9, 0x59,\n\t0x4c, 0xa5, 0x66, 0x53, 0x05, 0x06, 0x08, 0xb1, 0x9c, 0x95, 0x9c, 0x55, 0xbc, 0x73, 0x9c, 0x40,\n\t0x02, 0x16, 0xf3, 0xd2, 0x72, 0x9e, 0x1d, 0x1a, 0x83, 0xce, 0x40, 0xf3, 0x48, 0x68, 0xf9, 0x1b,\n\t0x2a, 0x86, 0x34, 0x77, 0xbc, 0x37, 0xc0, 0xcd, 0x1b, 0xa1, 0x44, 0xa6, 0xc9, 0x19, 0xc6, 0x99,\n\t0x98, 0xdf, 0x2b, 0x28, 0x8c, 0xd4, 0x3e, 0xea, 0xa2, 0xfe, 0x51, 0xd8, 0xca, 0xc4, 0x3c, 0xb4,\n\t0xc2, 0xa8, 0xbe, 0x5b, 0x06, 0xa8, 0xf7, 0x86, 0x70, 0xc3, 0x0a, 0xe4, 0x04, 0x37, 0x35, 0x14,\n\t0x2a, 0x96, 0xd6, 0xb5, 0x15, 0x56, 0x37, 0xd2, 0xc5, 0xed, 0x89, 0xd4, 0x26, 0xcd, 0x85, 0x49,\n\t0x21, 0xf7, 0x0f, 0x2c, 0xdc, 0x97, 0x08, 0xc1, 0xf5, 0x5c, 0x64, 0xd2, 0xaf, 0x59, 0x64, 0x6d,\n\t0x22, 0x70, 0x63, 0x26, 0x9e, 0x0a, 0xe9, 0xd7, 0xbb, 0xb5, 0x7e, 0xfb, 0xe2, 0x94, 0xb9, 0xb2,\n\t0x59, 0x59, 0xf6, 0x4f, 0x87, 0xec, 0x0a, 0xd2, 0x7c, 0x7c, 0xbe, 0xfa, 0x08, 0xbc, 0xd7, 0xcf,\n\t0xa0, 0x9f, 0xa4, 0xe6, 0xa1, 0x88, 0x58, 0x0c, 0x19, 0xaf, 0x7a, 0x74, 0xc7, 0x40, 0x4f, 0x1e,\n\t0xab, 0xcf, 0x2a, 0x1f, 0xe8, 0xd0, 0x45, 0x1e, 0x1d, 0x3e, 0x2f, 0x03, 0x6f, 0xb7, 0x0c, 0xbc,\n\t0x9e, 0xc1, 0x8d, 0xdb, 0x52, 0xfa, 0xcb, 0x8a, 0xfe, 0x3f, 0xeb, 0xf8, 0x7a, 0xb5, 0xa1, 0x68,\n\t0xbd, 0xa1, 0xe8, 0x6b, 0x43, 0xd1, 0xcb, 0x96, 0x7a, 0xeb, 0x2d, 0xf5, 0xde, 0xb7, 0xd4, 0xbb,\n\t0x63, 0xfb, 0x41, 0xcb, 0xc1, 0xc6, 0x90, 0x27, 0x4a, 0x6a, 0xcd, 0x13, 0x18, 0xb8, 0x4d, 0x98,\n\t0xbb, 0x5d, 0xb0, 0x09, 0xa2, 0xa6, 0x1d, 0xdd, 0xe5, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3c,\n\t0x5d, 0x34, 0xe8, 0x26, 0x02, 0x00, 0x00,\n}\n\nfunc (this *Params) Equal(that interface{}) bool {\n\tif that == nil {\n\t\treturn this == nil\n\t}\n\n\tthat1, ok := that.(*Params)\n\tif !ok {\n\t\tthat2, ok := that.(Params)\n\t\tif ok {\n\t\t\tthat1 = &that2\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\tif that1 == nil {\n\t\treturn this == nil\n\t} else if this == nil {\n\t\treturn false\n\t}\n\tif this.MaxRoutes != that1.MaxRoutes {\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc (m *Params) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *Params) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.MaxRoutes != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.MaxRoutes))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *Route) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *Route) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *Route) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Value) > 0 {\n\t\tfor iNdEx := len(m.Value) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.Value[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintTypes(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0x22\n\t\t}\n\t}\n\tif len(m.Name) > 0 {\n\t\ti -= len(m.Name)\n\t\tcopy(dAtA[i:], m.Name)\n\t\ti = encodeVarintTypes(dAtA, i, uint64(len(m.Name)))\n\t\ti--\n\t\tdAtA[i] = 0x1a\n\t}\n\tif len(m.Destination) > 0 {\n\t\ti -= len(m.Destination)\n\t\tcopy(dAtA[i:], m.Destination)\n\t\ti = encodeVarintTypes(dAtA, i, uint64(len(m.Destination)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Source) > 0 {\n\t\ti -= len(m.Source)\n\t\tcopy(dAtA[i:], m.Source)\n\t\ti = encodeVarintTypes(dAtA, i, uint64(len(m.Source)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *Value) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *Value) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *Value) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Value) > 0 {\n\t\tfor iNdEx := len(m.Value) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.Value[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintTypes(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0xa\n\t\t}\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintTypes(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovTypes(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *Params) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.MaxRoutes != 0 {\n\t\tn += 1 + sovTypes(uint64(m.MaxRoutes))\n\t}\n\treturn n\n}\n\nfunc (m *Route) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Source)\n\tif l > 0 {\n\t\tn += 1 + l + sovTypes(uint64(l))\n\t}\n\tl = len(m.Destination)\n\tif l > 0 {\n\t\tn += 1 + l + sovTypes(uint64(l))\n\t}\n\tl = len(m.Name)\n\tif l > 0 {\n\t\tn += 1 + l + sovTypes(uint64(l))\n\t}\n\tif len(m.Value) > 0 {\n\t\tfor _, e := range m.Value {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovTypes(uint64(l))\n\t\t}\n\t}\n\treturn n\n}\n\nfunc (m *Value) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif len(m.Value) > 0 {\n\t\tfor _, e := range m.Value {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovTypes(uint64(l))\n\t\t}\n\t}\n\treturn n\n}\n\nfunc sovTypes(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozTypes(x uint64) (n int) {\n\treturn sovTypes(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *Params) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: Params: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: Params: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MaxRoutes\", wireType)\n\t\t\t}\n\t\t\tm.MaxRoutes = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.MaxRoutes |= uint32(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTypes(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *Route) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: Route: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: Route: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Source\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Source = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Destination\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Destination = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Name\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Name = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 4:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Value\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Value = append(m.Value, types.Coin{})\n\t\t\tif err := m.Value[len(m.Value)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTypes(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *Value) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: Value: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: Value: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Value\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Value = append(m.Value, types.Coin{})\n\t\t\tif err := m.Value[len(m.Value)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTypes(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipTypes(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowTypes\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupTypes\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthTypes\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthTypes        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowTypes          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupTypes = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/grid/wasm/interface.go",
    "content": "package wasm\n\nimport (\n\t\"encoding/json\"\n\n\terrorsmod \"cosmossdk.io/errors\"\n\n\twasmvmtypes \"github.com/CosmWasm/wasmvm/types\"\n\n\tpluginstypes \"github.com/cybercongress/go-cyber/v7/plugins/types\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/grid/keeper\"\n)\n\ntype Messenger struct {\n\tkeeper *keeper.Keeper\n}\n\nfunc NewMessenger(\n\tkeeper *keeper.Keeper,\n) *Messenger {\n\treturn &Messenger{\n\t\tkeeper: keeper,\n\t}\n}\n\nfunc (m *Messenger) HandleMsg(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg pluginstypes.CyberMsg) ([]sdk.Event, [][]byte, error) {\n\tswitch {\n\tcase msg.CreateEnergyRoute != nil:\n\t\tif msg.CreateEnergyRoute.Source != contractAddr.String() {\n\t\t\treturn nil, nil, wasmvmtypes.InvalidRequest{Err: \"create route wrong source\"}\n\t\t}\n\n\t\tmsgServer := keeper.NewMsgServerImpl(*m.keeper)\n\n\t\tif err := msg.CreateEnergyRoute.ValidateBasic(); err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed validating msg\")\n\t\t}\n\n\t\tres, err := msgServer.CreateRoute(\n\t\t\tsdk.WrapSDKContext(ctx),\n\t\t\tmsg.CreateEnergyRoute,\n\t\t)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"create energy route msg\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(*res)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed to serialize create energy route response\")\n\t\t}\n\n\t\tresp := [][]byte{responseBytes}\n\n\t\treturn nil, resp, nil\n\tcase msg.EditEnergyRoute != nil:\n\t\tif msg.EditEnergyRoute.Source != contractAddr.String() {\n\t\t\treturn nil, nil, wasmvmtypes.InvalidRequest{Err: \"create route wrong source\"}\n\t\t}\n\n\t\tmsgServer := keeper.NewMsgServerImpl(*m.keeper)\n\n\t\tif err := msg.EditEnergyRoute.ValidateBasic(); err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed validating msg\")\n\t\t}\n\n\t\tres, err := msgServer.EditRoute(\n\t\t\tsdk.WrapSDKContext(ctx),\n\t\t\tmsg.EditEnergyRoute,\n\t\t)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"edit energy route msg\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(*res)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed to serialize edit energy route response\")\n\t\t}\n\n\t\tresp := [][]byte{responseBytes}\n\n\t\treturn nil, resp, nil\n\tcase msg.EditEnergyRouteName != nil:\n\t\tif msg.EditEnergyRouteName.Source != contractAddr.String() {\n\t\t\treturn nil, nil, wasmvmtypes.InvalidRequest{Err: \"edit energy route wrong source\"}\n\t\t}\n\n\t\tmsgServer := keeper.NewMsgServerImpl(*m.keeper)\n\n\t\tif err := msg.EditEnergyRouteName.ValidateBasic(); err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed validating msg\")\n\t\t}\n\n\t\tres, err := msgServer.EditRouteName(\n\t\t\tsdk.WrapSDKContext(ctx),\n\t\t\tmsg.EditEnergyRouteName,\n\t\t)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"edit energy route name msg\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(*res)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed to serialize edit energy route name response\")\n\t\t}\n\n\t\tresp := [][]byte{responseBytes}\n\n\t\treturn nil, resp, nil\n\tcase msg.DeleteEnergyRoute != nil:\n\t\tif msg.DeleteEnergyRoute.Source != contractAddr.String() {\n\t\t\treturn nil, nil, wasmvmtypes.InvalidRequest{Err: \"delete route wrong source\"}\n\t\t}\n\n\t\tmsgServer := keeper.NewMsgServerImpl(*m.keeper)\n\n\t\tif err := msg.DeleteEnergyRoute.ValidateBasic(); err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed validating msg\")\n\t\t}\n\n\t\tres, err := msgServer.DeleteRoute(\n\t\t\tsdk.WrapSDKContext(ctx),\n\t\t\tmsg.DeleteEnergyRoute,\n\t\t)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"delete energy route name msg\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(*res)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed to serialize delete energy route name response\")\n\t\t}\n\n\t\tresp := [][]byte{responseBytes}\n\n\t\treturn nil, resp, nil\n\tdefault:\n\t\treturn nil, nil, pluginstypes.ErrHandleMsg\n\t}\n}\n\ntype Querier struct {\n\t*keeper.Keeper\n}\n\nfunc NewWasmQuerier(keeper *keeper.Keeper) *Querier {\n\treturn &Querier{keeper}\n}\n\nfunc (querier *Querier) HandleQuery(ctx sdk.Context, query pluginstypes.CyberQuery) ([]byte, error) {\n\tswitch {\n\tcase query.SourceRoutes != nil:\n\t\tres, err := querier.Keeper.SourceRoutes(ctx, query.SourceRoutes)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to get source routes\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(res)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to serialize source routes response\")\n\t\t}\n\t\treturn responseBytes, nil\n\n\tcase query.SourceRoutedEnergy != nil:\n\t\tres, err := querier.Keeper.SourceRoutedEnergy(ctx, query.SourceRoutedEnergy)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to get source routed energy\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(res)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to serialize source routed energy response\")\n\t\t}\n\t\treturn responseBytes, nil\n\n\tcase query.DestinationRoutedEnergy != nil:\n\t\tres, err := querier.Keeper.DestinationRoutedEnergy(ctx, query.DestinationRoutedEnergy)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to get destination routed energy\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(res)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to serialize destination routed energy response\")\n\t\t}\n\t\treturn responseBytes, nil\n\n\tcase query.Route != nil:\n\t\tres, err := querier.Keeper.Route(ctx, query.Route)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to get route\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(res)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to serialize route response\")\n\t\t}\n\t\treturn responseBytes, nil\n\n\tdefault:\n\t\treturn nil, pluginstypes.ErrHandleQuery\n\t}\n}\n"
  },
  {
    "path": "x/liquidity/abci.go",
    "content": "package liquidity\n\nimport (\n\t\"time\"\n\n\t\"github.com/cosmos/cosmos-sdk/telemetry\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n)\n\n// In the Begin blocker of the liquidity module,\n// Reinitialize batch messages that were not executed in the previous batch and delete batch messages that were executed or ready to delete.\nfunc BeginBlocker(ctx sdk.Context, k keeper.Keeper) {\n\tdefer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyBeginBlocker)\n\tk.DeleteAndInitPoolBatches(ctx)\n}\n\n// In case of deposit, withdraw, and swap msgs, unlike other normal tx msgs,\n// collect them in the liquidity pool batch and perform an execution once at the endblock to calculate and use the universal price.\nfunc EndBlocker(ctx sdk.Context, k keeper.Keeper) {\n\tdefer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyEndBlocker)\n\tk.ExecutePoolBatches(ctx)\n}\n"
  },
  {
    "path": "x/liquidity/client/cli/flags.go",
    "content": "package cli\n\n// DONTCOVER\n\nimport (\n\tflag \"github.com/spf13/pflag\"\n)\n\nconst (\n\tFlagPoolCoinDenom = \"pool-coin-denom\"\n\tFlagReserveAcc    = \"reserve-acc\"\n)\n\nfunc flagSetPool() *flag.FlagSet {\n\tfs := flag.NewFlagSet(\"\", flag.ContinueOnError)\n\n\tfs.String(FlagPoolCoinDenom, \"\", \"The denomination of the pool coin\")\n\tfs.String(FlagReserveAcc, \"\", \"The Bech32 address of the reserve account\")\n\n\treturn fs\n}\n"
  },
  {
    "path": "x/liquidity/client/cli/query.go",
    "content": "package cli\n\n// DONTCOVER\n// client is excluded from test coverage in the poc phase milestone 1 and will be included in milestone 2 with completeness\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/cosmos/cosmos-sdk/client/flags\"\n\t\"github.com/cosmos/cosmos-sdk/version\"\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n)\n\n// GetQueryCmd returns the cli query commands for this module\nfunc GetQueryCmd() *cobra.Command {\n\tliquidityQueryCmd := &cobra.Command{\n\t\tUse:                        types.ModuleName,\n\t\tShort:                      \"Querying commands for the liquidity module\",\n\t\tDisableFlagParsing:         true,\n\t\tSuggestionsMinimumDistance: 2,\n\t\tRunE:                       client.ValidateCmd,\n\t}\n\n\tliquidityQueryCmd.AddCommand(\n\t\tGetCmdQueryParams(),\n\t\tGetCmdQueryLiquidityPool(),\n\t\tGetCmdQueryLiquidityPools(),\n\t\tGetCmdQueryLiquidityPoolBatch(),\n\t\tGetCmdQueryPoolBatchDepositMsgs(),\n\t\tGetCmdQueryPoolBatchDepositMsg(),\n\t\tGetCmdQueryPoolBatchWithdrawMsgs(),\n\t\tGetCmdQueryPoolBatchWithdrawMsg(),\n\t\tGetCmdQueryPoolBatchSwapMsgs(),\n\t\tGetCmdQueryPoolBatchSwapMsg(),\n\t)\n\n\treturn liquidityQueryCmd\n}\n\n// GetCmdQueryParams implements the params query command.\nfunc GetCmdQueryParams() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"params\",\n\t\tArgs:  cobra.NoArgs,\n\t\tShort: \"Query the values set as liquidity parameters\",\n\t\tLong: strings.TrimSpace(\n\t\t\tfmt.Sprintf(`Query values set as liquidity parameters.\n\nExample:\n$ %s query %s params\n`,\n\t\t\t\tversion.AppName, types.ModuleName,\n\t\t\t),\n\t\t),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tres, err := queryClient.Params(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryParamsRequest{},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(&res.Params)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryLiquidityPool() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"pool [pool-id]\",\n\t\tShort: \"Query details of a liquidity pool\",\n\t\tLong: strings.TrimSpace(\n\t\t\tfmt.Sprintf(`Query details of a liquidity pool\nExample:\n$ %[1]s query %[2]s pool 1\n\nExample (with pool coin denom):\n$ %[1]s query %[2]s pool --pool-coin-denom=[denom]\n\nExample (with reserve acc):\n$ %[1]s query %[2]s pool --reserve-acc=[address]\n`,\n\t\t\t\tversion.AppName, types.ModuleName,\n\t\t\t),\n\t\t),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tvar res *types.QueryLiquidityPoolResponse\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tfoundArg := false\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tpoolCoinDenom, _ := cmd.Flags().GetString(FlagPoolCoinDenom)\n\t\t\tif poolCoinDenom != \"\" {\n\t\t\t\tfoundArg = true\n\t\t\t\tres, err = queryClient.LiquidityPoolByPoolCoinDenom(\n\t\t\t\t\tcontext.Background(),\n\t\t\t\t\t&types.QueryLiquidityPoolByPoolCoinDenomRequest{PoolCoinDenom: poolCoinDenom},\n\t\t\t\t)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treserveAcc, _ := cmd.Flags().GetString(FlagReserveAcc)\n\t\t\tif !foundArg && reserveAcc != \"\" {\n\t\t\t\tfoundArg = true\n\t\t\t\tres, err = queryClient.LiquidityPoolByReserveAcc(\n\t\t\t\t\tcontext.Background(),\n\t\t\t\t\t&types.QueryLiquidityPoolByReserveAccRequest{ReserveAcc: reserveAcc},\n\t\t\t\t)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif !foundArg && len(args) > 0 {\n\t\t\t\tpoolID, err := strconv.ParseUint(args[0], 10, 64)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"pool-id %s not a valid uint, input a valid unsigned 32-bit integer for pool-id\", args[0])\n\t\t\t\t}\n\n\t\t\t\tif poolID != 0 {\n\t\t\t\t\tfoundArg = true\n\t\t\t\t\tres, err = queryClient.LiquidityPool(\n\t\t\t\t\t\tcontext.Background(),\n\t\t\t\t\t\t&types.QueryLiquidityPoolRequest{PoolId: poolID},\n\t\t\t\t\t)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif !foundArg {\n\t\t\t\treturn fmt.Errorf(\"provide the pool-id argument or --%s or --%s flag\", FlagPoolCoinDenom, FlagReserveAcc)\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\tcmd.Flags().AddFlagSet(flagSetPool())\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryLiquidityPools() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"pools\",\n\t\tArgs:  cobra.NoArgs,\n\t\tShort: \"Query for all liquidity pools\",\n\t\tLong: strings.TrimSpace(\n\t\t\tfmt.Sprintf(`Query details about all liquidity pools on a network.\nExample:\n$ %s query %s pools\n`,\n\t\t\t\tversion.AppName, types.ModuleName,\n\t\t\t),\n\t\t),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\t\t\tpageReq, err := client.ReadPageRequest(cmd.Flags())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tres, err := queryClient.LiquidityPools(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryLiquidityPoolsRequest{Pagination: pageReq},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryLiquidityPoolBatch() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"batch [pool-id]\",\n\t\tArgs:  cobra.ExactArgs(1),\n\t\tShort: \"Query details of a liquidity pool batch\",\n\t\tLong: strings.TrimSpace(\n\t\t\tfmt.Sprintf(`Query details of a liquidity pool batch\nExample:\n$ %s query %s batch 1\n`,\n\t\t\t\tversion.AppName, types.ModuleName,\n\t\t\t),\n\t\t),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tpoolID, err := strconv.ParseUint(args[0], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"pool-id %s not a valid uint32, input a valid unsigned 32-bit integer pool-id\", args[0])\n\t\t\t}\n\n\t\t\tres, err := queryClient.LiquidityPoolBatch(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryLiquidityPoolBatchRequest{PoolId: poolID},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\treturn cmd\n}\n\nfunc GetCmdQueryPoolBatchDepositMsgs() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"deposits [pool-id]\",\n\t\tArgs:  cobra.ExactArgs(1),\n\t\tShort: \"Query all deposit messages of the liquidity pool batch\",\n\t\tLong: strings.TrimSpace(\n\t\t\tfmt.Sprintf(`Query all deposit messages of the liquidity pool batch on the specified pool\n\nIf batch messages are normally processed from the endblock, the resulting state is applied and the messages are removed in the beginning of next block.\nTo query for past blocks, query the block height using the REST/gRPC API of a node that is not pruned.\n\nExample:\n$ %s query %s deposits 1\n`,\n\t\t\t\tversion.AppName, types.ModuleName,\n\t\t\t),\n\t\t),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\t\t\tpageReq, err := client.ReadPageRequest(cmd.Flags())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tpoolID, err := strconv.ParseUint(args[0], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"pool-id %s not a valid uint, input a valid unsigned 32-bit integer pool-id\", args[0])\n\t\t\t}\n\n\t\t\tres, err := queryClient.PoolBatchDepositMsgs(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryPoolBatchDepositMsgsRequest{\n\t\t\t\t\tPoolId:     poolID,\n\t\t\t\t\tPagination: pageReq,\n\t\t\t\t},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryPoolBatchDepositMsg() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"deposit [pool-id] [msg-index]\",\n\t\tArgs:  cobra.ExactArgs(2),\n\t\tShort: \"Query the deposit messages on the liquidity pool batch\",\n\t\tLong: strings.TrimSpace(\n\t\t\tfmt.Sprintf(`Query the deposit messages on the liquidity pool batch for the specified pool-id and msg-index\n\nIf batch messages are normally processed from the endblock,\nthe resulting state is applied and the messages are removed from the beginning of the next block.\nTo query for past blocks, query the block height using the REST/gRPC API of a node that is not pruned.\n\nExample:\n$ %s query %s deposit 1 20\n`,\n\t\t\t\tversion.AppName, types.ModuleName,\n\t\t\t),\n\t\t),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tpoolID, err := strconv.ParseUint(args[0], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"pool-id %s not a valid uint, input a valid unsigned 32-bit integer for pool-id\", args[0])\n\t\t\t}\n\n\t\t\tmsgIndex, err := strconv.ParseUint(args[1], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"msg-index %s not a valid uint, input a valid unsigned 32-bit integer for msg-index\", args[1])\n\t\t\t}\n\n\t\t\tres, err := queryClient.PoolBatchDepositMsg(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryPoolBatchDepositMsgRequest{\n\t\t\t\t\tPoolId:   poolID,\n\t\t\t\t\tMsgIndex: msgIndex,\n\t\t\t\t},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryPoolBatchWithdrawMsgs() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"withdraws [pool-id]\",\n\t\tArgs:  cobra.ExactArgs(1),\n\t\tShort: \"Query for all withdraw messages on the liquidity pool batch\",\n\t\tLong: strings.TrimSpace(\n\t\t\tfmt.Sprintf(`Query all withdraw messages on the liquidity pool batch for the specified pool-id\n\nIf batch messages are normally processed from the endblock,\nthe resulting state is applied and the messages are removed in the beginning of next block.\nTo query for past blocks, query the block height using the REST/gRPC API of a node that is not pruned.\n\nExample:\n$ %s query %s withdraws 1\n`,\n\t\t\t\tversion.AppName, types.ModuleName,\n\t\t\t),\n\t\t),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\t\t\tpageReq, err := client.ReadPageRequest(cmd.Flags())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tpoolID, err := strconv.ParseUint(args[0], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"pool-id %s not a valid uint, input a valid unsigned 32-bit integer pool-id\", args[0])\n\t\t\t}\n\n\t\t\tresult, err := queryClient.PoolBatchWithdrawMsgs(context.Background(), &types.QueryPoolBatchWithdrawMsgsRequest{\n\t\t\t\tPoolId: poolID, Pagination: pageReq,\n\t\t\t})\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn clientCtx.PrintProto(result)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryPoolBatchWithdrawMsg() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"withdraw [pool-id] [msg-index]\",\n\t\tArgs:  cobra.ExactArgs(2),\n\t\tShort: \"Query the withdraw messages in the liquidity pool batch\",\n\t\tLong: strings.TrimSpace(\n\t\t\tfmt.Sprintf(`Query the withdraw messages in the liquidity pool batch for the specified pool-id and msg-index\n\nif the batch message are normally processed from the endblock,\nthe resulting state is applied and the messages are removed in the beginning of next block.\nTo query for past blocks, query the block height using the REST/gRPC API of a node that is not pruned.\n\nExample:\n$ %s query %s withdraw 1 20\n`,\n\t\t\t\tversion.AppName, types.ModuleName,\n\t\t\t),\n\t\t),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tpoolID, err := strconv.ParseUint(args[0], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"pool-id %s not a valid uint, input a valid unsigned 32-bit integer pool-id\", args[0])\n\t\t\t}\n\n\t\t\tmsgIndex, err := strconv.ParseUint(args[1], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"msg-index %s not a valid uint, input a valid unsigned 32-bit integer msg-index\", args[1])\n\t\t\t}\n\n\t\t\tres, err := queryClient.PoolBatchWithdrawMsg(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryPoolBatchWithdrawMsgRequest{\n\t\t\t\t\tPoolId:   poolID,\n\t\t\t\t\tMsgIndex: msgIndex,\n\t\t\t\t},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryPoolBatchSwapMsgs() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"swaps [pool-id]\",\n\t\tArgs:  cobra.ExactArgs(1),\n\t\tShort: \"Query all swap messages in the liquidity pool batch\",\n\t\tLong: strings.TrimSpace(\n\t\t\tfmt.Sprintf(`Query all swap messages in the liquidity pool batch for the specified pool-id\n\nIf batch messages are normally processed from the endblock,\nthe resulting state is applied and the messages are removed in the beginning of next block.\nTo query for past blocks, query the block height using the REST/gRPC API of a node that is not pruned.\n\nExample:\n$ %s query %s swaps 1\n`,\n\t\t\t\tversion.AppName, types.ModuleName,\n\t\t\t),\n\t\t),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\t\t\tpageReq, err := client.ReadPageRequest(cmd.Flags())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tpoolID, err := strconv.ParseUint(args[0], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"pool-id %s not a valid uint, input a valid unsigned 32-bit integer pool-id\", args[0])\n\t\t\t}\n\n\t\t\tres, err := queryClient.PoolBatchSwapMsgs(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryPoolBatchSwapMsgsRequest{\n\t\t\t\t\tPoolId:     poolID,\n\t\t\t\t\tPagination: pageReq,\n\t\t\t\t},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryPoolBatchSwapMsg() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"swap [pool-id] [msg-index]\",\n\t\tArgs:  cobra.ExactArgs(2),\n\t\tShort: \"Query for the swap message on the batch of the liquidity pool specified pool-id and msg-index\",\n\t\tLong: strings.TrimSpace(\n\t\t\tfmt.Sprintf(`Query for the swap message on the batch of the liquidity pool specified pool-id and msg-index\n\nIf the batch message are normally processed and from the endblock,\nthe resulting state is applied and the messages are removed in the beginning of next block.\nTo query for past blocks, query the block height using the REST/gRPC API of a node that is not pruned.\n\nExample:\n$ %s query %s swap 1 20\n`,\n\t\t\t\tversion.AppName, types.ModuleName,\n\t\t\t),\n\t\t),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tpoolID, err := strconv.ParseUint(args[0], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"pool-id %s not a valid uint, input a valid unsigned 32-bit integer for pool-id\", args[0])\n\t\t\t}\n\n\t\t\tmsgIndex, err := strconv.ParseUint(args[1], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"msg-index %s not a valid uint, input a valid unsigned 32-bit integer for msg-index\", args[1])\n\t\t\t}\n\n\t\t\tres, err := queryClient.PoolBatchSwapMsg(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryPoolBatchSwapMsgRequest{\n\t\t\t\t\tPoolId:   poolID,\n\t\t\t\t\tMsgIndex: msgIndex,\n\t\t\t\t},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n"
  },
  {
    "path": "x/liquidity/client/cli/tx.go",
    "content": "package cli\n\n// DONTCOVER\n// client is excluded from test coverage in the poc phase milestone 1 and will be included in milestone 2 with completeness\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/cosmos/cosmos-sdk/client/flags\"\n\t\"github.com/cosmos/cosmos-sdk/client/tx\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/version\"\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n)\n\n// GetTxCmd returns a root CLI command handler for all x/liquidity transaction commands.\nfunc GetTxCmd() *cobra.Command {\n\tliquidityTxCmd := &cobra.Command{\n\t\tUse:                        types.ModuleName,\n\t\tShort:                      \"Liquidity transaction subcommands\",\n\t\tDisableFlagParsing:         true,\n\t\tSuggestionsMinimumDistance: 2,\n\t\tRunE:                       client.ValidateCmd,\n\t}\n\n\tliquidityTxCmd.AddCommand(\n\t\tNewCreatePoolCmd(),\n\t\tNewDepositWithinBatchCmd(),\n\t\tNewWithdrawWithinBatchCmd(),\n\t\tNewSwapWithinBatchCmd(),\n\t)\n\n\treturn liquidityTxCmd\n}\n\n// Create new liquidity pool with the specified pool type and deposit coins.\nfunc NewCreatePoolCmd() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"create-pool [pool-type] [deposit-coins]\",\n\t\tArgs:  cobra.ExactArgs(2),\n\t\tShort: \"Create liquidity pool and deposit coins\",\n\t\tLong: strings.TrimSpace(\n\t\t\tfmt.Sprintf(`Create liquidity pool and deposit coins.\n\nExample:\n$ %s tx %s create-pool 1 1000000000uatom,50000000000uusd --from mykey\n\nThis example creates a liquidity pool of pool-type 1 (two coins) and deposits 1000000000uatom and 50000000000uusd.\nNew liquidity pools can be created only for coin combinations that do not already exist in the network.\n\n[pool-type]: The id of the liquidity pool-type. The only supported pool type is 1\n[deposit-coins]: The amount of coins to deposit to the liquidity pool. The number of deposit coins must be 2 in pool type 1.\n`,\n\t\t\t\tversion.AppName, types.ModuleName,\n\t\t\t),\n\t\t),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tpoolCreator := clientCtx.GetFromAddress()\n\n\t\t\t// Get pool type index\n\t\t\tpoolTypeID, err := strconv.ParseUint(args[0], 10, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"pool-type %s not a valid uint, input a valid unsigned 32-bit integer for pool-type\", args[0])\n\t\t\t}\n\n\t\t\t// Get deposit coins\n\t\t\tdepositCoins, err := sdk.ParseCoinsNormalized(args[1])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\terr = depositCoins.Validate()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tif poolTypeID != 1 {\n\t\t\t\treturn types.ErrPoolTypeNotExists\n\t\t\t}\n\n\t\t\tif depositCoins.Len() != 2 {\n\t\t\t\treturn fmt.Errorf(\"the number of deposit coins must be two in pool-type 1\")\n\t\t\t}\n\n\t\t\tmsg := types.NewMsgCreatePool(poolCreator, uint32(poolTypeID), depositCoins)\n\t\t\tif err := msg.ValidateBasic(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)\n\t\t},\n\t}\n\n\tflags.AddTxFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\n// Deposit coins to the specified liquidity pool.\nfunc NewDepositWithinBatchCmd() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"deposit [pool-id] [deposit-coins]\",\n\t\tArgs:  cobra.ExactArgs(2),\n\t\tShort: \"Deposit coins to a liquidity pool\",\n\t\tLong: strings.TrimSpace(\n\t\t\tfmt.Sprintf(`Deposit coins a liquidity pool.\n\nThis deposit request is not processed immediately since it is accumulated in the liquidity pool batch.\nAll requests in a batch are treated equally and executed at the same swap price.\n\nExample:\n$ %s tx %s deposit 1 100000000uatom,5000000000uusd --from mykey\n\nThis example request deposits 100000000uatom and 5000000000uusd to pool-id 1.\nDeposits must be the same coin denoms as the reserve coins.\n\n[pool-id]: The pool id of the liquidity pool\n[deposit-coins]: The amount of coins to deposit to the liquidity pool\n`,\n\t\t\t\tversion.AppName, types.ModuleName,\n\t\t\t),\n\t\t),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tdepositor := clientCtx.GetFromAddress()\n\n\t\t\t// Get pool type index\n\t\t\tpoolID, err := strconv.ParseUint(args[0], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"pool-id %s not a valid uint, input a valid unsigned 32-bit integer for pool-id\", args[0])\n\t\t\t}\n\n\t\t\t// Get deposit coins\n\t\t\tdepositCoins, err := sdk.ParseCoinsNormalized(args[1])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\terr = depositCoins.Validate()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tif depositCoins.Len() != 2 {\n\t\t\t\treturn fmt.Errorf(\"the number of deposit coins must be two in the pool-type 1\")\n\t\t\t}\n\n\t\t\tmsg := types.NewMsgDepositWithinBatch(depositor, poolID, depositCoins)\n\t\t\tif err := msg.ValidateBasic(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)\n\t\t},\n\t}\n\n\tflags.AddTxFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\n// Withdraw pool coin from the specified liquidity pool.\nfunc NewWithdrawWithinBatchCmd() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"withdraw [pool-id] [pool-coin]\",\n\t\tArgs:  cobra.ExactArgs(2),\n\t\tShort: \"Withdraw pool coin from the specified liquidity pool\",\n\t\tLong: strings.TrimSpace(\n\t\t\tfmt.Sprintf(`Withdraw pool coin from the specified liquidity pool.\n\nThis swap request is not processed immediately since it is accumulated in the liquidity pool batch.\nAll requests in a batch are treated equally and executed at the same swap price.\n\nExample:\n$ %s tx %s withdraw 1 10000pool96EF6EA6E5AC828ED87E8D07E7AE2A8180570ADD212117B2DA6F0B75D17A6295 --from mykey\n\nThis example request withdraws 10000 pool coin from the specified liquidity pool.\nThe appropriate pool coin must be requested from the specified pool.\n\n[pool-id]: The pool id of the liquidity pool\n[pool-coin]: The amount of pool coin to withdraw from the liquidity pool\n`,\n\t\t\t\tversion.AppName, types.ModuleName,\n\t\t\t),\n\t\t),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\twithdrawer := clientCtx.GetFromAddress()\n\n\t\t\t// Get pool type index\n\t\t\tpoolID, err := strconv.ParseUint(args[0], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"pool-id %s not a valid uint, input a valid unsigned 32-bit integer for pool-id\", args[0])\n\t\t\t}\n\n\t\t\t// Get pool coin of the target pool\n\t\t\tpoolCoin, err := sdk.ParseCoinNormalized(args[1])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\terr = poolCoin.Validate()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tmsg := types.NewMsgWithdrawWithinBatch(withdrawer, poolID, poolCoin)\n\t\t\tif err := msg.ValidateBasic(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)\n\t\t},\n\t}\n\n\tflags.AddTxFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\n// Swap offer coin with demand coin from the specified liquidity pool with the given order price.\nfunc NewSwapWithinBatchCmd() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"swap [pool-id] [swap-type] [offer-coin] [demand-coin-denom] [order-price] [swap-fee-rate]\",\n\t\tArgs:  cobra.ExactArgs(6),\n\t\tShort: \"Swap offer coin with demand coin from the liquidity pool with the given order price\",\n\t\tLong: strings.TrimSpace(\n\t\t\tfmt.Sprintf(`Swap offer coin with demand coin from the liquidity pool with the given order price.\n\nThis swap request is not processed immediately since it is accumulated in the liquidity pool batch.\nAll requests in a batch are treated equally and executed at the same swap price.\nThe order of swap requests is ignored since the universal swap price is calculated in every batch to prevent front running.\n\nThe requested swap is executed with a swap price that is calculated from the given swap price function of the pool, the other swap requests, and the liquidity pool coin reserve status.\nSwap orders are executed only when the execution swap price is equal to or greater than the submitted order price of the swap order.\n\nExample:\n$ %s tx %s swap 1 1 50000000uusd uatom 0.019 0.003 --from mykey\n\nFor this example, imagine that an existing liquidity pool has with 1000000000uatom and 50000000000uusd.\nThis example request swaps 50000000uusd for at least 950000uatom with the order price of 0.019 and swap fee rate of 0.003.\nA sufficient balance of half of the swap-fee-rate of the offer coin is required to reserve the offer coin fee.\n\nThe order price is the exchange ratio of X/Y, where X is the amount of the first coin and Y is the amount of the second coin when their denoms are sorted alphabetically.\nIncreasing order price reduces the possibility for your request to be processed and results in buying uatom at a lower price than the pool price.\n\nFor explicit calculations, The swap fee rate must be the value that set as liquidity parameter in the current network.\nThe only supported swap-type is 1. For the detailed swap algorithm, see https://github.com/gravity-devs/liquidity/v3\n\n[pool-id]: The pool id of the liquidity pool \n[swap-type]: The swap type of the swap message. The only supported swap type is 1 (instant swap).\n[offer-coin]: The amount of offer coin to swap \n[demand-coin-denom]: The denomination of the coin to exchange with offer coin \n[order-price]: The limit order price for the swap order. The price is the exchange ratio of X/Y where X is the amount of the first coin and Y is the amount of the second coin when their denoms are sorted alphabetically \n[swap-fee-rate]: The swap fee rate to pay for swap that is proportional to swap amount. The swap fee rate must be the value that set as liquidity parameter in the current network.\n`,\n\t\t\t\tversion.AppName, types.ModuleName,\n\t\t\t),\n\t\t),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tswapRequester := clientCtx.GetFromAddress()\n\n\t\t\t// Get pool id\n\t\t\tpoolID, err := strconv.ParseUint(args[0], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"pool-id %s not a valid uint, input a valid unsigned 32-bit integer for pool-id\", args[0])\n\t\t\t}\n\n\t\t\t// Get swap type\n\t\t\tswapTypeID, err := strconv.ParseUint(args[1], 10, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"swap-type %s not a valid uint, input a valid unsigned 32-bit integer for swap-type\", args[2])\n\t\t\t}\n\n\t\t\tif swapTypeID != 1 {\n\t\t\t\treturn types.ErrSwapTypeNotExists\n\t\t\t}\n\n\t\t\t// Get offer coin\n\t\t\tofferCoin, err := sdk.ParseCoinNormalized(args[2])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\terr = offerCoin.Validate()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\terr = sdk.ValidateDenom(args[3])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\torderPrice, err := sdk.NewDecFromStr(args[4])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tswapFeeRate, err := sdk.NewDecFromStr(args[5])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tmsg := types.NewMsgSwapWithinBatch(swapRequester, poolID, uint32(swapTypeID), offerCoin, args[3], orderPrice, swapFeeRate)\n\t\t\tif err := msg.ValidateBasic(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)\n\t\t},\n\t}\n\n\tflags.AddTxFlagsToCmd(cmd)\n\n\treturn cmd\n}\n"
  },
  {
    "path": "x/liquidity/exported/exported.go",
    "content": "package exported\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tparamtypes \"github.com/cosmos/cosmos-sdk/x/params/types\"\n)\n\ntype EnergyKeeper interface {\n\tGetRoutedToEnergy(ctx sdk.Context, delegate sdk.AccAddress) sdk.Coins\n}\n\ntype (\n\tParamSet = paramtypes.ParamSet\n\n\t// Subspace defines an interface that implements the legacy x/params Subspace\n\t// type.\n\t//\n\t// NOTE: This is used solely for migration of x/params managed parameters.\n\tSubspace interface {\n\t\tGetParamSet(ctx sdk.Context, ps ParamSet)\n\t}\n)\n"
  },
  {
    "path": "x/liquidity/genesis.go",
    "content": "package liquidity\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n)\n\n// InitGenesis new liquidity genesis\nfunc InitGenesis(ctx sdk.Context, keeper keeper.Keeper, data types.GenesisState) {\n\tkeeper.InitGenesis(ctx, data)\n}\n\n// ExportGenesis returns a GenesisState for a given context and keeper.\nfunc ExportGenesis(ctx sdk.Context, keeper keeper.Keeper) *types.GenesisState {\n\treturn keeper.ExportGenesis(ctx)\n}\n"
  },
  {
    "path": "x/liquidity/handler.go",
    "content": "package liquidity\n\nimport (\n\terrorsmod \"cosmossdk.io/errors\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tsdkerrors \"github.com/cosmos/cosmos-sdk/types/errors\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n)\n\n// NewHandler returns a handler for all \"liquidity\" type messages.\nfunc NewHandler(k keeper.Keeper) sdk.Handler {\n\tmsgServer := keeper.NewMsgServerImpl(k)\n\n\treturn func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) {\n\t\tctx = ctx.WithEventManager(sdk.NewEventManager())\n\n\t\tswitch msg := msg.(type) {\n\t\tcase *types.MsgCreatePool:\n\t\t\tres, err := msgServer.CreatePool(sdk.WrapSDKContext(ctx), msg)\n\t\t\treturn sdk.WrapServiceResult(ctx, res, err)\n\t\tcase *types.MsgDepositWithinBatch:\n\t\t\tres, err := msgServer.DepositWithinBatch(sdk.WrapSDKContext(ctx), msg)\n\t\t\treturn sdk.WrapServiceResult(ctx, res, err)\n\t\tcase *types.MsgWithdrawWithinBatch:\n\t\t\tres, err := msgServer.WithdrawWithinBatch(sdk.WrapSDKContext(ctx), msg)\n\t\t\treturn sdk.WrapServiceResult(ctx, res, err)\n\t\tcase *types.MsgSwapWithinBatch:\n\t\t\tres, err := msgServer.Swap(sdk.WrapSDKContext(ctx), msg)\n\t\t\treturn sdk.WrapServiceResult(ctx, res, err)\n\n\t\tdefault:\n\t\t\treturn nil, errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, \"unrecognized %s message type: %T\", types.ModuleName, msg)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "x/liquidity/keeper/batch.go",
    "content": "package keeper\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n)\n\n// DeleteAndInitPoolBatches resets batch msg states that were previously executed\n// and deletes msg states that were marked to be deleted.\nfunc (k Keeper) DeleteAndInitPoolBatches(ctx sdk.Context) {\n\tk.IterateAllPoolBatches(ctx, func(poolBatch types.PoolBatch) bool {\n\t\t// Re-initialize the executed batch.\n\t\tif poolBatch.Executed {\n\t\t\t// On the other hand, BatchDeposit, BatchWithdraw, is all handled by the endblock if there is no error.\n\t\t\t// If there are BatchMsgs left, reset the Executed, Succeeded flag so that it can be executed in the next batch.\n\t\t\tdepositMsgs := k.GetAllRemainingPoolBatchDepositMsgStates(ctx, poolBatch)\n\t\t\tif len(depositMsgs) > 0 {\n\t\t\t\tfor _, msg := range depositMsgs {\n\t\t\t\t\tmsg.Executed = false\n\t\t\t\t\tmsg.Succeeded = false\n\t\t\t\t}\n\t\t\t\tk.SetPoolBatchDepositMsgStatesByPointer(ctx, poolBatch.PoolId, depositMsgs)\n\t\t\t}\n\n\t\t\twithdrawMsgs := k.GetAllRemainingPoolBatchWithdrawMsgStates(ctx, poolBatch)\n\t\t\tif len(withdrawMsgs) > 0 {\n\t\t\t\tfor _, msg := range withdrawMsgs {\n\t\t\t\t\tmsg.Executed = false\n\t\t\t\t\tmsg.Succeeded = false\n\t\t\t\t}\n\t\t\t\tk.SetPoolBatchWithdrawMsgStatesByPointer(ctx, poolBatch.PoolId, withdrawMsgs)\n\t\t\t}\n\n\t\t\theight := ctx.BlockHeight()\n\n\t\t\t// In the case of remaining swap msg states, those are either fractionally matched\n\t\t\t// or has not yet been expired.\n\t\t\tswapMsgs := k.GetAllRemainingPoolBatchSwapMsgStates(ctx, poolBatch)\n\t\t\tif len(swapMsgs) > 0 {\n\t\t\t\tfor _, msg := range swapMsgs {\n\t\t\t\t\tif height > msg.OrderExpiryHeight {\n\t\t\t\t\t\tmsg.ToBeDeleted = true\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmsg.Executed = false\n\t\t\t\t\t\tmsg.Succeeded = false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tk.SetPoolBatchSwapMsgStatesByPointer(ctx, poolBatch.PoolId, swapMsgs)\n\t\t\t}\n\n\t\t\t// Delete all batch msg states that are ready to be deleted.\n\t\t\tk.DeleteAllReadyPoolBatchDepositMsgStates(ctx, poolBatch)\n\t\t\tk.DeleteAllReadyPoolBatchWithdrawMsgStates(ctx, poolBatch)\n\t\t\tk.DeleteAllReadyPoolBatchSwapMsgStates(ctx, poolBatch)\n\n\t\t\tif err := k.InitNextPoolBatch(ctx, poolBatch); err != nil {\n\t\t\t\tpanic(err)\n\t\t\t}\n\t\t}\n\t\treturn false\n\t})\n}\n\n// InitNextPoolBatch re-initializes the batch and increases the batch index.\nfunc (k Keeper) InitNextPoolBatch(ctx sdk.Context, poolBatch types.PoolBatch) error {\n\tif !poolBatch.Executed {\n\t\treturn types.ErrBatchNotExecuted\n\t}\n\n\tpoolBatch.Index++\n\tpoolBatch.BeginHeight = ctx.BlockHeight()\n\tpoolBatch.Executed = false\n\n\tk.SetPoolBatch(ctx, poolBatch)\n\treturn nil\n}\n\n// ExecutePoolBatches executes the accumulated msgs in the batch.\n// The order is (1)swap, (2)deposit, (3)withdraw.\nfunc (k Keeper) ExecutePoolBatches(ctx sdk.Context) {\n\tparams := k.GetParams(ctx)\n\tlogger := k.Logger(ctx)\n\n\tk.IterateAllPoolBatches(ctx, func(poolBatch types.PoolBatch) bool {\n\t\tif !poolBatch.Executed && ctx.BlockHeight()%int64(params.UnitBatchHeight) == 0 {\n\t\t\texecutedMsgCount, err := k.SwapExecution(ctx, poolBatch)\n\t\t\tif err != nil {\n\t\t\t\tpanic(err)\n\t\t\t}\n\n\t\t\tk.IterateAllPoolBatchDepositMsgStates(ctx, poolBatch, func(batchMsg types.DepositMsgState) bool {\n\t\t\t\tif batchMsg.Executed || batchMsg.ToBeDeleted || batchMsg.Succeeded {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\texecutedMsgCount++\n\t\t\t\tif err := k.ExecuteDeposit(ctx, batchMsg, poolBatch); err != nil {\n\t\t\t\t\tlogger.Error(\"deposit failed\",\n\t\t\t\t\t\t\"poolID\", poolBatch.PoolId,\n\t\t\t\t\t\t\"batchIndex\", poolBatch.Index,\n\t\t\t\t\t\t\"msgIndex\", batchMsg.MsgIndex,\n\t\t\t\t\t\t\"depositor\", batchMsg.Msg.GetDepositor(),\n\t\t\t\t\t\t\"error\", err)\n\t\t\t\t\tif err := k.RefundDeposit(ctx, batchMsg, poolBatch); err != nil {\n\t\t\t\t\t\tpanic(err)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\n\t\t\tk.IterateAllPoolBatchWithdrawMsgStates(ctx, poolBatch, func(batchMsg types.WithdrawMsgState) bool {\n\t\t\t\tif batchMsg.Executed || batchMsg.ToBeDeleted || batchMsg.Succeeded {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\texecutedMsgCount++\n\t\t\t\tif err := k.ExecuteWithdrawal(ctx, batchMsg, poolBatch); err != nil {\n\t\t\t\t\tlogger.Error(\"withdraw failed\",\n\t\t\t\t\t\t\"poolID\", poolBatch.PoolId,\n\t\t\t\t\t\t\"batchIndex\", poolBatch.Index,\n\t\t\t\t\t\t\"msgIndex\", batchMsg.MsgIndex,\n\t\t\t\t\t\t\"withdrawer\", batchMsg.Msg.GetWithdrawer(),\n\t\t\t\t\t\t\"error\", err)\n\t\t\t\t\tif err := k.RefundWithdrawal(ctx, batchMsg, poolBatch); err != nil {\n\t\t\t\t\t\tpanic(err)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\n\t\t\t// Mark the batch as executed when any msgs were executed.\n\t\t\tif executedMsgCount > 0 {\n\t\t\t\tpoolBatch.Executed = true\n\t\t\t\tk.SetPoolBatch(ctx, poolBatch)\n\t\t\t}\n\t\t}\n\t\treturn false\n\t})\n}\n\n// HoldEscrow sends coins to the module account for an escrow.\nfunc (k Keeper) HoldEscrow(ctx sdk.Context, depositor sdk.AccAddress, depositCoins sdk.Coins) error {\n\terr := k.bankKeeper.SendCoinsFromAccountToModule(ctx, depositor, types.ModuleName, depositCoins)\n\treturn err\n}\n\n// If batch messages have expired or have not been processed, coins that were deposited with this function are refunded to the escrow.\nfunc (k Keeper) ReleaseEscrow(ctx sdk.Context, withdrawer sdk.AccAddress, withdrawCoins sdk.Coins) error {\n\terr := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, withdrawer, withdrawCoins)\n\treturn err\n}\n\n// Generate inputs and outputs to treat escrow refunds atomically.\nfunc (k Keeper) ReleaseEscrowForMultiSend(withdrawer sdk.AccAddress, withdrawCoins sdk.Coins) (\n\tbanktypes.Input, banktypes.Output, error,\n) {\n\tvar input banktypes.Input\n\tvar output banktypes.Output\n\n\tinput = banktypes.NewInput(k.accountKeeper.GetModuleAddress(types.ModuleName), withdrawCoins)\n\toutput = banktypes.NewOutput(withdrawer, withdrawCoins)\n\n\tif err := banktypes.ValidateInputsOutputs([]banktypes.Input{input}, []banktypes.Output{output}); err != nil {\n\t\treturn banktypes.Input{}, banktypes.Output{}, err\n\t}\n\n\treturn input, output, nil\n}\n\n// In order to deal with the batch at the same time, the coins of msgs are deposited in escrow.\nfunc (k Keeper) DepositWithinBatch(ctx sdk.Context, msg *types.MsgDepositWithinBatch) (types.DepositMsgState, error) {\n\tif err := k.ValidateMsgDepositWithinBatch(ctx, *msg); err != nil {\n\t\treturn types.DepositMsgState{}, err\n\t}\n\n\tpoolBatch, found := k.GetPoolBatch(ctx, msg.PoolId)\n\tif !found {\n\t\treturn types.DepositMsgState{}, types.ErrPoolBatchNotExists\n\t}\n\n\tif poolBatch.BeginHeight == 0 {\n\t\tpoolBatch.BeginHeight = ctx.BlockHeight()\n\t}\n\n\tmsgState := types.DepositMsgState{\n\t\tMsgHeight: ctx.BlockHeight(),\n\t\tMsgIndex:  poolBatch.DepositMsgIndex,\n\t\tMsg:       msg,\n\t}\n\n\tif err := k.HoldEscrow(ctx, msg.GetDepositor(), msg.DepositCoins); err != nil {\n\t\treturn types.DepositMsgState{}, err\n\t}\n\n\tpoolBatch.DepositMsgIndex++\n\tk.SetPoolBatch(ctx, poolBatch)\n\tk.SetPoolBatchDepositMsgState(ctx, poolBatch.PoolId, msgState)\n\n\treturn msgState, nil\n}\n\n// In order to deal with the batch at the same time, the coins of msgs are deposited in escrow.\nfunc (k Keeper) WithdrawWithinBatch(ctx sdk.Context, msg *types.MsgWithdrawWithinBatch) (types.WithdrawMsgState, error) {\n\tif err := k.ValidateMsgWithdrawWithinBatch(ctx, *msg); err != nil {\n\t\treturn types.WithdrawMsgState{}, err\n\t}\n\n\tpoolBatch, found := k.GetPoolBatch(ctx, msg.PoolId)\n\tif !found {\n\t\treturn types.WithdrawMsgState{}, types.ErrPoolBatchNotExists\n\t}\n\n\tif poolBatch.BeginHeight == 0 {\n\t\tpoolBatch.BeginHeight = ctx.BlockHeight()\n\t}\n\n\tbatchPoolMsg := types.WithdrawMsgState{\n\t\tMsgHeight: ctx.BlockHeight(),\n\t\tMsgIndex:  poolBatch.WithdrawMsgIndex,\n\t\tMsg:       msg,\n\t}\n\n\tif err := k.HoldEscrow(ctx, msg.GetWithdrawer(), sdk.NewCoins(msg.PoolCoin)); err != nil {\n\t\treturn types.WithdrawMsgState{}, err\n\t}\n\n\tpoolBatch.WithdrawMsgIndex++\n\tk.SetPoolBatch(ctx, poolBatch)\n\tk.SetPoolBatchWithdrawMsgState(ctx, poolBatch.PoolId, batchPoolMsg)\n\n\treturn batchPoolMsg, nil\n}\n\n// In order to deal with the batch at the same time, the coins of msgs are deposited in escrow.\nfunc (k Keeper) SwapWithinBatch(ctx sdk.Context, msg *types.MsgSwapWithinBatch, orderExpirySpanHeight int64) (*types.SwapMsgState, error) {\n\tpool, found := k.GetPool(ctx, msg.PoolId)\n\tif !found {\n\t\treturn nil, types.ErrPoolNotExists\n\t}\n\tif k.IsDepletedPool(ctx, pool) {\n\t\treturn nil, types.ErrDepletedPool\n\t}\n\tif err := k.ValidateMsgSwapWithinBatch(ctx, *msg, pool); err != nil {\n\t\treturn nil, err\n\t}\n\tpoolBatch, found := k.GetPoolBatch(ctx, msg.PoolId)\n\tif !found {\n\t\treturn nil, types.ErrPoolBatchNotExists\n\t}\n\n\tif poolBatch.BeginHeight == 0 {\n\t\tpoolBatch.BeginHeight = ctx.BlockHeight()\n\t}\n\n\tcurrentHeight := ctx.BlockHeight()\n\n\tif orderExpirySpanHeight == 0 {\n\t\tparams := k.GetParams(ctx)\n\t\tu := int64(params.UnitBatchHeight)\n\t\torderExpirySpanHeight = (u - currentHeight%u) % u\n\t}\n\n\tbatchPoolMsg := types.SwapMsgState{\n\t\tMsgHeight:            currentHeight,\n\t\tMsgIndex:             poolBatch.SwapMsgIndex,\n\t\tExecuted:             false,\n\t\tSucceeded:            false,\n\t\tToBeDeleted:          false,\n\t\tOrderExpiryHeight:    currentHeight + orderExpirySpanHeight,\n\t\tExchangedOfferCoin:   sdk.NewCoin(msg.OfferCoin.Denom, sdk.ZeroInt()),\n\t\tRemainingOfferCoin:   msg.OfferCoin,\n\t\tReservedOfferCoinFee: msg.OfferCoinFee,\n\t\tMsg:                  msg,\n\t}\n\n\tif err := k.HoldEscrow(ctx, msg.GetSwapRequester(), sdk.NewCoins(msg.OfferCoin.Add(msg.OfferCoinFee))); err != nil {\n\t\treturn nil, err\n\t}\n\n\tpoolBatch.SwapMsgIndex++\n\tk.SetPoolBatch(ctx, poolBatch)\n\tk.SetPoolBatchSwapMsgState(ctx, poolBatch.PoolId, batchPoolMsg)\n\n\treturn &batchPoolMsg, nil\n}\n"
  },
  {
    "path": "x/liquidity/keeper/genesis.go",
    "content": "package keeper\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n)\n\n// InitGenesis initializes the liquidity module's state from a given genesis state.\nfunc (k Keeper) InitGenesis(ctx sdk.Context, genState types.GenesisState) {\n\tif err := k.ValidateGenesis(ctx, genState); err != nil {\n\t\tpanic(err)\n\t}\n\n\tk.SetParams(ctx, genState.Params)\n\n\tfor _, record := range genState.PoolRecords {\n\t\tk.SetPoolRecord(ctx, record)\n\t}\n}\n\n// ExportGenesis returns the liquidity module's genesis state.\nfunc (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState {\n\tparams := k.GetParams(ctx)\n\n\tvar poolRecords []types.PoolRecord\n\n\tpools := k.GetAllPools(ctx)\n\n\tfor _, pool := range pools {\n\t\trecord, found := k.GetPoolRecord(ctx, pool)\n\t\tif found {\n\t\t\tpoolRecords = append(poolRecords, record)\n\t\t}\n\t}\n\n\tif len(poolRecords) == 0 {\n\t\tpoolRecords = []types.PoolRecord{}\n\t}\n\n\treturn types.NewGenesisState(params, poolRecords)\n}\n\n// ValidateGenesis validates the liquidity module's genesis state.\nfunc (k Keeper) ValidateGenesis(ctx sdk.Context, genState types.GenesisState) error {\n\tif err := genState.Params.Validate(); err != nil {\n\t\treturn err\n\t}\n\n\tcc, _ := ctx.CacheContext()\n\tk.SetParams(cc, genState.Params)\n\n\tfor _, record := range genState.PoolRecords {\n\t\trecord = k.SetPoolRecord(cc, record)\n\t\tif err := k.ValidatePoolRecord(cc, record); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/liquidity/keeper/grpc_query.go",
    "content": "package keeper\n\n// DONTCOVER\n// client is excluded from test coverage in the poc phase milestone 1 and will be included in milestone 2 with completeness\n\nimport (\n\t\"context\"\n\n\t\"github.com/cosmos/cosmos-sdk/store/prefix\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/query\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/status\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n)\n\n// Querier is used as Keeper will have duplicate methods if used directly, and gRPC names take precedence over keeper.\ntype Querier struct {\n\tKeeper\n}\n\nvar _ types.QueryServer = Querier{}\n\n// LiquidityPool queries a liquidity pool with the given pool id.\nfunc (k Querier) LiquidityPool(c context.Context, req *types.QueryLiquidityPoolRequest) (*types.QueryLiquidityPoolResponse, error) {\n\tempty := &types.QueryLiquidityPoolRequest{}\n\tif req == nil || *req == *empty {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tctx := sdk.UnwrapSDKContext(c)\n\n\tpool, found := k.GetPool(ctx, req.PoolId)\n\tif !found {\n\t\treturn nil, status.Errorf(codes.NotFound, \"liquidity pool %d doesn't exist\", req.PoolId)\n\t}\n\n\treturn k.MakeQueryLiquidityPoolResponse(pool)\n}\n\n// LiquidityPool queries a liquidity pool with the given pool coin denom.\nfunc (k Querier) LiquidityPoolByPoolCoinDenom(c context.Context, req *types.QueryLiquidityPoolByPoolCoinDenomRequest) (*types.QueryLiquidityPoolResponse, error) {\n\tempty := &types.QueryLiquidityPoolByPoolCoinDenomRequest{}\n\tif req == nil || *req == *empty {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\tctx := sdk.UnwrapSDKContext(c)\n\treserveAcc, err := types.GetReserveAcc(req.PoolCoinDenom, false)\n\tif err != nil {\n\t\treturn nil, status.Errorf(codes.NotFound, \"liquidity pool with pool coin denom %s doesn't exist\", req.PoolCoinDenom)\n\t}\n\tpool, found := k.GetPoolByReserveAccIndex(ctx, reserveAcc)\n\tif !found {\n\t\treturn nil, status.Errorf(codes.NotFound, \"liquidity pool with pool coin denom %s doesn't exist\", req.PoolCoinDenom)\n\t}\n\treturn k.MakeQueryLiquidityPoolResponse(pool)\n}\n\n// LiquidityPool queries a liquidity pool with the given reserve account address.\nfunc (k Querier) LiquidityPoolByReserveAcc(c context.Context, req *types.QueryLiquidityPoolByReserveAccRequest) (*types.QueryLiquidityPoolResponse, error) {\n\tempty := &types.QueryLiquidityPoolByReserveAccRequest{}\n\tif req == nil || *req == *empty {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\tctx := sdk.UnwrapSDKContext(c)\n\treserveAcc, err := sdk.AccAddressFromBech32(req.ReserveAcc)\n\tif err != nil {\n\t\treturn nil, status.Errorf(codes.NotFound, \"the reserve account address %s is not valid\", req.ReserveAcc)\n\t}\n\tpool, found := k.GetPoolByReserveAccIndex(ctx, reserveAcc)\n\tif !found {\n\t\treturn nil, status.Errorf(codes.NotFound, \"liquidity pool with pool reserve account %s doesn't exist\", req.ReserveAcc)\n\t}\n\treturn k.MakeQueryLiquidityPoolResponse(pool)\n}\n\n// LiquidityPoolBatch queries a liquidity pool batch with the given pool id.\nfunc (k Querier) LiquidityPoolBatch(c context.Context, req *types.QueryLiquidityPoolBatchRequest) (*types.QueryLiquidityPoolBatchResponse, error) {\n\tempty := &types.QueryLiquidityPoolBatchRequest{}\n\tif req == nil || *req == *empty {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tctx := sdk.UnwrapSDKContext(c)\n\n\tbatch, found := k.GetPoolBatch(ctx, req.PoolId)\n\tif !found {\n\t\treturn nil, status.Errorf(codes.NotFound, \"liquidity pool batch %d doesn't exist\", req.PoolId)\n\t}\n\n\treturn &types.QueryLiquidityPoolBatchResponse{\n\t\tBatch: batch,\n\t}, nil\n}\n\n// Pools queries all liquidity pools currently existed with each liquidity pool with batch and metadata.\nfunc (k Querier) LiquidityPools(c context.Context, req *types.QueryLiquidityPoolsRequest) (*types.QueryLiquidityPoolsResponse, error) {\n\tctx := sdk.UnwrapSDKContext(c)\n\n\tstore := ctx.KVStore(k.storeKey)\n\tpoolStore := prefix.NewStore(store, types.PoolKeyPrefix)\n\n\tvar pools types.Pools\n\n\tpageRes, err := query.Paginate(poolStore, req.Pagination, func(key []byte, value []byte) error {\n\t\tpool, err := types.UnmarshalPool(k.cdc, value)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpools = append(pools, pool)\n\t\treturn nil\n\t})\n\tif err != nil {\n\t\treturn nil, status.Error(codes.Internal, err.Error())\n\t}\n\n\tif len(pools) == 0 {\n\t\treturn nil, status.Error(codes.NotFound, \"There are no pools present.\")\n\t}\n\n\treturn &types.QueryLiquidityPoolsResponse{\n\t\tPools:      pools,\n\t\tPagination: pageRes,\n\t}, nil\n}\n\n// PoolBatchSwapMsg queries the pool batch swap message with the message index of the liquidity pool.\nfunc (k Querier) PoolBatchSwapMsg(c context.Context, req *types.QueryPoolBatchSwapMsgRequest) (*types.QueryPoolBatchSwapMsgResponse, error) {\n\tempty := &types.QueryPoolBatchSwapMsgRequest{}\n\tif req == nil || *req == *empty {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tctx := sdk.UnwrapSDKContext(c)\n\n\tmsg, found := k.GetPoolBatchSwapMsgState(ctx, req.PoolId, req.MsgIndex)\n\tif !found {\n\t\treturn nil, status.Errorf(codes.NotFound, \"the msg given msg_index %d doesn't exist or deleted\", req.MsgIndex)\n\t}\n\n\treturn &types.QueryPoolBatchSwapMsgResponse{\n\t\tSwap: msg,\n\t}, nil\n}\n\n// PoolBatchSwapMsgs queries all pool batch swap messages of the liquidity pool.\nfunc (k Querier) PoolBatchSwapMsgs(c context.Context, req *types.QueryPoolBatchSwapMsgsRequest) (*types.QueryPoolBatchSwapMsgsResponse, error) {\n\tempty := &types.QueryPoolBatchSwapMsgsRequest{}\n\tif req == nil || *req == *empty {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tctx := sdk.UnwrapSDKContext(c)\n\n\t_, found := k.GetPool(ctx, req.PoolId)\n\tif !found {\n\t\treturn nil, status.Errorf(codes.NotFound, \"liquidity pool %d doesn't exist\", req.PoolId)\n\t}\n\n\tstore := ctx.KVStore(k.storeKey)\n\tmsgStore := prefix.NewStore(store, types.GetPoolBatchSwapMsgStatesPrefix(req.PoolId))\n\n\tvar msgs []types.SwapMsgState\n\n\tpageRes, err := query.Paginate(msgStore, req.Pagination, func(key []byte, value []byte) error {\n\t\tmsg, err := types.UnmarshalSwapMsgState(k.cdc, value)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tmsgs = append(msgs, msg)\n\n\t\treturn nil\n\t})\n\tif err != nil {\n\t\treturn nil, status.Error(codes.Internal, err.Error())\n\t}\n\n\treturn &types.QueryPoolBatchSwapMsgsResponse{\n\t\tSwaps:      msgs,\n\t\tPagination: pageRes,\n\t}, nil\n}\n\n// PoolBatchDepositMsg queries the pool batch deposit message with the msg_index of the liquidity pool.\nfunc (k Querier) PoolBatchDepositMsg(c context.Context, req *types.QueryPoolBatchDepositMsgRequest) (*types.QueryPoolBatchDepositMsgResponse, error) {\n\tempty := &types.QueryPoolBatchDepositMsgRequest{}\n\tif req == nil || *req == *empty {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tctx := sdk.UnwrapSDKContext(c)\n\n\tmsg, found := k.GetPoolBatchDepositMsgState(ctx, req.PoolId, req.MsgIndex)\n\tif !found {\n\t\treturn nil, status.Errorf(codes.NotFound, \"the msg given msg_index %d doesn't exist or deleted\", req.MsgIndex)\n\t}\n\n\treturn &types.QueryPoolBatchDepositMsgResponse{\n\t\tDeposit: msg,\n\t}, nil\n}\n\n// PoolBatchDepositMsgs queries all pool batch deposit messages of the liquidity pool.\nfunc (k Querier) PoolBatchDepositMsgs(c context.Context, req *types.QueryPoolBatchDepositMsgsRequest) (*types.QueryPoolBatchDepositMsgsResponse, error) {\n\tempty := &types.QueryPoolBatchDepositMsgsRequest{}\n\tif req == nil || *req == *empty {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tctx := sdk.UnwrapSDKContext(c)\n\n\t_, found := k.GetPool(ctx, req.PoolId)\n\tif !found {\n\t\treturn nil, status.Errorf(codes.NotFound, \"liquidity pool %d doesn't exist\", req.PoolId)\n\t}\n\n\tstore := ctx.KVStore(k.storeKey)\n\tmsgStore := prefix.NewStore(store, types.GetPoolBatchDepositMsgStatesPrefix(req.PoolId))\n\tvar msgs []types.DepositMsgState\n\n\tpageRes, err := query.Paginate(msgStore, req.Pagination, func(key []byte, value []byte) error {\n\t\tmsg, err := types.UnmarshalDepositMsgState(k.cdc, value)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tmsgs = append(msgs, msg)\n\n\t\treturn nil\n\t})\n\tif err != nil {\n\t\treturn nil, status.Error(codes.Internal, err.Error())\n\t}\n\n\treturn &types.QueryPoolBatchDepositMsgsResponse{\n\t\tDeposits:   msgs,\n\t\tPagination: pageRes,\n\t}, nil\n}\n\n// PoolBatchWithdrawMsg queries the pool batch withdraw message with the msg_index of the liquidity pool.\nfunc (k Querier) PoolBatchWithdrawMsg(c context.Context, req *types.QueryPoolBatchWithdrawMsgRequest) (*types.QueryPoolBatchWithdrawMsgResponse, error) {\n\tempty := &types.QueryPoolBatchWithdrawMsgRequest{}\n\tif req == nil || *req == *empty {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tctx := sdk.UnwrapSDKContext(c)\n\n\tmsg, found := k.GetPoolBatchWithdrawMsgState(ctx, req.PoolId, req.MsgIndex)\n\tif !found {\n\t\treturn nil, status.Errorf(codes.NotFound, \"the msg given msg_index %d doesn't exist or deleted\", req.MsgIndex)\n\t}\n\n\treturn &types.QueryPoolBatchWithdrawMsgResponse{\n\t\tWithdraw: msg,\n\t}, nil\n}\n\n// PoolBatchWithdrawMsgs queries all pool batch withdraw messages of the liquidity pool.\nfunc (k Querier) PoolBatchWithdrawMsgs(c context.Context, req *types.QueryPoolBatchWithdrawMsgsRequest) (*types.QueryPoolBatchWithdrawMsgsResponse, error) {\n\tempty := &types.QueryPoolBatchWithdrawMsgsRequest{}\n\tif req == nil || *req == *empty {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tctx := sdk.UnwrapSDKContext(c)\n\n\t_, found := k.GetPool(ctx, req.PoolId)\n\tif !found {\n\t\treturn nil, status.Errorf(codes.NotFound, \"liquidity pool %d doesn't exist\", req.PoolId)\n\t}\n\n\tstore := ctx.KVStore(k.storeKey)\n\tmsgStore := prefix.NewStore(store, types.GetPoolBatchWithdrawMsgsPrefix(req.PoolId))\n\tvar msgs []types.WithdrawMsgState\n\n\tpageRes, err := query.Paginate(msgStore, req.Pagination, func(key []byte, value []byte) error {\n\t\tmsg, err := types.UnmarshalWithdrawMsgState(k.cdc, value)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tmsgs = append(msgs, msg)\n\n\t\treturn nil\n\t})\n\tif err != nil {\n\t\treturn nil, status.Error(codes.Internal, err.Error())\n\t}\n\n\treturn &types.QueryPoolBatchWithdrawMsgsResponse{\n\t\tWithdraws:  msgs,\n\t\tPagination: pageRes,\n\t}, nil\n}\n\n// Params queries params of liquidity module.\nfunc (k Querier) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) {\n\tctx := sdk.UnwrapSDKContext(c)\n\tparams := k.GetParams(ctx)\n\n\treturn &types.QueryParamsResponse{\n\t\tParams: params,\n\t}, nil\n}\n\n// MakeQueryLiquidityPoolResponse wraps MakeQueryLiquidityPoolResponse.\nfunc (k Querier) MakeQueryLiquidityPoolResponse(pool types.Pool) (*types.QueryLiquidityPoolResponse, error) {\n\treturn &types.QueryLiquidityPoolResponse{\n\t\tPool: pool,\n\t}, nil\n}\n\n// MakeQueryLiquidityPoolsResponse wraps a list of QueryLiquidityPoolResponses.\nfunc (k Querier) MakeQueryLiquidityPoolsResponse(pools types.Pools) (*[]types.QueryLiquidityPoolResponse, error) {\n\tresp := make([]types.QueryLiquidityPoolResponse, len(pools))\n\tfor i, pool := range pools {\n\t\tres := types.QueryLiquidityPoolResponse{\n\t\t\tPool: pool,\n\t\t}\n\t\tresp[i] = res\n\t}\n\treturn &resp, nil\n}\n"
  },
  {
    "path": "x/liquidity/keeper/invariants.go",
    "content": "package keeper\n\nimport (\n\t\"fmt\"\n\n\t\"cosmossdk.io/math\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n)\n\n// RegisterInvariants registers all liquidity invariants.\nfunc RegisterInvariants(ir sdk.InvariantRegistry, k Keeper) {\n\tir.RegisterRoute(types.ModuleName, \"escrow-amount\",\n\t\tLiquidityPoolsEscrowAmountInvariant(k))\n}\n\n// AllInvariants runs all invariants of the liquidity module.\nfunc AllInvariants(k Keeper) sdk.Invariant {\n\treturn func(ctx sdk.Context) (string, bool) {\n\t\tres, stop := LiquidityPoolsEscrowAmountInvariant(k)(ctx)\n\t\treturn res, stop\n\t}\n}\n\n// LiquidityPoolsEscrowAmountInvariant checks that outstanding unwithdrawn fees are never negative.\nfunc LiquidityPoolsEscrowAmountInvariant(k Keeper) sdk.Invariant {\n\treturn func(ctx sdk.Context) (string, bool) {\n\t\tremainingCoins := sdk.NewCoins()\n\t\tbatches := k.GetAllPoolBatches(ctx)\n\t\tfor _, batch := range batches {\n\t\t\tswapMsgs := k.GetAllPoolBatchSwapMsgStatesNotToBeDeleted(ctx, batch)\n\t\t\tfor _, msg := range swapMsgs {\n\t\t\t\tremainingCoins = remainingCoins.Add(msg.RemainingOfferCoin)\n\t\t\t}\n\t\t\tdepositMsgs := k.GetAllPoolBatchDepositMsgStatesNotToBeDeleted(ctx, batch)\n\t\t\tfor _, msg := range depositMsgs {\n\t\t\t\tremainingCoins = remainingCoins.Add(msg.Msg.DepositCoins...)\n\t\t\t}\n\t\t\twithdrawMsgs := k.GetAllPoolBatchWithdrawMsgStatesNotToBeDeleted(ctx, batch)\n\t\t\tfor _, msg := range withdrawMsgs {\n\t\t\t\tremainingCoins = remainingCoins.Add(msg.Msg.PoolCoin)\n\t\t\t}\n\t\t}\n\n\t\tbatchEscrowAcc := k.accountKeeper.GetModuleAddress(types.ModuleName)\n\t\tescrowAmt := k.bankKeeper.GetAllBalances(ctx, batchEscrowAcc)\n\n\t\tbroken := !escrowAmt.IsAllGTE(remainingCoins)\n\n\t\treturn sdk.FormatInvariant(types.ModuleName, \"batch escrow amount invariant broken\",\n\t\t\t\"batch escrow amount LT batch remaining amount\"), broken\n\t}\n}\n\n// These invariants cannot be registered via RegisterInvariants since the module uses per-block batch execution.\n// We should approach adding these invariant checks inside actual logics of deposit / withdraw / swap.\n\nvar (\n\tBatchLogicInvariantCheckFlag = false // It is only used at the development stage, and is disabled at the product level.\n\t// For coin amounts less than coinAmountThreshold, a high errorRate does not mean\n\t// that the calculation logic has errors.\n\t// For example, if there were two X coins and three Y coins in the pool, and someone deposits\n\t// one X coin and one Y coin, it's an acceptable input.\n\t// But pool price would change from 2/3 to 3/4 so errorRate will report 1/8(=0.125),\n\t// meaning that the price has changed by 12.5%.\n\t// This happens with small coin amounts, so there should be a threshold for coin amounts\n\t// before we calculate the errorRate.\n\terrorRateThreshold  = sdk.NewDecWithPrec(5, 2) // 5%\n\tcoinAmountThreshold = sdk.NewInt(20)           // If a decimal error occurs at a value less than 20, the error rate is over 5%.\n)\n\nfunc errorRate(expected, actual sdk.Dec) sdk.Dec {\n\t// To prevent divide-by-zero panics, return 1.0(=100%) as the error rate\n\t// when the expected value is 0.\n\tif expected.IsZero() {\n\t\treturn sdk.OneDec()\n\t}\n\treturn actual.Sub(expected).Quo(expected).Abs()\n}\n\n// MintingPoolCoinsInvariant checks the correct ratio of minting amount of pool coins.\nfunc MintingPoolCoinsInvariant(poolCoinTotalSupply, mintPoolCoin, depositCoinA, depositCoinB, lastReserveCoinA, lastReserveCoinB, refundedCoinA, refundedCoinB math.Int) {\n\tif !refundedCoinA.IsZero() {\n\t\tdepositCoinA = depositCoinA.Sub(refundedCoinA)\n\t}\n\n\tif !refundedCoinB.IsZero() {\n\t\tdepositCoinB = depositCoinB.Sub(refundedCoinB)\n\t}\n\n\tpoolCoinRatio := sdk.NewDecFromInt(mintPoolCoin).QuoInt(poolCoinTotalSupply)\n\tdepositCoinARatio := sdk.NewDecFromInt(depositCoinA).QuoInt(lastReserveCoinA)\n\tdepositCoinBRatio := sdk.NewDecFromInt(depositCoinB).QuoInt(lastReserveCoinB)\n\texpectedMintPoolCoinAmtBasedA := depositCoinARatio.MulInt(poolCoinTotalSupply).TruncateInt()\n\texpectedMintPoolCoinAmtBasedB := depositCoinBRatio.MulInt(poolCoinTotalSupply).TruncateInt()\n\n\t// NewPoolCoinAmount / LastPoolCoinSupply == AfterRefundedDepositCoinA / LastReserveCoinA\n\t// NewPoolCoinAmount / LastPoolCoinSupply == AfterRefundedDepositCoinA / LastReserveCoinB\n\tif depositCoinA.GTE(coinAmountThreshold) && depositCoinB.GTE(coinAmountThreshold) &&\n\t\tlastReserveCoinA.GTE(coinAmountThreshold) && lastReserveCoinB.GTE(coinAmountThreshold) &&\n\t\tmintPoolCoin.GTE(coinAmountThreshold) && poolCoinTotalSupply.GTE(coinAmountThreshold) {\n\t\tif errorRate(depositCoinARatio, poolCoinRatio).GT(errorRateThreshold) ||\n\t\t\terrorRate(depositCoinBRatio, poolCoinRatio).GT(errorRateThreshold) {\n\t\t\tpanic(\"invariant check fails due to incorrect ratio of pool coins\")\n\t\t}\n\t}\n\n\tif mintPoolCoin.GTE(coinAmountThreshold) &&\n\t\t(sdk.NewDecFromInt(sdk.MaxInt(mintPoolCoin, expectedMintPoolCoinAmtBasedA).Sub(sdk.MinInt(mintPoolCoin, expectedMintPoolCoinAmtBasedA))).QuoInt(mintPoolCoin).GT(errorRateThreshold) ||\n\t\t\tsdk.NewDecFromInt(sdk.MaxInt(mintPoolCoin, expectedMintPoolCoinAmtBasedB).Sub(sdk.MinInt(mintPoolCoin, expectedMintPoolCoinAmtBasedA))).QuoInt(mintPoolCoin).GT(errorRateThreshold)) {\n\t\tpanic(\"invariant check fails due to incorrect amount of pool coins\")\n\t}\n}\n\n// DepositInvariant checks after deposit amounts.\n//\n//nolint:staticcheck\nfunc DepositInvariant(lastReserveCoinA, lastReserveCoinB, depositCoinA, depositCoinB, afterReserveCoinA, afterReserveCoinB, refundedCoinA, refundedCoinB math.Int) {\n\tdepositCoinA = depositCoinA.Sub(refundedCoinA)\n\tdepositCoinB = depositCoinB.Sub(refundedCoinB)\n\n\tdepositCoinRatio := sdk.NewDecFromInt(depositCoinA).Quo(sdk.NewDecFromInt(depositCoinB))\n\tlastReserveRatio := sdk.NewDecFromInt(lastReserveCoinA).Quo(sdk.NewDecFromInt(lastReserveCoinB))\n\tafterReserveRatio := sdk.NewDecFromInt(afterReserveCoinA).Quo(sdk.NewDecFromInt(afterReserveCoinB))\n\n\t// AfterDepositReserveCoinA = LastReserveCoinA + AfterRefundedDepositCoinA\n\t// AfterDepositReserveCoinB = LastReserveCoinB + AfterRefundedDepositCoinA\n\tif !afterReserveCoinA.Equal(lastReserveCoinA.Add(depositCoinA)) ||\n\t\t!afterReserveCoinB.Equal(lastReserveCoinB.Add(depositCoinB)) {\n\t\tpanic(\"invariant check fails due to incorrect deposit amounts\")\n\t}\n\n\tif depositCoinA.GTE(coinAmountThreshold) && depositCoinB.GTE(coinAmountThreshold) &&\n\t\tlastReserveCoinA.GTE(coinAmountThreshold) && lastReserveCoinB.GTE(coinAmountThreshold) {\n\t\t// AfterRefundedDepositCoinA / AfterRefundedDepositCoinA = LastReserveCoinA / LastReserveCoinB\n\t\tif errorRate(lastReserveRatio, depositCoinRatio).GT(errorRateThreshold) {\n\t\t\tpanic(\"invariant check fails due to incorrect deposit ratio\")\n\t\t}\n\t\t// LastReserveCoinA / LastReserveCoinB = AfterDepositReserveCoinA / AfterDepositReserveCoinB\n\t\tif errorRate(lastReserveRatio, afterReserveRatio).GT(errorRateThreshold) {\n\t\t\tpanic(\"invariant check fails due to incorrect pool price ratio\")\n\t\t}\n\t}\n}\n\n// BurningPoolCoinsInvariant checks the correct burning amount of pool coins.\n//\n//nolint:staticcheck\nfunc BurningPoolCoinsInvariant(burnedPoolCoin, withdrawCoinA, withdrawCoinB, reserveCoinA, reserveCoinB, lastPoolCoinSupply math.Int, withdrawFeeCoins sdk.Coins) {\n\tburningPoolCoinRatio := sdk.NewDecFromInt(burnedPoolCoin).Quo(sdk.NewDecFromInt(lastPoolCoinSupply))\n\tif burningPoolCoinRatio.Equal(sdk.OneDec()) {\n\t\treturn\n\t}\n\n\twithdrawCoinARatio := sdk.NewDecFromInt(withdrawCoinA.Add(withdrawFeeCoins[0].Amount)).Quo(sdk.NewDecFromInt(reserveCoinA))\n\twithdrawCoinBRatio := sdk.NewDecFromInt(withdrawCoinB.Add(withdrawFeeCoins[1].Amount)).Quo(sdk.NewDecFromInt(reserveCoinB))\n\n\t// BurnedPoolCoinAmount / LastPoolCoinSupply >= (WithdrawCoinA+WithdrawFeeCoinA) / LastReserveCoinA\n\t// BurnedPoolCoinAmount / LastPoolCoinSupply >= (WithdrawCoinB+WithdrawFeeCoinB) / LastReserveCoinB\n\tif withdrawCoinARatio.GT(burningPoolCoinRatio) || withdrawCoinBRatio.GT(burningPoolCoinRatio) {\n\t\tpanic(\"invariant check fails due to incorrect ratio of burning pool coins\")\n\t}\n\n\texpectedBurningPoolCoinBasedA := sdk.NewDecFromInt(lastPoolCoinSupply).MulTruncate(withdrawCoinARatio).TruncateInt()\n\texpectedBurningPoolCoinBasedB := sdk.NewDecFromInt(lastPoolCoinSupply).MulTruncate(withdrawCoinBRatio).TruncateInt()\n\n\tif burnedPoolCoin.GTE(coinAmountThreshold) &&\n\t\t(sdk.NewDecFromInt(sdk.MaxInt(burnedPoolCoin, expectedBurningPoolCoinBasedA).Sub(sdk.MinInt(burnedPoolCoin, expectedBurningPoolCoinBasedA))).QuoInt(burnedPoolCoin).GT(errorRateThreshold) ||\n\t\t\tsdk.NewDecFromInt(sdk.MaxInt(burnedPoolCoin, expectedBurningPoolCoinBasedB).Sub(sdk.MinInt(burnedPoolCoin, expectedBurningPoolCoinBasedB))).QuoInt(burnedPoolCoin).GT(errorRateThreshold)) {\n\t\tpanic(\"invariant check fails due to incorrect amount of burning pool coins\")\n\t}\n}\n\n// WithdrawReserveCoinsInvariant checks the after withdraw amounts.\n//\n//nolint:staticcheck\nfunc WithdrawReserveCoinsInvariant(withdrawCoinA, withdrawCoinB, reserveCoinA, reserveCoinB,\n\tafterReserveCoinA, afterReserveCoinB, afterPoolCoinTotalSupply, lastPoolCoinSupply, burnedPoolCoin math.Int,\n) {\n\t// AfterWithdrawReserveCoinA = LastReserveCoinA - WithdrawCoinA\n\tif !afterReserveCoinA.Equal(reserveCoinA.Sub(withdrawCoinA)) {\n\t\tpanic(\"invariant check fails due to incorrect withdraw coin A amount\")\n\t}\n\n\t// AfterWithdrawReserveCoinB = LastReserveCoinB - WithdrawCoinB\n\tif !afterReserveCoinB.Equal(reserveCoinB.Sub(withdrawCoinB)) {\n\t\tpanic(\"invariant check fails due to incorrect withdraw coin B amount\")\n\t}\n\n\t// AfterWithdrawPoolCoinSupply = LastPoolCoinSupply - BurnedPoolCoinAmount\n\tif !afterPoolCoinTotalSupply.Equal(lastPoolCoinSupply.Sub(burnedPoolCoin)) {\n\t\tpanic(\"invariant check fails due to incorrect total supply\")\n\t}\n}\n\n// WithdrawAmountInvariant checks the correct ratio of withdraw coin amounts.\n//\n//nolint:staticcheck\nfunc WithdrawAmountInvariant(withdrawCoinA, withdrawCoinB, reserveCoinA, reserveCoinB, burnedPoolCoin, poolCoinSupply math.Int, withdrawFeeRate sdk.Dec) {\n\tratio := sdk.NewDecFromInt(burnedPoolCoin).Quo(sdk.NewDecFromInt(poolCoinSupply)).Mul(sdk.OneDec().Sub(withdrawFeeRate))\n\tidealWithdrawCoinA := sdk.NewDecFromInt(reserveCoinA).Mul(ratio)\n\tidealWithdrawCoinB := sdk.NewDecFromInt(reserveCoinB).Mul(ratio)\n\tdiffA := idealWithdrawCoinA.Sub(sdk.NewDecFromInt(withdrawCoinA)).Abs()\n\tdiffB := idealWithdrawCoinB.Sub(sdk.NewDecFromInt(withdrawCoinB)).Abs()\n\tif !burnedPoolCoin.Equal(poolCoinSupply) {\n\t\tif diffA.GTE(sdk.OneDec()) {\n\t\t\tpanic(fmt.Sprintf(\"withdraw coin amount %v differs too much from %v\", withdrawCoinA, idealWithdrawCoinA))\n\t\t}\n\t\tif diffB.GTE(sdk.OneDec()) {\n\t\t\tpanic(fmt.Sprintf(\"withdraw coin amount %v differs too much from %v\", withdrawCoinB, idealWithdrawCoinB))\n\t\t}\n\t}\n}\n\n// ImmutablePoolPriceAfterWithdrawInvariant checks the immutable pool price after withdrawing coins.\n//\n//nolint:staticcheck\nfunc ImmutablePoolPriceAfterWithdrawInvariant(reserveCoinA, reserveCoinB, withdrawCoinA, withdrawCoinB, afterReserveCoinA, afterReserveCoinB math.Int) {\n\t// TestReinitializePool tests a scenario where after reserve coins are zero\n\tif !afterReserveCoinA.IsZero() && !afterReserveCoinB.IsZero() {\n\t\treserveCoinA = reserveCoinA.Sub(withdrawCoinA)\n\t\treserveCoinB = reserveCoinB.Sub(withdrawCoinB)\n\n\t\treserveCoinRatio := sdk.NewDecFromInt(reserveCoinA).Quo(sdk.NewDecFromInt(reserveCoinB))\n\t\tafterReserveCoinRatio := sdk.NewDecFromInt(afterReserveCoinA).Quo(sdk.NewDecFromInt(afterReserveCoinB))\n\n\t\t// LastReserveCoinA / LastReserveCoinB = AfterWithdrawReserveCoinA / AfterWithdrawReserveCoinB\n\t\tif reserveCoinA.GTE(coinAmountThreshold) && reserveCoinB.GTE(coinAmountThreshold) &&\n\t\t\twithdrawCoinA.GTE(coinAmountThreshold) && withdrawCoinB.GTE(coinAmountThreshold) &&\n\t\t\terrorRate(reserveCoinRatio, afterReserveCoinRatio).GT(errorRateThreshold) {\n\t\t\tpanic(\"invariant check fails due to incorrect pool price ratio\")\n\t\t}\n\t}\n}\n\n// SwapMatchingInvariants checks swap matching results of both X to Y and Y to X cases.\nfunc SwapMatchingInvariants(xToY, yToX []*types.SwapMsgState, matchResultXtoY, matchResultYtoX []types.MatchResult) {\n\tbeforeMatchingXtoYLen := len(xToY)\n\tbeforeMatchingYtoXLen := len(yToX)\n\tafterMatchingXtoYLen := len(matchResultXtoY)\n\tafterMatchingYtoXLen := len(matchResultYtoX)\n\n\tnotMatchedXtoYLen := beforeMatchingXtoYLen - afterMatchingXtoYLen\n\tnotMatchedYtoXLen := beforeMatchingYtoXLen - afterMatchingYtoXLen\n\n\tif notMatchedXtoYLen != types.CountNotMatchedMsgs(xToY) {\n\t\tpanic(\"invariant check fails due to invalid xToY match length\")\n\t}\n\n\tif notMatchedYtoXLen != types.CountNotMatchedMsgs(yToX) {\n\t\tpanic(\"invariant check fails due to invalid yToX match length\")\n\t}\n}\n\n// SwapPriceInvariants checks swap price invariants.\nfunc SwapPriceInvariants(matchResultXtoY, matchResultYtoX []types.MatchResult, poolXDelta, poolYDelta, poolXDelta2, poolYDelta2 sdk.Dec, result types.BatchResult) {\n\tinvariantCheckX := sdk.ZeroDec()\n\tinvariantCheckY := sdk.ZeroDec()\n\n\tfor _, m := range matchResultXtoY {\n\t\tinvariantCheckX = invariantCheckX.Sub(m.TransactedCoinAmt)\n\t\tinvariantCheckY = invariantCheckY.Add(m.ExchangedDemandCoinAmt)\n\t}\n\n\tfor _, m := range matchResultYtoX {\n\t\tinvariantCheckY = invariantCheckY.Sub(m.TransactedCoinAmt)\n\t\tinvariantCheckX = invariantCheckX.Add(m.ExchangedDemandCoinAmt)\n\t}\n\n\tinvariantCheckX = invariantCheckX.Add(poolXDelta2)\n\tinvariantCheckY = invariantCheckY.Add(poolYDelta2)\n\n\tif !invariantCheckX.IsZero() && !invariantCheckY.IsZero() {\n\t\tpanic(fmt.Errorf(\"invariant check fails due to invalid swap price: %s\", invariantCheckX.String()))\n\t}\n\n\tvaliditySwapPrice := types.CheckSwapPrice(matchResultXtoY, matchResultYtoX, result.SwapPrice)\n\tif !validitySwapPrice {\n\t\tpanic(\"invariant check fails due to invalid swap price\")\n\t}\n}\n\n// SwapPriceDirectionInvariants checks whether the calculated swap price is increased, decreased, or stayed from the last pool price.\nfunc SwapPriceDirectionInvariants(currentPoolPrice sdk.Dec, batchResult types.BatchResult) {\n\tswitch batchResult.PriceDirection {\n\tcase types.Increasing:\n\t\tif !batchResult.SwapPrice.GT(currentPoolPrice) {\n\t\t\tpanic(\"invariant check fails due to incorrect price direction\")\n\t\t}\n\tcase types.Decreasing:\n\t\tif !batchResult.SwapPrice.LT(currentPoolPrice) {\n\t\t\tpanic(\"invariant check fails due to incorrect price direction\")\n\t\t}\n\tcase types.Staying:\n\t\tif !batchResult.SwapPrice.Equal(currentPoolPrice) {\n\t\t\tpanic(\"invariant check fails due to incorrect price direction\")\n\t\t}\n\t}\n}\n\n// SwapMsgStatesInvariants checks swap match result states invariants.\nfunc SwapMsgStatesInvariants(matchResultXtoY, matchResultYtoX []types.MatchResult, matchResultMap map[uint64]types.MatchResult,\n\tswapMsgStates []*types.SwapMsgState, xToY, yToX []*types.SwapMsgState,\n) {\n\tif len(matchResultXtoY)+len(matchResultYtoX) != len(matchResultMap) {\n\t\tpanic(\"invalid length of match result\")\n\t}\n\n\tfor k, v := range matchResultMap {\n\t\tif k != v.SwapMsgState.MsgIndex {\n\t\t\tpanic(\"broken map consistency\")\n\t\t}\n\t}\n\n\tfor _, sms := range swapMsgStates {\n\t\tfor _, smsXtoY := range xToY {\n\t\t\tif sms.MsgIndex == smsXtoY.MsgIndex {\n\t\t\t\tif *(sms) != *(smsXtoY) || sms != smsXtoY {\n\t\t\t\t\tpanic(\"swap message state not matched\")\n\t\t\t\t} else {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor _, smsYtoX := range yToX {\n\t\t\tif sms.MsgIndex == smsYtoX.MsgIndex {\n\t\t\t\tif *(sms) != *(smsYtoX) || sms != smsYtoX {\n\t\t\t\t\tpanic(\"swap message state not matched\")\n\t\t\t\t} else {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif msgAfter, ok := matchResultMap[sms.MsgIndex]; ok {\n\t\t\tif sms.MsgIndex == msgAfter.SwapMsgState.MsgIndex {\n\t\t\t\tif *(sms) != *(msgAfter.SwapMsgState) || sms != msgAfter.SwapMsgState {\n\t\t\t\t\tpanic(\"batch message not matched\")\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpanic(\"fail msg pointer consistency\")\n\t\t\t}\n\t\t}\n\t}\n}\n\n// SwapOrdersExecutionStateInvariants checks all executed orders have order price which is not \"executable\" or not \"unexecutable\".\nfunc SwapOrdersExecutionStateInvariants(matchResultMap map[uint64]types.MatchResult, swapMsgStates []*types.SwapMsgState,\n\tbatchResult types.BatchResult, denomX string,\n) {\n\tfor _, sms := range swapMsgStates {\n\t\tif _, ok := matchResultMap[sms.MsgIndex]; ok {\n\t\t\tif !sms.Executed || !sms.Succeeded {\n\t\t\t\tpanic(\"swap msg state consistency error, matched but not succeeded\")\n\t\t\t}\n\n\t\t\tif sms.Msg.OfferCoin.Denom == denomX {\n\t\t\t\t// buy orders having equal or higher order price than found swapPrice\n\t\t\t\tif !sms.Msg.OrderPrice.GTE(batchResult.SwapPrice) {\n\t\t\t\t\tpanic(\"execution validity failed, executed but unexecutable\")\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// sell orders having equal or lower order price than found swapPrice\n\t\t\t\tif !sms.Msg.OrderPrice.LTE(batchResult.SwapPrice) {\n\t\t\t\t\tpanic(\"execution validity failed, executed but unexecutable\")\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// check whether every unexecuted orders have order price which is not \"executable\"\n\t\t\tif sms.Executed && sms.Succeeded {\n\t\t\t\tpanic(\"sms consistency error, not matched but succeeded\")\n\t\t\t}\n\n\t\t\tif sms.Msg.OfferCoin.Denom == denomX {\n\t\t\t\t// buy orders having equal or lower order price than found swapPrice\n\t\t\t\tif !sms.Msg.OrderPrice.LTE(batchResult.SwapPrice) {\n\t\t\t\t\tpanic(\"execution validity failed, unexecuted but executable\")\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// sell orders having equal or higher order price than found swapPrice\n\t\t\t\tif !sms.Msg.OrderPrice.GTE(batchResult.SwapPrice) {\n\t\t\t\t\tpanic(\"execution validity failed, unexecuted but executable\")\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "x/liquidity/keeper/keeper.go",
    "content": "package keeper\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cometbft/cometbft/libs/log\"\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tstoretypes \"github.com/cosmos/cosmos-sdk/store/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n)\n\n// Keeper of the liquidity store\ntype Keeper struct {\n\tcdc           codec.BinaryCodec\n\tstoreKey      storetypes.StoreKey\n\tbankKeeper    types.BankKeeper\n\taccountKeeper types.AccountKeeper\n\tdistrKeeper   types.DistributionKeeper\n\n\tauthority string\n}\n\n// NewKeeper returns a liquidity keeper. It handles:\n// - creating new ModuleAccounts for each pool ReserveAccount\n// - sending to and from ModuleAccounts\n// - minting, burning PoolCoins\nfunc NewKeeper(\n\tcdc codec.BinaryCodec,\n\tkey storetypes.StoreKey,\n\tbankKeeper types.BankKeeper,\n\taccountKeeper types.AccountKeeper,\n\tdistrKeeper types.DistributionKeeper,\n\tauthority string,\n) Keeper {\n\t// ensure liquidity module account is set\n\tif addr := accountKeeper.GetModuleAddress(types.ModuleName); addr == nil {\n\t\tpanic(fmt.Sprintf(\"%s module account has not been set\", types.ModuleName))\n\t}\n\n\treturn Keeper{\n\t\tstoreKey:      key,\n\t\tbankKeeper:    bankKeeper,\n\t\taccountKeeper: accountKeeper,\n\t\tdistrKeeper:   distrKeeper,\n\t\tcdc:           cdc,\n\t\tauthority:     authority,\n\t}\n}\n\n// GetAuthority returns the x/mint module's authority.\nfunc (k Keeper) GetAuthority() string { return k.authority }\n\nfunc (k Keeper) Logger(ctx sdk.Context) log.Logger {\n\treturn ctx.Logger().With(\"module\", fmt.Sprintf(\"x/%s\", types.ModuleName))\n}\n\nfunc (k Keeper) SetParams(ctx sdk.Context, p types.Params) error {\n\tif err := p.Validate(); err != nil {\n\t\treturn err\n\t}\n\n\tstore := ctx.KVStore(k.storeKey)\n\tbz := k.cdc.MustMarshal(&p)\n\tstore.Set(types.ParamsKey, bz)\n\n\treturn nil\n}\n\nfunc (k Keeper) GetParams(ctx sdk.Context) (p types.Params) {\n\tstore := ctx.KVStore(k.storeKey)\n\tbz := store.Get(types.ParamsKey)\n\tif bz == nil {\n\t\treturn p\n\t}\n\n\tk.cdc.MustUnmarshal(bz, &p)\n\treturn p\n}\n\n// GetCircuitBreakerEnabled returns circuit breaker enabled param from the paramspace.\nfunc (k Keeper) GetCircuitBreakerEnabled(ctx sdk.Context) bool {\n\treturn k.GetParams(ctx).CircuitBreakerEnabled\n}\n"
  },
  {
    "path": "x/liquidity/keeper/liquidity_pool.go",
    "content": "package keeper\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\n\terrorsmod \"cosmossdk.io/errors\"\n\t\"cosmossdk.io/math\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n)\n\nfunc (k Keeper) ValidateMsgCreatePool(ctx sdk.Context, msg *types.MsgCreatePool) error {\n\tparams := k.GetParams(ctx)\n\tvar poolType types.PoolType\n\n\t// check poolType exist, get poolType from param\n\tif len(params.PoolTypes) >= int(msg.PoolTypeId) {\n\t\tpoolType = params.PoolTypes[msg.PoolTypeId-1]\n\t\tif poolType.Id != msg.PoolTypeId {\n\t\t\treturn types.ErrPoolTypeNotExists\n\t\t}\n\t} else {\n\t\treturn types.ErrPoolTypeNotExists\n\t}\n\n\treserveCoinNum := uint32(msg.DepositCoins.Len())\n\tif reserveCoinNum > poolType.MaxReserveCoinNum || poolType.MinReserveCoinNum > reserveCoinNum {\n\t\treturn types.ErrNumOfReserveCoin\n\t}\n\n\treserveCoinDenoms := make([]string, reserveCoinNum)\n\tfor i := 0; i < int(reserveCoinNum); i++ {\n\t\treserveCoinDenoms[i] = msg.DepositCoins.GetDenomByIndex(i)\n\t}\n\n\tdenomA, denomB := types.AlphabeticalDenomPair(reserveCoinDenoms[0], reserveCoinDenoms[1])\n\tif denomA != msg.DepositCoins[0].Denom || denomB != msg.DepositCoins[1].Denom {\n\t\treturn types.ErrBadOrderingReserveCoin\n\t}\n\n\tif denomA == denomB {\n\t\treturn types.ErrEqualDenom\n\t}\n\n\tif err := types.ValidateReserveCoinLimit(params.MaxReserveCoinAmount, msg.DepositCoins); err != nil {\n\t\treturn err\n\t}\n\n\tpoolName := types.PoolName(reserveCoinDenoms, msg.PoolTypeId)\n\treserveAcc := types.GetPoolReserveAcc(poolName, false)\n\t_, found := k.GetPoolByReserveAccIndex(ctx, reserveAcc)\n\tif found {\n\t\treturn types.ErrPoolAlreadyExists\n\t}\n\treturn nil\n}\n\nfunc (k Keeper) MintAndSendPoolCoin(ctx sdk.Context, pool types.Pool, srcAddr, creatorAddr sdk.AccAddress, depositCoins sdk.Coins) (sdk.Coin, error) {\n\tcacheCtx, writeCache := ctx.CacheContext()\n\n\tparams := k.GetParams(cacheCtx)\n\n\tmintingCoin := sdk.NewCoin(pool.PoolCoinDenom, params.InitPoolCoinMintAmount)\n\tmintingCoins := sdk.NewCoins(mintingCoin)\n\tif err := k.bankKeeper.MintCoins(cacheCtx, types.ModuleName, mintingCoins); err != nil {\n\t\treturn sdk.Coin{}, err\n\t}\n\n\treserveAcc := pool.GetReserveAccount()\n\n\tvar inputs []banktypes.Input\n\tvar outputs []banktypes.Output\n\n\tinputs = append(inputs, banktypes.NewInput(srcAddr, depositCoins))\n\toutputs = append(outputs, banktypes.NewOutput(reserveAcc, depositCoins))\n\n\tinputs = append(inputs, banktypes.NewInput(k.accountKeeper.GetModuleAddress(types.ModuleName), mintingCoins))\n\toutputs = append(outputs, banktypes.NewOutput(creatorAddr, mintingCoins))\n\n\tif err := k.bankKeeper.InputOutputCoins(cacheCtx, inputs, outputs); err != nil {\n\t\treturn sdk.Coin{}, err\n\t}\n\n\twriteCache()\n\n\treturn mintingCoin, nil\n}\n\nfunc (k Keeper) CreatePool(ctx sdk.Context, msg *types.MsgCreatePool) (types.Pool, error) {\n\tif err := k.ValidateMsgCreatePool(ctx, msg); err != nil {\n\t\treturn types.Pool{}, err\n\t}\n\n\tparams := k.GetParams(ctx)\n\n\tdenom1, denom2 := types.AlphabeticalDenomPair(msg.DepositCoins[0].Denom, msg.DepositCoins[1].Denom)\n\treserveCoinDenoms := []string{denom1, denom2}\n\n\tpoolName := types.PoolName(reserveCoinDenoms, msg.PoolTypeId)\n\n\tpool := types.Pool{\n\t\t// Id: will set on SetPoolAtomic\n\t\tTypeId:                msg.PoolTypeId,\n\t\tReserveCoinDenoms:     reserveCoinDenoms,\n\t\tReserveAccountAddress: types.GetPoolReserveAcc(poolName, false).String(),\n\t\tPoolCoinDenom:         types.GetPoolCoinDenom(poolName),\n\t}\n\n\tpoolCreator := msg.GetPoolCreator()\n\n\tfor _, coin := range msg.DepositCoins {\n\t\tif coin.Amount.LT(params.MinInitDepositAmount) {\n\t\t\treturn types.Pool{}, errorsmod.Wrapf(\n\t\t\t\ttypes.ErrLessThanMinInitDeposit, \"deposit coin %s is smaller than %s\", coin, params.MinInitDepositAmount)\n\t\t}\n\t}\n\n\tfor _, coin := range msg.DepositCoins {\n\t\tbalance := k.bankKeeper.GetBalance(ctx, poolCreator, coin.Denom)\n\t\tif balance.IsLT(coin) {\n\t\t\treturn types.Pool{}, errorsmod.Wrapf(\n\t\t\t\ttypes.ErrInsufficientBalance, \"%s is smaller than %s\", balance, coin)\n\t\t}\n\t}\n\n\tfor _, coin := range params.PoolCreationFee {\n\t\tbalance := k.bankKeeper.GetBalance(ctx, poolCreator, coin.Denom)\n\t\tneededAmt := coin.Amount.Add(msg.DepositCoins.AmountOf(coin.Denom))\n\t\tneededCoin := sdk.NewCoin(coin.Denom, neededAmt)\n\t\tif balance.IsLT(neededCoin) {\n\t\t\treturn types.Pool{}, errorsmod.Wrapf(\n\t\t\t\ttypes.ErrInsufficientPoolCreationFee, \"%s is smaller than %s\", balance, neededCoin)\n\t\t}\n\t}\n\n\tif _, err := k.MintAndSendPoolCoin(ctx, pool, poolCreator, poolCreator, msg.DepositCoins); err != nil {\n\t\treturn types.Pool{}, err\n\t}\n\n\t// pool creation fees are collected in community pool\n\tif err := k.distrKeeper.FundCommunityPool(ctx, params.PoolCreationFee, poolCreator); err != nil {\n\t\treturn types.Pool{}, err\n\t}\n\n\tpool = k.SetPoolAtomic(ctx, pool)\n\tbatch := types.NewPoolBatch(pool.Id, 1)\n\tbatch.BeginHeight = ctx.BlockHeight()\n\n\tk.SetPoolBatch(ctx, batch)\n\n\treserveCoins := k.GetReserveCoins(ctx, pool)\n\tlastReserveRatio := sdk.NewDecFromInt(reserveCoins[0].Amount).Quo(sdk.NewDecFromInt(reserveCoins[1].Amount))\n\tlogger := k.Logger(ctx)\n\tlogger.Debug(\n\t\t\"create liquidity pool\",\n\t\t\"msg\", msg,\n\t\t\"pool\", pool,\n\t\t\"reserveCoins\", reserveCoins,\n\t\t\"lastReserveRatio\", lastReserveRatio,\n\t)\n\n\treturn pool, nil\n}\n\nfunc (k Keeper) ExecuteDeposit(ctx sdk.Context, msg types.DepositMsgState, batch types.PoolBatch) error {\n\tif msg.Executed || msg.ToBeDeleted || msg.Succeeded {\n\t\treturn fmt.Errorf(\"cannot process already executed batch msg\")\n\t}\n\tmsg.Executed = true\n\tk.SetPoolBatchDepositMsgState(ctx, msg.Msg.PoolId, msg)\n\n\tif err := k.ValidateMsgDepositWithinBatch(ctx, *msg.Msg); err != nil {\n\t\treturn err\n\t}\n\n\tpool, found := k.GetPool(ctx, msg.Msg.PoolId)\n\tif !found {\n\t\treturn types.ErrPoolNotExists\n\t}\n\n\tdepositCoins := msg.Msg.DepositCoins.Sort()\n\n\tbatchEscrowAcc := k.accountKeeper.GetModuleAddress(types.ModuleName)\n\treserveAcc := pool.GetReserveAccount()\n\tdepositor := msg.Msg.GetDepositor()\n\n\tparams := k.GetParams(ctx)\n\n\treserveCoins := k.GetReserveCoins(ctx, pool)\n\n\t// reinitialize pool if the pool is depleted\n\tif k.IsDepletedPool(ctx, pool) {\n\t\tfor _, depositCoin := range msg.Msg.DepositCoins {\n\t\t\tif depositCoin.Amount.Add(reserveCoins.AmountOf(depositCoin.Denom)).LT(params.MinInitDepositAmount) {\n\t\t\t\treturn types.ErrLessThanMinInitDeposit\n\t\t\t}\n\t\t}\n\t\tpoolCoin, err := k.MintAndSendPoolCoin(ctx, pool, batchEscrowAcc, depositor, msg.Msg.DepositCoins)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// set deposit msg state of the pool batch complete\n\t\tmsg.Succeeded = true\n\t\tmsg.ToBeDeleted = true\n\t\tk.SetPoolBatchDepositMsgState(ctx, msg.Msg.PoolId, msg)\n\n\t\treserveCoins = k.GetReserveCoins(ctx, pool)\n\t\tlastReserveCoinA := sdk.NewDecFromInt(reserveCoins[0].Amount)\n\t\tlastReserveCoinB := sdk.NewDecFromInt(reserveCoins[1].Amount)\n\t\tlastReserveRatio := lastReserveCoinA.Quo(lastReserveCoinB)\n\t\tctx.EventManager().EmitEvent(\n\t\t\tsdk.NewEvent(\n\t\t\t\ttypes.EventTypeDepositToPool,\n\t\t\t\tsdk.NewAttribute(types.AttributeValuePoolId, strconv.FormatUint(pool.Id, 10)),\n\t\t\t\tsdk.NewAttribute(types.AttributeValueBatchIndex, strconv.FormatUint(batch.Index, 10)),\n\t\t\t\tsdk.NewAttribute(types.AttributeValueMsgIndex, strconv.FormatUint(msg.MsgIndex, 10)),\n\t\t\t\tsdk.NewAttribute(types.AttributeValueDepositor, depositor.String()),\n\t\t\t\tsdk.NewAttribute(types.AttributeValueAcceptedCoins, msg.Msg.DepositCoins.String()),\n\t\t\t\tsdk.NewAttribute(types.AttributeValueRefundedCoins, \"\"),\n\t\t\t\tsdk.NewAttribute(types.AttributeValuePoolCoinDenom, poolCoin.Denom),\n\t\t\t\tsdk.NewAttribute(types.AttributeValuePoolCoinAmount, poolCoin.Amount.String()),\n\t\t\t\tsdk.NewAttribute(types.AttributeValueSuccess, types.Success),\n\t\t\t),\n\t\t)\n\t\tlogger := k.Logger(ctx)\n\t\tlogger.Debug(\n\t\t\t\"reinitialize pool\",\n\t\t\t\"msg\", msg,\n\t\t\t\"pool\", pool,\n\t\t\t\"reserveCoins\", reserveCoins,\n\t\t\t\"lastReserveRatio\", lastReserveRatio,\n\t\t)\n\n\t\treturn nil\n\t}\n\n\treserveCoins.Sort()\n\n\tlastReserveCoinA := reserveCoins[0]\n\tlastReserveCoinB := reserveCoins[1]\n\n\tdepositCoinA := depositCoins[0]\n\tdepositCoinB := depositCoins[1]\n\n\tpoolCoinTotalSupply := sdk.NewDecFromInt(k.GetPoolCoinTotalSupply(ctx, pool))\n\tif err := types.CheckOverflowWithDec(poolCoinTotalSupply, sdk.NewDecFromInt(depositCoinA.Amount)); err != nil {\n\t\treturn err\n\t}\n\tif err := types.CheckOverflowWithDec(poolCoinTotalSupply, sdk.NewDecFromInt(depositCoinB.Amount)); err != nil {\n\t\treturn err\n\t}\n\tpoolCoinMintAmt := sdk.MinDec(\n\t\tpoolCoinTotalSupply.MulTruncate(sdk.NewDecFromInt(depositCoinA.Amount)).QuoTruncate(sdk.NewDecFromInt(lastReserveCoinA.Amount)),\n\t\tpoolCoinTotalSupply.MulTruncate(sdk.NewDecFromInt(depositCoinB.Amount)).QuoTruncate(sdk.NewDecFromInt(lastReserveCoinB.Amount)),\n\t)\n\tmintRate := poolCoinMintAmt.TruncateDec().QuoTruncate(poolCoinTotalSupply)\n\tacceptedCoins := sdk.NewCoins(\n\t\tsdk.NewCoin(depositCoins[0].Denom, sdk.NewDecFromInt(lastReserveCoinA.Amount).Mul(mintRate).TruncateInt()),\n\t\tsdk.NewCoin(depositCoins[1].Denom, sdk.NewDecFromInt(lastReserveCoinB.Amount).Mul(mintRate).TruncateInt()),\n\t)\n\trefundedCoins := depositCoins.Sub(acceptedCoins...)\n\trefundedCoinA := sdk.NewCoin(depositCoinA.Denom, refundedCoins.AmountOf(depositCoinA.Denom))\n\trefundedCoinB := sdk.NewCoin(depositCoinB.Denom, refundedCoins.AmountOf(depositCoinB.Denom))\n\n\tmintPoolCoin := sdk.NewCoin(pool.PoolCoinDenom, poolCoinMintAmt.TruncateInt())\n\tmintPoolCoins := sdk.NewCoins(mintPoolCoin)\n\n\tif mintPoolCoins.IsZero() || acceptedCoins.IsZero() {\n\t\treturn fmt.Errorf(\"pool coin truncated, no accepted coin, refund\")\n\t}\n\n\tif err := k.bankKeeper.MintCoins(ctx, types.ModuleName, mintPoolCoins); err != nil {\n\t\treturn err\n\t}\n\n\tvar inputs []banktypes.Input\n\tvar outputs []banktypes.Output\n\n\tif !refundedCoins.IsZero() {\n\t\t// refund truncated deposit coins\n\t\tinputs = append(inputs, banktypes.NewInput(batchEscrowAcc, refundedCoins))\n\t\toutputs = append(outputs, banktypes.NewOutput(depositor, refundedCoins))\n\t}\n\n\t// send accepted deposit coins\n\tinputs = append(inputs, banktypes.NewInput(batchEscrowAcc, acceptedCoins))\n\toutputs = append(outputs, banktypes.NewOutput(reserveAcc, acceptedCoins))\n\n\t// send minted pool coins\n\tinputs = append(inputs, banktypes.NewInput(batchEscrowAcc, mintPoolCoins))\n\toutputs = append(outputs, banktypes.NewOutput(depositor, mintPoolCoins))\n\n\t// execute multi-send\n\tif err := k.bankKeeper.InputOutputCoins(ctx, inputs, outputs); err != nil {\n\t\treturn err\n\t}\n\n\tmsg.Succeeded = true\n\tmsg.ToBeDeleted = true\n\tk.SetPoolBatchDepositMsgState(ctx, msg.Msg.PoolId, msg)\n\n\tif BatchLogicInvariantCheckFlag {\n\t\tafterReserveCoins := k.GetReserveCoins(ctx, pool)\n\t\tafterReserveCoinA := afterReserveCoins[0].Amount\n\t\tafterReserveCoinB := afterReserveCoins[1].Amount\n\n\t\tMintingPoolCoinsInvariant(poolCoinTotalSupply.TruncateInt(), mintPoolCoin.Amount, depositCoinA.Amount, depositCoinB.Amount,\n\t\t\tlastReserveCoinA.Amount, lastReserveCoinB.Amount, refundedCoinA.Amount, refundedCoinB.Amount)\n\t\tDepositInvariant(lastReserveCoinA.Amount, lastReserveCoinB.Amount, depositCoinA.Amount, depositCoinB.Amount,\n\t\t\tafterReserveCoinA, afterReserveCoinB, refundedCoinA.Amount, refundedCoinB.Amount)\n\t}\n\n\tctx.EventManager().EmitEvent(\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeDepositToPool,\n\t\t\tsdk.NewAttribute(types.AttributeValuePoolId, strconv.FormatUint(pool.Id, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValueBatchIndex, strconv.FormatUint(batch.Index, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValueMsgIndex, strconv.FormatUint(msg.MsgIndex, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValueDepositor, depositor.String()),\n\t\t\tsdk.NewAttribute(types.AttributeValueAcceptedCoins, acceptedCoins.String()),\n\t\t\tsdk.NewAttribute(types.AttributeValueRefundedCoins, refundedCoins.String()),\n\t\t\tsdk.NewAttribute(types.AttributeValuePoolCoinDenom, mintPoolCoin.Denom),\n\t\t\tsdk.NewAttribute(types.AttributeValuePoolCoinAmount, mintPoolCoin.Amount.String()),\n\t\t\tsdk.NewAttribute(types.AttributeValueSuccess, types.Success),\n\t\t),\n\t)\n\n\treserveCoins = k.GetReserveCoins(ctx, pool)\n\tlastReserveRatio := sdk.NewDecFromInt(reserveCoins[0].Amount).Quo(sdk.NewDecFromInt(reserveCoins[1].Amount))\n\n\tlogger := k.Logger(ctx)\n\tlogger.Debug(\n\t\t\"deposit coins to the pool\",\n\t\t\"msg\", msg,\n\t\t\"pool\", pool,\n\t\t\"inputs\", inputs,\n\t\t\"outputs\", outputs,\n\t\t\"reserveCoins\", reserveCoins,\n\t\t\"lastReserveRatio\", lastReserveRatio,\n\t)\n\n\treturn nil\n}\n\n// ExecuteWithdrawal withdraws pool coin from the liquidity pool\nfunc (k Keeper) ExecuteWithdrawal(ctx sdk.Context, msg types.WithdrawMsgState, batch types.PoolBatch) error {\n\tif msg.Executed || msg.ToBeDeleted || msg.Succeeded {\n\t\treturn fmt.Errorf(\"cannot process already executed batch msg\")\n\t}\n\tmsg.Executed = true\n\tk.SetPoolBatchWithdrawMsgState(ctx, msg.Msg.PoolId, msg)\n\n\tif err := k.ValidateMsgWithdrawWithinBatch(ctx, *msg.Msg); err != nil {\n\t\treturn err\n\t}\n\tpoolCoins := sdk.NewCoins(msg.Msg.PoolCoin)\n\n\tpool, found := k.GetPool(ctx, msg.Msg.PoolId)\n\tif !found {\n\t\treturn types.ErrPoolNotExists\n\t}\n\n\tpoolCoinTotalSupply := k.GetPoolCoinTotalSupply(ctx, pool)\n\treserveCoins := k.GetReserveCoins(ctx, pool)\n\treserveCoins.Sort()\n\n\tvar inputs []banktypes.Input\n\tvar outputs []banktypes.Output\n\n\treserveAcc := pool.GetReserveAccount()\n\twithdrawer := msg.Msg.GetWithdrawer()\n\n\tparams := k.GetParams(ctx)\n\twithdrawProportion := sdk.OneDec().Sub(params.WithdrawFeeRate)\n\twithdrawCoins := sdk.NewCoins()\n\twithdrawFeeCoins := sdk.NewCoins()\n\n\t// Case for withdrawing all reserve coins\n\tif msg.Msg.PoolCoin.Amount.Equal(poolCoinTotalSupply) {\n\t\twithdrawCoins = reserveCoins\n\t} else {\n\t\t// Calculate withdraw amount of respective reserve coin considering fees and pool coin's totally supply\n\t\tfor _, reserveCoin := range reserveCoins {\n\t\t\tif err := types.CheckOverflow(reserveCoin.Amount, msg.Msg.PoolCoin.Amount); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif err := types.CheckOverflow(sdk.NewDecFromInt(reserveCoin.Amount.Mul(msg.Msg.PoolCoin.Amount)).TruncateInt(), poolCoinTotalSupply); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t// WithdrawAmount = ReserveAmount * PoolCoinAmount * WithdrawFeeProportion / TotalSupply\n\t\t\twithdrawAmtWithFee := sdk.NewDecFromInt(reserveCoin.Amount.Mul(msg.Msg.PoolCoin.Amount)).TruncateInt().Quo(poolCoinTotalSupply)\n\t\t\twithdrawAmt := sdk.NewDecFromInt(reserveCoin.Amount.Mul(msg.Msg.PoolCoin.Amount)).MulTruncate(withdrawProportion).TruncateInt().Quo(poolCoinTotalSupply)\n\t\t\twithdrawCoins = append(withdrawCoins, sdk.NewCoin(reserveCoin.Denom, withdrawAmt))\n\t\t\twithdrawFeeCoins = append(withdrawFeeCoins, sdk.NewCoin(reserveCoin.Denom, withdrawAmtWithFee.Sub(withdrawAmt)))\n\t\t}\n\t}\n\n\tif withdrawCoins.IsValid() {\n\t\tinputs = append(inputs, banktypes.NewInput(reserveAcc, withdrawCoins))\n\t\toutputs = append(outputs, banktypes.NewOutput(withdrawer, withdrawCoins))\n\t} else {\n\t\treturn types.ErrBadPoolCoinAmount\n\t}\n\n\t// send withdrawing coins to the withdrawer\n\tif err := k.bankKeeper.InputOutputCoins(ctx, inputs, outputs); err != nil {\n\t\treturn err\n\t}\n\n\t// burn the escrowed pool coins\n\tif err := k.bankKeeper.BurnCoins(ctx, types.ModuleName, poolCoins); err != nil {\n\t\treturn err\n\t}\n\n\tmsg.Succeeded = true\n\tmsg.ToBeDeleted = true\n\tk.SetPoolBatchWithdrawMsgState(ctx, msg.Msg.PoolId, msg)\n\n\tif BatchLogicInvariantCheckFlag {\n\t\tafterPoolCoinTotalSupply := k.GetPoolCoinTotalSupply(ctx, pool)\n\t\tafterReserveCoins := k.GetReserveCoins(ctx, pool)\n\t\tafterReserveCoinA := sdk.ZeroInt()\n\t\tafterReserveCoinB := sdk.ZeroInt()\n\t\tif !afterReserveCoins.IsZero() {\n\t\t\tafterReserveCoinA = afterReserveCoins[0].Amount\n\t\t\tafterReserveCoinB = afterReserveCoins[1].Amount\n\t\t}\n\t\tburnedPoolCoin := poolCoins[0].Amount\n\t\twithdrawCoinA := withdrawCoins[0].Amount\n\t\twithdrawCoinB := withdrawCoins[1].Amount\n\t\treserveCoinA := reserveCoins[0].Amount\n\t\treserveCoinB := reserveCoins[1].Amount\n\t\tlastPoolCoinTotalSupply := poolCoinTotalSupply\n\t\tafterPoolTotalSupply := afterPoolCoinTotalSupply\n\n\t\tBurningPoolCoinsInvariant(burnedPoolCoin, withdrawCoinA, withdrawCoinB, reserveCoinA, reserveCoinB, lastPoolCoinTotalSupply, withdrawFeeCoins)\n\t\tWithdrawReserveCoinsInvariant(withdrawCoinA, withdrawCoinB, reserveCoinA, reserveCoinB,\n\t\t\tafterReserveCoinA, afterReserveCoinB, afterPoolTotalSupply, lastPoolCoinTotalSupply, burnedPoolCoin)\n\t\tWithdrawAmountInvariant(withdrawCoinA, withdrawCoinB, reserveCoinA, reserveCoinB, burnedPoolCoin, lastPoolCoinTotalSupply, params.WithdrawFeeRate)\n\t\tImmutablePoolPriceAfterWithdrawInvariant(reserveCoinA, reserveCoinB, withdrawCoinA, withdrawCoinB, afterReserveCoinA, afterReserveCoinB)\n\t}\n\n\tctx.EventManager().EmitEvent(\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeWithdrawFromPool,\n\t\t\tsdk.NewAttribute(types.AttributeValuePoolId, strconv.FormatUint(pool.Id, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValueBatchIndex, strconv.FormatUint(batch.Index, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValueMsgIndex, strconv.FormatUint(msg.MsgIndex, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValueWithdrawer, withdrawer.String()),\n\t\t\tsdk.NewAttribute(types.AttributeValuePoolCoinDenom, msg.Msg.PoolCoin.Denom),\n\t\t\tsdk.NewAttribute(types.AttributeValuePoolCoinAmount, msg.Msg.PoolCoin.Amount.String()),\n\t\t\tsdk.NewAttribute(types.AttributeValueWithdrawCoins, withdrawCoins.String()),\n\t\t\tsdk.NewAttribute(types.AttributeValueWithdrawFeeCoins, withdrawFeeCoins.String()),\n\t\t\tsdk.NewAttribute(types.AttributeValueSuccess, types.Success),\n\t\t),\n\t)\n\n\treserveCoins = k.GetReserveCoins(ctx, pool)\n\n\tvar lastReserveRatio sdk.Dec\n\tif reserveCoins.IsZero() {\n\t\tlastReserveRatio = sdk.ZeroDec()\n\t} else {\n\t\tlastReserveRatio = sdk.NewDecFromInt(reserveCoins[0].Amount).Quo(sdk.NewDecFromInt(reserveCoins[1].Amount))\n\t}\n\n\tlogger := k.Logger(ctx)\n\tlogger.Debug(\n\t\t\"withdraw pool coin from the pool\",\n\t\t\"msg\", msg,\n\t\t\"pool\", pool,\n\t\t\"inputs\", inputs,\n\t\t\"outputs\", outputs,\n\t\t\"reserveCoins\", reserveCoins,\n\t\t\"lastReserveRatio\", lastReserveRatio,\n\t)\n\n\treturn nil\n}\n\n// GetPoolCoinTotalSupply returns total supply of pool coin of the pool in form of math.Int\n//\n//nolint:staticcheck\nfunc (k Keeper) GetPoolCoinTotalSupply(ctx sdk.Context, pool types.Pool) math.Int {\n\treturn k.bankKeeper.GetSupply(ctx, pool.PoolCoinDenom).Amount\n}\n\n// IsDepletedPool returns true if the pool is depleted.\nfunc (k Keeper) IsDepletedPool(ctx sdk.Context, pool types.Pool) bool {\n\treserveCoins := k.GetReserveCoins(ctx, pool)\n\treturn !k.GetPoolCoinTotalSupply(ctx, pool).IsPositive() ||\n\t\treserveCoins.AmountOf(pool.ReserveCoinDenoms[0]).IsZero() ||\n\t\treserveCoins.AmountOf(pool.ReserveCoinDenoms[1]).IsZero()\n}\n\n// GetPoolCoinTotal returns total supply of pool coin of the pool in form of sdk.Coin\nfunc (k Keeper) GetPoolCoinTotal(ctx sdk.Context, pool types.Pool) sdk.Coin {\n\treturn sdk.NewCoin(pool.PoolCoinDenom, k.GetPoolCoinTotalSupply(ctx, pool))\n}\n\n// GetReserveCoins returns reserve coins from the liquidity pool\nfunc (k Keeper) GetReserveCoins(ctx sdk.Context, pool types.Pool) (reserveCoins sdk.Coins) {\n\treserveAcc := pool.GetReserveAccount()\n\treserveCoins = sdk.NewCoins()\n\tfor _, denom := range pool.ReserveCoinDenoms {\n\t\treserveCoins = append(reserveCoins, k.bankKeeper.GetBalance(ctx, reserveAcc, denom))\n\t}\n\treturn\n}\n\n// GetPoolMetaData returns metadata of the pool\nfunc (k Keeper) GetPoolMetaData(ctx sdk.Context, pool types.Pool) types.PoolMetadata {\n\treturn types.PoolMetadata{\n\t\tPoolId:              pool.Id,\n\t\tPoolCoinTotalSupply: k.GetPoolCoinTotal(ctx, pool),\n\t\tReserveCoins:        k.GetReserveCoins(ctx, pool),\n\t}\n}\n\n// GetPoolRecord returns the liquidity pool record with the given pool information\nfunc (k Keeper) GetPoolRecord(ctx sdk.Context, pool types.Pool) (types.PoolRecord, bool) {\n\tbatch, found := k.GetPoolBatch(ctx, pool.Id)\n\tif !found {\n\t\treturn types.PoolRecord{}, false\n\t}\n\treturn types.PoolRecord{\n\t\tPool:              pool,\n\t\tPoolMetadata:      k.GetPoolMetaData(ctx, pool),\n\t\tPoolBatch:         batch,\n\t\tDepositMsgStates:  k.GetAllPoolBatchDepositMsgs(ctx, batch),\n\t\tWithdrawMsgStates: k.GetAllPoolBatchWithdrawMsgStates(ctx, batch),\n\t\tSwapMsgStates:     k.GetAllPoolBatchSwapMsgStates(ctx, batch),\n\t}, true\n}\n\n// SetPoolRecord stores liquidity pool states\nfunc (k Keeper) SetPoolRecord(ctx sdk.Context, record types.PoolRecord) types.PoolRecord {\n\tk.SetPoolAtomic(ctx, record.Pool)\n\tif record.PoolBatch.BeginHeight > ctx.BlockHeight() {\n\t\trecord.PoolBatch.BeginHeight = 0\n\t}\n\tk.SetPoolBatch(ctx, record.PoolBatch)\n\tk.SetPoolBatchDepositMsgStates(ctx, record.Pool.Id, record.DepositMsgStates)\n\tk.SetPoolBatchWithdrawMsgStates(ctx, record.Pool.Id, record.WithdrawMsgStates)\n\tk.SetPoolBatchSwapMsgStates(ctx, record.Pool.Id, record.SwapMsgStates)\n\treturn record\n}\n\n// RefundDeposit refunds deposit amounts to the depositor\nfunc (k Keeper) RefundDeposit(ctx sdk.Context, batchMsg types.DepositMsgState, batch types.PoolBatch) error {\n\tbatchMsg, _ = k.GetPoolBatchDepositMsgState(ctx, batchMsg.Msg.PoolId, batchMsg.MsgIndex)\n\tif !batchMsg.Executed || batchMsg.Succeeded {\n\t\treturn fmt.Errorf(\"cannot refund not executed or already succeeded msg\")\n\t}\n\tpool, _ := k.GetPool(ctx, batchMsg.Msg.PoolId)\n\tif err := k.ReleaseEscrow(ctx, batchMsg.Msg.GetDepositor(), batchMsg.Msg.DepositCoins); err != nil {\n\t\treturn err\n\t}\n\t// not delete now, set ToBeDeleted true for delete on next block beginblock\n\tbatchMsg.ToBeDeleted = true\n\tk.SetPoolBatchDepositMsgState(ctx, batchMsg.Msg.PoolId, batchMsg)\n\tctx.EventManager().EmitEvent(\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeDepositToPool,\n\t\t\tsdk.NewAttribute(types.AttributeValuePoolId, strconv.FormatUint(pool.Id, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValueBatchIndex, strconv.FormatUint(batch.Index, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValueMsgIndex, strconv.FormatUint(batchMsg.MsgIndex, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValueDepositor, batchMsg.Msg.GetDepositor().String()),\n\t\t\tsdk.NewAttribute(types.AttributeValueAcceptedCoins, sdk.NewCoins().String()),\n\t\t\tsdk.NewAttribute(types.AttributeValueRefundedCoins, batchMsg.Msg.DepositCoins.String()),\n\t\t\tsdk.NewAttribute(types.AttributeValueSuccess, types.Failure),\n\t\t))\n\treturn nil\n}\n\n// RefundWithdrawal refunds pool coin of the liquidity pool to the withdrawer\nfunc (k Keeper) RefundWithdrawal(ctx sdk.Context, batchMsg types.WithdrawMsgState, batch types.PoolBatch) error {\n\tbatchMsg, _ = k.GetPoolBatchWithdrawMsgState(ctx, batchMsg.Msg.PoolId, batchMsg.MsgIndex)\n\tif !batchMsg.Executed || batchMsg.Succeeded {\n\t\treturn fmt.Errorf(\"cannot refund not executed or already succeeded msg\")\n\t}\n\tpool, _ := k.GetPool(ctx, batchMsg.Msg.PoolId)\n\tif err := k.ReleaseEscrow(ctx, batchMsg.Msg.GetWithdrawer(), sdk.NewCoins(batchMsg.Msg.PoolCoin)); err != nil {\n\t\treturn err\n\t}\n\tctx.EventManager().EmitEvent(\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeWithdrawFromPool,\n\t\t\tsdk.NewAttribute(types.AttributeValuePoolId, strconv.FormatUint(pool.Id, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValueBatchIndex, strconv.FormatUint(batch.Index, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValueMsgIndex, strconv.FormatUint(batchMsg.MsgIndex, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValueWithdrawer, batchMsg.Msg.GetWithdrawer().String()),\n\t\t\tsdk.NewAttribute(types.AttributeValuePoolCoinDenom, batchMsg.Msg.PoolCoin.Denom),\n\t\t\tsdk.NewAttribute(types.AttributeValuePoolCoinAmount, batchMsg.Msg.PoolCoin.Amount.String()),\n\t\t\tsdk.NewAttribute(types.AttributeValueSuccess, types.Failure),\n\t\t))\n\n\t// not delete now, set ToBeDeleted true for delete on next block beginblock\n\tbatchMsg.ToBeDeleted = true\n\tk.SetPoolBatchWithdrawMsgState(ctx, batchMsg.Msg.PoolId, batchMsg)\n\treturn nil\n}\n\n// TransactAndRefundSwapLiquidityPool transacts, refunds, expires, sends coins with escrow, update state by TransactAndRefundSwapLiquidityPool\nfunc (k Keeper) TransactAndRefundSwapLiquidityPool(ctx sdk.Context, swapMsgStates []*types.SwapMsgState,\n\tmatchResultMap map[uint64]types.MatchResult, pool types.Pool, batchResult types.BatchResult,\n) error {\n\tvar inputs []banktypes.Input\n\tvar outputs []banktypes.Output\n\tbatchEscrowAcc := k.accountKeeper.GetModuleAddress(types.ModuleName)\n\tpoolReserveAcc := pool.GetReserveAccount()\n\tbatch, found := k.GetPoolBatch(ctx, pool.Id)\n\tif !found {\n\t\treturn types.ErrPoolBatchNotExists\n\t}\n\tsendCoin := func(from, to sdk.AccAddress, coin sdk.Coin) {\n\t\tcoins := sdk.NewCoins(coin)\n\t\tif !coins.Empty() && coins.IsValid() {\n\t\t\tinputs = append(inputs, banktypes.NewInput(from, coins))\n\t\t\toutputs = append(outputs, banktypes.NewOutput(to, coins))\n\t\t}\n\t}\n\tfor _, sms := range swapMsgStates {\n\t\tif pool.Id != sms.Msg.PoolId {\n\t\t\treturn fmt.Errorf(\"broken msg pool consistency\")\n\t\t}\n\t\tif !sms.Executed && sms.Succeeded {\n\t\t\treturn fmt.Errorf(\"can't refund not executed with succeed msg\")\n\t\t}\n\t\tif sms.RemainingOfferCoin.IsNegative() {\n\t\t\treturn fmt.Errorf(\"negative RemainingOfferCoin\")\n\t\t} else if sms.RemainingOfferCoin.IsPositive() &&\n\t\t\t((!sms.ToBeDeleted && sms.OrderExpiryHeight <= ctx.BlockHeight()) ||\n\t\t\t\t(sms.ToBeDeleted && sms.OrderExpiryHeight != ctx.BlockHeight())) {\n\t\t\treturn fmt.Errorf(\"consistency of OrderExpiryHeight and ToBeDeleted flag is broken\")\n\t\t}\n\n\t\tif match, ok := matchResultMap[sms.MsgIndex]; ok {\n\t\t\ttransactedAmt := match.TransactedCoinAmt.TruncateInt()\n\t\t\treceiveAmt := match.ExchangedDemandCoinAmt.Sub(match.ExchangedCoinFeeAmt).TruncateInt()\n\t\t\tofferCoinFeeAmt := match.OfferCoinFeeAmt.TruncateInt()\n\n\t\t\tsendCoin(batchEscrowAcc, poolReserveAcc, sdk.NewCoin(sms.Msg.OfferCoin.Denom, transactedAmt))\n\t\t\tsendCoin(poolReserveAcc, sms.Msg.GetSwapRequester(), sdk.NewCoin(sms.Msg.DemandCoinDenom, receiveAmt))\n\t\t\tsendCoin(batchEscrowAcc, poolReserveAcc, sdk.NewCoin(sms.Msg.OfferCoin.Denom, offerCoinFeeAmt))\n\n\t\t\tif sms.RemainingOfferCoin.Add(sms.ReservedOfferCoinFee).IsPositive() && sms.OrderExpiryHeight == ctx.BlockHeight() {\n\t\t\t\tsendCoin(batchEscrowAcc, sms.Msg.GetSwapRequester(), sms.RemainingOfferCoin.Add(sms.ReservedOfferCoinFee))\n\t\t\t}\n\n\t\t\tsms.Succeeded = true\n\t\t\tif sms.RemainingOfferCoin.IsZero() {\n\t\t\t\tsms.ToBeDeleted = true\n\t\t\t}\n\n\t\t\tctx.EventManager().EmitEvent(\n\t\t\t\tsdk.NewEvent(\n\t\t\t\t\ttypes.EventTypeSwapTransacted,\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValuePoolId, strconv.FormatUint(pool.Id, 10)),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueBatchIndex, strconv.FormatUint(batch.Index, 10)),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueMsgIndex, strconv.FormatUint(sms.MsgIndex, 10)),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueSwapRequester, sms.Msg.GetSwapRequester().String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueSwapTypeId, strconv.FormatUint(uint64(sms.Msg.SwapTypeId), 10)),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueOfferCoinDenom, sms.Msg.OfferCoin.Denom),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueOfferCoinAmount, sms.Msg.OfferCoin.Amount.String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueDemandCoinDenom, sms.Msg.DemandCoinDenom),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueOrderPrice, sms.Msg.OrderPrice.String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueSwapPrice, batchResult.SwapPrice.String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueTransactedCoinAmount, transactedAmt.String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueRemainingOfferCoinAmount, sms.RemainingOfferCoin.Amount.String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueExchangedOfferCoinAmount, sms.ExchangedOfferCoin.Amount.String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueExchangedDemandCoinAmount, receiveAmt.String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueOfferCoinFeeAmount, offerCoinFeeAmt.String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueExchangedCoinFeeAmount, match.ExchangedCoinFeeAmt.String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueReservedOfferCoinFeeAmount, sms.ReservedOfferCoinFee.Amount.String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueOrderExpiryHeight, strconv.FormatInt(sms.OrderExpiryHeight, 10)),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueSuccess, types.Success),\n\t\t\t\t))\n\t\t} else {\n\t\t\t// Not matched, remaining\n\t\t\tsendCoin(batchEscrowAcc, sms.Msg.GetSwapRequester(), sms.RemainingOfferCoin.Add(sms.ReservedOfferCoinFee))\n\t\t\tsms.Succeeded = false\n\t\t\tsms.ToBeDeleted = true\n\n\t\t\tctx.EventManager().EmitEvent(\n\t\t\t\tsdk.NewEvent(\n\t\t\t\t\ttypes.EventTypeSwapTransacted,\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValuePoolId, strconv.FormatUint(pool.Id, 10)),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueBatchIndex, strconv.FormatUint(batch.Index, 10)),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueMsgIndex, strconv.FormatUint(sms.MsgIndex, 10)),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueSwapRequester, sms.Msg.GetSwapRequester().String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueSwapTypeId, strconv.FormatUint(uint64(sms.Msg.SwapTypeId), 10)),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueOfferCoinDenom, sms.Msg.OfferCoin.Denom),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueOfferCoinAmount, sms.Msg.OfferCoin.Amount.String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueDemandCoinDenom, sms.Msg.DemandCoinDenom),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueOrderPrice, sms.Msg.OrderPrice.String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueSwapPrice, batchResult.SwapPrice.String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueRemainingOfferCoinAmount, sms.RemainingOfferCoin.Amount.String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueExchangedOfferCoinAmount, sms.ExchangedOfferCoin.Amount.String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueReservedOfferCoinFeeAmount, sms.ReservedOfferCoinFee.Amount.String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueOrderExpiryHeight, strconv.FormatInt(sms.OrderExpiryHeight, 10)),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueSuccess, types.Failure),\n\t\t\t\t))\n\n\t\t}\n\t}\n\tif err := k.bankKeeper.InputOutputCoins(ctx, inputs, outputs); err != nil {\n\t\treturn err\n\t}\n\tk.SetPoolBatchSwapMsgStatesByPointer(ctx, pool.Id, swapMsgStates)\n\treturn nil\n}\n\nfunc (k Keeper) RefundSwaps(ctx sdk.Context, pool types.Pool, swapMsgStates []*types.SwapMsgState) error {\n\tvar inputs []banktypes.Input\n\tvar outputs []banktypes.Output\n\tsendCoin := func(from, to sdk.AccAddress, coin sdk.Coin) {\n\t\tcoins := sdk.NewCoins(coin)\n\t\tif !coins.Empty() && coins.IsValid() {\n\t\t\tinputs = append(inputs, banktypes.NewInput(from, coins))\n\t\t\toutputs = append(outputs, banktypes.NewOutput(to, coins))\n\t\t}\n\t}\n\tfor _, sms := range swapMsgStates {\n\t\tif sms.OrderExpiryHeight == ctx.BlockHeight() {\n\t\t\tsendCoin(k.accountKeeper.GetModuleAddress(types.ModuleName), sms.Msg.GetSwapRequester(), sms.RemainingOfferCoin.Add(sms.ReservedOfferCoinFee))\n\t\t\tsms.Succeeded = false\n\t\t\tsms.ToBeDeleted = true\n\t\t}\n\t}\n\tif err := k.bankKeeper.InputOutputCoins(ctx, inputs, outputs); err != nil {\n\t\treturn err\n\t}\n\tk.SetPoolBatchSwapMsgStatesByPointer(ctx, pool.Id, swapMsgStates)\n\treturn nil\n}\n\n// ValidateMsgDepositWithinBatch validates MsgDepositWithinBatch\nfunc (k Keeper) ValidateMsgDepositWithinBatch(ctx sdk.Context, msg types.MsgDepositWithinBatch) error {\n\tpool, found := k.GetPool(ctx, msg.PoolId)\n\tif !found {\n\t\treturn types.ErrPoolNotExists\n\t}\n\n\tif msg.DepositCoins.Len() != len(pool.ReserveCoinDenoms) {\n\t\treturn types.ErrNumOfReserveCoin\n\t}\n\n\tparams := k.GetParams(ctx)\n\treserveCoins := k.GetReserveCoins(ctx, pool)\n\tif err := types.ValidateReserveCoinLimit(params.MaxReserveCoinAmount, reserveCoins.Add(msg.DepositCoins...)); err != nil {\n\t\treturn err\n\t}\n\n\tdenomA, denomB := types.AlphabeticalDenomPair(msg.DepositCoins[0].Denom, msg.DepositCoins[1].Denom)\n\tif denomA != pool.ReserveCoinDenoms[0] || denomB != pool.ReserveCoinDenoms[1] {\n\t\treturn types.ErrNotMatchedReserveCoin\n\t}\n\treturn nil\n}\n\n// ValidateMsgWithdrawWithinBatch validates MsgWithdrawWithinBatch\nfunc (k Keeper) ValidateMsgWithdrawWithinBatch(ctx sdk.Context, msg types.MsgWithdrawWithinBatch) error {\n\tpool, found := k.GetPool(ctx, msg.PoolId)\n\tif !found {\n\t\treturn types.ErrPoolNotExists\n\t}\n\n\tif msg.PoolCoin.Denom != pool.PoolCoinDenom {\n\t\treturn types.ErrBadPoolCoinDenom\n\t}\n\n\tpoolCoinTotalSupply := k.GetPoolCoinTotalSupply(ctx, pool)\n\tif k.IsDepletedPool(ctx, pool) {\n\t\treturn types.ErrDepletedPool\n\t}\n\n\tif msg.PoolCoin.Amount.GT(poolCoinTotalSupply) {\n\t\treturn types.ErrBadPoolCoinAmount\n\t}\n\treturn nil\n}\n\n// ValidateMsgSwapWithinBatch validates MsgSwapWithinBatch.\nfunc (k Keeper) ValidateMsgSwapWithinBatch(ctx sdk.Context, msg types.MsgSwapWithinBatch, pool types.Pool) error {\n\tdenomA, denomB := types.AlphabeticalDenomPair(msg.OfferCoin.Denom, msg.DemandCoinDenom)\n\tif denomA != pool.ReserveCoinDenoms[0] || denomB != pool.ReserveCoinDenoms[1] {\n\t\treturn types.ErrNotMatchedReserveCoin\n\t}\n\n\tparams := k.GetParams(ctx)\n\n\t// can not exceed max order ratio  of reserve coins that can be ordered at a order\n\treserveCoinAmt := k.GetReserveCoins(ctx, pool).AmountOf(msg.OfferCoin.Denom)\n\n\t// Decimal Error, Multiply the Int coin amount by the Decimal Rate and erase the decimal point to order a lower value\n\tmaximumOrderableAmt := reserveCoinAmt.ToLegacyDec().MulTruncate(params.MaxOrderAmountRatio).TruncateInt()\n\tif msg.OfferCoin.Amount.GT(maximumOrderableAmt) {\n\t\treturn types.ErrExceededMaxOrderable\n\t}\n\n\tif msg.OfferCoinFee.Denom != msg.OfferCoin.Denom {\n\t\treturn types.ErrBadOfferCoinFee\n\t}\n\n\tif err := types.CheckOverflowWithDec(msg.OfferCoin.Amount.ToLegacyDec(), msg.OrderPrice); err != nil {\n\t\treturn err\n\t}\n\n\tif !msg.OfferCoinFee.Equal(types.GetOfferCoinFee(msg.OfferCoin, params.SwapFeeRate)) {\n\t\treturn types.ErrBadOfferCoinFee\n\t}\n\n\treturn nil\n}\n\n// ValidatePool validates logic for liquidity pool after set or before export\nfunc (k Keeper) ValidatePool(ctx sdk.Context, pool *types.Pool) error {\n\tparams := k.GetParams(ctx)\n\tvar poolType types.PoolType\n\n\t// check poolType exist, get poolType from param\n\tif len(params.PoolTypes) >= int(pool.TypeId) {\n\t\tpoolType = params.PoolTypes[pool.TypeId-1]\n\t\tif poolType.Id != pool.TypeId {\n\t\t\treturn types.ErrPoolTypeNotExists\n\t\t}\n\t} else {\n\t\treturn types.ErrPoolTypeNotExists\n\t}\n\n\tif poolType.MaxReserveCoinNum > types.MaxReserveCoinNum || types.MinReserveCoinNum > poolType.MinReserveCoinNum {\n\t\treturn types.ErrNumOfReserveCoin\n\t}\n\n\treserveCoins := k.GetReserveCoins(ctx, *pool)\n\tif uint32(reserveCoins.Len()) > poolType.MaxReserveCoinNum || poolType.MinReserveCoinNum > uint32(reserveCoins.Len()) {\n\t\treturn types.ErrNumOfReserveCoin\n\t}\n\n\tif len(pool.ReserveCoinDenoms) != reserveCoins.Len() {\n\t\treturn types.ErrNumOfReserveCoin\n\t}\n\tfor i, denom := range pool.ReserveCoinDenoms {\n\t\tif denom != reserveCoins[i].Denom {\n\t\t\treturn types.ErrInvalidDenom\n\t\t}\n\t}\n\n\tdenomA, denomB := types.AlphabeticalDenomPair(pool.ReserveCoinDenoms[0], pool.ReserveCoinDenoms[1])\n\tif denomA != pool.ReserveCoinDenoms[0] || denomB != pool.ReserveCoinDenoms[1] {\n\t\treturn types.ErrBadOrderingReserveCoin\n\t}\n\n\tpoolName := types.PoolName(pool.ReserveCoinDenoms, pool.TypeId)\n\tpoolCoin := k.GetPoolCoinTotal(ctx, *pool)\n\tif poolCoin.Denom != types.GetPoolCoinDenom(poolName) {\n\t\treturn types.ErrBadPoolCoinDenom\n\t}\n\n\t_, found := k.GetPoolBatch(ctx, pool.Id)\n\tif !found {\n\t\treturn types.ErrPoolBatchNotExists\n\t}\n\n\treturn nil\n}\n\n// ValidatePoolMetadata validates logic for liquidity pool metadata\nfunc (k Keeper) ValidatePoolMetadata(ctx sdk.Context, pool *types.Pool, metaData *types.PoolMetadata) error {\n\tif err := metaData.ReserveCoins.Validate(); err != nil {\n\t\treturn err\n\t}\n\tif !metaData.ReserveCoins.IsEqual(k.GetReserveCoins(ctx, *pool)) {\n\t\treturn types.ErrNumOfReserveCoin\n\t}\n\tif !metaData.PoolCoinTotalSupply.IsEqual(sdk.NewCoin(pool.PoolCoinDenom, k.GetPoolCoinTotalSupply(ctx, *pool))) {\n\t\treturn types.ErrBadPoolCoinAmount\n\t}\n\treturn nil\n}\n\n// ValidatePoolRecord validates liquidity pool record after init or after export\nfunc (k Keeper) ValidatePoolRecord(ctx sdk.Context, record types.PoolRecord) error {\n\tif err := k.ValidatePool(ctx, &record.Pool); err != nil {\n\t\treturn err\n\t}\n\n\tif err := k.ValidatePoolMetadata(ctx, &record.Pool, &record.PoolMetadata); err != nil {\n\t\treturn err\n\t}\n\n\tif len(record.DepositMsgStates) != 0 && record.PoolBatch.DepositMsgIndex != record.DepositMsgStates[len(record.DepositMsgStates)-1].MsgIndex+1 {\n\t\treturn types.ErrBadBatchMsgIndex\n\t}\n\tif len(record.WithdrawMsgStates) != 0 && record.PoolBatch.WithdrawMsgIndex != record.WithdrawMsgStates[len(record.WithdrawMsgStates)-1].MsgIndex+1 {\n\t\treturn types.ErrBadBatchMsgIndex\n\t}\n\tif len(record.SwapMsgStates) != 0 && record.PoolBatch.SwapMsgIndex != record.SwapMsgStates[len(record.SwapMsgStates)-1].MsgIndex+1 {\n\t\treturn types.ErrBadBatchMsgIndex\n\t}\n\n\treturn nil\n}\n\n// IsPoolCoinDenom returns true if the denom is a valid pool coin denom.\nfunc (k Keeper) IsPoolCoinDenom(ctx sdk.Context, denom string) bool {\n\treserveAcc, err := types.GetReserveAcc(denom, false)\n\tif err != nil {\n\t\treturn false\n\t}\n\t_, found := k.GetPoolByReserveAccIndex(ctx, reserveAcc)\n\treturn found\n}\n"
  },
  {
    "path": "x/liquidity/keeper/migrator.go",
    "content": "package keeper\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/exported\"\n\tv3 \"github.com/cybercongress/go-cyber/v7/x/liquidity/migrations/v3\"\n)\n\n// Migrator is a struct for handling in-place store migrations.\ntype Migrator struct {\n\tkeeper         Keeper\n\tlegacySubspace exported.Subspace\n}\n\n// NewMigrator returns a new Migrator.\nfunc NewMigrator(keeper Keeper, ss exported.Subspace) Migrator {\n\treturn Migrator{\n\t\tkeeper:         keeper,\n\t\tlegacySubspace: ss,\n\t}\n}\n\n// Migrate2to3 migrates from version 2 to 3.\nfunc (m Migrator) Migrate2to3(ctx sdk.Context) error {\n\treturn v3.Migrate(ctx, ctx.KVStore(m.keeper.storeKey), m.legacySubspace, m.keeper.cdc)\n}\n"
  },
  {
    "path": "x/liquidity/keeper/msg_server.go",
    "content": "package keeper\n\n// DONTCOVER\n\n// Although written in msg_server_test.go, it is approached at the keeper level rather than at the msgServer level\n// so is not included in the coverage.\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strconv\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n)\n\ntype msgServer struct {\n\tKeeper\n}\n\n// NewMsgServerImpl returns an implementation of the distribution MsgServer interface\n// for the provided Keeper.\nfunc NewMsgServerImpl(keeper Keeper) types.MsgServer {\n\treturn &msgServer{Keeper: keeper}\n}\n\nvar _ types.MsgServer = msgServer{}\n\n// Message server, handler for CreatePool msg\nfunc (k msgServer) CreatePool(goCtx context.Context, msg *types.MsgCreatePool) (*types.MsgCreatePoolResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tif k.GetCircuitBreakerEnabled(ctx) {\n\t\treturn nil, types.ErrCircuitBreakerEnabled\n\t}\n\n\tpool, err := k.Keeper.CreatePool(ctx, msg)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\tsdk.EventTypeMessage,\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),\n\t\t),\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeCreatePool,\n\t\t\tsdk.NewAttribute(types.AttributeValuePoolId, strconv.FormatUint(pool.Id, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValuePoolTypeId, fmt.Sprintf(\"%d\", msg.PoolTypeId)),\n\t\t\tsdk.NewAttribute(types.AttributeValuePoolName, pool.Name()),\n\t\t\tsdk.NewAttribute(types.AttributeValueReserveAccount, pool.ReserveAccountAddress),\n\t\t\tsdk.NewAttribute(types.AttributeValueDepositCoins, msg.DepositCoins.String()),\n\t\t\tsdk.NewAttribute(types.AttributeValuePoolCoinDenom, pool.PoolCoinDenom),\n\t\t),\n\t})\n\n\treturn &types.MsgCreatePoolResponse{}, nil\n}\n\n// Message server, handler for MsgDepositWithinBatch\nfunc (k msgServer) DepositWithinBatch(goCtx context.Context, msg *types.MsgDepositWithinBatch) (*types.MsgDepositWithinBatchResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tif k.GetCircuitBreakerEnabled(ctx) {\n\t\treturn nil, types.ErrCircuitBreakerEnabled\n\t}\n\n\tpoolBatch, found := k.GetPoolBatch(ctx, msg.PoolId)\n\tif !found {\n\t\treturn nil, types.ErrPoolBatchNotExists\n\t}\n\n\tbatchMsg, err := k.Keeper.DepositWithinBatch(ctx, msg)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\tsdk.EventTypeMessage,\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),\n\t\t),\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeDepositWithinBatch,\n\t\t\tsdk.NewAttribute(types.AttributeValuePoolId, strconv.FormatUint(batchMsg.Msg.PoolId, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValueBatchIndex, strconv.FormatUint(poolBatch.Index, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValueMsgIndex, strconv.FormatUint(batchMsg.MsgIndex, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValueDepositCoins, batchMsg.Msg.DepositCoins.String()),\n\t\t),\n\t})\n\n\treturn &types.MsgDepositWithinBatchResponse{}, nil\n}\n\n// Message server, handler for MsgWithdrawWithinBatch\nfunc (k msgServer) WithdrawWithinBatch(goCtx context.Context, msg *types.MsgWithdrawWithinBatch) (*types.MsgWithdrawWithinBatchResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tpoolBatch, found := k.GetPoolBatch(ctx, msg.PoolId)\n\tif !found {\n\t\treturn nil, types.ErrPoolBatchNotExists\n\t}\n\n\tbatchMsg, err := k.Keeper.WithdrawWithinBatch(ctx, msg)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\tsdk.EventTypeMessage,\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),\n\t\t),\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeWithdrawWithinBatch,\n\t\t\tsdk.NewAttribute(types.AttributeValuePoolId, strconv.FormatUint(batchMsg.Msg.PoolId, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValueBatchIndex, strconv.FormatUint(poolBatch.Index, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValueMsgIndex, strconv.FormatUint(batchMsg.MsgIndex, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValuePoolCoinDenom, batchMsg.Msg.PoolCoin.Denom),\n\t\t\tsdk.NewAttribute(types.AttributeValuePoolCoinAmount, batchMsg.Msg.PoolCoin.Amount.String()),\n\t\t),\n\t})\n\n\treturn &types.MsgWithdrawWithinBatchResponse{}, nil\n}\n\n// Message server, handler for MsgSwapWithinBatch\nfunc (k msgServer) Swap(goCtx context.Context, msg *types.MsgSwapWithinBatch) (*types.MsgSwapWithinBatchResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tif k.GetCircuitBreakerEnabled(ctx) {\n\t\treturn nil, types.ErrCircuitBreakerEnabled\n\t}\n\n\tpoolBatch, found := k.GetPoolBatch(ctx, msg.PoolId)\n\tif !found {\n\t\treturn nil, types.ErrPoolBatchNotExists\n\t}\n\n\tbatchMsg, err := k.Keeper.SwapWithinBatch(ctx, msg, types.CancelOrderLifeSpan)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\tsdk.EventTypeMessage,\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),\n\t\t),\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeSwapWithinBatch,\n\t\t\tsdk.NewAttribute(types.AttributeValuePoolId, strconv.FormatUint(batchMsg.Msg.PoolId, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValueBatchIndex, strconv.FormatUint(poolBatch.Index, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValueMsgIndex, strconv.FormatUint(batchMsg.MsgIndex, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValueSwapTypeId, strconv.FormatUint(uint64(batchMsg.Msg.SwapTypeId), 10)),\n\t\t\tsdk.NewAttribute(types.AttributeValueOfferCoinDenom, batchMsg.Msg.OfferCoin.Denom),\n\t\t\tsdk.NewAttribute(types.AttributeValueOfferCoinAmount, batchMsg.Msg.OfferCoin.Amount.String()),\n\t\t\tsdk.NewAttribute(types.AttributeValueOfferCoinFeeAmount, batchMsg.Msg.OfferCoinFee.Amount.String()),\n\t\t\tsdk.NewAttribute(types.AttributeValueDemandCoinDenom, batchMsg.Msg.DemandCoinDenom),\n\t\t\tsdk.NewAttribute(types.AttributeValueOrderPrice, batchMsg.Msg.OrderPrice.String()),\n\t\t),\n\t})\n\n\treturn &types.MsgSwapWithinBatchResponse{}, nil\n}\n"
  },
  {
    "path": "x/liquidity/keeper/store.go",
    "content": "package keeper\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tgogotypes \"github.com/cosmos/gogoproto/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n)\n\n// GetPool reads from kvstore and returns a specific pool\nfunc (k Keeper) GetPool(ctx sdk.Context, poolID uint64) (pool types.Pool, found bool) {\n\tstore := ctx.KVStore(k.storeKey)\n\tkey := types.GetPoolKey(poolID)\n\n\tvalue := store.Get(key)\n\tif value == nil {\n\t\treturn pool, false\n\t}\n\n\tpool = types.MustUnmarshalPool(k.cdc, value)\n\n\treturn pool, true\n}\n\n// SetPool sets to kvstore a specific pool\nfunc (k Keeper) SetPool(ctx sdk.Context, pool types.Pool) {\n\tstore := ctx.KVStore(k.storeKey)\n\tb := types.MustMarshalPool(k.cdc, pool)\n\tstore.Set(types.GetPoolKey(pool.Id), b)\n}\n\n// delete from kvstore a specific liquidityPool\nfunc (k Keeper) DeletePool(ctx sdk.Context, pool types.Pool) {\n\tstore := ctx.KVStore(k.storeKey)\n\tKey := types.GetPoolKey(pool.Id)\n\tstore.Delete(Key)\n}\n\n// IterateAllPools iterate through all of the liquidityPools\nfunc (k Keeper) IterateAllPools(ctx sdk.Context, cb func(pool types.Pool) (stop bool)) {\n\tstore := ctx.KVStore(k.storeKey)\n\n\titerator := sdk.KVStorePrefixIterator(store, types.PoolKeyPrefix)\n\tdefer iterator.Close()\n\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tpool := types.MustUnmarshalPool(k.cdc, iterator.Value())\n\t\tif cb(pool) {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\n// GetAllPools returns all liquidityPools used during genesis dump\nfunc (k Keeper) GetAllPools(ctx sdk.Context) (pools []types.Pool) {\n\tk.IterateAllPools(ctx, func(liquidityPool types.Pool) bool {\n\t\tpools = append(pools, liquidityPool)\n\t\treturn false\n\t})\n\n\treturn pools\n}\n\n// GetNextPoolIDWithUpdate returns and increments the global Pool ID counter.\n// If the global account number is not set, it initializes it with value 0.\nfunc (k Keeper) GetNextPoolIDWithUpdate(ctx sdk.Context) uint64 {\n\tstore := ctx.KVStore(k.storeKey)\n\tpoolID := k.GetNextPoolID(ctx)\n\tbz := k.cdc.MustMarshal(&gogotypes.UInt64Value{Value: poolID + 1})\n\tstore.Set(types.GlobalLiquidityPoolIDKey, bz)\n\treturn poolID\n}\n\n// GetNextPoolID returns next pool id for new pool, using index of latest pool id\nfunc (k Keeper) GetNextPoolID(ctx sdk.Context) uint64 {\n\tvar poolID uint64\n\tstore := ctx.KVStore(k.storeKey)\n\n\tbz := store.Get(types.GlobalLiquidityPoolIDKey)\n\tif bz == nil {\n\t\t// initialize the LiquidityPoolID\n\t\tpoolID = 1\n\t} else {\n\t\tval := gogotypes.UInt64Value{}\n\n\t\terr := k.cdc.Unmarshal(bz, &val)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\n\t\tpoolID = val.GetValue()\n\t}\n\treturn poolID\n}\n\n// GetPoolByReserveAccIndex reads from kvstore and return a specific liquidityPool indexed by given reserve account\nfunc (k Keeper) GetPoolByReserveAccIndex(ctx sdk.Context, reserveAcc sdk.AccAddress) (pool types.Pool, found bool) {\n\tstore := ctx.KVStore(k.storeKey)\n\tkey := types.GetPoolByReserveAccIndexKey(reserveAcc)\n\n\tvalue := store.Get(key)\n\tif value == nil {\n\t\treturn pool, false\n\t}\n\n\tval := gogotypes.UInt64Value{}\n\terr := k.cdc.Unmarshal(value, &val)\n\tif err != nil {\n\t\treturn pool, false\n\t}\n\tpoolID := val.GetValue()\n\treturn k.GetPool(ctx, poolID)\n}\n\n// SetPoolByReserveAccIndex sets Index by ReserveAcc for pool duplication check\nfunc (k Keeper) SetPoolByReserveAccIndex(ctx sdk.Context, pool types.Pool) {\n\tstore := ctx.KVStore(k.storeKey)\n\tb := k.cdc.MustMarshal(&gogotypes.UInt64Value{Value: pool.Id})\n\tstore.Set(types.GetPoolByReserveAccIndexKey(pool.GetReserveAccount()), b)\n}\n\n// SetPoolAtomic sets pool with set global pool id index +1 and index by reserveAcc\nfunc (k Keeper) SetPoolAtomic(ctx sdk.Context, pool types.Pool) types.Pool {\n\tpool.Id = k.GetNextPoolIDWithUpdate(ctx)\n\tk.SetPool(ctx, pool)\n\tk.SetPoolByReserveAccIndex(ctx, pool)\n\treturn pool\n}\n\n// GetPoolBatch returns a specific pool batch\nfunc (k Keeper) GetPoolBatch(ctx sdk.Context, poolID uint64) (poolBatch types.PoolBatch, found bool) {\n\tstore := ctx.KVStore(k.storeKey)\n\tkey := types.GetPoolBatchKey(poolID)\n\n\tvalue := store.Get(key)\n\tif value == nil {\n\t\treturn poolBatch, false\n\t}\n\n\tpoolBatch = types.MustUnmarshalPoolBatch(k.cdc, value)\n\n\treturn poolBatch, true\n}\n\n// GetAllPoolBatches returns all batches of the all existed liquidity pools\nfunc (k Keeper) GetAllPoolBatches(ctx sdk.Context) (poolBatches []types.PoolBatch) {\n\tk.IterateAllPoolBatches(ctx, func(poolBatch types.PoolBatch) bool {\n\t\tpoolBatches = append(poolBatches, poolBatch)\n\t\treturn false\n\t})\n\n\treturn poolBatches\n}\n\n// IterateAllPoolBatches iterate through all of the pool batches\nfunc (k Keeper) IterateAllPoolBatches(ctx sdk.Context, cb func(poolBatch types.PoolBatch) (stop bool)) {\n\tstore := ctx.KVStore(k.storeKey)\n\n\titerator := sdk.KVStorePrefixIterator(store, types.PoolBatchKeyPrefix)\n\tdefer iterator.Close()\n\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tpoolBatch := types.MustUnmarshalPoolBatch(k.cdc, iterator.Value())\n\t\tif cb(poolBatch) {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\n// DeletePoolBatch deletes batch of the pool, it used for test case\nfunc (k Keeper) DeletePoolBatch(ctx sdk.Context, poolBatch types.PoolBatch) {\n\tstore := ctx.KVStore(k.storeKey)\n\tbatchKey := types.GetPoolBatchKey(poolBatch.PoolId)\n\tstore.Delete(batchKey)\n}\n\n// SetPoolBatch sets batch of the pool, with current state\nfunc (k Keeper) SetPoolBatch(ctx sdk.Context, poolBatch types.PoolBatch) {\n\tstore := ctx.KVStore(k.storeKey)\n\tb := types.MustMarshalPoolBatch(k.cdc, poolBatch)\n\tstore.Set(types.GetPoolBatchKey(poolBatch.PoolId), b)\n}\n\n// GetPoolBatchDepositMsgState returns a specific DepositMsgState\nfunc (k Keeper) GetPoolBatchDepositMsgState(ctx sdk.Context, poolID, msgIndex uint64) (state types.DepositMsgState, found bool) {\n\tstore := ctx.KVStore(k.storeKey)\n\tkey := types.GetPoolBatchDepositMsgStateIndexKey(poolID, msgIndex)\n\n\tvalue := store.Get(key)\n\tif value == nil {\n\t\treturn state, false\n\t}\n\n\tstate = types.MustUnmarshalDepositMsgState(k.cdc, value)\n\treturn state, true\n}\n\n// SetPoolBatchDepositMsgState sets deposit msg state of the pool batch, with current state\nfunc (k Keeper) SetPoolBatchDepositMsgState(ctx sdk.Context, poolID uint64, state types.DepositMsgState) {\n\tstore := ctx.KVStore(k.storeKey)\n\tb := types.MustMarshalDepositMsgState(k.cdc, state)\n\tstore.Set(types.GetPoolBatchDepositMsgStateIndexKey(poolID, state.MsgIndex), b)\n}\n\n// SetPoolBatchDepositMsgStatesByPointer sets deposit batch msgs of the pool batch, with current state using pointers\nfunc (k Keeper) SetPoolBatchDepositMsgStatesByPointer(ctx sdk.Context, poolID uint64, states []*types.DepositMsgState) {\n\tstore := ctx.KVStore(k.storeKey)\n\tfor _, state := range states {\n\t\tif poolID != state.Msg.PoolId {\n\t\t\tcontinue\n\t\t}\n\t\tb := types.MustMarshalDepositMsgState(k.cdc, *state)\n\t\tstore.Set(types.GetPoolBatchDepositMsgStateIndexKey(poolID, state.MsgIndex), b)\n\t}\n}\n\n// SetPoolBatchDepositMsgStates sets deposit batch msgs of the pool batch, with current state\nfunc (k Keeper) SetPoolBatchDepositMsgStates(ctx sdk.Context, poolID uint64, states []types.DepositMsgState) {\n\tstore := ctx.KVStore(k.storeKey)\n\tfor _, state := range states {\n\t\tif poolID != state.Msg.PoolId {\n\t\t\tcontinue\n\t\t}\n\t\tb := types.MustMarshalDepositMsgState(k.cdc, state)\n\t\tstore.Set(types.GetPoolBatchDepositMsgStateIndexKey(poolID, state.MsgIndex), b)\n\t}\n}\n\n// IterateAllPoolBatchDepositMsgStates iterate through all of the DepositMsgStates in the batch\nfunc (k Keeper) IterateAllPoolBatchDepositMsgStates(ctx sdk.Context, poolBatch types.PoolBatch, cb func(state types.DepositMsgState) (stop bool)) {\n\tstore := ctx.KVStore(k.storeKey)\n\n\tprefix := types.GetPoolBatchDepositMsgStatesPrefix(poolBatch.PoolId)\n\titerator := sdk.KVStorePrefixIterator(store, prefix)\n\tdefer iterator.Close()\n\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tstate := types.MustUnmarshalDepositMsgState(k.cdc, iterator.Value())\n\t\tif cb(state) {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\n// IterateAllDepositMsgStates iterate through all of the DepositMsgState of all batches\nfunc (k Keeper) IterateAllDepositMsgStates(ctx sdk.Context, cb func(state types.DepositMsgState) (stop bool)) {\n\tstore := ctx.KVStore(k.storeKey)\n\n\tprefix := types.PoolBatchDepositMsgStateIndexKeyPrefix\n\titerator := sdk.KVStorePrefixIterator(store, prefix)\n\tdefer iterator.Close()\n\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tstate := types.MustUnmarshalDepositMsgState(k.cdc, iterator.Value())\n\t\tif cb(state) {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\n// GetAllDepositMsgStates returns all BatchDepositMsgs for all batches.\nfunc (k Keeper) GetAllDepositMsgStates(ctx sdk.Context) (states []types.DepositMsgState) {\n\tk.IterateAllDepositMsgStates(ctx, func(state types.DepositMsgState) bool {\n\t\tstates = append(states, state)\n\t\treturn false\n\t})\n\treturn states\n}\n\n// GetAllPoolBatchDepositMsgs returns all BatchDepositMsgs indexed by the pool batch\nfunc (k Keeper) GetAllPoolBatchDepositMsgs(ctx sdk.Context, poolBatch types.PoolBatch) (states []types.DepositMsgState) {\n\tk.IterateAllPoolBatchDepositMsgStates(ctx, poolBatch, func(state types.DepositMsgState) bool {\n\t\tstates = append(states, state)\n\t\treturn false\n\t})\n\treturn states\n}\n\n// GetAllPoolBatchDepositMsgStatesNotToBeDeleted returns all Not toDelete BatchDepositMsgs indexed by the liquidityPoolBatch\nfunc (k Keeper) GetAllPoolBatchDepositMsgStatesNotToBeDeleted(ctx sdk.Context, poolBatch types.PoolBatch) (states []types.DepositMsgState) {\n\tk.IterateAllPoolBatchDepositMsgStates(ctx, poolBatch, func(state types.DepositMsgState) bool {\n\t\tif !state.ToBeDeleted {\n\t\t\tstates = append(states, state)\n\t\t}\n\t\treturn false\n\t})\n\treturn states\n}\n\n// GetAllRemainingPoolBatchDepositMsgStates returns all remaining DepositMsgStates after endblock,\n// which are executed but not to be deleted\nfunc (k Keeper) GetAllRemainingPoolBatchDepositMsgStates(ctx sdk.Context, poolBatch types.PoolBatch) (states []*types.DepositMsgState) {\n\tk.IterateAllPoolBatchDepositMsgStates(ctx, poolBatch, func(state types.DepositMsgState) bool {\n\t\tif state.Executed && !state.ToBeDeleted {\n\t\t\tstates = append(states, &state)\n\t\t}\n\t\treturn false\n\t})\n\treturn states\n}\n\n// delete deposit batch msgs of the liquidity pool batch which has state ToBeDeleted\nfunc (k Keeper) DeleteAllReadyPoolBatchDepositMsgStates(ctx sdk.Context, poolBatch types.PoolBatch) {\n\tstore := ctx.KVStore(k.storeKey)\n\titerator := sdk.KVStorePrefixIterator(store, types.GetPoolBatchDepositMsgStatesPrefix(poolBatch.PoolId))\n\tdefer iterator.Close()\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tstate := types.MustUnmarshalDepositMsgState(k.cdc, iterator.Value())\n\t\tif state.ToBeDeleted {\n\t\t\tstore.Delete(iterator.Key())\n\t\t}\n\t}\n}\n\n// return a specific liquidityPoolBatchWithdrawMsg\nfunc (k Keeper) GetPoolBatchWithdrawMsgState(ctx sdk.Context, poolID, msgIndex uint64) (state types.WithdrawMsgState, found bool) {\n\tstore := ctx.KVStore(k.storeKey)\n\tkey := types.GetPoolBatchWithdrawMsgStateIndexKey(poolID, msgIndex)\n\n\tvalue := store.Get(key)\n\tif value == nil {\n\t\treturn state, false\n\t}\n\n\tstate = types.MustUnmarshalWithdrawMsgState(k.cdc, value)\n\treturn state, true\n}\n\n// set withdraw batch msg of the liquidity pool batch, with current state\nfunc (k Keeper) SetPoolBatchWithdrawMsgState(ctx sdk.Context, poolID uint64, state types.WithdrawMsgState) {\n\tstore := ctx.KVStore(k.storeKey)\n\tb := types.MustMarshalWithdrawMsgState(k.cdc, state)\n\tstore.Set(types.GetPoolBatchWithdrawMsgStateIndexKey(poolID, state.MsgIndex), b)\n}\n\n// set withdraw batch msgs of the liquidity pool batch, with current state using pointers\nfunc (k Keeper) SetPoolBatchWithdrawMsgStatesByPointer(ctx sdk.Context, poolID uint64, states []*types.WithdrawMsgState) {\n\tstore := ctx.KVStore(k.storeKey)\n\tfor _, state := range states {\n\t\tif poolID != state.Msg.PoolId {\n\t\t\tcontinue\n\t\t}\n\t\tb := types.MustMarshalWithdrawMsgState(k.cdc, *state)\n\t\tstore.Set(types.GetPoolBatchWithdrawMsgStateIndexKey(poolID, state.MsgIndex), b)\n\t}\n}\n\n// set withdraw batch msgs of the pool batch, with current state\nfunc (k Keeper) SetPoolBatchWithdrawMsgStates(ctx sdk.Context, poolID uint64, states []types.WithdrawMsgState) {\n\tstore := ctx.KVStore(k.storeKey)\n\tfor _, state := range states {\n\t\tif poolID != state.Msg.PoolId {\n\t\t\tcontinue\n\t\t}\n\t\tb := types.MustMarshalWithdrawMsgState(k.cdc, state)\n\t\tstore.Set(types.GetPoolBatchWithdrawMsgStateIndexKey(poolID, state.MsgIndex), b)\n\t}\n}\n\n// IterateAllPoolBatchWithdrawMsgStates iterate through all of the LiquidityPoolBatchWithdrawMsgs\nfunc (k Keeper) IterateAllPoolBatchWithdrawMsgStates(ctx sdk.Context, poolBatch types.PoolBatch, cb func(state types.WithdrawMsgState) (stop bool)) {\n\tstore := ctx.KVStore(k.storeKey)\n\n\tprefix := types.GetPoolBatchWithdrawMsgsPrefix(poolBatch.PoolId)\n\titerator := sdk.KVStorePrefixIterator(store, prefix)\n\tdefer iterator.Close()\n\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tstate := types.MustUnmarshalWithdrawMsgState(k.cdc, iterator.Value())\n\t\tif cb(state) {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\n// IterateAllWithdrawMsgStates iterate through all of the WithdrawMsgState of all batches\nfunc (k Keeper) IterateAllWithdrawMsgStates(ctx sdk.Context, cb func(state types.WithdrawMsgState) (stop bool)) {\n\tstore := ctx.KVStore(k.storeKey)\n\n\tprefix := types.PoolBatchWithdrawMsgStateIndexKeyPrefix\n\titerator := sdk.KVStorePrefixIterator(store, prefix)\n\tdefer iterator.Close()\n\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tstate := types.MustUnmarshalWithdrawMsgState(k.cdc, iterator.Value())\n\t\tif cb(state) {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\n// GetAllWithdrawMsgStates returns all BatchWithdrawMsgs for all batches\nfunc (k Keeper) GetAllWithdrawMsgStates(ctx sdk.Context) (states []types.WithdrawMsgState) {\n\tk.IterateAllWithdrawMsgStates(ctx, func(state types.WithdrawMsgState) bool {\n\t\tstates = append(states, state)\n\t\treturn false\n\t})\n\treturn states\n}\n\n// GetAllPoolBatchWithdrawMsgStates returns all BatchWithdrawMsgs indexed by the liquidityPoolBatch\nfunc (k Keeper) GetAllPoolBatchWithdrawMsgStates(ctx sdk.Context, poolBatch types.PoolBatch) (states []types.WithdrawMsgState) {\n\tk.IterateAllPoolBatchWithdrawMsgStates(ctx, poolBatch, func(state types.WithdrawMsgState) bool {\n\t\tstates = append(states, state)\n\t\treturn false\n\t})\n\treturn states\n}\n\n// GetAllPoolBatchWithdrawMsgStatesNotToBeDeleted returns all Not to delete BatchWithdrawMsgs indexed by the liquidityPoolBatch\nfunc (k Keeper) GetAllPoolBatchWithdrawMsgStatesNotToBeDeleted(ctx sdk.Context, poolBatch types.PoolBatch) (states []types.WithdrawMsgState) {\n\tk.IterateAllPoolBatchWithdrawMsgStates(ctx, poolBatch, func(state types.WithdrawMsgState) bool {\n\t\tif !state.ToBeDeleted {\n\t\t\tstates = append(states, state)\n\t\t}\n\t\treturn false\n\t})\n\treturn states\n}\n\n// GetAllRemainingPoolBatchWithdrawMsgStates returns All only remaining BatchWithdrawMsgs after endblock, executed but not toDelete\nfunc (k Keeper) GetAllRemainingPoolBatchWithdrawMsgStates(ctx sdk.Context, poolBatch types.PoolBatch) (states []*types.WithdrawMsgState) {\n\tk.IterateAllPoolBatchWithdrawMsgStates(ctx, poolBatch, func(state types.WithdrawMsgState) bool {\n\t\tif state.Executed && !state.ToBeDeleted {\n\t\t\tstates = append(states, &state)\n\t\t}\n\t\treturn false\n\t})\n\treturn states\n}\n\n// delete withdraw batch msgs of the liquidity pool batch which has state ToBeDeleted\nfunc (k Keeper) DeleteAllReadyPoolBatchWithdrawMsgStates(ctx sdk.Context, poolBatch types.PoolBatch) {\n\tstore := ctx.KVStore(k.storeKey)\n\titerator := sdk.KVStorePrefixIterator(store, types.GetPoolBatchWithdrawMsgsPrefix(poolBatch.PoolId))\n\tdefer iterator.Close()\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tstate := types.MustUnmarshalWithdrawMsgState(k.cdc, iterator.Value())\n\t\tif state.ToBeDeleted {\n\t\t\tstore.Delete(iterator.Key())\n\t\t}\n\t}\n}\n\n// return a specific SwapMsgState given the pool_id with the msg_index\nfunc (k Keeper) GetPoolBatchSwapMsgState(ctx sdk.Context, poolID, msgIndex uint64) (state types.SwapMsgState, found bool) {\n\tstore := ctx.KVStore(k.storeKey)\n\tkey := types.GetPoolBatchSwapMsgStateIndexKey(poolID, msgIndex)\n\n\tvalue := store.Get(key)\n\tif value == nil {\n\t\treturn state, false\n\t}\n\n\tstate = types.MustUnmarshalSwapMsgState(k.cdc, value)\n\treturn state, true\n}\n\n// set swap batch msg of the liquidity pool batch, with current state\nfunc (k Keeper) SetPoolBatchSwapMsgState(ctx sdk.Context, poolID uint64, state types.SwapMsgState) {\n\tstore := ctx.KVStore(k.storeKey)\n\tb := types.MustMarshalSwapMsgState(k.cdc, state)\n\tstore.Set(types.GetPoolBatchSwapMsgStateIndexKey(poolID, state.MsgIndex), b)\n}\n\n// Delete swap batch msg of the liquidity pool batch, it used for test case\nfunc (k Keeper) DeletePoolBatchSwapMsgState(ctx sdk.Context, poolID uint64, msgIndex uint64) {\n\tstore := ctx.KVStore(k.storeKey)\n\tbatchKey := types.GetPoolBatchSwapMsgStateIndexKey(poolID, msgIndex)\n\tstore.Delete(batchKey)\n}\n\n// IterateAllPoolBatchSwapMsgStates iterate through all of the LiquidityPoolBatchSwapMsgs\nfunc (k Keeper) IterateAllPoolBatchSwapMsgStates(ctx sdk.Context, poolBatch types.PoolBatch, cb func(state types.SwapMsgState) (stop bool)) {\n\tstore := ctx.KVStore(k.storeKey)\n\n\tprefix := types.GetPoolBatchSwapMsgStatesPrefix(poolBatch.PoolId)\n\titerator := sdk.KVStorePrefixIterator(store, prefix)\n\tdefer iterator.Close()\n\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tstate := types.MustUnmarshalSwapMsgState(k.cdc, iterator.Value())\n\t\tif cb(state) {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\n// IterateAllSwapMsgStates iterate through all of the SwapMsgState of all batches\nfunc (k Keeper) IterateAllSwapMsgStates(ctx sdk.Context, cb func(state types.SwapMsgState) (stop bool)) {\n\tstore := ctx.KVStore(k.storeKey)\n\n\tprefix := types.PoolBatchSwapMsgStateIndexKeyPrefix\n\titerator := sdk.KVStorePrefixIterator(store, prefix)\n\tdefer iterator.Close()\n\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tstate := types.MustUnmarshalSwapMsgState(k.cdc, iterator.Value())\n\t\tif cb(state) {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\n// GetAllSwapMsgStates returns all BatchSwapMsgs of all batches\nfunc (k Keeper) GetAllSwapMsgStates(ctx sdk.Context) (states []types.SwapMsgState) {\n\tk.IterateAllSwapMsgStates(ctx, func(state types.SwapMsgState) bool {\n\t\tstates = append(states, state)\n\t\treturn false\n\t})\n\treturn states\n}\n\n// delete swap batch msgs of the liquidity pool batch which has state ToBeDeleted\nfunc (k Keeper) DeleteAllReadyPoolBatchSwapMsgStates(ctx sdk.Context, poolBatch types.PoolBatch) {\n\tstore := ctx.KVStore(k.storeKey)\n\titerator := sdk.KVStorePrefixIterator(store, types.GetPoolBatchSwapMsgStatesPrefix(poolBatch.PoolId))\n\tdefer iterator.Close()\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tstate := types.MustUnmarshalSwapMsgState(k.cdc, iterator.Value())\n\t\tif state.ToBeDeleted {\n\t\t\tstore.Delete(iterator.Key())\n\t\t}\n\t}\n}\n\n// GetAllPoolBatchSwapMsgStatesAsPointer returns all BatchSwapMsgs pointer indexed by the liquidityPoolBatch\nfunc (k Keeper) GetAllPoolBatchSwapMsgStatesAsPointer(ctx sdk.Context, poolBatch types.PoolBatch) (states []*types.SwapMsgState) {\n\tk.IterateAllPoolBatchSwapMsgStates(ctx, poolBatch, func(state types.SwapMsgState) bool {\n\t\tstates = append(states, &state)\n\t\treturn false\n\t})\n\treturn states\n}\n\n// GetAllPoolBatchSwapMsgStates returns all BatchSwapMsgs indexed by the liquidityPoolBatch\nfunc (k Keeper) GetAllPoolBatchSwapMsgStates(ctx sdk.Context, poolBatch types.PoolBatch) (states []types.SwapMsgState) {\n\tk.IterateAllPoolBatchSwapMsgStates(ctx, poolBatch, func(state types.SwapMsgState) bool {\n\t\tstates = append(states, state)\n\t\treturn false\n\t})\n\treturn states\n}\n\n// GetAllNotProcessedPoolBatchSwapMsgStates returns All only not processed swap msgs, not executed with not succeed and not toDelete BatchSwapMsgs indexed by the liquidityPoolBatch\nfunc (k Keeper) GetAllNotProcessedPoolBatchSwapMsgStates(ctx sdk.Context, poolBatch types.PoolBatch) (states []*types.SwapMsgState) {\n\tk.IterateAllPoolBatchSwapMsgStates(ctx, poolBatch, func(state types.SwapMsgState) bool {\n\t\tif !state.Executed && !state.Succeeded && !state.ToBeDeleted {\n\t\t\tstates = append(states, &state)\n\t\t}\n\t\treturn false\n\t})\n\treturn states\n}\n\n// GetAllRemainingPoolBatchSwapMsgStates returns All only remaining after endblock swap msgs, executed but not toDelete\nfunc (k Keeper) GetAllRemainingPoolBatchSwapMsgStates(ctx sdk.Context, poolBatch types.PoolBatch) (states []*types.SwapMsgState) {\n\tk.IterateAllPoolBatchSwapMsgStates(ctx, poolBatch, func(state types.SwapMsgState) bool {\n\t\tif state.Executed && !state.ToBeDeleted {\n\t\t\tstates = append(states, &state)\n\t\t}\n\t\treturn false\n\t})\n\treturn states\n}\n\n// GetAllPoolBatchSwapMsgStatesNotToBeDeleted returns All only not to delete swap msgs\nfunc (k Keeper) GetAllPoolBatchSwapMsgStatesNotToBeDeleted(ctx sdk.Context, poolBatch types.PoolBatch) (states []*types.SwapMsgState) {\n\tk.IterateAllPoolBatchSwapMsgStates(ctx, poolBatch, func(state types.SwapMsgState) bool {\n\t\tif !state.ToBeDeleted {\n\t\t\tstates = append(states, &state)\n\t\t}\n\t\treturn false\n\t})\n\treturn states\n}\n\n// set swap batch msgs of the liquidity pool batch, with current state using pointers\nfunc (k Keeper) SetPoolBatchSwapMsgStatesByPointer(ctx sdk.Context, poolID uint64, states []*types.SwapMsgState) {\n\tstore := ctx.KVStore(k.storeKey)\n\tfor _, state := range states {\n\t\tif poolID != state.Msg.PoolId {\n\t\t\tcontinue\n\t\t}\n\t\tb := types.MustMarshalSwapMsgState(k.cdc, *state)\n\t\tstore.Set(types.GetPoolBatchSwapMsgStateIndexKey(poolID, state.MsgIndex), b)\n\t}\n}\n\n// set swap batch msgs of the liquidity pool batch, with current state\nfunc (k Keeper) SetPoolBatchSwapMsgStates(ctx sdk.Context, poolID uint64, states []types.SwapMsgState) {\n\tstore := ctx.KVStore(k.storeKey)\n\tfor _, state := range states {\n\t\tif poolID != state.Msg.PoolId {\n\t\t\tcontinue\n\t\t}\n\t\tb := types.MustMarshalSwapMsgState(k.cdc, state)\n\t\tstore.Set(types.GetPoolBatchSwapMsgStateIndexKey(poolID, state.MsgIndex), b)\n\t}\n}\n"
  },
  {
    "path": "x/liquidity/keeper/swap.go",
    "content": "package keeper\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n)\n\n// Execute Swap of the pool batch, Collect swap messages in batch for transact the same price for each batch and run them on endblock.\nfunc (k Keeper) SwapExecution(ctx sdk.Context, poolBatch types.PoolBatch) (uint64, error) {\n\t// get all swap message batch states that are not executed, not succeeded, and not to be deleted.\n\tswapMsgStates := k.GetAllNotProcessedPoolBatchSwapMsgStates(ctx, poolBatch)\n\tif len(swapMsgStates) == 0 {\n\t\treturn 0, nil\n\t}\n\n\tpool, found := k.GetPool(ctx, poolBatch.PoolId)\n\tif !found {\n\t\treturn 0, types.ErrPoolNotExists\n\t}\n\n\tif k.IsDepletedPool(ctx, pool) {\n\t\treturn 0, types.ErrDepletedPool\n\t}\n\n\tcurrentHeight := ctx.BlockHeight()\n\t// set executed states of all messages to true\n\texecutedMsgCount := uint64(0)\n\tvar swapMsgStatesNotToBeDeleted []*types.SwapMsgState\n\tfor _, sms := range swapMsgStates {\n\t\tsms.Executed = true\n\t\texecutedMsgCount++\n\t\tif currentHeight > sms.OrderExpiryHeight {\n\t\t\tsms.ToBeDeleted = true\n\t\t}\n\t\tif err := k.ValidateMsgSwapWithinBatch(ctx, *sms.Msg, pool); err != nil {\n\t\t\tsms.ToBeDeleted = true\n\t\t}\n\t\tif !sms.ToBeDeleted {\n\t\t\tswapMsgStatesNotToBeDeleted = append(swapMsgStatesNotToBeDeleted, sms)\n\t\t} else {\n\t\t\tctx.EventManager().EmitEvent(\n\t\t\t\tsdk.NewEvent(\n\t\t\t\t\ttypes.EventTypeSwapTransacted,\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValuePoolId, strconv.FormatUint(pool.Id, 10)),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueBatchIndex, strconv.FormatUint(poolBatch.Index, 10)),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueMsgIndex, strconv.FormatUint(sms.MsgIndex, 10)),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueSwapRequester, sms.Msg.GetSwapRequester().String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueSwapTypeId, strconv.FormatUint(uint64(sms.Msg.SwapTypeId), 10)),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueOfferCoinDenom, sms.Msg.OfferCoin.Denom),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueOfferCoinAmount, sms.Msg.OfferCoin.Amount.String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueDemandCoinDenom, sms.Msg.DemandCoinDenom),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueOrderPrice, sms.Msg.OrderPrice.String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueRemainingOfferCoinAmount, sms.RemainingOfferCoin.Amount.String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueExchangedOfferCoinAmount, sms.ExchangedOfferCoin.Amount.String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueReservedOfferCoinFeeAmount, sms.ReservedOfferCoinFee.Amount.String()),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueOrderExpiryHeight, strconv.FormatInt(sms.OrderExpiryHeight, 10)),\n\t\t\t\t\tsdk.NewAttribute(types.AttributeValueSuccess, types.Failure),\n\t\t\t\t))\n\t\t}\n\t}\n\tk.SetPoolBatchSwapMsgStatesByPointer(ctx, pool.Id, swapMsgStates)\n\tswapMsgStates = swapMsgStatesNotToBeDeleted\n\n\ttypes.ValidateStateAndExpireOrders(swapMsgStates, currentHeight, false)\n\n\t// get reserve coins from the liquidity pool and calculate the current pool price (p = x / y)\n\treserveCoins := k.GetReserveCoins(ctx, pool)\n\n\tX := reserveCoins[0].Amount.ToLegacyDec()\n\tY := reserveCoins[1].Amount.ToLegacyDec()\n\tcurrentPoolPrice := X.Quo(Y)\n\tdenomX := reserveCoins[0].Denom\n\tdenomY := reserveCoins[1].Denom\n\n\t// make orderMap, orderbook by sort orderMap\n\torderMap, xToY, yToX := types.MakeOrderMap(swapMsgStates, denomX, denomY, false)\n\torderBook := orderMap.SortOrderBook()\n\n\t// check orderbook validity and compute batchResult(direction, swapPrice, ..)\n\tresult, found := orderBook.Match(X, Y)\n\n\tif !found || X.Quo(Y).IsZero() {\n\t\terr := k.RefundSwaps(ctx, pool, swapMsgStates)\n\t\treturn executedMsgCount, err\n\t}\n\n\t// find order match, calculate pool delta with the total x, y amounts for the invariant check\n\tvar matchResultXtoY, matchResultYtoX []types.MatchResult\n\n\tpoolXDelta := sdk.ZeroDec()\n\tpoolYDelta := sdk.ZeroDec()\n\n\tif result.MatchType != types.NoMatch {\n\t\tvar poolXDeltaXtoY, poolXDeltaYtoX, poolYDeltaYtoX, poolYDeltaXtoY sdk.Dec\n\t\tmatchResultXtoY, poolXDeltaXtoY, poolYDeltaXtoY = types.FindOrderMatch(types.DirectionXtoY, xToY, result.EX, result.SwapPrice, currentHeight)\n\t\tmatchResultYtoX, poolXDeltaYtoX, poolYDeltaYtoX = types.FindOrderMatch(types.DirectionYtoX, yToX, result.EY, result.SwapPrice, currentHeight)\n\t\tpoolXDelta = poolXDeltaXtoY.Add(poolXDeltaYtoX)\n\t\tpoolYDelta = poolYDeltaXtoY.Add(poolYDeltaYtoX)\n\t}\n\n\txToY, yToX, X, Y, poolXDelta2, poolYDelta2 := types.UpdateSwapMsgStates(X, Y, xToY, yToX, matchResultXtoY, matchResultYtoX)\n\n\tlastPrice := X.Quo(Y)\n\n\tif BatchLogicInvariantCheckFlag {\n\t\tSwapMatchingInvariants(xToY, yToX, matchResultXtoY, matchResultYtoX)\n\t\tSwapPriceInvariants(matchResultXtoY, matchResultYtoX, poolXDelta, poolYDelta, poolXDelta2, poolYDelta2, result)\n\t}\n\n\ttypes.ValidateStateAndExpireOrders(xToY, currentHeight, false)\n\ttypes.ValidateStateAndExpireOrders(yToX, currentHeight, false)\n\n\torderMapExecuted, _, _ := types.MakeOrderMap(append(xToY, yToX...), denomX, denomY, true)\n\torderBookExecuted := orderMapExecuted.SortOrderBook()\n\tif !orderBookExecuted.Validate(lastPrice) {\n\t\treturn executedMsgCount, types.ErrOrderBookInvalidity\n\t}\n\n\ttypes.ValidateStateAndExpireOrders(xToY, currentHeight, true)\n\ttypes.ValidateStateAndExpireOrders(yToX, currentHeight, true)\n\n\t// make index map for match result\n\tmatchResultMap := make(map[uint64]types.MatchResult)\n\tfor _, match := range append(matchResultXtoY, matchResultYtoX...) {\n\t\tif _, ok := matchResultMap[match.SwapMsgState.MsgIndex]; ok {\n\t\t\treturn executedMsgCount, fmt.Errorf(\"duplicate match order\")\n\t\t}\n\t\tmatchResultMap[match.SwapMsgState.MsgIndex] = match\n\t}\n\n\tif BatchLogicInvariantCheckFlag {\n\t\tSwapPriceDirectionInvariants(currentPoolPrice, result)\n\t\tSwapMsgStatesInvariants(matchResultXtoY, matchResultYtoX, matchResultMap, swapMsgStates, xToY, yToX)\n\t\tSwapOrdersExecutionStateInvariants(matchResultMap, swapMsgStates, result, denomX)\n\t}\n\n\t// execute transact, refund, expire, send coins with escrow, update state by TransactAndRefundSwapLiquidityPool\n\tif err := k.TransactAndRefundSwapLiquidityPool(ctx, swapMsgStates, matchResultMap, pool, result); err != nil {\n\t\treturn executedMsgCount, err\n\t}\n\n\treturn executedMsgCount, nil\n}\n"
  },
  {
    "path": "x/liquidity/migrations/v3/migrate.go",
    "content": "package v3\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/exported\"\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n)\n\nfunc Migrate(\n\tctx sdk.Context,\n\tstore sdk.KVStore,\n\tlegacySubspace exported.Subspace,\n\tcdc codec.BinaryCodec,\n) error {\n\tvar currParams types.Params\n\tlegacySubspace.GetParamSet(ctx, &currParams)\n\n\tif err := currParams.Validate(); err != nil {\n\t\treturn err\n\t}\n\n\tbz := cdc.MustMarshal(&currParams)\n\tstore.Set(types.ParamsKey, bz)\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/liquidity/module.go",
    "content": "package liquidity\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/exported\"\n\n\tabci \"github.com/cometbft/cometbft/abci/types\"\n\tsdkclient \"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tcodectypes \"github.com/cosmos/cosmos-sdk/codec/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/module\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/runtime\"\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/client/cli\"\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n)\n\nvar (\n\t_ module.AppModule      = AppModule{}\n\t_ module.AppModuleBasic = AppModuleBasic{}\n)\n\n// AppModuleBasic defines the basic application module used by the liquidity module.\ntype AppModuleBasic struct {\n\tcdc codec.Codec\n}\n\n// Name returns the liquidity module's name.\nfunc (AppModuleBasic) Name() string {\n\treturn types.ModuleName\n}\n\n// RegisterLegacyAminoCodec registers the gov module's types for the given codec.\nfunc (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {\n\ttypes.RegisterLegacyAminoCodec(cdc)\n}\n\n// DefaultGenesis returns default genesis state as raw bytes for the liquidity module.\nfunc (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage {\n\treturn cdc.MustMarshalJSON(types.DefaultGenesisState())\n}\n\n// ValidateGenesis performs genesis state validation for the liquidity module.\nfunc (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, _ sdkclient.TxEncodingConfig, bz json.RawMessage) error {\n\tvar data types.GenesisState\n\tif err := cdc.UnmarshalJSON(bz, &data); err != nil {\n\t\treturn fmt.Errorf(\"failed to unmarshal %s genesis state: %w\", types.ModuleName, err)\n\t}\n\n\treturn types.ValidateGenesis(data)\n}\n\n// GetTxCmd returns the root tx command for the liquidity module.\nfunc (AppModuleBasic) GetTxCmd() *cobra.Command {\n\treturn cli.GetTxCmd()\n}\n\n// GetQueryCmd returns no root query command for the liquidity module.\nfunc (AppModuleBasic) GetQueryCmd() *cobra.Command {\n\treturn cli.GetQueryCmd()\n}\n\n// RegisterInterfaces implements InterfaceModule.RegisterInterfaces\nfunc (a AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) {\n\ttypes.RegisterInterfaces(registry)\n}\n\n// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the liquidity module.\nfunc (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx sdkclient.Context, mux *runtime.ServeMux) {\n\tif err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil {\n\t\tpanic(err)\n\t}\n}\n\n// RegisterServices registers module services.\nfunc (am AppModule) RegisterServices(cfg module.Configurator) {\n\ttypes.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper))\n\tquerier := keeper.Querier{Keeper: am.keeper}\n\ttypes.RegisterQueryServer(cfg.QueryServer(), querier)\n\tm := keeper.NewMigrator(am.keeper, am.legacySubspace)\n\tif err := cfg.RegisterMigration(types.ModuleName, 2, m.Migrate2to3); err != nil {\n\t\tpanic(fmt.Sprintf(\"failed to migrate x/%s from version 2 to 3: %v\", types.ModuleName, err))\n\t}\n}\n\n// AppModule implements an application module for the liquidity module.\ntype AppModule struct {\n\tAppModuleBasic\n\n\tkeeper         keeper.Keeper\n\taccountKeeper  types.AccountKeeper\n\tbankKeeper     types.BankKeeper\n\tdistrKeeper    types.DistributionKeeper\n\tlegacySubspace exported.Subspace\n}\n\n// NewAppModule creates a new AppModule object\nfunc NewAppModule(cdc codec.Codec,\n\tkeeper keeper.Keeper,\n\tak types.AccountKeeper,\n\tbk types.BankKeeper,\n\tdk types.DistributionKeeper,\n\tss exported.Subspace,\n) AppModule {\n\treturn AppModule{\n\t\tAppModuleBasic: AppModuleBasic{cdc: cdc},\n\t\tkeeper:         keeper,\n\t\taccountKeeper:  ak,\n\t\tbankKeeper:     bk,\n\t\tdistrKeeper:    dk,\n\t\tlegacySubspace: ss,\n\t}\n}\n\n// Name returns the liquidity module's name.\nfunc (AppModule) Name() string {\n\treturn types.ModuleName\n}\n\n// RegisterLegacyAminoCodec registers the gov module's types for the given codec.\nfunc (AppModule) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {\n\ttypes.RegisterLegacyAminoCodec(cdc)\n}\n\n// RegisterInvariants registers the liquidity module invariants.\nfunc (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) {\n\tkeeper.RegisterInvariants(ir, am.keeper)\n}\n\n// InitGenesis performs genesis initialization for the liquidity module. It returns\n// no validator updates.\nfunc (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate {\n\tvar genesisState types.GenesisState\n\tcdc.MustUnmarshalJSON(data, &genesisState)\n\tInitGenesis(ctx, am.keeper, genesisState)\n\treturn []abci.ValidatorUpdate{}\n}\n\n// ExportGenesis returns the exported genesis state as raw bytes for the liquidity module.\nfunc (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage {\n\tgs := ExportGenesis(ctx, am.keeper)\n\treturn cdc.MustMarshalJSON(gs)\n}\n\n// ConsensusVersion implements AppModule/ConsensusVersion.\nfunc (AppModule) ConsensusVersion() uint64 { return 3 }\n\n// BeginBlock performs a no-op.\nfunc (am AppModule) BeginBlock(ctx sdk.Context, _ abci.RequestBeginBlock) {\n\tBeginBlocker(ctx, am.keeper)\n}\n\n// EndBlock returns the end blocker for the liquidity module. It returns no validator updates.\nfunc (am AppModule) EndBlock(ctx sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate {\n\tEndBlocker(ctx, am.keeper)\n\treturn []abci.ValidatorUpdate{}\n}\n"
  },
  {
    "path": "x/liquidity/spec/01_concepts.md",
    "content": "<!-- order: 1 -->\n\n # Concepts\n\n## Liquidity Module\n\nThe liquidity module is a module that can be used on any Cosmos SDK-based application. The liquidity module implements a decentralized exchange (DEX) that serves liquidity providing and coin swap functions. Anyone can create a liquidity pool with a pair of coins, provide liquidity by depositing reserve coins into the liquidity pool, and trade coins using the liquidity pool. All of the logic is designed to always protect the pool investors.\n\n## Liquidity Pool\n\nA liquidity pool is a coin reserve that contains two different types of coins in a trading pair. The trading pair has to be unique. A liquidity provider can be anyone (permissionless) who provides liquidity by depositing reserve coins into the pool. The liquidity provider earns the accumulated swap fees with respect to their pool share. The pool share is represented as possession of pool coins. All matchable swap requests are expected to be executed and unmatched swap requests are removed.\n## Equivalent Swap Price Model (ESPM)\n\nThe liquidity module is a Cosmos SDK implementation of an AMM system with a novel economic model called the Equivalent Swap Price Model (ESPM).\n\nThe key distinguishing feature of the ESPM model from the Constant Product Market Maker (CPMM) model is the implementation of a hybrid system that combines an orderbook model exchange with a simple liquidity pool model that governs the order book with a set of order rules and performs execution in batches. In the ESPM, the pool price is always equal to the last swap price which reduces opportunities for arbitrage.\n\nThe ESPM model is intended to provide protection against price volatility, transaction ordering vulnerabilities, and losses due to arbitrage. AMMs such as Uniswap do not provide this level of protection.\n\n## Batch Execution\n\nThe liquidity module uses a batch execution methodology. Deposits, withdrawals, and swap orders are accumulated in a liquidity pool for a pre-defined period that is one or more blocks in length. Orders are then added to the pool and executed at the end of the batch. The size of each batch is configured by using the `UnitBatchSize` governance parameter.\n\n## Price Discovery\n\nSwap prices in liquidity pools are determined by the current pool coin reserves and the requested swap amount. Arbitrageurs buy or sell coins in liquidity pools to gain instant profit that results in real-time price discovery of liquidity pools.\n\n## Escrow Process\n\nThe liquidity module uses a module account that acts as an escrow account. The module account holds and releases the coin amount during batch execution.\n\n## Refund \n\nThe liquidity module has refund functions when deposit, withdraw, or swap batch states are not successfully executed.\nRead [the batch transaction logic](https://github.com/tendermint/liquidity/blob/e8ab2f4d75079157d008eba9f310b199573eed28/x/liquidity/keeper/batch.go#L83-L127) in the code for more context.\n## Fees\n\nYou set liquidity module fees for pool creation, withdrawal, and swap in genesis state. These fees can be updated by the governance proposal.\n### PoolCreationFee\n\nThe liquidity module pool creation fee set by the `PoolCreationFee` parameter is paid on pool creation. The purpose of this fee is to prevent users from creating useless pools and making limitless transactions. The funds from this fee go to the community fund.\n### WithdrawalFeeRate\n\nThe liquidity module has `WithdrawFeeRate` parameter that is paid upon withdrawal. The purpose of this fee is to prevent from making limitless withdrawals.\n\n### SwapFeeRate\n\nSwap fees are paid upon swap orders. They are accumulated in the pools and are shared among the liquidity providers. The liquidity module implements half-half-fee mechanism that minimizes the impact of fee payment process. Read [the issue about fees in half offer coins, half exchanged coins](https://github.com/tendermint/liquidity/issues/41) to have more context.\n## Pool Identification\n\nThe pools in the liquidity module are identified with:\n### PoolName\n\n- Concatenate two different reserve coin denoms and pool type id and forward slash `/` separator. \n  - Example: `uatom/stake/1`\n### PoolReserveAccount\n\n- `sdk.AccAddress(crypto.AddressHash([]byte(PoolName)))`\n  - Example: `cosmos16ddqestwukv0jzcyfn3fdfq9h2wrs83cr4rfm3` (`D35A0CC16EE598F90B044CE296A405BA9C381E38`)\n### PoolCoinDenom\n\n- `fmt.Sprintf(\"%s%X\", PoolCoinDenomPrefix, sha256.Sum256([]byte(PoolName)))`\n- Use `PoolCoinDenomPrefix` for `pool`\n  - Example: `poolD35A0CC16EE598F90B044CE296A405BA9C381E38837599D96F2F70C2F02A23A4`\n\n\n\n"
  },
  {
    "path": "x/liquidity/spec/02_state.md",
    "content": "<!-- order: 2 -->\n\n # State\n\nThe liquidity module `x/liquidity` keeps track of the Pool and PoolBatch states. The state represents your app at a given moment.\n## Pool\n\nPool stores information about the liquidity pool.\n\nPool type has the following structure.\n\n```go\ntype Pool struct {\n    Id                     uint64         // index of this liquidity pool\n    TypeId                 uint32         // pool type of this liquidity pool\n    ReserveCoinDenoms      []string       // list of reserve coin denoms for this liquidity pool\n    ReserveAccountAddress  string         // reserve account address for this liquidity pool to store reserve coins\n    PoolCoinDenom          string         // denom of pool coin for this liquidity pool\n}\n```\n\nThe parameters of the Pool state are:\n\n- Pool: `0x11 | Id -> ProtocolBuffer(Pool)`\n\n- PoolByReserveAccIndex: `0x12 | ReserveAccLen (1 byte) | ReserveAcc -> ProtocolBuffer(uint64)`\n\n- GlobalLiquidityPoolIdKey: `[]byte(\"globalLiquidityPoolId\")`\n\n- ModuleName, RouterKey, StoreKey: `liquidity`\n\n- PoolCoinDenomPrefix: `pool`\n## PoolBatch\n\nPoolBatch stores information about the liquidity pool batch states.\n\nPoolBatch type has the following structure.\n\n```go\ntype PoolBatch struct {\n    PoolId           uint64  // id of target liquidity pool\n    Index            uint64  // index of this batch\n    BeginHeight      uint64  // block height when batch is created\n    DepositMsgIndex  uint64  // last index of DepositMsgStates\n    WithdrawMsgIndex uint64  // last index of WithdrawMsgStates\n    SwapMsgIndex     uint64  // last index of SwapMsgStates\n    Executed         bool    // true if executed, false if not executed\n}\n```\n\n## Batch Messages\n\nDeposit, withdrawal, or swap orders are accumulated in a liquidity pool for a pre-defined period, which can be one or more blocks in length. Orders are then added to the pool and executed at the end of the batch. The following messages are executed in batch-style. \n\n### DepositMsgState\n\n`DepositMsgState` defines the state of deposit message as it is processed in the next batch or batches.\n\nWhen a user sends `MsgDepositWithinBatch` transaction to the network, it is accumulated in a batch. `DepositMsgState` contains the state information about the message; if the transaction is executed, successfully matched, and if it is to be deleted in the next block.\n\n```go\ntype DepositMsgState struct {\n    MsgHeight  int64  // block height where this message is appended to the batch\n    MsgIndex   uint64 // index of this deposit message in this liquidity pool\n    Executed   bool   // true if executed on this batch, false if not executed\n    Succeeded  bool   // true if executed successfully on this batch, false if failed\n    ToBeDelete bool   // true if ready to be deleted on kvstore, false if not ready to be deleted\n    Msg        MsgDepositWithinBatch\n}\n```\n### WithdrawMsgState\n\n`WithdrawMsgState` defines the state of the withdraw message as it is processed in the next batch or batches.\n\nWhen a user sends a `MsgWithdrawWithinBatch` transaction to the network, it is accumulated in a batch. `WithdrawMsgState` contains the state information about the message:\n\n- If the transaction is executed\n- If the transaction is successfully matched\n- If the transaction will be deleted in the next block\n\n```go\ntype WithdrawMsgState struct {\n    MsgHeight  int64  // block height where this message is appended to the batch\n    MsgIndex   uint64 // index of this withdraw message in this liquidity pool\n    Executed   bool   // true if executed on this batch, false if not executed\n    Succeeded  bool   // true if executed successfully on this batch, false if failed\n    ToBeDelete bool   // true if ready to be deleted on kvstore, false if not ready to be deleted\n    Msg        MsgWithdrawWithinBatch\n}\n```\n### SwapMsgState\n\n`SwapMsgState` defines the state of swap message as it is processed in the next batch or batches.\n\nWhen a user sends a `MsgSwapWithinBatch` transaction to the network, it is accumulated in a batch. `SwapMsgState` contains the state information about the message:\n\n- If the transaction is executed\n- If the transaction is successfully matched\n- If the transaction will be deleted in the next block\n\n```go\ntype SwapMsgState struct {\n    MsgHeight          int64  // block height where this message is appended to the batch\n    MsgIndex           uint64 // index of this swap message in this liquidity pool\n    Executed           bool   // true if executed on this batch, false if not executed\n    Succeeded          bool   // true if executed successfully on this batch, false if failed\n    ToBeDelete         bool   // true if ready to be deleted on kvstore, false if not ready to be deleted\n    OrderExpiryHeight  int64  // swap orders are cancelled when current height is equal to or greater than ExpiryHeight\n    ExchangedOfferCoin sdk.Coin // offer coin exchanged so far\n    RemainingOfferCoin sdk.Coin // offer coin  remaining to be exchanged\n    Msg                MsgSwapWithinBatch\n}\n```\n\nThe parameters of the PoolBatch, DepositMsgState, WithdrawMsgState, and SwapMsgState states are:\n\n- PoolBatch: `0x22 | PoolId -> ProtocolBuffer(PoolBatch)`\n\n- PoolBatchDepositMsgStates: `0x31 | PoolId | MsgIndex -> ProtocolBuffer(DepositMsgState)`\n\n- PoolBatchWithdrawMsgStates: `0x32 | PoolId | MsgIndex -> ProtocolBuffer(WithdrawMsgState)`\n\n- PoolBatchSwapMsgStates: `0x33 | PoolId | MsgIndex -> ProtocolBuffer(SwapMsgState)`\n"
  },
  {
    "path": "x/liquidity/spec/03_state_transitions.md",
    "content": "<!-- order: 3 -->\n\n # State Transitions\n\nThese messages (Msg) in the liquidity module trigger state transitions.\n\n## Coin Escrow for Liquidity Module Messages\n\nTransaction confirmation causes state transition on the [Bank](https://docs.cosmos.network/master/modules/bank/) module. Some messages on the liquidity module require coin escrow before confirmation.\n\nThe coin escrow processes for each message type are:\n\n### MsgDepositWithinBatch\n\nTo deposit coins into an existing `Pool`, the depositor must escrow `DepositCoins` into `LiquidityModuleEscrowAccount`.\n\n### MsgWithdrawWithinBatch\n\nTo withdraw coins from a `Pool`, the withdrawer must escrow `PoolCoin` into `LiquidityModuleEscrowAccount`.\n\n### MsgSwapWithinBatch\n\nTo request a coin swap, the swap requestor must escrow `OfferCoin` into `LiquidityModuleEscrowAccount`.\n\n## LiquidityPoolBatch Execution\n\nBatch execution causes state transitions on the `Bank` module. The following categories describe state transition executed by each process in the `PoolBatch` execution.\n\n### Coin Swap\n\nAfter a successful coin swap, coins accumulated in `LiquidityModuleEscrowAccount` for coin swaps are sent to other swap requestors(self-swap) or to the `Pool`(pool-swap). Fees are also sent to the liquidity `Pool`.\n\n### LiquidityPool Deposit\n\nAfter a successful deposit transaction, escrowed coins are sent to the `ReserveAccount` of the targeted `Pool` and new pool coins are minted and sent to the depositor.\n\n### LiquidityPool Withdrawal\n\nAfter a successful withdraw transaction, escrowed pool coins are burned and a corresponding amount of reserve coins are sent to the withdrawer from the liquidity `Pool`.\n\n## Pseudo Algorithm for LiquidityPoolBatch Execution\n\nIf you are curious, you can see a Python simulation script on the B-Harvest [GitHub repo](https://github.com/b-harvest/Liquidity-Module-For-the-Hub/blob/master/pseudo-batch-execution-logic/batch.py).\n\n## Swap Price Calculation\n\nSwap execution applies a universal swap ratio for all swap requests.\n\nSwap price calculations are used for these cases.\n\n**Find price direction**\n\nVariables:\n\n- `X`: Reserve of X coin\n- `Y`: Reserve of Y coin before this batch execution\n- `PoolPrice` = `X`/`Y`\n- `XOverLastPrice`: amount of orders that swap X for Y with order price higher than the last `PoolPrice`\n- `XAtLastPrice`: amount of orders that swap X for Y with order price equal to the last `PoolPrice`\n- `YUnderLastPrice`: amount of orders that swap Y for X with order price lower than last `PoolPrice`\n- `YAtLastPrice`: amount of orders that swap Y for X with order price equal to the last `PoolPrice`\n\n- **Increase**: swap price is increased from the last `PoolPrice`\n\n  - `XOverLastPrice` > (`YUnderLastPrice`+`YAtLastPrice`)*`PoolPrice`\n\n- **Decrease**: swap price is decreased from the last `PoolPrice`\n\n  - `YUnderLastPrice` > (`XOverLastPrice`+`XAtLastPrice`)/`PoolPrice`\n\n- **Stay**: swap price is not changed from the last `PoolPrice` when the increase and decrease inequalities do not hold\n\n### Stay case\n\nVariables:\n\n- `swapPrice` = last `PoolPrice`\n- `EX`: All executable orders that swap X for Y with order price equal to or greater than last `PoolPrice`\n- `EY`: All executable orders that swap Y for X with order price equal or lower than last `PoolPrice`\n\n- **ExactMatch**: If `EX` == `EY`*`swapPrice`\n\n  - Amount of X coins matched from swap orders = `EX`\n  - Amount of Y coins matched from swap orders = `EY`\n\n- **FractionalMatch**\n\n  - If `EX` > `EY`*`swapPrice`: Residual X order amount remains\n\n    - Amount of X coins matched from swap orders = `EY`*`swapPrice`\n    - Amount of Y coins matched from swap orders = `EY`\n\n  - If `EY` > `EX`/`swapPrice`: Residual Y order amount remains\n\n    - Amount of X coins matched from swap orders = `EX`\n    - Amount of Y coins matched from swap orders = `EX`/`swapPrice`\n\n### Increase case\n\nIteration: iterate `orderPrice(i)` of all swap orders from low to high.\n\nVariables:\n\n- `EX(i)`: Sum of all order amount of swap orders that swap X for Y with order price equal or higher than this `orderPrice(i)`\n- `EY(i)`: Sum of all order amounts of swap orders that swap Y for X with order price equal or lower than this `orderPrice(i)`\n\n- ExactMatch: SwapPrice is found between two orderPrices\n\n  - `swapPrice(i)` = (`X` + 2_`EX(i)`)/(`Y` + 2_`EY(i-1)`)\n\n    - condition1) `orderPrice(i-1)` < `swapPrice(i)` < `orderPrice(i)`\n\n  - `PoolY(i)` = (`swapPrice(i)`_`Y` - `X`) / (2_`swapPrice(i)`)\n\n    - condition2) `PoolY(i)` >= 0\n\n  - If both above conditions are met, `swapPrice` is the swap price for this iteration\n\n    - Amount of X coins matched = `EX(i)`\n\n  - If one of these conditions doesn't hold, go to FractionalMatch\n\n- FractionalMatch: SwapPrice is found at an orderPrice\n\n  - `swapPrice(i)` = `orderPrice(i)`\n  - `PoolY(i)` = (`swapPrice(i)`_`Y` - `X`) / (2_`swapPrice(i)`)\n  - Amount of X coins matched:\n\n    - `EX(i)` ← min[ `EX(i)`, (`EY(i)`+`PoolY(i)`)*`swapPrice(i)` ]\n\n- Find optimized swapPrice:\n\n  - Find `swapPrice(k)` that has the largest amount of X coins matched\n\n    - this is our optimized swap price\n    - corresponding swap result variables\n\n      - `swapPrice(k)`, `EX(k)`, `EY(k)`, `PoolY(k)`\n\n### Decrease case\n\nIteration: iterate `orderPrice(i)` of all swap orders from high to low.\n\nVariables:\n\n- `EX(i)`: Sum of all order amount of swap orders that swap X for Y with order price equal or higher than this `orderPrice(i)`\n- `EY(i)`: Sum of all order amount of swap orders that swap Y for X with order price equal or lower than this `orderPrice(i)`\n\n- ExactMatch: SwapPrice is found between two orderPrices\n\n- `swapPrice(i)` = (`X` + 2_`EX(i)`)/(`Y` + 2_`EY(i-1)`)\n\n  - condition1) `orderPrice(i)` < `swapPrice(i)` < `orderPrice(i-1)`\n\n- `PoolX(i)` = (`X` - `swapPrice(i)`*`Y`)/2\n\n  - condition2) `PoolX(i)` >= 0\n\n- If both above conditions are met, `swapPrice` is the swap price for this iteration\n\n  - Amount of Y coins matched = `EY(i)`\n\n- If one of these conditions doesn't hold, go to FractionalMatch\n\n- FractionalMatch: SwapPrice is found at an orderPrice\n\n- `swapPrice(i)` = `orderPrice(i)`\n\n- `PoolX(i)` = (`X` - `swapPrice(i)`*`Y`)/2\n\n- Amount of Y coins matched:\n\n  - `EY(i)` ← min[ `EY(i)`, (`EX(i)`+`PoolX(i)`)/`swapPrice(i)` ]\n\n- Find optimized swapPrice\n\n  - Find `swapPrice(k)` that has the largest amount of Y coins matched\n\n    - this is our optimized swap price\n    - corresponding swap result variables\n\n      - `swapPrice(k)`, `EX(k)`, `EY(k)`, `PoolX(k)`\n\n### Calculate matching result\n\n- for swap orders from X to Y\n\n  - Iteration: iterate `orderPrice(i)` of swap orders from X to Y (high to low)\n\n    - sort by order price (high to low), sum all order amount with each `orderPrice(i)`\n    - if `EX(i)` ≤ `EX(k)`\n\n      - `fractionalRatio` = 1\n\n    - if `EX(i)` > `EX(k)`\n\n      - `fractionalRatio(i)` = (`EX(k)` - `EX(i-1)`) / (`EX(i)` - `EX(i-1)`)\n      - break the iteration\n\n    - matching amount for swap orders with this `orderPrice(i)`:\n\n      - `matchingAmt` = `offerAmt` * `fractionalRatio(i)`\n\n- for swap orders from Y to X\n\n  - Iteration: iterate `orderPrice(i)` of swap orders from Y to X (low to high)\n\n    - sort by order price (low to high), sum all order amount with each `orderPrice(i)`\n    - if `EY(i)` ≤ `EY(k)`\n\n      - `fractionalRatio` = 1\n\n    - if `EY(i)` > `EY(k)`\n\n      - `fractionalRatio(i)` = (`EY(k)` - `EY(i-1)`) / (`EY(i)` - `EY(i-1)`)\n      - break the iteration\n\n    - matching amount for swap orders with this `orderPrice(i)`:\n\n      - `matchingAmt` = `offerAmt` * `fractionalRatio(i)`\n\n### Swap Fee Payment\n\nRather than taking fee solely from `OfferCoin`, liquidity module is designed to take fees half from `OfferCoin`, and the other half from `ExchangedCoin`. This smooths out an impact of the fee payment process.\n- **OfferCoin Fee Reservation ( fee before batch process, in OfferCoin )**\n    - when user orders 100 Xcoin, the swap message demands\n        - `OfferCoin`(in Xcoin) : 100\n        - `ReservedOfferCoinFeeAmount`(in Xcoin) = `OfferCoin`*(`SwapFeeRate`/2)\n    - user needs to have at least 100+100*(`SwapFeeRate`/2) amount of Xcoin to successfully commit this swap message\n        - the message fails when user's balance is below this amount\n- **Actual Fee Payment**\n    - if 10 Xcoin is executed\n        - **OfferCoin Fee Payment from Reserved OfferCoin Fee**\n            - `OfferCoinFeeAmount`(in Xcoin) = (10/100)*`ReservedOfferCoinFeeAmount`\n            - `ReservedOfferCoinFeeAmount` is reduced from this fee payment\n        - **ExchangedCoin Fee Payment ( fee after batch process, in ExchangedCoin )**\n            - `ExchangedCoinFeeAmount`(in Ycoin) = `OfferCoinFeeAmount` / `SwapPrice`\n                - this is exactly equal value compared to advance fee payment assuming the current SwapPrice, to minimize the pool price impact from fee payment process\n\n- Swap fees are proportional to the coins received from matched swap orders.\n- Swap fees are sent to the liquidity pool.\n- The decimal points of the swap fees are rounded up.\n\n## Cancel unexecuted swap orders with expired CancelHeight\n\nAfter execution of `PoolBatch`, all remaining swap orders with `CancelHeight` equal to or higher than current height are cancelled.\n\n## Refund escrowed coins\n\nRefunds are issued for escrowed coins for cancelled swap order and failed create pool, deposit, and withdraw messages.\n"
  },
  {
    "path": "x/liquidity/spec/04_messages.md",
    "content": "<!-- order: 4 -->\n\n # Messages\n\nMessages (Msg) are objects that trigger state transitions. Msgs are wrapped in transactions (Txs) that clients submit to the network. The Cosmos SDK wraps and unwraps liquidity module messages from transactions.\n\n## MsgCreatePool\n\nA liquidity pool is created and initial coins are deposited with the `MsgCreatePool` message.\n\n```go\ntype MsgCreatePool struct {\n    PoolCreatorAddress  string         // account address of the origin of this message\n    PoolTypeId          uint32         // id of the new liquidity pool\n    DepositCoins         sdk.Coins      // deposit initial coins for new liquidity pool\n}\n```\n\n### Validity Checks\n\nValidity checks are performed for MsgCreatePool messages. The transaction that is triggered with `MsgCreatePool` fails if:\n\n- if `params.CircuitBreakerEnabled` is true\n- `PoolCreator` address does not exist\n- `PoolTypeId` does not exist in parameters\n- A duplicate `LiquidityPool` with same `PoolTypeId` and `ReserveCoinDenoms` exists\n- One or more coins in `ReserveCoinDenoms` do not exist in `bank` module\n- The balance of `PoolCreator` does not have enough amount of coins for `DepositCoins`\n- The balance of `PoolCreator` does not have enough coins for `PoolCreationFee`\n\n## MsgDepositWithinBatch\n\nCoins are deposited in a batch to a liquidity pool with the `MsgDepositWithinBatch` message.\n\n```go\ntype MsgDepositWithinBatch struct {\n    DepositorAddress    string         // account address of depositor that originated this message\n    PoolId              uint64         // id of the liquidity pool to receive deposit\n    DepositCoins         sdk.Coins      // deposit coins\n}\n```\n\n## Validity Checks\n\nThe MsgDepositWithinBatch message performs validity checks. The transaction that is triggered with the `MsgDepositWithinBatch` message fails if:\n\n- if `params.CircuitBreakerEnabled` is true\n- `Depositor` address does not exist\n- `PoolId` does not exist\n- The denoms of `DepositCoins` are not composed of existing `ReserveCoinDenoms` of the specified `LiquidityPool`\n- The balance of `Depositor` does not have enough coins for `DepositCoins`\n\n## MsgWithdrawWithinBatch\n\nWithdraw coins in batch from liquidity pool with the `MsgWithdrawWithinBatch` message.\n\n```go\ntype MsgWithdrawWithinBatch struct {\n    WithdrawerAddress string         // account address of the origin of this message\n    PoolId            uint64         // id of the liquidity pool to withdraw the coins from\n    PoolCoin          sdk.Coin       // pool coin sent for reserve coin withdrawal\n}\n```\n\n## Validity Checks\n\nThe MsgWithdrawWithinBatch message performs validity checks. The transaction that is triggered with the `MsgWithdrawWithinBatch` message fails if:\n\n- `Withdrawer` address does not exist\n- `PoolId` does not exist\n- The denom of `PoolCoin` are not equal to the `PoolCoinDenom` of the `LiquidityPool`\n- The balance of `Depositor` does not have enough coins for `PoolCoin`\n\n## MsgSwapWithinBatch\n\nSwap coins between liquidity pools in batch with the `MsgSwapWithinBatch` message.\n\nOffer coins are swapped with demand coins for the given order price.\n\n```go\ntype MsgSwapWithinBatch struct {\n    SwapRequesterAddress string     // account address of the origin of this message\n    PoolId               uint64     // id of the liquidity pool\n    SwapTypeId           uint32     // swap type id of this swap message, default 1: InstantSwap, requesting instant swap\n    OfferCoin            sdk.Coin   // offer coin of this swap\n    DemandCoinDenom      string     // denom of demand coin of this swap\n    OfferCoinFee         sdk.Coin   // offer coin fee for pay fees in half offer coin\n    OrderPrice           sdk.Dec    // limit order price where the price is the exchange ratio of X/Y where X is the amount of the first coin and Y is the amount of the second coin when their denoms are sorted alphabetically\n}\n```\n\n## Validity checks\n\nThe MsgSwapWithinBatch message performs validity checks. The transaction that is triggered with the `MsgSwapWithinBatch` message fails if:\n\n- if `params.CircuitBreakerEnabled` is true\n- `SwapRequester` address does not exist\n- `PoolId` does not exist\n- `SwapTypeId` does not exist\n- Denoms of `OfferCoin` or `DemandCoin` do not exist in `bank` module\n- The balance of `SwapRequester` does not have enough coins for `OfferCoin`\n- `OrderPrice` <= zero\n- `OfferCoinFee` equals `OfferCoin` * `params.SwapFeeRate` * `0.5` with ceiling\n- Has sufficient balance `OfferCoinFee` to reserve offer coin fee\n"
  },
  {
    "path": "x/liquidity/spec/05_begin_block.md",
    "content": "<!-- order: 5 -->\n\n # Begin-Block\n\nBegin block operations for the liquidity module reinitialize batch messages that were not executed in the previous batch and delete batch messages that were executed or ready to be deleted.\n\n## Delete pool batch messages and reset states for pool batch messages\n\n- Delete `{*action}MsgState` messages that have `ToBeDeleted` state\n- Reset states for the remaining `{*action}MsgState` messages to execute on `end-block` of the next batch index\n\n## Reinitialize executed pool batch to next liquidity pool batch\n\nReinitialize the executed `PoolBatch` for the next batch. The reinitialization process includes the following actions:\n\n- Increase state `BatchIndex` of the batch\n- Reset state `BeginHeight` as current block height\n- Reset state `Executed` as `false`\n"
  },
  {
    "path": "x/liquidity/spec/06_end_block.md",
    "content": "<!-- order: 6 -->\n\n # Before-End-Block\n\nThese operations occur before the end-block operations for the liquidity module.\n\n## Append messages to LiquidityPoolBatch\n\nAfter successful message verification and coin `escrow` process, the incoming `MsgDepositWithinBatch`, `MsgWithdrawWithinBatch`, and `MsgSwapWithinBatch` messages are appended to the current `PoolBatch` of the corresponding `Pool`.\n\n# End-Block\n\nEnd-block operations for the Liquidity Module.\n\n## Execute LiquidityPoolBatch upon execution heights\n\nIf there are `{*action}MsgState` messages that have not yet executed in the `PoolBatch` for each `Pool`, the `PoolBatch` is executed. This batch contains one or more `DepositLiquidityPool`, `WithdrawLiquidityPool`, and `SwapExecution` processes.\n\n### Transact and refund for each message\n\nA liquidity module escrow account holds coins temporarily and releases them when state changes. Refunds from the escrow account are made for cancellations, partial cancellations, expiration, and failed messages.\n\n### Set states for each message according to the results\n\nAfter transact and refund transactions occur for each message, update the state of each `{*action}MsgState` message according to the results.\n\nEven if the message is completed or expired:\n\n1. Set the `ToBeDeleted` state value as true instead of deleting the message directly from the `end-block`\n2. Delete the messages that have `ToBeDeleted` state from the begin-block in the next block so that each message with result state in the block can be stored to kvstore.\n\nThis process allows searching for the past messages that have this result state. Searching is supported when the kvstore is not pruning.\n"
  },
  {
    "path": "x/liquidity/spec/07_events.md",
    "content": "<!-- order: 7 -->\n\n # Events\n\nThe liquidity module emits the following events.\n\n## Handlers\n\n### MsgCreatePool\n\nType        | Attribute Key   | Attribute Value\n----------- | --------------- | ------------------------\ncreate_pool | pool_id         | {poolId}\ncreate_pool | pool_type_id    | {poolTypeId}\ncreate_pool | pool_name       | {AttributeValuePoolName}\ncreate_pool | reserve_account | {reserveAccountAddress}\ncreate_pool | deposit_coins   | {depositCoins}\ncreate_pool | pool_coin_denom | {poolCoinDenom}\nmessage     | module          | liquidity\nmessage     | action          | create_pool\nmessage     | sender          | {senderAddress}\n\n### MsgDepositWithinBatch\n\nType                 | Attribute Key | Attribute Value\n-------------------- | ------------- | --------------------\ndeposit_within_batch | pool_id       | {poolId}\ndeposit_within_batch | batch_index   | {batchIndex}\ndeposit_within_batch | msg_index     | {depositMsgIndex}\ndeposit_within_batch | deposit_coins | {depositCoins}\nmessage              | module        | liquidity\nmessage              | action        | deposit_within_batch\nmessage              | sender        | {senderAddress}\n\n### MsgWithdrawWithinBatch\n\nType                  | Attribute Key    | Attribute Value\n--------------------- | ---------------- | ---------------------\nwithdraw_within_batch | pool_id          | {poolId}\nwithdraw_within_batch | batch_index      | {batchIndex}\nwithdraw_within_batch | msg_index        | {withdrawMsgIndex}\nwithdraw_within_batch | pool_coin_denom  | {poolCoinDenom}\nwithdraw_within_batch | pool_coin_amount | {poolCoinAmount}\nmessage               | module           | liquidity\nmessage               | action           | withdraw_within_batch\nmessage               | sender           | {senderAddress}\n\n### MsgSwapWithinBatch\n\nType              | Attribute Key     | Attribute Value\n----------------- | ----------------- | -----------------\nswap_within_batch | pool_id           | {poolId}\nswap_within_batch | batch_index       | {batchIndex}\nswap_within_batch | msg_index         | {swapMsgIndex}\nswap_within_batch | swap_type_id      | {swapTypeId}\nswap_within_batch | offer_coin_denom  | {offerCoinDenom}\nswap_within_batch | offer_coin_amount | {offerCoinAmount}\nswap_within_batch | demand_coin_denom | {demandCoinDenom}\nswap_within_batch | order_price       | {orderPrice}\nmessage           | module            | liquidity\nmessage           | action            | swap_within_batch\nmessage           | sender            | {senderAddress}\n\n## EndBlocker\n\n### Batch Result for MsgDepositWithinBatch\n\nType            | Attribute Key    | Attribute Value\n--------------- | ---------------- | ------------------\ndeposit_to_pool | pool_id          | {poolId}\ndeposit_to_pool | batch_index      | {batchIndex}\ndeposit_to_pool | msg_index        | {depositMsgIndex}\ndeposit_to_pool | depositor        | {depositorAddress}\ndeposit_to_pool | accepted_coins   | {acceptedCoins}\ndeposit_to_pool | refunded_coins   | {refundedCoins}\ndeposit_to_pool | pool_coin_denom  | {poolCoinDenom}\ndeposit_to_pool | pool_coin_amount | {poolCoinAmount}\ndeposit_to_pool | success          | {success}\n\n### Batch Result for MsgWithdrawWithinBatch\n\n| Type               | Attribute Key      | Attribute Value     |\n| ------------------ | ------------------ | ------------------- |\n| withdraw_from_pool | pool_id            | {poolId}            |\n| withdraw_from_pool | batch_index        | {batchIndex}        |\n| withdraw_from_pool | msg_index          | {withdrawMsgIndex}  |\n| withdraw_from_pool | withdrawer         | {withdrawerAddress} |\n| withdraw_from_pool | pool_coin_denom    | {poolCoinDenom}     |\n| withdraw_from_pool | pool_coin_amount   | {poolCoinAmount}    |\n| withdraw_from_pool | withdraw_coins     | {withdrawCoins}     |\n| withdraw_from_pool | withdraw_fee_coins | {withdrawFeeCoins}  |\n| withdraw_from_pool | success            | {success}           |\n\n### Batch Result for MsgSwapWithinBatch\n\nType            | Attribute Key                  | Attribute Value\n--------------- | ------------------------------ | ----------------------------\nswap_transacted | pool_id                        | {poolId}\nswap_transacted | batch_index                    | {batchIndex}\nswap_transacted | msg_index                      | {swapMsgIndex}\nswap_transacted | swap_requester                 | {swapRequesterAddress}\nswap_transacted | swap_type_id                   | {swapTypeId}\nswap_transacted | offer_coin_denom               | {offerCoinDenom}\nswap_transacted | offer_coin_amount              | {offerCoinAmount}\nswap_transacted | exchanged_coin_denom           | {exchangedCoinDenom}\nswap_transacted | order_price                    | {orderPrice}\nswap_transacted | swap_price                     | {swapPrice}\nswap_transacted | transacted_coin_amount         | {transactedCoinAmount}\nswap_transacted | remaining_offer_coin_amount    | {remainingOfferCoinAmount}\nswap_transacted | exchanged_offer_coin_amount    | {exchangedOfferCoinAmount}\nswap_transacted | exchanged_demand_coin_amount   | {exchangedDemandCoinAmount}\nswap_transacted | offer_coin_fee_amount          | {offerCoinFeeAmount}\nswap_transacted | exchanged_coin_fee_amount      | {exchangedCoinFeeAmount}\nswap_transacted | reserved_offer_coin_fee_amount | {reservedOfferCoinFeeAmount}\nswap_transacted | order_expiry_height            | {orderExpiryHeight}\nswap_transacted | success                        | {success}\n\n<!-- remove for v1 ### Cancel Result for MsgSwapWithinBatch on Batch The spec, msg for cancellation of the swap order will be added from v2 | Type | Attribute Key | Attribute Value | | ----------- | ------------------------------ | ---------------------------- | | swap_cancel | pool_id | {poolId} | | swap_cancel | batch_index | {batchIndex} | | swap_cancel | msg_index | {swapMsgIndex} | | swap_cancel | swap_requester | {swapRequesterAddress} | | swap_cancel | swap_type_id | {swapTypeId} | | swap_cancel | offer_coin_denom | {offerCoinDenom} | | swap_cancel | offer_coin_amount | {offerCoinAmount} | | swap_cancel | offer_coin_fee_amount | {offerCoinFeeAmount} | | swap_cancel | reserved_offer_coin_fee_amount | {reservedOfferCoinFeeAmount} | | swap_cancel | order_price | {orderPrice} | | swap_cancel | swap_price | {swapPrice} | | swap_cancel | cancelled_coin_amount | {cancelledOfferCoinAmount} | | swap_cancel | remaining_offer_coin_amount | {remainingOfferCoinAmount} | | swap_cancel | order_expiry_height | {orderExpiryHeight} | | swap_cancel | success | {success} | -->\n"
  },
  {
    "path": "x/liquidity/spec/08_params.md",
    "content": "<!-- order: 8 -->\n\n # Parameters\n\nThe liquidity module contains the following parameters:\n\nKey                    | Type             | Example\n---------------------- | ---------------- | -------------------------------------------------------------------------------------------------------------------\nPoolTypes              | []PoolType            | [{\"id\":1,\"name\":\"StandardLiquidityPool\",\"min_reserve_coin_num\":2,\"max_reserve_coin_num\":2,\"description\":\"Standard liquidity pool with pool price function X/Y, ESPM constraint, and two kinds of reserve coins\"}]\nMinInitDepositAmount   | string (math.Int)      | \"1000000\"\nInitPoolCoinMintAmount | string (math.Int)      | \"1000000\"\nMaxReserveCoinAmount   | string (math.Int)      | \"0\"\nPoolCreationFee        | sdk.Coins             | [{\"denom\":\"stake\",\"amount\":\"40000000\"}]\nSwapFeeRate            | string (sdk.Dec)      | \"0.003000000000000000\"\nWithdrawFeeRate        | string (sdk.Dec)      | \"0.000000000000000000\"\nMaxOrderAmountRatio    | string (sdk.Dec)      | \"0.100000000000000000\"\nUnitBatchHeight        | uint32                | 1\nCircuitBreakerEnabled  | bool                  | false\n\n## PoolTypes\n\nList of available PoolType\n\n```go\ntype PoolType struct {\n    Id                    uint32\n    Name                  string\n    MinReserveCoinNum     uint32\n    MaxReserveCoinNum     uint32\n    Description           string\n}\n```\n\n## MinInitDepositAmount\n\nMinimum number of coins to be deposited to the liquidity pool upon pool creation.\n\n## InitPoolCoinMintAmount\n\nInitial mint amount of pool coin on pool creation.\n\n## MaxReserveCoinAmount\n\nLimit the size of each liquidity pool. The deposit transaction fails if the total reserve coin amount after the deposit is larger than the reserve coin amount. \n\nThe default value of zero means no limit. \n\n**Note:** Especially in the early phases of liquidity module adoption, set `MaxReserveCoinAmount` to a non-zero value to minimize risk on error or exploitation.\n\n## PoolCreationFee\n\nFee paid for to create a LiquidityPool creation. This fee prevents spamming and is collected in the community pool of the distribution module. \n\n## SwapFeeRate\n\nSwap fee rate for every executed swap. When a swap is requested, the swap fee is reserved: \n\n- Half reserved as `OfferCoinFee`\n- Half reserved as `ExchangedCoinFee`\n\nThe swap fee is collected when a batch is executed. \n\n## WithdrawFeeRate\n\nReserve coin withdrawal with less proportion by `WithdrawFeeRate`. This fee prevents attack vectors from repeated deposit/withdraw transactions. \n\n## MaxOrderAmountRatio\n\nMaximum ratio of reserve coins that can be ordered at a swap order.\n\n## UnitBatchHeight\n\nThe smallest unit batch size for every liquidity pool.\n\n## CircuitBreakerEnabled\n\nThe intention of circuit breaker is to have a contingency plan for a running network which maintains network liveness. This parameter enables or disables `MsgCreatePool`, `MsgDepositWithinBatch` and `MsgSwapWithinBatch` message types in liquidity module.\n# Constant Variables\n\nKey                 | Type   | Constant Value\n------------------- | ------ | --------------\nCancelOrderLifeSpan | int64  | 0\nMinReserveCoinNum   | uint32 | 2\nMaxReserveCoinNum   | uint32 | 2\n\n## CancelOrderLifeSpan\n\nThe life span of swap orders in block heights.\n\n## MinReserveCoinNum, MaxReserveCoinNum\n\nThe mininum and maximum number of reserveCoins for `PoolType`.\n"
  },
  {
    "path": "x/liquidity/spec/README.md",
    "content": "<!-- order: 0 title: Liquidity Overview parent: title: \"liquidity\" -->\n\n # `liquidity`\n\n## Abstract\n\nThis document specifies the liquidity module of the Cosmos SDK that serves AMM (Automated Market Makers) style decentralized liquidity providing and coin swap functions.\n\nThe module enables you to create a liquidity pool with a pair of coins, deposit reserve coins into the pool to provide liquidity, request withdrawal from the pool, and trade coins using the liquidity pool.\n\nThis module is available in the Cosmos Hub and can be used by other blockchains that are based on the Cosmos SDK.\n\n## Contents\n\n1. **[Concepts](01_concepts.md)**\n2. **[State](02_state.md)**\n3. **[State Transitions](03_state_transitions.md)**\n4. **[Messages](04_messages.md)**\n5. **[Begin-Block](05_begin_block.md)**\n6. **[End-Block](06_end_block.md)**\n7. **[Events](07_events.md)**\n8. **[Parameters](08_params.md)**\n\n## References\n\n- [Liquidity module proposal and milestone](https://github.com/b-harvest/Liquidity-Module-For-the-Hub)\n- [Cosmos SDK modules](https://github.com/cosmos/cosmos-sdk/tree/master/x)\n"
  },
  {
    "path": "x/liquidity/types/codec.go",
    "content": "package types\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\t\"github.com/cosmos/cosmos-sdk/codec/types\"\n\tcryptocodec \"github.com/cosmos/cosmos-sdk/crypto/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/msgservice\"\n\tauthzcodec \"github.com/cosmos/cosmos-sdk/x/authz/codec\"\n)\n\n// RegisterLegacyAminoCodec registers concrete types on the codec.\nfunc RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {\n\tcdc.RegisterConcrete(&MsgCreatePool{}, \"liquidity/MsgCreatePool\", nil)\n\tcdc.RegisterConcrete(&MsgDepositWithinBatch{}, \"liquidity/MsgDepositWithinBatch\", nil)\n\tcdc.RegisterConcrete(&MsgWithdrawWithinBatch{}, \"liquidity/MsgWithdrawWithinBatch\", nil)\n\tcdc.RegisterConcrete(&MsgSwapWithinBatch{}, \"liquidity/MsgSwapWithinBatch\", nil)\n}\n\n// RegisterInterfaces registers the x/liquidity interface types with the\n// interface registry\nfunc RegisterInterfaces(registry types.InterfaceRegistry) {\n\tregistry.RegisterCustomTypeURL((*sdk.Msg)(nil), \"/tendermint.liquidity.v1beta1.MsgCreatePool\", &MsgCreatePool{})\n\tregistry.RegisterCustomTypeURL((*sdk.Msg)(nil), \"/tendermint.liquidity.v1beta1.MsgDepositWithinBatch\", &MsgDepositWithinBatch{})\n\tregistry.RegisterCustomTypeURL((*sdk.Msg)(nil), \"/tendermint.liquidity.v1beta1.MsgWithdrawWithinBatch\", &MsgWithdrawWithinBatch{})\n\tregistry.RegisterCustomTypeURL((*sdk.Msg)(nil), \"/tendermint.liquidity.v1beta1.MsgSwapWithinBatch\", &MsgSwapWithinBatch{})\n\n\tregistry.RegisterImplementations((*sdk.Msg)(nil),\n\t\t&MsgCreatePool{},\n\t\t&MsgDepositWithinBatch{},\n\t\t&MsgWithdrawWithinBatch{},\n\t\t&MsgSwapWithinBatch{},\n\t)\n\tmsgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc)\n}\n\n// legacy amino codecs\nvar (\n\tamino = codec.NewLegacyAmino()\n\n\t// ModuleCdc references the global x/liquidity module codec. Note, the\n\t// codec should ONLY be used in certain instances of tests and for JSON\n\t// encoding as Amino is still used for that purpose.\n\t//\n\t// The actual codec used for serialization should be provided to x/liquidity\n\t// and defined at the application level.\n\tModuleCdc = codec.NewAminoCodec(amino)\n)\n\nfunc init() {\n\tRegisterLegacyAminoCodec(amino)\n\tcryptocodec.RegisterCrypto(amino)\n\t// Register all Amino interfaces and concrete types on the authz Amino codec so that this can later be\n\t// used to properly serialize MsgGrant and MsgExec instances\n\tsdk.RegisterLegacyAminoCodec(amino)\n\tRegisterLegacyAminoCodec(authzcodec.Amino)\n\n\tamino.Seal()\n}\n"
  },
  {
    "path": "x/liquidity/types/codec_test.go",
    "content": "package types\n\nimport (\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/suite\"\n\n\tcodectypes \"github.com/cosmos/cosmos-sdk/codec/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\ntype CodecTestSuite struct {\n\tsuite.Suite\n}\n\nfunc TestCodecSuite(t *testing.T) {\n\tsuite.Run(t, new(CodecTestSuite))\n}\n\nfunc (suite *CodecTestSuite) TestRegisterInterfaces() {\n\tregistry := codectypes.NewInterfaceRegistry()\n\tregistry.RegisterInterface(sdk.MsgInterfaceProtoName, (*sdk.Msg)(nil))\n\tRegisterInterfaces(registry)\n\n\timpls := registry.ListImplementations(sdk.MsgInterfaceProtoName)\n\tsuite.Require().Equal(8, len(impls))\n\t//suite.Require().ElementsMatch([]string{\n\t//\t\"/osmosis.tokenfactory.v1beta1.MsgCreateDenom\",\n\t//\t\"/osmosis.tokenfactory.v1beta1.MsgMint\",\n\t//\t\"/osmosis.tokenfactory.v1beta1.MsgBurn\",\n\t//\t\"/osmosis.tokenfactory.v1beta1.MsgChangeAdmin\",\n\t//\t\"/osmosis.tokenfactory.v1beta1.MsgSetDenomMetadata\",\n\t//\t\"/osmosis.tokenfactory.v1beta1.MsgForceTransfer\",\n\t//\t\"/osmosis.tokenfactory.v1beta1.MsgUpdateParams\",\n\t//}, impls)\n}\n"
  },
  {
    "path": "x/liquidity/types/errors.go",
    "content": "package types\n\nimport (\n\tsdkerrors \"cosmossdk.io/errors\"\n)\n\n// liquidity module sentinel errors\nvar (\n\tErrPoolNotExists                = sdkerrors.Register(ModuleName, 1, \"pool not exists\")\n\tErrPoolTypeNotExists            = sdkerrors.Register(ModuleName, 2, \"pool type not exists\")\n\tErrEqualDenom                   = sdkerrors.Register(ModuleName, 3, \"reserve coin denomination are equal\")\n\tErrInvalidDenom                 = sdkerrors.Register(ModuleName, 4, \"invalid denom\")\n\tErrNumOfReserveCoin             = sdkerrors.Register(ModuleName, 5, \"invalid number of reserve coin\")\n\tErrNumOfPoolCoin                = sdkerrors.Register(ModuleName, 6, \"invalid number of pool coin\")\n\tErrInsufficientPool             = sdkerrors.Register(ModuleName, 7, \"insufficient pool\")\n\tErrInsufficientBalance          = sdkerrors.Register(ModuleName, 8, \"insufficient coin balance\")\n\tErrLessThanMinInitDeposit       = sdkerrors.Register(ModuleName, 9, \"deposit coin less than MinInitDepositAmount\")\n\tErrNotImplementedYet            = sdkerrors.Register(ModuleName, 10, \"not implemented yet\")\n\tErrPoolAlreadyExists            = sdkerrors.Register(ModuleName, 11, \"the pool already exists\")\n\tErrPoolBatchNotExists           = sdkerrors.Register(ModuleName, 12, \"pool batch not exists\")\n\tErrOrderBookInvalidity          = sdkerrors.Register(ModuleName, 13, \"orderbook is not validity\")\n\tErrBatchNotExecuted             = sdkerrors.Register(ModuleName, 14, \"the liquidity pool batch is not executed\")\n\tErrInvalidPoolCreatorAddr       = sdkerrors.Register(ModuleName, 15, \"invalid pool creator address\")\n\tErrInvalidDepositorAddr         = sdkerrors.Register(ModuleName, 16, \"invalid pool depositor address\")\n\tErrInvalidWithdrawerAddr        = sdkerrors.Register(ModuleName, 17, \"invalid pool withdrawer address\")\n\tErrInvalidSwapRequesterAddr     = sdkerrors.Register(ModuleName, 18, \"invalid pool swap requester address\")\n\tErrBadPoolCoinAmount            = sdkerrors.Register(ModuleName, 19, \"invalid pool coin amount\")\n\tErrBadDepositCoinsAmount        = sdkerrors.Register(ModuleName, 20, \"invalid deposit coins amount\")\n\tErrBadOfferCoinAmount           = sdkerrors.Register(ModuleName, 21, \"invalid offer coin amount\")\n\tErrBadOrderingReserveCoin       = sdkerrors.Register(ModuleName, 22, \"reserve coin denoms not ordered alphabetical\")\n\tErrBadOrderPrice                = sdkerrors.Register(ModuleName, 23, \"invalid order price\")\n\tErrNumOfReserveCoinDenoms       = sdkerrors.Register(ModuleName, 24, \"invalid reserve coin denoms\")\n\tErrEmptyReserveAccountAddress   = sdkerrors.Register(ModuleName, 25, \"empty reserve account address\")\n\tErrEmptyPoolCoinDenom           = sdkerrors.Register(ModuleName, 26, \"empty pool coin denom\")\n\tErrBadOrderingReserveCoinDenoms = sdkerrors.Register(ModuleName, 27, \"bad ordering reserve coin denoms\")\n\tErrBadReserveAccountAddress     = sdkerrors.Register(ModuleName, 28, \"bad reserve account address\")\n\tErrBadPoolCoinDenom             = sdkerrors.Register(ModuleName, 29, \"bad pool coin denom\")\n\tErrInsufficientPoolCreationFee  = sdkerrors.Register(ModuleName, 30, \"insufficient balances for pool creation fee\")\n\tErrExceededMaxOrderable         = sdkerrors.Register(ModuleName, 31, \"can not exceed max order ratio of reserve coins that can be ordered at a order\")\n\tErrBadBatchMsgIndex             = sdkerrors.Register(ModuleName, 32, \"bad msg index of the batch\")\n\tErrSwapTypeNotExists            = sdkerrors.Register(ModuleName, 33, \"swap type not exists\")\n\tErrLessThanMinOfferAmount       = sdkerrors.Register(ModuleName, 34, \"offer amount should be over 100 micro\")\n\tErrBadOfferCoinFee              = sdkerrors.Register(ModuleName, 35, \"bad offer coin fee\")\n\tErrNotMatchedReserveCoin        = sdkerrors.Register(ModuleName, 36, \"does not match the reserve coin of the pool\")\n\tErrBadPoolTypeID                = sdkerrors.Register(ModuleName, 37, \"invalid index of the pool type\")\n\tErrExceededReserveCoinLimit     = sdkerrors.Register(ModuleName, 38, \"can not exceed reserve coin limit amount\")\n\tErrDepletedPool                 = sdkerrors.Register(ModuleName, 39, \"the pool is depleted of reserve coin, reinitializing is required by deposit\")\n\tErrCircuitBreakerEnabled        = sdkerrors.Register(ModuleName, 40, \"circuit breaker is triggered\")\n\tErrOverflowAmount               = sdkerrors.Register(ModuleName, 41, \"invalid amount that can cause overflow\")\n)\n"
  },
  {
    "path": "x/liquidity/types/events.go",
    "content": "package types\n\n// Event types for the liquidity module.\nconst (\n\tEventTypeCreatePool          = TypeMsgCreatePool\n\tEventTypeDepositWithinBatch  = TypeMsgDepositWithinBatch\n\tEventTypeWithdrawWithinBatch = TypeMsgWithdrawWithinBatch\n\tEventTypeSwapWithinBatch     = TypeMsgSwapWithinBatch\n\tEventTypeDepositToPool       = \"deposit_to_pool\"\n\tEventTypeWithdrawFromPool    = \"withdraw_from_pool\"\n\tEventTypeSwapTransacted      = \"swap_transacted\"\n\n\tAttributeValuePoolId         = \"pool_id\"      //nolint:revive\n\tAttributeValuePoolTypeId     = \"pool_type_id\" //nolint:revive\n\tAttributeValuePoolName       = \"pool_name\"\n\tAttributeValueReserveAccount = \"reserve_account\"\n\tAttributeValuePoolCoinDenom  = \"pool_coin_denom\"\n\tAttributeValuePoolCoinAmount = \"pool_coin_amount\"\n\tAttributeValueBatchIndex     = \"batch_index\"\n\tAttributeValueMsgIndex       = \"msg_index\"\n\n\tAttributeValueDepositCoins = \"deposit_coins\"\n\n\tAttributeValueOfferCoinDenom         = \"offer_coin_denom\"\n\tAttributeValueOfferCoinAmount        = \"offer_coin_amount\"\n\tAttributeValueOfferCoinFeeAmount     = \"offer_coin_fee_amount\"\n\tAttributeValueExchangedCoinFeeAmount = \"exchanged_coin_fee_amount\"\n\tAttributeValueDemandCoinDenom        = \"demand_coin_denom\"\n\tAttributeValueOrderPrice             = \"order_price\"\n\n\tAttributeValueDepositor        = \"depositor\"\n\tAttributeValueRefundedCoins    = \"refunded_coins\"\n\tAttributeValueAcceptedCoins    = \"accepted_coins\"\n\tAttributeValueSuccess          = \"success\"\n\tAttributeValueWithdrawer       = \"withdrawer\"\n\tAttributeValueWithdrawCoins    = \"withdraw_coins\"\n\tAttributeValueWithdrawFeeCoins = \"withdraw_fee_coins\"\n\tAttributeValueSwapRequester    = \"swap_requester\"\n\tAttributeValueSwapTypeId       = \"swap_type_id\" //nolint:revive\n\tAttributeValueSwapPrice        = \"swap_price\"\n\n\tAttributeValueTransactedCoinAmount       = \"transacted_coin_amount\"\n\tAttributeValueRemainingOfferCoinAmount   = \"remaining_offer_coin_amount\"\n\tAttributeValueExchangedOfferCoinAmount   = \"exchanged_offer_coin_amount\"\n\tAttributeValueExchangedDemandCoinAmount  = \"exchanged_demand_coin_amount\"\n\tAttributeValueReservedOfferCoinFeeAmount = \"reserved_offer_coin_fee_amount\"\n\tAttributeValueOrderExpiryHeight          = \"order_expiry_height\"\n\n\tAttributeValueCategory = ModuleName\n\n\tSuccess = \"success\"\n\tFailure = \"failure\"\n)\n"
  },
  {
    "path": "x/liquidity/types/expected_keepers.go",
    "content": "package types\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tauthtypes \"github.com/cosmos/cosmos-sdk/x/auth/types\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n)\n\n// BankKeeper defines the expected bank send keeper\ntype BankKeeper interface {\n\tInputOutputCoins(ctx sdk.Context, inputs []banktypes.Input, outputs []banktypes.Output) error\n\tSendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error\n\tGetAllBalances(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins\n\tGetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin\n\tSpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins\n\n\tGetSupply(ctx sdk.Context, denom string) sdk.Coin\n\tSendCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error\n\tSendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error\n\tBurnCoins(ctx sdk.Context, name string, amt sdk.Coins) error\n\tMintCoins(ctx sdk.Context, name string, amt sdk.Coins) error\n}\n\n// AccountKeeper defines the expected account keeper\ntype AccountKeeper interface {\n\tGetAccount(ctx sdk.Context, addr sdk.AccAddress) authtypes.AccountI\n\tGetModuleAddress(name string) sdk.AccAddress\n}\n\n// DistributionKeeper defines the expected distribution keeper\ntype DistributionKeeper interface {\n\tFundCommunityPool(ctx sdk.Context, amount sdk.Coins, sender sdk.AccAddress) error\n}\n"
  },
  {
    "path": "x/liquidity/types/genesis.go",
    "content": "package types\n\n// NewGenesisState returns new GenesisState.\nfunc NewGenesisState(params Params, liquidityPoolRecords []PoolRecord) *GenesisState {\n\treturn &GenesisState{\n\t\tParams:      params,\n\t\tPoolRecords: liquidityPoolRecords,\n\t}\n}\n\n// DefaultGenesisState returns the default genesis state.\nfunc DefaultGenesisState() *GenesisState {\n\treturn NewGenesisState(DefaultParams(), []PoolRecord{})\n}\n\n// ValidateGenesis validates GenesisState.\nfunc ValidateGenesis(data GenesisState) error {\n\tif err := data.Params.Validate(); err != nil {\n\t\treturn err\n\t}\n\tfor _, record := range data.PoolRecords {\n\t\tif err := record.Validate(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// Validate validates PoolRecord.\nfunc (record PoolRecord) Validate() error {\n\tif record.PoolBatch.DepositMsgIndex == 0 ||\n\t\t(len(record.DepositMsgStates) > 0 && record.PoolBatch.DepositMsgIndex != record.DepositMsgStates[len(record.DepositMsgStates)-1].MsgIndex+1) {\n\t\treturn ErrBadBatchMsgIndex\n\t}\n\tif record.PoolBatch.WithdrawMsgIndex == 0 ||\n\t\t(len(record.WithdrawMsgStates) != 0 && record.PoolBatch.WithdrawMsgIndex != record.WithdrawMsgStates[len(record.WithdrawMsgStates)-1].MsgIndex+1) {\n\t\treturn ErrBadBatchMsgIndex\n\t}\n\tif record.PoolBatch.SwapMsgIndex == 0 ||\n\t\t(len(record.SwapMsgStates) != 0 && record.PoolBatch.SwapMsgIndex != record.SwapMsgStates[len(record.SwapMsgStates)-1].MsgIndex+1) {\n\t\treturn ErrBadBatchMsgIndex\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "x/liquidity/types/genesis.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/liquidity/v1beta1/genesis.proto\n\npackage types\n\nimport (\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\n// records the state of each pool after genesis export or import, used to check\n// variables\ntype PoolRecord struct {\n\tPool              Pool               `protobuf:\"bytes,1,opt,name=pool,proto3\" json:\"pool\" yaml:\"pool\"`\n\tPoolMetadata      PoolMetadata       `protobuf:\"bytes,2,opt,name=pool_metadata,json=poolMetadata,proto3\" json:\"pool_metadata\" yaml:\"pool_metadata\"`\n\tPoolBatch         PoolBatch          `protobuf:\"bytes,3,opt,name=pool_batch,json=poolBatch,proto3\" json:\"pool_batch\" yaml:\"pool_batch\"`\n\tDepositMsgStates  []DepositMsgState  `protobuf:\"bytes,4,rep,name=deposit_msg_states,json=depositMsgStates,proto3\" json:\"deposit_msg_states\" yaml:\"deposit_msg_states\"`\n\tWithdrawMsgStates []WithdrawMsgState `protobuf:\"bytes,5,rep,name=withdraw_msg_states,json=withdrawMsgStates,proto3\" json:\"withdraw_msg_states\" yaml:\"withdraw_msg_states\"`\n\tSwapMsgStates     []SwapMsgState     `protobuf:\"bytes,6,rep,name=swap_msg_states,json=swapMsgStates,proto3\" json:\"swap_msg_states\" yaml:\"swap_msg_states\"`\n}\n\nfunc (m *PoolRecord) Reset()         { *m = PoolRecord{} }\nfunc (m *PoolRecord) String() string { return proto.CompactTextString(m) }\nfunc (*PoolRecord) ProtoMessage()    {}\nfunc (*PoolRecord) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_84edef6e81b0c617, []int{0}\n}\n\nfunc (m *PoolRecord) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *PoolRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_PoolRecord.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *PoolRecord) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PoolRecord.Merge(m, src)\n}\n\nfunc (m *PoolRecord) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *PoolRecord) XXX_DiscardUnknown() {\n\txxx_messageInfo_PoolRecord.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PoolRecord proto.InternalMessageInfo\n\nfunc (m *PoolRecord) GetPool() Pool {\n\tif m != nil {\n\t\treturn m.Pool\n\t}\n\treturn Pool{}\n}\n\nfunc (m *PoolRecord) GetPoolMetadata() PoolMetadata {\n\tif m != nil {\n\t\treturn m.PoolMetadata\n\t}\n\treturn PoolMetadata{}\n}\n\nfunc (m *PoolRecord) GetPoolBatch() PoolBatch {\n\tif m != nil {\n\t\treturn m.PoolBatch\n\t}\n\treturn PoolBatch{}\n}\n\nfunc (m *PoolRecord) GetDepositMsgStates() []DepositMsgState {\n\tif m != nil {\n\t\treturn m.DepositMsgStates\n\t}\n\treturn nil\n}\n\nfunc (m *PoolRecord) GetWithdrawMsgStates() []WithdrawMsgState {\n\tif m != nil {\n\t\treturn m.WithdrawMsgStates\n\t}\n\treturn nil\n}\n\nfunc (m *PoolRecord) GetSwapMsgStates() []SwapMsgState {\n\tif m != nil {\n\t\treturn m.SwapMsgStates\n\t}\n\treturn nil\n}\n\n// GenesisState defines the liquidity module's genesis state.\ntype GenesisState struct {\n\t// params defines all the parameters for the liquidity module.\n\tParams      Params       `protobuf:\"bytes,1,opt,name=params,proto3\" json:\"params\"`\n\tPoolRecords []PoolRecord `protobuf:\"bytes,2,rep,name=pool_records,json=poolRecords,proto3\" json:\"pool_records\" yaml:\"pools\"`\n}\n\nfunc (m *GenesisState) Reset()         { *m = GenesisState{} }\nfunc (m *GenesisState) String() string { return proto.CompactTextString(m) }\nfunc (*GenesisState) ProtoMessage()    {}\nfunc (*GenesisState) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_84edef6e81b0c617, []int{1}\n}\n\nfunc (m *GenesisState) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_GenesisState.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *GenesisState) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GenesisState.Merge(m, src)\n}\n\nfunc (m *GenesisState) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *GenesisState) XXX_DiscardUnknown() {\n\txxx_messageInfo_GenesisState.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GenesisState proto.InternalMessageInfo\n\nfunc init() {\n\tproto.RegisterType((*PoolRecord)(nil), \"cyber.liquidity.v1beta1.PoolRecord\")\n\tproto.RegisterType((*GenesisState)(nil), \"cyber.liquidity.v1beta1.GenesisState\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"cyber/liquidity/v1beta1/genesis.proto\", fileDescriptor_84edef6e81b0c617)\n}\n\nvar fileDescriptor_84edef6e81b0c617 = []byte{\n\t// 503 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x93, 0x41, 0x6b, 0xd4, 0x4e,\n\t0x18, 0xc6, 0x93, 0x76, 0xbb, 0xfc, 0xff, 0xb3, 0x5b, 0xb4, 0xd3, 0x45, 0xb7, 0x8b, 0x26, 0x75,\n\t0xa4, 0xb8, 0x1e, 0x4c, 0x68, 0x7b, 0x2b, 0x78, 0x09, 0xa2, 0xa7, 0x05, 0x49, 0x0f, 0x82, 0x14,\n\t0x96, 0x49, 0x32, 0x64, 0x03, 0x9b, 0xce, 0x98, 0x77, 0x6a, 0xcc, 0xc1, 0xa3, 0xe0, 0xd1, 0x8f,\n\t0xd0, 0x2f, 0xe1, 0x77, 0xe8, 0xb1, 0x47, 0x4f, 0x45, 0x76, 0x2f, 0x9e, 0xfd, 0x04, 0x92, 0xc9,\n\t0x98, 0x8d, 0xd5, 0xec, 0x29, 0xc3, 0xe4, 0x79, 0x9e, 0xdf, 0x0b, 0xf3, 0xbc, 0xe8, 0x20, 0x2c,\n\t0x02, 0x96, 0xb9, 0xf3, 0xe4, 0xdd, 0x45, 0x12, 0x25, 0xb2, 0x70, 0xdf, 0x1f, 0x06, 0x4c, 0xd2,\n\t0x43, 0x37, 0x66, 0xe7, 0x0c, 0x12, 0x70, 0x44, 0xc6, 0x25, 0xc7, 0xf7, 0x95, 0xcc, 0xa9, 0x65,\n\t0x8e, 0x96, 0x8d, 0x9e, 0xb4, 0xf9, 0x57, 0x52, 0x95, 0x30, 0x1a, 0xc4, 0x3c, 0xe6, 0xea, 0xe8,\n\t0x96, 0xa7, 0xea, 0x96, 0x7c, 0xda, 0x42, 0xe8, 0x35, 0xe7, 0x73, 0x9f, 0x85, 0x3c, 0x8b, 0xf0,\n\t0x4b, 0xd4, 0x11, 0x9c, 0xcf, 0x87, 0xe6, 0xbe, 0x39, 0xee, 0x1d, 0x3d, 0x74, 0x5a, 0xa8, 0x4e,\n\t0x69, 0xf1, 0x76, 0xaf, 0x6e, 0x6c, 0xe3, 0xe7, 0x8d, 0xdd, 0x2b, 0x68, 0x3a, 0x3f, 0x21, 0xa5,\n\t0x91, 0xf8, 0xca, 0x8f, 0x67, 0x68, 0xbb, 0xfc, 0x4e, 0x53, 0x26, 0x69, 0x44, 0x25, 0x1d, 0x6e,\n\t0xa8, 0xc0, 0x83, 0xb5, 0x81, 0x13, 0x2d, 0xf6, 0x1e, 0xe8, 0xe0, 0xc1, 0x2a, 0xb8, 0x4e, 0x22,\n\t0x7e, 0x5f, 0x34, 0xb4, 0xf8, 0x0c, 0x21, 0xf5, 0x3f, 0xa0, 0x32, 0x9c, 0x0d, 0x37, 0x15, 0x86,\n\t0xac, 0x9f, 0xbb, 0x54, 0x7a, 0x7b, 0x9a, 0xb1, 0xd3, 0x60, 0xa8, 0x0c, 0xe2, 0xff, 0x2f, 0x7e,\n\t0xab, 0x70, 0x81, 0x70, 0xc4, 0x04, 0x87, 0x44, 0x4e, 0x53, 0x88, 0xa7, 0x20, 0xa9, 0x64, 0x30,\n\t0xec, 0xec, 0x6f, 0x8e, 0x7b, 0x47, 0xe3, 0x56, 0xca, 0x8b, 0xca, 0x32, 0x81, 0xf8, 0xb4, 0x34,\n\t0x78, 0x8f, 0x34, 0x6b, 0xaf, 0x62, 0xfd, 0x9d, 0x48, 0xfc, 0xbb, 0xd1, 0x9f, 0x1e, 0xc0, 0x1f,\n\t0xd1, 0x6e, 0x9e, 0xc8, 0x59, 0x94, 0xd1, 0xbc, 0xc9, 0xde, 0x52, 0xec, 0xa7, 0xad, 0xec, 0x37,\n\t0xda, 0x53, 0xc3, 0x89, 0x86, 0x8f, 0x2a, 0xf8, 0x3f, 0x32, 0x89, 0xbf, 0x93, 0xdf, 0x72, 0x01,\n\t0x4e, 0xd1, 0x1d, 0xc8, 0xa9, 0x68, 0xa2, 0xbb, 0x0a, 0xdd, 0xfe, 0x86, 0xa7, 0x39, 0x15, 0x35,\n\t0xd6, 0xd2, 0xd8, 0x7b, 0x15, 0xf6, 0x56, 0x16, 0xf1, 0xb7, 0xa1, 0xa1, 0x06, 0xf2, 0xd5, 0x44,\n\t0xfd, 0x57, 0x55, 0xe3, 0xd5, 0x0d, 0x7e, 0x8e, 0xba, 0x82, 0x66, 0x34, 0x05, 0xdd, 0x45, 0xbb,\n\t0xfd, 0x4d, 0x95, 0xcc, 0xeb, 0x94, 0x40, 0x5f, 0x9b, 0xf0, 0x19, 0x52, 0x35, 0x99, 0x66, 0xaa,\n\t0xd7, 0x30, 0xdc, 0x50, 0xb3, 0x3f, 0x5e, 0x5b, 0x8c, 0x6a, 0x07, 0xbc, 0x81, 0x9e, 0xbc, 0xbf,\n\t0x6a, 0x06, 0x10, 0xbf, 0x27, 0x6a, 0x05, 0x9c, 0xfc, 0xf7, 0xf9, 0xd2, 0x36, 0x7e, 0x5c, 0xda,\n\t0x86, 0x37, 0xb9, 0x5a, 0x58, 0xe6, 0xf5, 0xc2, 0x32, 0xbf, 0x2f, 0x2c, 0xf3, 0xcb, 0xd2, 0x32,\n\t0xae, 0x97, 0x96, 0xf1, 0x6d, 0x69, 0x19, 0x6f, 0x8f, 0xe3, 0x44, 0xce, 0x2e, 0x02, 0x27, 0xe4,\n\t0xa9, 0xab, 0xa8, 0x21, 0x3f, 0x8f, 0x33, 0x06, 0xe0, 0xc6, 0xfc, 0x59, 0xb5, 0xb4, 0x1f, 0x1a,\n\t0x6b, 0x2b, 0x0b, 0xc1, 0x20, 0xe8, 0xaa, 0xad, 0x3c, 0xfe, 0x15, 0x00, 0x00, 0xff, 0xff, 0x5f,\n\t0x85, 0x58, 0xc8, 0x16, 0x04, 0x00, 0x00,\n}\n\nfunc (m *PoolRecord) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *PoolRecord) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *PoolRecord) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.SwapMsgStates) > 0 {\n\t\tfor iNdEx := len(m.SwapMsgStates) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.SwapMsgStates[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintGenesis(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0x32\n\t\t}\n\t}\n\tif len(m.WithdrawMsgStates) > 0 {\n\t\tfor iNdEx := len(m.WithdrawMsgStates) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.WithdrawMsgStates[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintGenesis(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0x2a\n\t\t}\n\t}\n\tif len(m.DepositMsgStates) > 0 {\n\t\tfor iNdEx := len(m.DepositMsgStates) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.DepositMsgStates[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintGenesis(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0x22\n\t\t}\n\t}\n\t{\n\t\tsize, err := m.PoolBatch.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintGenesis(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x1a\n\t{\n\t\tsize, err := m.PoolMetadata.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintGenesis(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x12\n\t{\n\t\tsize, err := m.Pool.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintGenesis(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *GenesisState) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *GenesisState) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.PoolRecords) > 0 {\n\t\tfor iNdEx := len(m.PoolRecords) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.PoolRecords[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintGenesis(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0x12\n\t\t}\n\t}\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintGenesis(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintGenesis(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovGenesis(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *PoolRecord) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Pool.Size()\n\tn += 1 + l + sovGenesis(uint64(l))\n\tl = m.PoolMetadata.Size()\n\tn += 1 + l + sovGenesis(uint64(l))\n\tl = m.PoolBatch.Size()\n\tn += 1 + l + sovGenesis(uint64(l))\n\tif len(m.DepositMsgStates) > 0 {\n\t\tfor _, e := range m.DepositMsgStates {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovGenesis(uint64(l))\n\t\t}\n\t}\n\tif len(m.WithdrawMsgStates) > 0 {\n\t\tfor _, e := range m.WithdrawMsgStates {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovGenesis(uint64(l))\n\t\t}\n\t}\n\tif len(m.SwapMsgStates) > 0 {\n\t\tfor _, e := range m.SwapMsgStates {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovGenesis(uint64(l))\n\t\t}\n\t}\n\treturn n\n}\n\nfunc (m *GenesisState) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Params.Size()\n\tn += 1 + l + sovGenesis(uint64(l))\n\tif len(m.PoolRecords) > 0 {\n\t\tfor _, e := range m.PoolRecords {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovGenesis(uint64(l))\n\t\t}\n\t}\n\treturn n\n}\n\nfunc sovGenesis(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozGenesis(x uint64) (n int) {\n\treturn sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *PoolRecord) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: PoolRecord: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: PoolRecord: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Pool\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Pool.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolMetadata\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.PoolMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolBatch\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.PoolBatch.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 4:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field DepositMsgStates\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.DepositMsgStates = append(m.DepositMsgStates, DepositMsgState{})\n\t\t\tif err := m.DepositMsgStates[len(m.DepositMsgStates)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 5:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field WithdrawMsgStates\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.WithdrawMsgStates = append(m.WithdrawMsgStates, WithdrawMsgState{})\n\t\t\tif err := m.WithdrawMsgStates[len(m.WithdrawMsgStates)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 6:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field SwapMsgStates\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.SwapMsgStates = append(m.SwapMsgStates, SwapMsgState{})\n\t\t\tif err := m.SwapMsgStates[len(m.SwapMsgStates)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipGenesis(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *GenesisState) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: GenesisState: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: GenesisState: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolRecords\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.PoolRecords = append(m.PoolRecords, PoolRecord{})\n\t\t\tif err := m.PoolRecords[len(m.PoolRecords)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipGenesis(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipGenesis(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupGenesis\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthGenesis\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthGenesis        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowGenesis          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupGenesis = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/liquidity/types/keys.go",
    "content": "package types\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/address\"\n)\n\nconst (\n\t// ModuleName is the name of the liquidity module\n\tModuleName = \"liquidity\"\n\n\t// RouterKey is the message router key for the liquidity module\n\tRouterKey = ModuleName\n\n\t// StoreKey is the default store key for the liquidity module\n\tStoreKey = ModuleName\n\n\t// PoolCoinDenomPrefix is the prefix used for liquidity pool coin representation\n\tPoolCoinDenomPrefix = \"pool\"\n)\n\nvar (\n\t// param key for global Liquidity Pool IDs\n\tGlobalLiquidityPoolIDKey = []byte(\"globalLiquidityPoolId\")\n\n\tParamsKey = []byte{0x01}\n\n\tPoolKeyPrefix                  = []byte{0x11}\n\tPoolByReserveAccIndexKeyPrefix = []byte{0x12}\n\n\tPoolBatchKeyPrefix = []byte{0x22}\n\n\tPoolBatchDepositMsgStateIndexKeyPrefix  = []byte{0x31}\n\tPoolBatchWithdrawMsgStateIndexKeyPrefix = []byte{0x32}\n\tPoolBatchSwapMsgStateIndexKeyPrefix     = []byte{0x33}\n)\n\n// GetPoolKey returns kv indexing key of the pool\nfunc GetPoolKey(poolID uint64) []byte {\n\tkey := make([]byte, 9)\n\tkey[0] = PoolKeyPrefix[0]\n\tcopy(key[1:], sdk.Uint64ToBigEndian(poolID))\n\treturn key\n}\n\n// GetPoolByReserveAccIndexKey returns kv indexing key of the pool indexed by reserve account\nfunc GetPoolByReserveAccIndexKey(reserveAcc sdk.AccAddress) []byte {\n\treturn append(PoolByReserveAccIndexKeyPrefix, address.MustLengthPrefix(reserveAcc.Bytes())...)\n}\n\n// GetPoolBatchKey returns kv indexing key of the pool batch indexed by pool id\nfunc GetPoolBatchKey(poolID uint64) []byte {\n\tkey := make([]byte, 9)\n\tkey[0] = PoolBatchKeyPrefix[0]\n\tcopy(key[1:9], sdk.Uint64ToBigEndian(poolID))\n\treturn key\n}\n\n// GetPoolBatchDepositMsgStatesPrefix returns prefix of deposit message states in the pool's latest batch for iteration\nfunc GetPoolBatchDepositMsgStatesPrefix(poolID uint64) []byte {\n\tkey := make([]byte, 9)\n\tkey[0] = PoolBatchDepositMsgStateIndexKeyPrefix[0]\n\tcopy(key[1:9], sdk.Uint64ToBigEndian(poolID))\n\treturn key\n}\n\n// GetPoolBatchWithdrawMsgsPrefix returns prefix of withdraw message states in the pool's latest batch for iteration\nfunc GetPoolBatchWithdrawMsgsPrefix(poolID uint64) []byte {\n\tkey := make([]byte, 9)\n\tkey[0] = PoolBatchWithdrawMsgStateIndexKeyPrefix[0]\n\tcopy(key[1:9], sdk.Uint64ToBigEndian(poolID))\n\treturn key\n}\n\n// GetPoolBatchSwapMsgStatesPrefix returns prefix of swap message states in the pool's latest batch for iteration\nfunc GetPoolBatchSwapMsgStatesPrefix(poolID uint64) []byte {\n\tkey := make([]byte, 9)\n\tkey[0] = PoolBatchSwapMsgStateIndexKeyPrefix[0]\n\tcopy(key[1:9], sdk.Uint64ToBigEndian(poolID))\n\treturn key\n}\n\n// GetPoolBatchDepositMsgStateIndexKey returns kv indexing key of the latest index value of the msg index\nfunc GetPoolBatchDepositMsgStateIndexKey(poolID, msgIndex uint64) []byte {\n\tkey := make([]byte, 17)\n\tkey[0] = PoolBatchDepositMsgStateIndexKeyPrefix[0]\n\tcopy(key[1:9], sdk.Uint64ToBigEndian(poolID))\n\tcopy(key[9:17], sdk.Uint64ToBigEndian(msgIndex))\n\treturn key\n}\n\n// GetPoolBatchWithdrawMsgStateIndexKey returns kv indexing key of the latest index value of the msg index\nfunc GetPoolBatchWithdrawMsgStateIndexKey(poolID, msgIndex uint64) []byte {\n\tkey := make([]byte, 17)\n\tkey[0] = PoolBatchWithdrawMsgStateIndexKeyPrefix[0]\n\tcopy(key[1:9], sdk.Uint64ToBigEndian(poolID))\n\tcopy(key[9:17], sdk.Uint64ToBigEndian(msgIndex))\n\treturn key\n}\n\n// GetPoolBatchSwapMsgStateIndexKey returns kv indexing key of the latest index value of the msg index\nfunc GetPoolBatchSwapMsgStateIndexKey(poolID, msgIndex uint64) []byte {\n\tkey := make([]byte, 17)\n\tkey[0] = PoolBatchSwapMsgStateIndexKeyPrefix[0]\n\tcopy(key[1:9], sdk.Uint64ToBigEndian(poolID))\n\tcopy(key[9:17], sdk.Uint64ToBigEndian(msgIndex))\n\treturn key\n}\n"
  },
  {
    "path": "x/liquidity/types/liquidity.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/liquidity/v1beta1/liquidity.proto\n\npackage types\n\nimport (\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\t_ \"github.com/cosmos/cosmos-proto\"\n\tgithub_com_cosmos_cosmos_sdk_types \"github.com/cosmos/cosmos-sdk/types\"\n\ttypes \"github.com/cosmos/cosmos-sdk/types\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\n// Structure for the pool type to distinguish the characteristics of the reserve\n// pools.\ntype PoolType struct {\n\t// This is the id of the pool_type that is used as pool_type_id for pool\n\t// creation. In this version, only pool-type-id 1 is supported.\n\t// {\"id\":1,\"name\":\"ConstantProductLiquidityPool\",\"min_reserve_coin_num\":2,\"max_reserve_coin_num\":2,\"description\":\"\"}\n\tId uint32 `protobuf:\"varint,1,opt,name=id,proto3\" json:\"id,omitempty\" yaml:\"id\"`\n\t// name of the pool type.\n\tName string `protobuf:\"bytes,2,opt,name=name,proto3\" json:\"name,omitempty\" yaml:\"name\"`\n\t// minimum number of reserveCoins for LiquidityPoolType, only 2 reserve coins\n\t// are supported.\n\tMinReserveCoinNum uint32 `protobuf:\"varint,3,opt,name=min_reserve_coin_num,json=minReserveCoinNum,proto3\" json:\"min_reserve_coin_num,omitempty\" yaml:\"min_reserve_coin_num\"`\n\t// maximum number of reserveCoins for LiquidityPoolType, only 2 reserve coins\n\t// are supported.\n\tMaxReserveCoinNum uint32 `protobuf:\"varint,4,opt,name=max_reserve_coin_num,json=maxReserveCoinNum,proto3\" json:\"max_reserve_coin_num,omitempty\" yaml:\"max_reserve_coin_num\"`\n\t// description of the pool type.\n\tDescription string `protobuf:\"bytes,5,opt,name=description,proto3\" json:\"description,omitempty\" yaml:\"description\"`\n}\n\nfunc (m *PoolType) Reset()         { *m = PoolType{} }\nfunc (m *PoolType) String() string { return proto.CompactTextString(m) }\nfunc (*PoolType) ProtoMessage()    {}\nfunc (*PoolType) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_67b6d59e96092d89, []int{0}\n}\n\nfunc (m *PoolType) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *PoolType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_PoolType.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *PoolType) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PoolType.Merge(m, src)\n}\n\nfunc (m *PoolType) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *PoolType) XXX_DiscardUnknown() {\n\txxx_messageInfo_PoolType.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PoolType proto.InternalMessageInfo\n\n// Params defines the parameters for the liquidity module.\ntype Params struct {\n\t// list of available pool types\n\tPoolTypes []PoolType `protobuf:\"bytes,1,rep,name=pool_types,json=poolTypes,proto3\" json:\"pool_types\" yaml:\"pool_types\"`\n\t// Minimum number of coins to be deposited to the liquidity pool on pool\n\t// creation.\n\tMinInitDepositAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:\"bytes,2,opt,name=min_init_deposit_amount,json=minInitDepositAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int\" json:\"min_init_deposit_amount\" yaml:\"min_init_deposit_amount\"`\n\t// Initial mint amount of pool coins upon pool creation.\n\tInitPoolCoinMintAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:\"bytes,3,opt,name=init_pool_coin_mint_amount,json=initPoolCoinMintAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int\" json:\"init_pool_coin_mint_amount\" yaml:\"init_pool_coin_mint_amount\"`\n\t// Limit the size of each liquidity pool to minimize risk. In development, set\n\t// to 0 for no limit. In production, set a limit.\n\tMaxReserveCoinAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:\"bytes,4,opt,name=max_reserve_coin_amount,json=maxReserveCoinAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int\" json:\"max_reserve_coin_amount\" yaml:\"max_reserve_coin_amount\"`\n\t// Fee paid to create a Liquidity Pool. Set a fee to prevent spamming.\n\tPoolCreationFee github_com_cosmos_cosmos_sdk_types.Coins `protobuf:\"bytes,5,rep,name=pool_creation_fee,json=poolCreationFee,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins\" json:\"pool_creation_fee\" yaml:\"pool_creation_fee\"`\n\t// Swap fee rate for every executed swap.\n\tSwapFeeRate github_com_cosmos_cosmos_sdk_types.Dec `protobuf:\"bytes,6,opt,name=swap_fee_rate,json=swapFeeRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec\" json:\"swap_fee_rate\" yaml:\"swap_fee_rate\"`\n\t// Reserve coin withdrawal with less proportion by withdrawFeeRate.\n\tWithdrawFeeRate github_com_cosmos_cosmos_sdk_types.Dec `protobuf:\"bytes,7,opt,name=withdraw_fee_rate,json=withdrawFeeRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec\" json:\"withdraw_fee_rate\" yaml:\"withdraw_fee_rate\"`\n\t// Maximum ratio of reserve coins that can be ordered at a swap order.\n\tMaxOrderAmountRatio github_com_cosmos_cosmos_sdk_types.Dec `protobuf:\"bytes,8,opt,name=max_order_amount_ratio,json=maxOrderAmountRatio,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec\" json:\"max_order_amount_ratio\" yaml:\"max_order_amount_ratio\"`\n\t// The smallest unit batch height for every liquidity pool.\n\tUnitBatchHeight uint32 `protobuf:\"varint,9,opt,name=unit_batch_height,json=unitBatchHeight,proto3\" json:\"unit_batch_height,omitempty\" yaml:\"unit_batch_height\"`\n\t// Circuit breaker enables or disables transaction messages in liquidity\n\t// module.\n\tCircuitBreakerEnabled bool `protobuf:\"varint,10,opt,name=circuit_breaker_enabled,json=circuitBreakerEnabled,proto3\" json:\"circuit_breaker_enabled,omitempty\" yaml:\"circuit_breaker_enabled\"`\n}\n\nfunc (m *Params) Reset()      { *m = Params{} }\nfunc (*Params) ProtoMessage() {}\nfunc (*Params) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_67b6d59e96092d89, []int{1}\n}\n\nfunc (m *Params) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_Params.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *Params) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Params.Merge(m, src)\n}\n\nfunc (m *Params) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *Params) XXX_DiscardUnknown() {\n\txxx_messageInfo_Params.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Params proto.InternalMessageInfo\n\n// Pool defines the liquidity pool that contains pool information.\ntype Pool struct {\n\t// id of the pool\n\tId uint64 `protobuf:\"varint,1,opt,name=id,proto3\" json:\"id\" yaml:\"id\"`\n\t// id of the pool_type\n\tTypeId uint32 `protobuf:\"varint,2,opt,name=type_id,json=typeId,proto3\" json:\"type_id,omitempty\" yaml:\"type_id\"`\n\t// denoms of reserve coin pair of the pool\n\tReserveCoinDenoms []string `protobuf:\"bytes,3,rep,name=reserve_coin_denoms,json=reserveCoinDenoms,proto3\" json:\"reserve_coin_denoms,omitempty\" yaml:\"reserve_coin_denoms\"`\n\t// reserve account address of the pool\n\tReserveAccountAddress string `protobuf:\"bytes,4,opt,name=reserve_account_address,json=reserveAccountAddress,proto3\" json:\"reserve_account_address,omitempty\" yaml:\"reserve_account_address\"`\n\t// denom of pool coin of the pool\n\tPoolCoinDenom string `protobuf:\"bytes,5,opt,name=pool_coin_denom,json=poolCoinDenom,proto3\" json:\"pool_coin_denom,omitempty\" yaml:\"pool_coin_denom\"`\n}\n\nfunc (m *Pool) Reset()         { *m = Pool{} }\nfunc (m *Pool) String() string { return proto.CompactTextString(m) }\nfunc (*Pool) ProtoMessage()    {}\nfunc (*Pool) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_67b6d59e96092d89, []int{2}\n}\n\nfunc (m *Pool) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *Pool) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_Pool.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *Pool) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Pool.Merge(m, src)\n}\n\nfunc (m *Pool) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *Pool) XXX_DiscardUnknown() {\n\txxx_messageInfo_Pool.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Pool proto.InternalMessageInfo\n\n// Metadata for the state of each pool for invariant checking after genesis\n// export or import.\ntype PoolMetadata struct {\n\t// id of the pool\n\tPoolId uint64 `protobuf:\"varint,1,opt,name=pool_id,json=poolId,proto3\" json:\"pool_id\" yaml:\"pool_id\"`\n\t// pool coin issued at the pool\n\tPoolCoinTotalSupply types.Coin `protobuf:\"bytes,2,opt,name=pool_coin_total_supply,json=poolCoinTotalSupply,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coin\" json:\"pool_coin_total_supply\" yaml:\"pool_coin\"`\n\t// reserve coins deposited in the pool\n\tReserveCoins github_com_cosmos_cosmos_sdk_types.Coins `protobuf:\"bytes,3,rep,name=reserve_coins,json=reserveCoins,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins\" json:\"reserve_coins\" yaml:\"deposit_coins\"`\n}\n\nfunc (m *PoolMetadata) Reset()         { *m = PoolMetadata{} }\nfunc (m *PoolMetadata) String() string { return proto.CompactTextString(m) }\nfunc (*PoolMetadata) ProtoMessage()    {}\nfunc (*PoolMetadata) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_67b6d59e96092d89, []int{3}\n}\n\nfunc (m *PoolMetadata) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *PoolMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_PoolMetadata.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *PoolMetadata) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PoolMetadata.Merge(m, src)\n}\n\nfunc (m *PoolMetadata) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *PoolMetadata) XXX_DiscardUnknown() {\n\txxx_messageInfo_PoolMetadata.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PoolMetadata proto.InternalMessageInfo\n\n// PoolBatch defines the batch or batches of a given liquidity pool that\n// contains indexes of deposit, withdraw, and swap messages. Index param\n// increments by 1 if the pool id is same.\ntype PoolBatch struct {\n\t// id of the pool\n\tPoolId uint64 `protobuf:\"varint,1,opt,name=pool_id,json=poolId,proto3\" json:\"pool_id\" yaml:\"pool_id\"`\n\t// index of this batch\n\tIndex uint64 `protobuf:\"varint,2,opt,name=index,proto3\" json:\"index,omitempty\" yaml:\"index\"`\n\t// height where this batch is started\n\tBeginHeight int64 `protobuf:\"varint,3,opt,name=begin_height,json=beginHeight,proto3\" json:\"begin_height,omitempty\" yaml:\"begin_height\"`\n\t// last index of DepositMsgStates\n\tDepositMsgIndex uint64 `protobuf:\"varint,4,opt,name=deposit_msg_index,json=depositMsgIndex,proto3\" json:\"deposit_msg_index,omitempty\" yaml:\"deposit_msg_index\"`\n\t// last index of WithdrawMsgStates\n\tWithdrawMsgIndex uint64 `protobuf:\"varint,5,opt,name=withdraw_msg_index,json=withdrawMsgIndex,proto3\" json:\"withdraw_msg_index,omitempty\" yaml:\"withdraw_msg_index\"`\n\t// last index of SwapMsgStates\n\tSwapMsgIndex uint64 `protobuf:\"varint,6,opt,name=swap_msg_index,json=swapMsgIndex,proto3\" json:\"swap_msg_index,omitempty\" yaml:\"swap_msg_index\"`\n\t// true if executed, false if not executed\n\tExecuted bool `protobuf:\"varint,7,opt,name=executed,proto3\" json:\"executed,omitempty\" yaml:\"executed\"`\n}\n\nfunc (m *PoolBatch) Reset()         { *m = PoolBatch{} }\nfunc (m *PoolBatch) String() string { return proto.CompactTextString(m) }\nfunc (*PoolBatch) ProtoMessage()    {}\nfunc (*PoolBatch) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_67b6d59e96092d89, []int{4}\n}\n\nfunc (m *PoolBatch) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *PoolBatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_PoolBatch.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *PoolBatch) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PoolBatch.Merge(m, src)\n}\n\nfunc (m *PoolBatch) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *PoolBatch) XXX_DiscardUnknown() {\n\txxx_messageInfo_PoolBatch.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PoolBatch proto.InternalMessageInfo\n\n// DepositMsgState defines the state of deposit message that contains state\n// information as it is processed in the next batch or batches.\ntype DepositMsgState struct {\n\t// height where this message is appended to the batch\n\tMsgHeight int64 `protobuf:\"varint,1,opt,name=msg_height,json=msgHeight,proto3\" json:\"msg_height,omitempty\" yaml:\"msg_height\"`\n\t// index of this deposit message in this liquidity pool\n\tMsgIndex uint64 `protobuf:\"varint,2,opt,name=msg_index,json=msgIndex,proto3\" json:\"msg_index,omitempty\" yaml:\"msg_index\"`\n\t// true if executed on this batch, false if not executed\n\tExecuted bool `protobuf:\"varint,3,opt,name=executed,proto3\" json:\"executed,omitempty\" yaml:\"executed\"`\n\t// true if executed successfully on this batch, false if failed\n\tSucceeded bool `protobuf:\"varint,4,opt,name=succeeded,proto3\" json:\"succeeded,omitempty\" yaml:\"succeeded\"`\n\t// true if ready to be deleted on kvstore, false if not ready to be deleted\n\tToBeDeleted bool `protobuf:\"varint,5,opt,name=to_be_deleted,json=toBeDeleted,proto3\" json:\"to_be_deleted,omitempty\" yaml:\"to_be_deleted\"`\n\t// MsgDepositWithinBatch\n\tMsg *MsgDepositWithinBatch `protobuf:\"bytes,6,opt,name=msg,proto3\" json:\"msg,omitempty\" yaml:\"msg\"`\n}\n\nfunc (m *DepositMsgState) Reset()         { *m = DepositMsgState{} }\nfunc (m *DepositMsgState) String() string { return proto.CompactTextString(m) }\nfunc (*DepositMsgState) ProtoMessage()    {}\nfunc (*DepositMsgState) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_67b6d59e96092d89, []int{5}\n}\n\nfunc (m *DepositMsgState) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *DepositMsgState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_DepositMsgState.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *DepositMsgState) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_DepositMsgState.Merge(m, src)\n}\n\nfunc (m *DepositMsgState) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *DepositMsgState) XXX_DiscardUnknown() {\n\txxx_messageInfo_DepositMsgState.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_DepositMsgState proto.InternalMessageInfo\n\n// WithdrawMsgState defines the state of the withdraw message that contains\n// state information as the message is processed in the next batch or batches.\ntype WithdrawMsgState struct {\n\t// height where this message is appended to the batch\n\tMsgHeight int64 `protobuf:\"varint,1,opt,name=msg_height,json=msgHeight,proto3\" json:\"msg_height,omitempty\" yaml:\"msg_height\"`\n\t// index of this withdraw message in this liquidity pool\n\tMsgIndex uint64 `protobuf:\"varint,2,opt,name=msg_index,json=msgIndex,proto3\" json:\"msg_index,omitempty\" yaml:\"msg_index\"`\n\t// true if executed on this batch, false if not executed\n\tExecuted bool `protobuf:\"varint,3,opt,name=executed,proto3\" json:\"executed,omitempty\" yaml:\"executed\"`\n\t// true if executed successfully on this batch, false if failed\n\tSucceeded bool `protobuf:\"varint,4,opt,name=succeeded,proto3\" json:\"succeeded,omitempty\" yaml:\"succeeded\"`\n\t// true if ready to be deleted on kvstore, false if not ready to be deleted\n\tToBeDeleted bool `protobuf:\"varint,5,opt,name=to_be_deleted,json=toBeDeleted,proto3\" json:\"to_be_deleted,omitempty\" yaml:\"to_be_deleted\"`\n\t// MsgWithdrawWithinBatch\n\tMsg *MsgWithdrawWithinBatch `protobuf:\"bytes,6,opt,name=msg,proto3\" json:\"msg,omitempty\" yaml:\"msg\"`\n}\n\nfunc (m *WithdrawMsgState) Reset()         { *m = WithdrawMsgState{} }\nfunc (m *WithdrawMsgState) String() string { return proto.CompactTextString(m) }\nfunc (*WithdrawMsgState) ProtoMessage()    {}\nfunc (*WithdrawMsgState) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_67b6d59e96092d89, []int{6}\n}\n\nfunc (m *WithdrawMsgState) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *WithdrawMsgState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_WithdrawMsgState.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *WithdrawMsgState) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_WithdrawMsgState.Merge(m, src)\n}\n\nfunc (m *WithdrawMsgState) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *WithdrawMsgState) XXX_DiscardUnknown() {\n\txxx_messageInfo_WithdrawMsgState.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_WithdrawMsgState proto.InternalMessageInfo\n\n// SwapMsgState defines the state of the swap message that contains state\n// information as the message is processed in the next batch or batches.\ntype SwapMsgState struct {\n\t// height where this message is appended to the batch\n\tMsgHeight int64 `protobuf:\"varint,1,opt,name=msg_height,json=msgHeight,proto3\" json:\"msg_height,omitempty\" yaml:\"msg_height\"`\n\t// index of this swap message in this liquidity pool\n\tMsgIndex uint64 `protobuf:\"varint,2,opt,name=msg_index,json=msgIndex,proto3\" json:\"msg_index,omitempty\" yaml:\"msg_index\"`\n\t// true if executed on this batch, false if not executed\n\tExecuted bool `protobuf:\"varint,3,opt,name=executed,proto3\" json:\"executed,omitempty\" yaml:\"executed\"`\n\t// true if executed successfully on this batch, false if failed\n\tSucceeded bool `protobuf:\"varint,4,opt,name=succeeded,proto3\" json:\"succeeded,omitempty\" yaml:\"succeeded\"`\n\t// true if ready to be deleted on kvstore, false if not ready to be deleted\n\tToBeDeleted bool `protobuf:\"varint,5,opt,name=to_be_deleted,json=toBeDeleted,proto3\" json:\"to_be_deleted,omitempty\" yaml:\"to_be_deleted\"`\n\t// swap orders are cancelled when current height is equal to or higher than\n\t// ExpiryHeight\n\tOrderExpiryHeight int64 `protobuf:\"varint,6,opt,name=order_expiry_height,json=orderExpiryHeight,proto3\" json:\"order_expiry_height,omitempty\" yaml:\"order_expiry_height\"`\n\t// offer coin exchanged until now\n\tExchangedOfferCoin types.Coin `protobuf:\"bytes,7,opt,name=exchanged_offer_coin,json=exchangedOfferCoin,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coin\" json:\"exchanged_offer_coin\" yaml:\"exchanged_offer_coin\"`\n\t// offer coin currently remaining to be exchanged\n\tRemainingOfferCoin types.Coin `protobuf:\"bytes,8,opt,name=remaining_offer_coin,json=remainingOfferCoin,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coin\" json:\"remaining_offer_coin\" yaml:\"remaining_offer_coin\"`\n\t// reserve fee for pays fee in half offer coin\n\tReservedOfferCoinFee types.Coin `protobuf:\"bytes,9,opt,name=reserved_offer_coin_fee,json=reservedOfferCoinFee,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coin\" json:\"reserved_offer_coin_fee\" yaml:\"reserved_offer_coin_fee\"`\n\t// MsgSwapWithinBatch\n\tMsg *MsgSwapWithinBatch `protobuf:\"bytes,10,opt,name=msg,proto3\" json:\"msg,omitempty\" yaml:\"msg\"`\n}\n\nfunc (m *SwapMsgState) Reset()         { *m = SwapMsgState{} }\nfunc (m *SwapMsgState) String() string { return proto.CompactTextString(m) }\nfunc (*SwapMsgState) ProtoMessage()    {}\nfunc (*SwapMsgState) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_67b6d59e96092d89, []int{7}\n}\n\nfunc (m *SwapMsgState) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *SwapMsgState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_SwapMsgState.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *SwapMsgState) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_SwapMsgState.Merge(m, src)\n}\n\nfunc (m *SwapMsgState) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *SwapMsgState) XXX_DiscardUnknown() {\n\txxx_messageInfo_SwapMsgState.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_SwapMsgState proto.InternalMessageInfo\n\nfunc init() {\n\tproto.RegisterType((*PoolType)(nil), \"cyber.liquidity.v1beta1.PoolType\")\n\tproto.RegisterType((*Params)(nil), \"cyber.liquidity.v1beta1.Params\")\n\tproto.RegisterType((*Pool)(nil), \"cyber.liquidity.v1beta1.Pool\")\n\tproto.RegisterType((*PoolMetadata)(nil), \"cyber.liquidity.v1beta1.PoolMetadata\")\n\tproto.RegisterType((*PoolBatch)(nil), \"cyber.liquidity.v1beta1.PoolBatch\")\n\tproto.RegisterType((*DepositMsgState)(nil), \"cyber.liquidity.v1beta1.DepositMsgState\")\n\tproto.RegisterType((*WithdrawMsgState)(nil), \"cyber.liquidity.v1beta1.WithdrawMsgState\")\n\tproto.RegisterType((*SwapMsgState)(nil), \"cyber.liquidity.v1beta1.SwapMsgState\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"cyber/liquidity/v1beta1/liquidity.proto\", fileDescriptor_67b6d59e96092d89)\n}\n\nvar fileDescriptor_67b6d59e96092d89 = []byte{\n\t// 1553 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x58, 0xcd, 0x6b, 0x1b, 0xc7,\n\t0x1b, 0xf6, 0x4a, 0xb2, 0x2d, 0x8d, 0xed, 0xc8, 0x5a, 0xcb, 0xb6, 0xec, 0xfc, 0xa2, 0x75, 0x36,\n\t0x90, 0x18, 0x42, 0x24, 0x92, 0xfc, 0x28, 0xc5, 0x14, 0x4a, 0x36, 0x4e, 0xb0, 0x69, 0xed, 0x38,\n\t0xe3, 0x40, 0x4a, 0x4a, 0xbb, 0xac, 0x76, 0x27, 0xab, 0x21, 0xda, 0x5d, 0x75, 0x77, 0x94, 0x48,\n\t0xf7, 0x1e, 0x7a, 0xec, 0x07, 0x85, 0x42, 0x28, 0x04, 0x7a, 0xeb, 0xb1, 0xf4, 0xd4, 0xbf, 0x20,\n\t0xc7, 0xd0, 0x53, 0xe9, 0x61, 0xdb, 0x26, 0x97, 0x92, 0x4b, 0xe9, 0xfe, 0x05, 0x65, 0x3e, 0xf6,\n\t0xc3, 0x92, 0xec, 0x44, 0xed, 0x35, 0x27, 0x4b, 0xef, 0xc7, 0x33, 0xcf, 0x3c, 0xef, 0xbc, 0xef,\n\t0x8c, 0x05, 0x2e, 0x98, 0x83, 0x16, 0xf2, 0x9b, 0x1d, 0xfc, 0x49, 0x0f, 0x5b, 0x98, 0x0c, 0x9a,\n\t0x0f, 0x2f, 0xb7, 0x10, 0x31, 0x2e, 0xa7, 0x96, 0x46, 0xd7, 0xf7, 0x88, 0x27, 0xaf, 0xb2, 0xc0,\n\t0x46, 0x6a, 0x16, 0x81, 0xeb, 0x1b, 0xc7, 0x21, 0x90, 0x3e, 0x4f, 0x5d, 0xaf, 0xda, 0x9e, 0xed,\n\t0xb1, 0x8f, 0x4d, 0xfa, 0x49, 0x58, 0xeb, 0xa6, 0x17, 0x38, 0x5e, 0xd0, 0x6c, 0x19, 0x01, 0x4a,\n\t0x72, 0x4c, 0x0f, 0xbb, 0xc2, 0xbf, 0xc6, 0xfd, 0x3a, 0x4f, 0xe4, 0x5f, 0xb8, 0x4b, 0xfd, 0x21,\n\t0x07, 0x8a, 0x07, 0x9e, 0xd7, 0xb9, 0x33, 0xe8, 0x22, 0xf9, 0x0c, 0xc8, 0x61, 0xab, 0x26, 0x6d,\n\t0x48, 0x9b, 0x0b, 0xda, 0x42, 0x14, 0x2a, 0xa5, 0x81, 0xe1, 0x74, 0xb6, 0x54, 0x6c, 0xa9, 0x30,\n\t0x87, 0x2d, 0xf9, 0x1c, 0x28, 0xb8, 0x86, 0x83, 0x6a, 0xb9, 0x0d, 0x69, 0xb3, 0xa4, 0x95, 0xa3,\n\t0x50, 0x99, 0xe3, 0x01, 0xd4, 0xaa, 0x42, 0xe6, 0x94, 0x0f, 0x40, 0xd5, 0xc1, 0xae, 0xee, 0xa3,\n\t0x00, 0xf9, 0x0f, 0x91, 0x4e, 0x59, 0xe8, 0x6e, 0xcf, 0xa9, 0xe5, 0x19, 0xaa, 0x12, 0x85, 0xca,\n\t0x69, 0x9e, 0x34, 0x2e, 0x4a, 0x85, 0x15, 0x07, 0xbb, 0x90, 0x5b, 0xaf, 0x7b, 0xd8, 0xdd, 0xef,\n\t0x39, 0x0c, 0xd1, 0xe8, 0x8f, 0x22, 0x16, 0x46, 0x10, 0xc7, 0x44, 0x51, 0x44, 0xa3, 0x3f, 0x84,\n\t0xf8, 0x36, 0x98, 0xb3, 0x50, 0x60, 0xfa, 0xb8, 0x4b, 0xb0, 0xe7, 0xd6, 0xa6, 0xd9, 0x7e, 0x56,\n\t0xa2, 0x50, 0x91, 0x39, 0x50, 0xc6, 0xa9, 0xc2, 0x6c, 0xe8, 0x56, 0xe1, 0xcf, 0x27, 0x8a, 0xa4,\n\t0x7e, 0x01, 0xc0, 0xcc, 0x81, 0xe1, 0x1b, 0x4e, 0x20, 0x7f, 0x08, 0x40, 0xd7, 0xf3, 0x3a, 0x3a,\n\t0x19, 0x74, 0x51, 0x50, 0x93, 0x36, 0xf2, 0x9b, 0x73, 0x57, 0xce, 0x36, 0x8e, 0x29, 0x70, 0x23,\n\t0x56, 0x5a, 0x5b, 0x7b, 0x1a, 0x2a, 0x53, 0x51, 0xa8, 0x54, 0xf8, 0x82, 0x29, 0x84, 0x0a, 0x4b,\n\t0x5d, 0x11, 0x14, 0xc8, 0x5f, 0x4b, 0x60, 0x95, 0xca, 0x84, 0x5d, 0x4c, 0x74, 0x0b, 0x75, 0xbd,\n\t0x00, 0x13, 0xdd, 0x70, 0xbc, 0x9e, 0x4b, 0x44, 0x11, 0x3e, 0xa6, 0x38, 0xbf, 0x86, 0xca, 0x79,\n\t0x1b, 0x93, 0x76, 0xaf, 0xd5, 0x30, 0x3d, 0x47, 0xd4, 0x57, 0xfc, 0xb9, 0x14, 0x58, 0x0f, 0x9a,\n\t0x0c, 0xb9, 0xb1, 0xeb, 0x92, 0x28, 0x54, 0xea, 0xa9, 0xfa, 0x63, 0x60, 0xd5, 0x9f, 0x7f, 0xbc,\n\t0x04, 0xc4, 0x01, 0xd9, 0x75, 0x09, 0xa4, 0xb5, 0xdc, 0x75, 0x31, 0xd9, 0xe6, 0x51, 0xd7, 0x58,\n\t0x90, 0xfc, 0xad, 0x04, 0xd6, 0x59, 0x32, 0xe3, 0xcd, 0xa4, 0x76, 0xb0, 0x9b, 0x50, 0xcb, 0x33,\n\t0x6a, 0xc6, 0xc4, 0xd4, 0xce, 0x8a, 0xe3, 0x76, 0x2c, 0xf2, 0x30, 0xbb, 0x15, 0x1a, 0x4a, 0x35,\n\t0xa5, 0x85, 0xdd, 0xc3, 0x6e, 0xcc, 0x8f, 0xe9, 0x36, 0x7c, 0x18, 0x04, 0xb9, 0xc2, 0x7f, 0xd4,\n\t0x6d, 0x3c, 0xec, 0xa8, 0x6e, 0x47, 0x0e, 0x9d, 0xe0, 0xf5, 0x95, 0x04, 0x2a, 0x7c, 0x63, 0x3e,\n\t0x32, 0xe8, 0x79, 0xd2, 0xef, 0x23, 0x54, 0x9b, 0x66, 0x87, 0x66, 0xad, 0x21, 0xd2, 0x69, 0x13,\n\t0x27, 0x07, 0x86, 0x26, 0x6b, 0xef, 0x8b, 0xc3, 0x52, 0xcb, 0x1c, 0x96, 0x2c, 0x82, 0xfa, 0xfd,\n\t0x6f, 0xca, 0xe6, 0x6b, 0x6c, 0x84, 0x82, 0x05, 0xb0, 0x4c, 0xf3, 0xaf, 0x8b, 0xf4, 0x9b, 0x08,\n\t0xc9, 0x7d, 0xb0, 0x10, 0x3c, 0x32, 0xba, 0x14, 0x49, 0xf7, 0x0d, 0x82, 0x6a, 0x33, 0x4c, 0xa2,\n\t0x3b, 0x13, 0x48, 0xb4, 0x8d, 0xcc, 0x28, 0x54, 0xaa, 0x9c, 0xdf, 0x11, 0xb0, 0xac, 0x30, 0xdb,\n\t0xc8, 0x84, 0x73, 0xd4, 0x7b, 0x13, 0x21, 0x68, 0x10, 0x24, 0x7f, 0x2a, 0x81, 0xca, 0x23, 0x4c,\n\t0xda, 0x96, 0x6f, 0x3c, 0x4a, 0x97, 0x9f, 0x65, 0xcb, 0x7f, 0x30, 0xf1, 0xf2, 0x42, 0x9e, 0x11,\n\t0xc0, 0x61, 0x0a, 0xe5, 0x38, 0x22, 0xa6, 0xf1, 0xa5, 0x04, 0x56, 0x68, 0x5d, 0x3d, 0xdf, 0x42,\n\t0xbe, 0x28, 0x28, 0xcd, 0xc4, 0x5e, 0xad, 0xc8, 0xb8, 0x7c, 0x34, 0x31, 0x97, 0x33, 0xe9, 0x69,\n\t0x19, 0x45, 0x1d, 0x26, 0xb4, 0xe4, 0x18, 0xfd, 0x5b, 0x34, 0x8a, 0x1f, 0x13, 0x48, 0x63, 0xe4,\n\t0x1d, 0x50, 0xe9, 0xd1, 0x46, 0x68, 0x19, 0xc4, 0x6c, 0xeb, 0x6d, 0x84, 0xed, 0x36, 0xa9, 0x95,\n\t0xd8, 0xc8, 0xfb, 0x5f, 0xba, 0xd9, 0x91, 0x10, 0x15, 0x96, 0xa9, 0x4d, 0xa3, 0xa6, 0x1d, 0x66,\n\t0x91, 0xef, 0x81, 0x55, 0x13, 0xfb, 0x66, 0x8f, 0x46, 0xfa, 0xc8, 0x78, 0x80, 0x7c, 0x1d, 0xb9,\n\t0x46, 0xab, 0x83, 0xac, 0x1a, 0xd8, 0x90, 0x36, 0x8b, 0x9a, 0x9a, 0x1e, 0xef, 0x63, 0x02, 0x55,\n\t0xb8, 0x2c, 0x3c, 0x1a, 0x77, 0xdc, 0xe0, 0xf6, 0xad, 0xe2, 0x37, 0x4f, 0x94, 0x29, 0x36, 0x13,\n\t0x5f, 0xe6, 0x40, 0x81, 0xb6, 0xa2, 0x7c, 0x2e, 0xb9, 0x44, 0x0a, 0xda, 0xd2, 0xcb, 0x50, 0xc9,\n\t0x61, 0x6b, 0xf4, 0x2a, 0xb9, 0x08, 0x66, 0xa9, 0x5c, 0x3a, 0xb6, 0xd8, 0x20, 0x5b, 0xd0, 0xe4,\n\t0x28, 0x54, 0x4e, 0xf1, 0x18, 0xe1, 0x50, 0xe1, 0x0c, 0xfd, 0xb4, 0x6b, 0xc9, 0xfb, 0x60, 0xe9,\n\t0x48, 0xcb, 0x59, 0xc8, 0xf5, 0x9c, 0xa0, 0x96, 0xdf, 0xc8, 0x6f, 0x96, 0xb4, 0x7a, 0x14, 0x2a,\n\t0xeb, 0x3c, 0x71, 0x4c, 0x90, 0x0a, 0x2b, 0x7e, 0xda, 0x86, 0xdb, 0xcc, 0x26, 0xfb, 0x60, 0x35,\n\t0x0e, 0x35, 0x4c, 0x93, 0xd5, 0xc5, 0xb0, 0x2c, 0x1f, 0x05, 0x81, 0x98, 0x0e, 0x5b, 0xa9, 0x20,\n\t0xc7, 0x04, 0xd2, 0x12, 0x56, 0x45, 0x09, 0xaf, 0x71, 0xd3, 0x21, 0xf1, 0xb1, 0x6b, 0xc3, 0x65,\n\t0x91, 0x71, 0x8d, 0x27, 0x08, 0xa7, 0xac, 0x81, 0x72, 0x3a, 0xd2, 0x18, 0x37, 0x71, 0xed, 0xac,\n\t0x47, 0xa1, 0xb2, 0x92, 0x6d, 0xec, 0x24, 0x40, 0x85, 0x0b, 0x5d, 0x31, 0xdb, 0x18, 0x71, 0x26,\n\t0xb6, 0xc4, 0xc4, 0xfe, 0x3b, 0x07, 0xe6, 0xa9, 0xd8, 0x7b, 0x88, 0x18, 0x96, 0x41, 0x0c, 0xf9,\n\t0x2d, 0x30, 0xcb, 0xb2, 0x13, 0xe5, 0xcf, 0xbc, 0x0c, 0x95, 0xd8, 0x94, 0x4a, 0x2b, 0x0c, 0x2a,\n\t0x9c, 0xa1, 0x9f, 0x76, 0x2d, 0x3a, 0x91, 0x56, 0xd2, 0x65, 0x89, 0x47, 0x8c, 0x8e, 0x1e, 0xf4,\n\t0xba, 0xdd, 0xce, 0x80, 0xd5, 0xe5, 0xc4, 0xb1, 0x74, 0x5d, 0x8c, 0xa5, 0xc5, 0x21, 0xf6, 0x74,\n\t0x1c, 0x5d, 0x78, 0xcd, 0x71, 0x04, 0x97, 0xe2, 0x2d, 0xde, 0xa1, 0x6b, 0x1f, 0xb2, 0xa5, 0xe5,\n\t0xcf, 0x24, 0xb0, 0x90, 0x2d, 0x26, 0xaf, 0xf5, 0x89, 0x64, 0x76, 0x04, 0x99, 0x6a, 0x7c, 0x83,\n\t0xf3, 0x5b, 0x8d, 0x65, 0x4f, 0x36, 0x1f, 0xe7, 0x33, 0x07, 0x26, 0xc8, 0x68, 0xfe, 0x53, 0x1e,\n\t0x94, 0xa8, 0xe6, 0xac, 0xb5, 0xfe, 0xb5, 0xe0, 0xe7, 0xc1, 0x34, 0x76, 0x2d, 0xd4, 0x67, 0xf2,\n\t0x16, 0xb4, 0xc5, 0x28, 0x54, 0xe6, 0xe3, 0x6b, 0xcf, 0x42, 0x7d, 0x15, 0x72, 0xb7, 0xbc, 0x05,\n\t0xe6, 0x5b, 0xc8, 0xc6, 0x6e, 0xdc, 0xf9, 0xf4, 0x4e, 0xcd, 0x6b, 0xab, 0x51, 0xa8, 0x2c, 0xf1,\n\t0xf0, 0xac, 0x57, 0x85, 0x73, 0xec, 0xab, 0x68, 0xf8, 0x1d, 0x50, 0x89, 0xf7, 0xef, 0x04, 0xb6,\n\t0xce, 0xd7, 0x2b, 0xb0, 0xf5, 0x32, 0xa3, 0x63, 0x24, 0x44, 0x85, 0x65, 0x61, 0xdb, 0x0b, 0xec,\n\t0x5d, 0xc6, 0xe2, 0x3d, 0x20, 0x27, 0xe3, 0x34, 0x85, 0x9a, 0xe6, 0x1b, 0x8e, 0x42, 0x65, 0x6d,\n\t0x68, 0xe4, 0x66, 0xb0, 0x16, 0x63, 0x63, 0x02, 0xf6, 0x2e, 0x38, 0xc5, 0xae, 0x86, 0x14, 0x68,\n\t0x86, 0x01, 0xad, 0x45, 0xa1, 0xb2, 0x9c, 0xb9, 0x3a, 0x32, 0x20, 0xf3, 0xd4, 0x90, 0x00, 0x34,\n\t0x41, 0x11, 0xf5, 0x91, 0xd9, 0x23, 0xc8, 0x62, 0x97, 0x44, 0x51, 0x5b, 0x8a, 0x42, 0xa5, 0xcc,\n\t0x53, 0x63, 0x8f, 0x0a, 0x93, 0xa0, 0x4c, 0xf1, 0xfe, 0xca, 0x81, 0xf2, 0x76, 0xb2, 0xb9, 0x43,\n\t0x42, 0xc7, 0xfe, 0xff, 0x01, 0xa0, 0x4b, 0x09, 0x81, 0x25, 0x26, 0xf0, 0x72, 0xfa, 0x26, 0x4b,\n\t0x7d, 0x2a, 0x2c, 0x39, 0x81, 0x2d, 0xc4, 0xbd, 0x0c, 0x4a, 0xe9, 0x06, 0x78, 0x11, 0xab, 0x69,\n\t0x13, 0x64, 0xb8, 0x17, 0x9d, 0x71, 0xbc, 0xf3, 0xaf, 0xc1, 0x5b, 0xbe, 0x02, 0x4a, 0x41, 0xcf,\n\t0x34, 0x11, 0xb2, 0x90, 0xc5, 0x0a, 0x57, 0xcc, 0xae, 0x91, 0xb8, 0x54, 0x98, 0x86, 0xc9, 0xef,\n\t0x80, 0x05, 0xe2, 0xe9, 0x2d, 0xa4, 0x5b, 0xa8, 0x83, 0xe8, 0x4a, 0xd3, 0x2c, 0xaf, 0x96, 0xf6,\n\t0xc4, 0x11, 0xb7, 0x0a, 0xe7, 0x88, 0xa7, 0xa1, 0x6d, 0xfe, 0x4d, 0x3e, 0x00, 0x79, 0x27, 0xb0,\n\t0x59, 0x41, 0xe6, 0xae, 0x34, 0x8e, 0x7d, 0xbf, 0xee, 0x05, 0xb6, 0x50, 0xf1, 0x2e, 0x26, 0x6d,\n\t0xec, 0xb2, 0x5e, 0xd0, 0x4e, 0x45, 0xa1, 0x02, 0x92, 0xfd, 0xab, 0x90, 0x42, 0xd1, 0x11, 0xb5,\n\t0x78, 0x37, 0x3d, 0x02, 0x6f, 0x24, 0x1f, 0x96, 0xfc, 0x76, 0x56, 0xf2, 0xe6, 0x49, 0x92, 0xc7,\n\t0x32, 0xbe, 0x52, 0xf3, 0xc7, 0xb3, 0x60, 0xfe, 0x90, 0x77, 0xcc, 0x1b, 0xbd, 0x87, 0xf5, 0xde,\n\t0x07, 0x4b, 0xfc, 0x29, 0x86, 0xfa, 0x5d, 0xec, 0x0f, 0x62, 0x51, 0x66, 0x98, 0x28, 0x99, 0x57,\n\t0xc4, 0x98, 0x20, 0x15, 0x56, 0x98, 0xf5, 0x06, 0x33, 0x0a, 0x95, 0x1e, 0x4b, 0xa0, 0x8a, 0xfa,\n\t0x66, 0xdb, 0x70, 0x6d, 0x64, 0xe9, 0xde, 0xfd, 0xfb, 0xc8, 0x67, 0xd7, 0x0d, 0x1b, 0x4d, 0x27,\n\t0xde, 0x55, 0xfb, 0xe2, 0xae, 0x3a, 0x1d, 0xcb, 0x33, 0x0a, 0x32, 0xd1, 0x1d, 0x2a, 0x27, 0x08,\n\t0xb7, 0x28, 0x00, 0xb5, 0x31, 0x76, 0x3e, 0x72, 0x0c, 0xec, 0x62, 0xd7, 0xce, 0xb2, 0x2b, 0x4e,\n\t0xc8, 0x6e, 0x1c, 0xc8, 0x64, 0xec, 0x12, 0x84, 0x94, 0xdd, 0x77, 0x52, 0xf2, 0x04, 0xcb, 0xee,\n\t0x9a, 0xfd, 0x3b, 0x54, 0x7a, 0x15, 0xc1, 0xdb, 0x82, 0xe0, 0xd1, 0x17, 0xda, 0x30, 0xce, 0x44,\n\t0x1c, 0xab, 0x31, 0x48, 0x42, 0x91, 0xfe, 0x63, 0xb4, 0xc7, 0x3b, 0x14, 0x30, 0x42, 0x17, 0x4f,\n\t0xea, 0x50, 0xda, 0x74, 0xaf, 0xea, 0x4e, 0xed, 0xf6, 0xd3, 0x3f, 0xea, 0x53, 0x4f, 0x9f, 0xd7,\n\t0xa5, 0x67, 0xcf, 0xeb, 0xd2, 0xef, 0xcf, 0xeb, 0xd2, 0xe7, 0x2f, 0xea, 0x53, 0xcf, 0x5e, 0xd4,\n\t0xa7, 0x7e, 0x79, 0x51, 0x9f, 0xba, 0x77, 0x35, 0xcb, 0x95, 0xae, 0x64, 0x7a, 0xae, 0x4d, 0x9f,\n\t0x8e, 0x4d, 0xdb, 0xbb, 0xc4, 0x7f, 0x17, 0xea, 0x67, 0x7e, 0x19, 0x62, 0xe4, 0x5b, 0x33, 0xec,\n\t0x47, 0x9c, 0xab, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xe2, 0x7c, 0x06, 0x55, 0x7b, 0x12, 0x00,\n\t0x00,\n}\n\nfunc (this *PoolType) Equal(that interface{}) bool {\n\tif that == nil {\n\t\treturn this == nil\n\t}\n\n\tthat1, ok := that.(*PoolType)\n\tif !ok {\n\t\tthat2, ok := that.(PoolType)\n\t\tif ok {\n\t\t\tthat1 = &that2\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\tif that1 == nil {\n\t\treturn this == nil\n\t} else if this == nil {\n\t\treturn false\n\t}\n\tif this.Id != that1.Id {\n\t\treturn false\n\t}\n\tif this.Name != that1.Name {\n\t\treturn false\n\t}\n\tif this.MinReserveCoinNum != that1.MinReserveCoinNum {\n\t\treturn false\n\t}\n\tif this.MaxReserveCoinNum != that1.MaxReserveCoinNum {\n\t\treturn false\n\t}\n\tif this.Description != that1.Description {\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc (this *Params) Equal(that interface{}) bool {\n\tif that == nil {\n\t\treturn this == nil\n\t}\n\n\tthat1, ok := that.(*Params)\n\tif !ok {\n\t\tthat2, ok := that.(Params)\n\t\tif ok {\n\t\t\tthat1 = &that2\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\tif that1 == nil {\n\t\treturn this == nil\n\t} else if this == nil {\n\t\treturn false\n\t}\n\tif len(this.PoolTypes) != len(that1.PoolTypes) {\n\t\treturn false\n\t}\n\tfor i := range this.PoolTypes {\n\t\tif !this.PoolTypes[i].Equal(&that1.PoolTypes[i]) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif !this.MinInitDepositAmount.Equal(that1.MinInitDepositAmount) {\n\t\treturn false\n\t}\n\tif !this.InitPoolCoinMintAmount.Equal(that1.InitPoolCoinMintAmount) {\n\t\treturn false\n\t}\n\tif !this.MaxReserveCoinAmount.Equal(that1.MaxReserveCoinAmount) {\n\t\treturn false\n\t}\n\tif len(this.PoolCreationFee) != len(that1.PoolCreationFee) {\n\t\treturn false\n\t}\n\tfor i := range this.PoolCreationFee {\n\t\tif !this.PoolCreationFee[i].Equal(&that1.PoolCreationFee[i]) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif !this.SwapFeeRate.Equal(that1.SwapFeeRate) {\n\t\treturn false\n\t}\n\tif !this.WithdrawFeeRate.Equal(that1.WithdrawFeeRate) {\n\t\treturn false\n\t}\n\tif !this.MaxOrderAmountRatio.Equal(that1.MaxOrderAmountRatio) {\n\t\treturn false\n\t}\n\tif this.UnitBatchHeight != that1.UnitBatchHeight {\n\t\treturn false\n\t}\n\tif this.CircuitBreakerEnabled != that1.CircuitBreakerEnabled {\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc (this *Pool) Equal(that interface{}) bool {\n\tif that == nil {\n\t\treturn this == nil\n\t}\n\n\tthat1, ok := that.(*Pool)\n\tif !ok {\n\t\tthat2, ok := that.(Pool)\n\t\tif ok {\n\t\t\tthat1 = &that2\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\tif that1 == nil {\n\t\treturn this == nil\n\t} else if this == nil {\n\t\treturn false\n\t}\n\tif this.Id != that1.Id {\n\t\treturn false\n\t}\n\tif this.TypeId != that1.TypeId {\n\t\treturn false\n\t}\n\tif len(this.ReserveCoinDenoms) != len(that1.ReserveCoinDenoms) {\n\t\treturn false\n\t}\n\tfor i := range this.ReserveCoinDenoms {\n\t\tif this.ReserveCoinDenoms[i] != that1.ReserveCoinDenoms[i] {\n\t\t\treturn false\n\t\t}\n\t}\n\tif this.ReserveAccountAddress != that1.ReserveAccountAddress {\n\t\treturn false\n\t}\n\tif this.PoolCoinDenom != that1.PoolCoinDenom {\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc (this *PoolMetadata) Equal(that interface{}) bool {\n\tif that == nil {\n\t\treturn this == nil\n\t}\n\n\tthat1, ok := that.(*PoolMetadata)\n\tif !ok {\n\t\tthat2, ok := that.(PoolMetadata)\n\t\tif ok {\n\t\t\tthat1 = &that2\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\tif that1 == nil {\n\t\treturn this == nil\n\t} else if this == nil {\n\t\treturn false\n\t}\n\tif this.PoolId != that1.PoolId {\n\t\treturn false\n\t}\n\tif !this.PoolCoinTotalSupply.Equal(&that1.PoolCoinTotalSupply) {\n\t\treturn false\n\t}\n\tif len(this.ReserveCoins) != len(that1.ReserveCoins) {\n\t\treturn false\n\t}\n\tfor i := range this.ReserveCoins {\n\t\tif !this.ReserveCoins[i].Equal(&that1.ReserveCoins[i]) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc (this *PoolBatch) Equal(that interface{}) bool {\n\tif that == nil {\n\t\treturn this == nil\n\t}\n\n\tthat1, ok := that.(*PoolBatch)\n\tif !ok {\n\t\tthat2, ok := that.(PoolBatch)\n\t\tif ok {\n\t\t\tthat1 = &that2\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\tif that1 == nil {\n\t\treturn this == nil\n\t} else if this == nil {\n\t\treturn false\n\t}\n\tif this.PoolId != that1.PoolId {\n\t\treturn false\n\t}\n\tif this.Index != that1.Index {\n\t\treturn false\n\t}\n\tif this.BeginHeight != that1.BeginHeight {\n\t\treturn false\n\t}\n\tif this.DepositMsgIndex != that1.DepositMsgIndex {\n\t\treturn false\n\t}\n\tif this.WithdrawMsgIndex != that1.WithdrawMsgIndex {\n\t\treturn false\n\t}\n\tif this.SwapMsgIndex != that1.SwapMsgIndex {\n\t\treturn false\n\t}\n\tif this.Executed != that1.Executed {\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc (m *PoolType) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *PoolType) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *PoolType) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Description) > 0 {\n\t\ti -= len(m.Description)\n\t\tcopy(dAtA[i:], m.Description)\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(len(m.Description)))\n\t\ti--\n\t\tdAtA[i] = 0x2a\n\t}\n\tif m.MaxReserveCoinNum != 0 {\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(m.MaxReserveCoinNum))\n\t\ti--\n\t\tdAtA[i] = 0x20\n\t}\n\tif m.MinReserveCoinNum != 0 {\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(m.MinReserveCoinNum))\n\t\ti--\n\t\tdAtA[i] = 0x18\n\t}\n\tif len(m.Name) > 0 {\n\t\ti -= len(m.Name)\n\t\tcopy(dAtA[i:], m.Name)\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(len(m.Name)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif m.Id != 0 {\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(m.Id))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *Params) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *Params) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.CircuitBreakerEnabled {\n\t\ti--\n\t\tif m.CircuitBreakerEnabled {\n\t\t\tdAtA[i] = 1\n\t\t} else {\n\t\t\tdAtA[i] = 0\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x50\n\t}\n\tif m.UnitBatchHeight != 0 {\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(m.UnitBatchHeight))\n\t\ti--\n\t\tdAtA[i] = 0x48\n\t}\n\t{\n\t\tsize := m.MaxOrderAmountRatio.Size()\n\t\ti -= size\n\t\tif _, err := m.MaxOrderAmountRatio.MarshalTo(dAtA[i:]); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x42\n\t{\n\t\tsize := m.WithdrawFeeRate.Size()\n\t\ti -= size\n\t\tif _, err := m.WithdrawFeeRate.MarshalTo(dAtA[i:]); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x3a\n\t{\n\t\tsize := m.SwapFeeRate.Size()\n\t\ti -= size\n\t\tif _, err := m.SwapFeeRate.MarshalTo(dAtA[i:]); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x32\n\tif len(m.PoolCreationFee) > 0 {\n\t\tfor iNdEx := len(m.PoolCreationFee) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.PoolCreationFee[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintLiquidity(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0x2a\n\t\t}\n\t}\n\t{\n\t\tsize := m.MaxReserveCoinAmount.Size()\n\t\ti -= size\n\t\tif _, err := m.MaxReserveCoinAmount.MarshalTo(dAtA[i:]); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x22\n\t{\n\t\tsize := m.InitPoolCoinMintAmount.Size()\n\t\ti -= size\n\t\tif _, err := m.InitPoolCoinMintAmount.MarshalTo(dAtA[i:]); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x1a\n\t{\n\t\tsize := m.MinInitDepositAmount.Size()\n\t\ti -= size\n\t\tif _, err := m.MinInitDepositAmount.MarshalTo(dAtA[i:]); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x12\n\tif len(m.PoolTypes) > 0 {\n\t\tfor iNdEx := len(m.PoolTypes) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.PoolTypes[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintLiquidity(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0xa\n\t\t}\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *Pool) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *Pool) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *Pool) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.PoolCoinDenom) > 0 {\n\t\ti -= len(m.PoolCoinDenom)\n\t\tcopy(dAtA[i:], m.PoolCoinDenom)\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(len(m.PoolCoinDenom)))\n\t\ti--\n\t\tdAtA[i] = 0x2a\n\t}\n\tif len(m.ReserveAccountAddress) > 0 {\n\t\ti -= len(m.ReserveAccountAddress)\n\t\tcopy(dAtA[i:], m.ReserveAccountAddress)\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(len(m.ReserveAccountAddress)))\n\t\ti--\n\t\tdAtA[i] = 0x22\n\t}\n\tif len(m.ReserveCoinDenoms) > 0 {\n\t\tfor iNdEx := len(m.ReserveCoinDenoms) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\ti -= len(m.ReserveCoinDenoms[iNdEx])\n\t\t\tcopy(dAtA[i:], m.ReserveCoinDenoms[iNdEx])\n\t\t\ti = encodeVarintLiquidity(dAtA, i, uint64(len(m.ReserveCoinDenoms[iNdEx])))\n\t\t\ti--\n\t\t\tdAtA[i] = 0x1a\n\t\t}\n\t}\n\tif m.TypeId != 0 {\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(m.TypeId))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif m.Id != 0 {\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(m.Id))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *PoolMetadata) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *PoolMetadata) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *PoolMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.ReserveCoins) > 0 {\n\t\tfor iNdEx := len(m.ReserveCoins) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.ReserveCoins[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintLiquidity(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0x1a\n\t\t}\n\t}\n\t{\n\t\tsize, err := m.PoolCoinTotalSupply.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x12\n\tif m.PoolId != 0 {\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(m.PoolId))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *PoolBatch) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *PoolBatch) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *PoolBatch) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Executed {\n\t\ti--\n\t\tif m.Executed {\n\t\t\tdAtA[i] = 1\n\t\t} else {\n\t\t\tdAtA[i] = 0\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x38\n\t}\n\tif m.SwapMsgIndex != 0 {\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(m.SwapMsgIndex))\n\t\ti--\n\t\tdAtA[i] = 0x30\n\t}\n\tif m.WithdrawMsgIndex != 0 {\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(m.WithdrawMsgIndex))\n\t\ti--\n\t\tdAtA[i] = 0x28\n\t}\n\tif m.DepositMsgIndex != 0 {\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(m.DepositMsgIndex))\n\t\ti--\n\t\tdAtA[i] = 0x20\n\t}\n\tif m.BeginHeight != 0 {\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(m.BeginHeight))\n\t\ti--\n\t\tdAtA[i] = 0x18\n\t}\n\tif m.Index != 0 {\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(m.Index))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif m.PoolId != 0 {\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(m.PoolId))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *DepositMsgState) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *DepositMsgState) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *DepositMsgState) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Msg != nil {\n\t\t{\n\t\t\tsize, err := m.Msg.MarshalToSizedBuffer(dAtA[:i])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\ti -= size\n\t\t\ti = encodeVarintLiquidity(dAtA, i, uint64(size))\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x32\n\t}\n\tif m.ToBeDeleted {\n\t\ti--\n\t\tif m.ToBeDeleted {\n\t\t\tdAtA[i] = 1\n\t\t} else {\n\t\t\tdAtA[i] = 0\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x28\n\t}\n\tif m.Succeeded {\n\t\ti--\n\t\tif m.Succeeded {\n\t\t\tdAtA[i] = 1\n\t\t} else {\n\t\t\tdAtA[i] = 0\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x20\n\t}\n\tif m.Executed {\n\t\ti--\n\t\tif m.Executed {\n\t\t\tdAtA[i] = 1\n\t\t} else {\n\t\t\tdAtA[i] = 0\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x18\n\t}\n\tif m.MsgIndex != 0 {\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(m.MsgIndex))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif m.MsgHeight != 0 {\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(m.MsgHeight))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *WithdrawMsgState) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *WithdrawMsgState) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *WithdrawMsgState) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Msg != nil {\n\t\t{\n\t\t\tsize, err := m.Msg.MarshalToSizedBuffer(dAtA[:i])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\ti -= size\n\t\t\ti = encodeVarintLiquidity(dAtA, i, uint64(size))\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x32\n\t}\n\tif m.ToBeDeleted {\n\t\ti--\n\t\tif m.ToBeDeleted {\n\t\t\tdAtA[i] = 1\n\t\t} else {\n\t\t\tdAtA[i] = 0\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x28\n\t}\n\tif m.Succeeded {\n\t\ti--\n\t\tif m.Succeeded {\n\t\t\tdAtA[i] = 1\n\t\t} else {\n\t\t\tdAtA[i] = 0\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x20\n\t}\n\tif m.Executed {\n\t\ti--\n\t\tif m.Executed {\n\t\t\tdAtA[i] = 1\n\t\t} else {\n\t\t\tdAtA[i] = 0\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x18\n\t}\n\tif m.MsgIndex != 0 {\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(m.MsgIndex))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif m.MsgHeight != 0 {\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(m.MsgHeight))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *SwapMsgState) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *SwapMsgState) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *SwapMsgState) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Msg != nil {\n\t\t{\n\t\t\tsize, err := m.Msg.MarshalToSizedBuffer(dAtA[:i])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\ti -= size\n\t\t\ti = encodeVarintLiquidity(dAtA, i, uint64(size))\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x52\n\t}\n\t{\n\t\tsize, err := m.ReservedOfferCoinFee.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x4a\n\t{\n\t\tsize, err := m.RemainingOfferCoin.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x42\n\t{\n\t\tsize, err := m.ExchangedOfferCoin.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x3a\n\tif m.OrderExpiryHeight != 0 {\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(m.OrderExpiryHeight))\n\t\ti--\n\t\tdAtA[i] = 0x30\n\t}\n\tif m.ToBeDeleted {\n\t\ti--\n\t\tif m.ToBeDeleted {\n\t\t\tdAtA[i] = 1\n\t\t} else {\n\t\t\tdAtA[i] = 0\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x28\n\t}\n\tif m.Succeeded {\n\t\ti--\n\t\tif m.Succeeded {\n\t\t\tdAtA[i] = 1\n\t\t} else {\n\t\t\tdAtA[i] = 0\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x20\n\t}\n\tif m.Executed {\n\t\ti--\n\t\tif m.Executed {\n\t\t\tdAtA[i] = 1\n\t\t} else {\n\t\t\tdAtA[i] = 0\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x18\n\t}\n\tif m.MsgIndex != 0 {\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(m.MsgIndex))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif m.MsgHeight != 0 {\n\t\ti = encodeVarintLiquidity(dAtA, i, uint64(m.MsgHeight))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintLiquidity(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovLiquidity(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *PoolType) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.Id != 0 {\n\t\tn += 1 + sovLiquidity(uint64(m.Id))\n\t}\n\tl = len(m.Name)\n\tif l > 0 {\n\t\tn += 1 + l + sovLiquidity(uint64(l))\n\t}\n\tif m.MinReserveCoinNum != 0 {\n\t\tn += 1 + sovLiquidity(uint64(m.MinReserveCoinNum))\n\t}\n\tif m.MaxReserveCoinNum != 0 {\n\t\tn += 1 + sovLiquidity(uint64(m.MaxReserveCoinNum))\n\t}\n\tl = len(m.Description)\n\tif l > 0 {\n\t\tn += 1 + l + sovLiquidity(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *Params) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif len(m.PoolTypes) > 0 {\n\t\tfor _, e := range m.PoolTypes {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovLiquidity(uint64(l))\n\t\t}\n\t}\n\tl = m.MinInitDepositAmount.Size()\n\tn += 1 + l + sovLiquidity(uint64(l))\n\tl = m.InitPoolCoinMintAmount.Size()\n\tn += 1 + l + sovLiquidity(uint64(l))\n\tl = m.MaxReserveCoinAmount.Size()\n\tn += 1 + l + sovLiquidity(uint64(l))\n\tif len(m.PoolCreationFee) > 0 {\n\t\tfor _, e := range m.PoolCreationFee {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovLiquidity(uint64(l))\n\t\t}\n\t}\n\tl = m.SwapFeeRate.Size()\n\tn += 1 + l + sovLiquidity(uint64(l))\n\tl = m.WithdrawFeeRate.Size()\n\tn += 1 + l + sovLiquidity(uint64(l))\n\tl = m.MaxOrderAmountRatio.Size()\n\tn += 1 + l + sovLiquidity(uint64(l))\n\tif m.UnitBatchHeight != 0 {\n\t\tn += 1 + sovLiquidity(uint64(m.UnitBatchHeight))\n\t}\n\tif m.CircuitBreakerEnabled {\n\t\tn += 2\n\t}\n\treturn n\n}\n\nfunc (m *Pool) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.Id != 0 {\n\t\tn += 1 + sovLiquidity(uint64(m.Id))\n\t}\n\tif m.TypeId != 0 {\n\t\tn += 1 + sovLiquidity(uint64(m.TypeId))\n\t}\n\tif len(m.ReserveCoinDenoms) > 0 {\n\t\tfor _, s := range m.ReserveCoinDenoms {\n\t\t\tl = len(s)\n\t\t\tn += 1 + l + sovLiquidity(uint64(l))\n\t\t}\n\t}\n\tl = len(m.ReserveAccountAddress)\n\tif l > 0 {\n\t\tn += 1 + l + sovLiquidity(uint64(l))\n\t}\n\tl = len(m.PoolCoinDenom)\n\tif l > 0 {\n\t\tn += 1 + l + sovLiquidity(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *PoolMetadata) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.PoolId != 0 {\n\t\tn += 1 + sovLiquidity(uint64(m.PoolId))\n\t}\n\tl = m.PoolCoinTotalSupply.Size()\n\tn += 1 + l + sovLiquidity(uint64(l))\n\tif len(m.ReserveCoins) > 0 {\n\t\tfor _, e := range m.ReserveCoins {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovLiquidity(uint64(l))\n\t\t}\n\t}\n\treturn n\n}\n\nfunc (m *PoolBatch) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.PoolId != 0 {\n\t\tn += 1 + sovLiquidity(uint64(m.PoolId))\n\t}\n\tif m.Index != 0 {\n\t\tn += 1 + sovLiquidity(uint64(m.Index))\n\t}\n\tif m.BeginHeight != 0 {\n\t\tn += 1 + sovLiquidity(uint64(m.BeginHeight))\n\t}\n\tif m.DepositMsgIndex != 0 {\n\t\tn += 1 + sovLiquidity(uint64(m.DepositMsgIndex))\n\t}\n\tif m.WithdrawMsgIndex != 0 {\n\t\tn += 1 + sovLiquidity(uint64(m.WithdrawMsgIndex))\n\t}\n\tif m.SwapMsgIndex != 0 {\n\t\tn += 1 + sovLiquidity(uint64(m.SwapMsgIndex))\n\t}\n\tif m.Executed {\n\t\tn += 2\n\t}\n\treturn n\n}\n\nfunc (m *DepositMsgState) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.MsgHeight != 0 {\n\t\tn += 1 + sovLiquidity(uint64(m.MsgHeight))\n\t}\n\tif m.MsgIndex != 0 {\n\t\tn += 1 + sovLiquidity(uint64(m.MsgIndex))\n\t}\n\tif m.Executed {\n\t\tn += 2\n\t}\n\tif m.Succeeded {\n\t\tn += 2\n\t}\n\tif m.ToBeDeleted {\n\t\tn += 2\n\t}\n\tif m.Msg != nil {\n\t\tl = m.Msg.Size()\n\t\tn += 1 + l + sovLiquidity(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *WithdrawMsgState) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.MsgHeight != 0 {\n\t\tn += 1 + sovLiquidity(uint64(m.MsgHeight))\n\t}\n\tif m.MsgIndex != 0 {\n\t\tn += 1 + sovLiquidity(uint64(m.MsgIndex))\n\t}\n\tif m.Executed {\n\t\tn += 2\n\t}\n\tif m.Succeeded {\n\t\tn += 2\n\t}\n\tif m.ToBeDeleted {\n\t\tn += 2\n\t}\n\tif m.Msg != nil {\n\t\tl = m.Msg.Size()\n\t\tn += 1 + l + sovLiquidity(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *SwapMsgState) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.MsgHeight != 0 {\n\t\tn += 1 + sovLiquidity(uint64(m.MsgHeight))\n\t}\n\tif m.MsgIndex != 0 {\n\t\tn += 1 + sovLiquidity(uint64(m.MsgIndex))\n\t}\n\tif m.Executed {\n\t\tn += 2\n\t}\n\tif m.Succeeded {\n\t\tn += 2\n\t}\n\tif m.ToBeDeleted {\n\t\tn += 2\n\t}\n\tif m.OrderExpiryHeight != 0 {\n\t\tn += 1 + sovLiquidity(uint64(m.OrderExpiryHeight))\n\t}\n\tl = m.ExchangedOfferCoin.Size()\n\tn += 1 + l + sovLiquidity(uint64(l))\n\tl = m.RemainingOfferCoin.Size()\n\tn += 1 + l + sovLiquidity(uint64(l))\n\tl = m.ReservedOfferCoinFee.Size()\n\tn += 1 + l + sovLiquidity(uint64(l))\n\tif m.Msg != nil {\n\t\tl = m.Msg.Size()\n\t\tn += 1 + l + sovLiquidity(uint64(l))\n\t}\n\treturn n\n}\n\nfunc sovLiquidity(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozLiquidity(x uint64) (n int) {\n\treturn sovLiquidity(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *PoolType) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: PoolType: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: PoolType: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Id\", wireType)\n\t\t\t}\n\t\t\tm.Id = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Id |= uint32(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Name\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Name = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MinReserveCoinNum\", wireType)\n\t\t\t}\n\t\t\tm.MinReserveCoinNum = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.MinReserveCoinNum |= uint32(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 4:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MaxReserveCoinNum\", wireType)\n\t\t\t}\n\t\t\tm.MaxReserveCoinNum = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.MaxReserveCoinNum |= uint32(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 5:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Description\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Description = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipLiquidity(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *Params) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: Params: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: Params: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolTypes\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.PoolTypes = append(m.PoolTypes, PoolType{})\n\t\t\tif err := m.PoolTypes[len(m.PoolTypes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MinInitDepositAmount\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.MinInitDepositAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field InitPoolCoinMintAmount\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.InitPoolCoinMintAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 4:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MaxReserveCoinAmount\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.MaxReserveCoinAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 5:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolCreationFee\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.PoolCreationFee = append(m.PoolCreationFee, types.Coin{})\n\t\t\tif err := m.PoolCreationFee[len(m.PoolCreationFee)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 6:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field SwapFeeRate\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.SwapFeeRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 7:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field WithdrawFeeRate\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.WithdrawFeeRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 8:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MaxOrderAmountRatio\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.MaxOrderAmountRatio.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 9:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field UnitBatchHeight\", wireType)\n\t\t\t}\n\t\t\tm.UnitBatchHeight = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.UnitBatchHeight |= uint32(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 10:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field CircuitBreakerEnabled\", wireType)\n\t\t\t}\n\t\t\tvar v int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tv |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tm.CircuitBreakerEnabled = bool(v != 0)\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipLiquidity(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *Pool) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: Pool: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: Pool: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Id\", wireType)\n\t\t\t}\n\t\t\tm.Id = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Id |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field TypeId\", wireType)\n\t\t\t}\n\t\t\tm.TypeId = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.TypeId |= uint32(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field ReserveCoinDenoms\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.ReserveCoinDenoms = append(m.ReserveCoinDenoms, string(dAtA[iNdEx:postIndex]))\n\t\t\tiNdEx = postIndex\n\t\tcase 4:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field ReserveAccountAddress\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.ReserveAccountAddress = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 5:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolCoinDenom\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.PoolCoinDenom = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipLiquidity(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *PoolMetadata) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: PoolMetadata: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: PoolMetadata: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolId\", wireType)\n\t\t\t}\n\t\t\tm.PoolId = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.PoolId |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolCoinTotalSupply\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.PoolCoinTotalSupply.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field ReserveCoins\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.ReserveCoins = append(m.ReserveCoins, types.Coin{})\n\t\t\tif err := m.ReserveCoins[len(m.ReserveCoins)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipLiquidity(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *PoolBatch) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: PoolBatch: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: PoolBatch: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolId\", wireType)\n\t\t\t}\n\t\t\tm.PoolId = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.PoolId |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Index\", wireType)\n\t\t\t}\n\t\t\tm.Index = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Index |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 3:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field BeginHeight\", wireType)\n\t\t\t}\n\t\t\tm.BeginHeight = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.BeginHeight |= int64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 4:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field DepositMsgIndex\", wireType)\n\t\t\t}\n\t\t\tm.DepositMsgIndex = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.DepositMsgIndex |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 5:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field WithdrawMsgIndex\", wireType)\n\t\t\t}\n\t\t\tm.WithdrawMsgIndex = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.WithdrawMsgIndex |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 6:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field SwapMsgIndex\", wireType)\n\t\t\t}\n\t\t\tm.SwapMsgIndex = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.SwapMsgIndex |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 7:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Executed\", wireType)\n\t\t\t}\n\t\t\tvar v int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tv |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tm.Executed = bool(v != 0)\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipLiquidity(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *DepositMsgState) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: DepositMsgState: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: DepositMsgState: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MsgHeight\", wireType)\n\t\t\t}\n\t\t\tm.MsgHeight = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.MsgHeight |= int64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MsgIndex\", wireType)\n\t\t\t}\n\t\t\tm.MsgIndex = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.MsgIndex |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 3:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Executed\", wireType)\n\t\t\t}\n\t\t\tvar v int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tv |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tm.Executed = bool(v != 0)\n\t\tcase 4:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Succeeded\", wireType)\n\t\t\t}\n\t\t\tvar v int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tv |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tm.Succeeded = bool(v != 0)\n\t\tcase 5:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field ToBeDeleted\", wireType)\n\t\t\t}\n\t\t\tvar v int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tv |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tm.ToBeDeleted = bool(v != 0)\n\t\tcase 6:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Msg\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif m.Msg == nil {\n\t\t\t\tm.Msg = &MsgDepositWithinBatch{}\n\t\t\t}\n\t\t\tif err := m.Msg.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipLiquidity(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *WithdrawMsgState) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: WithdrawMsgState: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: WithdrawMsgState: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MsgHeight\", wireType)\n\t\t\t}\n\t\t\tm.MsgHeight = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.MsgHeight |= int64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MsgIndex\", wireType)\n\t\t\t}\n\t\t\tm.MsgIndex = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.MsgIndex |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 3:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Executed\", wireType)\n\t\t\t}\n\t\t\tvar v int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tv |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tm.Executed = bool(v != 0)\n\t\tcase 4:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Succeeded\", wireType)\n\t\t\t}\n\t\t\tvar v int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tv |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tm.Succeeded = bool(v != 0)\n\t\tcase 5:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field ToBeDeleted\", wireType)\n\t\t\t}\n\t\t\tvar v int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tv |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tm.ToBeDeleted = bool(v != 0)\n\t\tcase 6:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Msg\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif m.Msg == nil {\n\t\t\t\tm.Msg = &MsgWithdrawWithinBatch{}\n\t\t\t}\n\t\t\tif err := m.Msg.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipLiquidity(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *SwapMsgState) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: SwapMsgState: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: SwapMsgState: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MsgHeight\", wireType)\n\t\t\t}\n\t\t\tm.MsgHeight = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.MsgHeight |= int64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MsgIndex\", wireType)\n\t\t\t}\n\t\t\tm.MsgIndex = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.MsgIndex |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 3:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Executed\", wireType)\n\t\t\t}\n\t\t\tvar v int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tv |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tm.Executed = bool(v != 0)\n\t\tcase 4:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Succeeded\", wireType)\n\t\t\t}\n\t\t\tvar v int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tv |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tm.Succeeded = bool(v != 0)\n\t\tcase 5:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field ToBeDeleted\", wireType)\n\t\t\t}\n\t\t\tvar v int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tv |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tm.ToBeDeleted = bool(v != 0)\n\t\tcase 6:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field OrderExpiryHeight\", wireType)\n\t\t\t}\n\t\t\tm.OrderExpiryHeight = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.OrderExpiryHeight |= int64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 7:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field ExchangedOfferCoin\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.ExchangedOfferCoin.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 8:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field RemainingOfferCoin\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.RemainingOfferCoin.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 9:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field ReservedOfferCoinFee\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.ReservedOfferCoinFee.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 10:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Msg\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif m.Msg == nil {\n\t\t\t\tm.Msg = &MsgSwapWithinBatch{}\n\t\t\t}\n\t\t\tif err := m.Msg.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipLiquidity(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipLiquidity(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowLiquidity\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowLiquidity\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthLiquidity\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupLiquidity\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthLiquidity\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthLiquidity        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowLiquidity          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupLiquidity = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/liquidity/types/liquidity_pool.go",
    "content": "package types\n\nimport (\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\n// PoolName returns unique name of the pool consists of given reserve coin denoms and type id.\nfunc PoolName(reserveCoinDenoms []string, poolTypeID uint32) string {\n\treturn strings.Join(append(SortDenoms(reserveCoinDenoms), strconv.FormatUint(uint64(poolTypeID), 10)), \"/\")\n}\n\n// Name returns the pool's name.\nfunc (pool Pool) Name() string {\n\treturn PoolName(pool.ReserveCoinDenoms, pool.TypeId)\n}\n\n// Validate validates Pool.\nfunc (pool Pool) Validate() error {\n\tif pool.Id == 0 {\n\t\treturn ErrPoolNotExists\n\t}\n\tif pool.TypeId == 0 {\n\t\treturn ErrPoolTypeNotExists\n\t}\n\tif pool.ReserveCoinDenoms == nil || len(pool.ReserveCoinDenoms) == 0 {\n\t\treturn ErrNumOfReserveCoinDenoms\n\t}\n\tif uint32(len(pool.ReserveCoinDenoms)) > MaxReserveCoinNum || uint32(len(pool.ReserveCoinDenoms)) < MinReserveCoinNum {\n\t\treturn ErrNumOfReserveCoinDenoms\n\t}\n\tsortedDenomA, sortedDenomB := AlphabeticalDenomPair(pool.ReserveCoinDenoms[0], pool.ReserveCoinDenoms[1])\n\tif sortedDenomA != pool.ReserveCoinDenoms[0] || sortedDenomB != pool.ReserveCoinDenoms[1] {\n\t\treturn ErrBadOrderingReserveCoinDenoms\n\t}\n\tif pool.ReserveAccountAddress == \"\" {\n\t\treturn ErrEmptyReserveAccountAddress\n\t}\n\tif pool.ReserveAccountAddress != GetPoolReserveAcc(pool.Name(), false).String() {\n\t\treturn ErrBadReserveAccountAddress\n\t}\n\tif pool.PoolCoinDenom == \"\" {\n\t\treturn ErrEmptyPoolCoinDenom\n\t}\n\tif pool.PoolCoinDenom != pool.Name() {\n\t\treturn ErrBadPoolCoinDenom\n\t}\n\treturn nil\n}\n\n// NewPoolBatch creates a new PoolBatch object.\nfunc NewPoolBatch(poolID, batchIndex uint64) PoolBatch {\n\treturn PoolBatch{\n\t\tPoolId:           poolID,\n\t\tIndex:            batchIndex,\n\t\tBeginHeight:      0,\n\t\tDepositMsgIndex:  1,\n\t\tWithdrawMsgIndex: 1,\n\t\tSwapMsgIndex:     1,\n\t\tExecuted:         false,\n\t}\n}\n\n// MustMarshalPool returns the Pool bytes. Panics if fails.\nfunc MustMarshalPool(cdc codec.BinaryCodec, liquidityPool Pool) []byte {\n\treturn cdc.MustMarshal(&liquidityPool)\n}\n\n// MustUnmarshalPool returns the Pool from bytes. Panics if fails.\nfunc MustUnmarshalPool(cdc codec.BinaryCodec, value []byte) Pool {\n\tliquidityPool, err := UnmarshalPool(cdc, value)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn liquidityPool\n}\n\n// UnmarshalPool returns the Pool from bytes.\nfunc UnmarshalPool(cdc codec.BinaryCodec, value []byte) (liquidityPool Pool, err error) {\n\terr = cdc.Unmarshal(value, &liquidityPool)\n\treturn liquidityPool, err\n}\n\n// GetReserveAccount returns sdk.AccAddress of the pool's reserve account.\nfunc (pool Pool) GetReserveAccount() sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(pool.ReserveAccountAddress)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn addr\n}\n\n// GetPoolCoinDenom returns the pool coin's denom.\nfunc (pool Pool) GetPoolCoinDenom() string { return pool.PoolCoinDenom }\n\n// GetId returns id of the pool.\nfunc (pool Pool) GetId() uint64 { return pool.Id } //nolint:revive\n\n// Pools is a collection of pools.\ntype Pools []Pool\n\nfunc (pools Pools) String() (out string) {\n\tfor _, del := range pools {\n\t\tout += del.String() + \"\\n\"\n\t}\n\treturn strings.TrimSpace(out)\n}\n\n// MustMarshalPoolBatch returns the PoolBatch bytes. Panics if fails.\nfunc MustMarshalPoolBatch(cdc codec.BinaryCodec, poolBatch PoolBatch) []byte {\n\treturn cdc.MustMarshal(&poolBatch)\n}\n\n// UnmarshalPoolBatch returns the PoolBatch from bytes.\nfunc UnmarshalPoolBatch(cdc codec.BinaryCodec, value []byte) (poolBatch PoolBatch, err error) {\n\terr = cdc.Unmarshal(value, &poolBatch)\n\treturn poolBatch, err\n}\n\n// MustUnmarshalPoolBatch returns the PoolBatch from bytes. Panics if fails.\nfunc MustUnmarshalPoolBatch(cdc codec.BinaryCodec, value []byte) PoolBatch {\n\tpoolBatch, err := UnmarshalPoolBatch(cdc, value)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn poolBatch\n}\n\n// MustMarshalDepositMsgState returns the DepositMsgState bytes. Panics if fails.\nfunc MustMarshalDepositMsgState(cdc codec.BinaryCodec, msg DepositMsgState) []byte {\n\treturn cdc.MustMarshal(&msg)\n}\n\n// UnmarshalDepositMsgState returns the DepositMsgState from bytes.\nfunc UnmarshalDepositMsgState(cdc codec.BinaryCodec, value []byte) (msg DepositMsgState, err error) {\n\terr = cdc.Unmarshal(value, &msg)\n\treturn msg, err\n}\n\n// MustUnmarshalDepositMsgState returns the DepositMsgState from bytes. Panics if fails.\nfunc MustUnmarshalDepositMsgState(cdc codec.BinaryCodec, value []byte) DepositMsgState {\n\tmsg, err := UnmarshalDepositMsgState(cdc, value)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn msg\n}\n\n// MustMarshalWithdrawMsgState returns the WithdrawMsgState bytes. Panics if fails.\nfunc MustMarshalWithdrawMsgState(cdc codec.BinaryCodec, msg WithdrawMsgState) []byte {\n\treturn cdc.MustMarshal(&msg)\n}\n\n// UnmarshalWithdrawMsgState returns the WithdrawMsgState from bytes.\nfunc UnmarshalWithdrawMsgState(cdc codec.BinaryCodec, value []byte) (msg WithdrawMsgState, err error) {\n\terr = cdc.Unmarshal(value, &msg)\n\treturn msg, err\n}\n\n// MustUnmarshalWithdrawMsgState returns the WithdrawMsgState from bytes. Panics if fails.\nfunc MustUnmarshalWithdrawMsgState(cdc codec.BinaryCodec, value []byte) WithdrawMsgState {\n\tmsg, err := UnmarshalWithdrawMsgState(cdc, value)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn msg\n}\n\n// MustMarshalSwapMsgState returns the SwapMsgState bytes. Panics if fails.\nfunc MustMarshalSwapMsgState(cdc codec.BinaryCodec, msg SwapMsgState) []byte {\n\treturn cdc.MustMarshal(&msg)\n}\n\n// UnmarshalSwapMsgState returns the UnmarshalSwapMsgState from bytes.\nfunc UnmarshalSwapMsgState(cdc codec.BinaryCodec, value []byte) (msg SwapMsgState, err error) {\n\terr = cdc.Unmarshal(value, &msg)\n\treturn msg, err\n}\n\n// MustUnmarshalSwapMsgState returns the SwapMsgState from bytes. Panics if fails.\nfunc MustUnmarshalSwapMsgState(cdc codec.BinaryCodec, value []byte) SwapMsgState {\n\tmsg, err := UnmarshalSwapMsgState(cdc, value)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn msg\n}\n"
  },
  {
    "path": "x/liquidity/types/msgs.go",
    "content": "package types\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\nvar (\n\t_ sdk.Msg = (*MsgCreatePool)(nil)\n\t_ sdk.Msg = (*MsgDepositWithinBatch)(nil)\n\t_ sdk.Msg = (*MsgWithdrawWithinBatch)(nil)\n\t_ sdk.Msg = (*MsgSwapWithinBatch)(nil)\n)\n\n// Message types for the liquidity module\n//\n//nolint:gosec\nconst (\n\tTypeMsgCreatePool          = \"create_pool\"\n\tTypeMsgDepositWithinBatch  = \"deposit_within_batch\"\n\tTypeMsgWithdrawWithinBatch = \"withdraw_within_batch\"\n\tTypeMsgSwapWithinBatch     = \"swap_within_batch\"\n)\n\n// NewMsgCreatePool creates a new MsgCreatePool.\nfunc NewMsgCreatePool(poolCreator sdk.AccAddress, poolTypeID uint32, depositCoins sdk.Coins) *MsgCreatePool {\n\treturn &MsgCreatePool{\n\t\tPoolCreatorAddress: poolCreator.String(),\n\t\tPoolTypeId:         poolTypeID,\n\t\tDepositCoins:       depositCoins,\n\t}\n}\n\nfunc (msg MsgCreatePool) Route() string { return RouterKey }\n\nfunc (msg MsgCreatePool) Type() string { return TypeMsgCreatePool }\n\nfunc (msg MsgCreatePool) ValidateBasic() error {\n\tif 1 > msg.PoolTypeId {\n\t\treturn ErrBadPoolTypeID\n\t}\n\tif _, err := sdk.AccAddressFromBech32(msg.PoolCreatorAddress); err != nil {\n\t\treturn ErrInvalidPoolCreatorAddr\n\t}\n\tif err := msg.DepositCoins.Validate(); err != nil {\n\t\treturn err\n\t}\n\tif n := uint32(len(msg.DepositCoins)); n > MaxReserveCoinNum || n < MinReserveCoinNum {\n\t\treturn ErrNumOfReserveCoin\n\t}\n\treturn nil\n}\n\nfunc (msg MsgCreatePool) GetSignBytes() []byte {\n\treturn sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg))\n}\n\nfunc (msg MsgCreatePool) GetSigners() []sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(msg.PoolCreatorAddress)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn []sdk.AccAddress{addr}\n}\n\nfunc (msg MsgCreatePool) GetPoolCreator() sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(msg.PoolCreatorAddress)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn addr\n}\n\n// NewMsgDepositWithinBatch creates a new MsgDepositWithinBatch.\nfunc NewMsgDepositWithinBatch(depositor sdk.AccAddress, poolID uint64, depositCoins sdk.Coins) *MsgDepositWithinBatch {\n\treturn &MsgDepositWithinBatch{\n\t\tDepositorAddress: depositor.String(),\n\t\tPoolId:           poolID,\n\t\tDepositCoins:     depositCoins,\n\t}\n}\n\nfunc (msg MsgDepositWithinBatch) Route() string { return RouterKey }\n\nfunc (msg MsgDepositWithinBatch) Type() string { return TypeMsgDepositWithinBatch }\n\nfunc (msg MsgDepositWithinBatch) ValidateBasic() error {\n\tif _, err := sdk.AccAddressFromBech32(msg.DepositorAddress); err != nil {\n\t\treturn ErrInvalidDepositorAddr\n\t}\n\tif err := msg.DepositCoins.Validate(); err != nil {\n\t\treturn err\n\t}\n\tif !msg.DepositCoins.IsAllPositive() {\n\t\treturn ErrBadDepositCoinsAmount\n\t}\n\tif n := uint32(len(msg.DepositCoins)); n > MaxReserveCoinNum || n < MinReserveCoinNum {\n\t\treturn ErrNumOfReserveCoin\n\t}\n\treturn nil\n}\n\nfunc (msg MsgDepositWithinBatch) GetSignBytes() []byte {\n\treturn sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg))\n}\n\nfunc (msg MsgDepositWithinBatch) GetSigners() []sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(msg.DepositorAddress)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn []sdk.AccAddress{addr}\n}\n\nfunc (msg MsgDepositWithinBatch) GetDepositor() sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(msg.DepositorAddress)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn addr\n}\n\n// NewMsgWithdrawWithinBatch creates a new MsgWithdrawWithinBatch.\nfunc NewMsgWithdrawWithinBatch(withdrawer sdk.AccAddress, poolID uint64, poolCoin sdk.Coin) *MsgWithdrawWithinBatch {\n\treturn &MsgWithdrawWithinBatch{\n\t\tWithdrawerAddress: withdrawer.String(),\n\t\tPoolId:            poolID,\n\t\tPoolCoin:          poolCoin,\n\t}\n}\n\nfunc (msg MsgWithdrawWithinBatch) Route() string { return RouterKey }\n\nfunc (msg MsgWithdrawWithinBatch) Type() string { return TypeMsgWithdrawWithinBatch }\n\nfunc (msg MsgWithdrawWithinBatch) ValidateBasic() error {\n\tif _, err := sdk.AccAddressFromBech32(msg.WithdrawerAddress); err != nil {\n\t\treturn ErrInvalidWithdrawerAddr\n\t}\n\tif err := msg.PoolCoin.Validate(); err != nil {\n\t\treturn err\n\t}\n\tif !msg.PoolCoin.IsPositive() {\n\t\treturn ErrBadPoolCoinAmount\n\t}\n\treturn nil\n}\n\nfunc (msg MsgWithdrawWithinBatch) GetSignBytes() []byte {\n\treturn sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg))\n}\n\nfunc (msg MsgWithdrawWithinBatch) GetSigners() []sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(msg.WithdrawerAddress)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn []sdk.AccAddress{addr}\n}\n\nfunc (msg MsgWithdrawWithinBatch) GetWithdrawer() sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(msg.WithdrawerAddress)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn addr\n}\n\n// NewMsgSwapWithinBatch creates a new MsgSwapWithinBatch.\nfunc NewMsgSwapWithinBatch(\n\tswapRequester sdk.AccAddress,\n\tpoolID uint64,\n\tswapTypeID uint32,\n\tofferCoin sdk.Coin,\n\tdemandCoinDenom string,\n\torderPrice sdk.Dec,\n\tswapFeeRate sdk.Dec,\n) *MsgSwapWithinBatch {\n\treturn &MsgSwapWithinBatch{\n\t\tSwapRequesterAddress: swapRequester.String(),\n\t\tPoolId:               poolID,\n\t\tSwapTypeId:           swapTypeID,\n\t\tOfferCoin:            offerCoin,\n\t\tOfferCoinFee:         GetOfferCoinFee(offerCoin, swapFeeRate),\n\t\tDemandCoinDenom:      demandCoinDenom,\n\t\tOrderPrice:           orderPrice,\n\t}\n}\n\nfunc (msg MsgSwapWithinBatch) Route() string { return RouterKey }\n\nfunc (msg MsgSwapWithinBatch) Type() string { return TypeMsgSwapWithinBatch }\n\nfunc (msg MsgSwapWithinBatch) ValidateBasic() error {\n\tif _, err := sdk.AccAddressFromBech32(msg.SwapRequesterAddress); err != nil {\n\t\treturn ErrInvalidSwapRequesterAddr\n\t}\n\tif err := msg.OfferCoin.Validate(); err != nil {\n\t\treturn err\n\t}\n\tif !msg.OfferCoin.IsPositive() {\n\t\treturn ErrBadOfferCoinAmount\n\t}\n\tif !msg.OrderPrice.IsPositive() {\n\t\treturn ErrBadOrderPrice\n\t}\n\tif !msg.OfferCoin.Amount.GTE(MinOfferCoinAmount) {\n\t\treturn ErrLessThanMinOfferAmount\n\t}\n\treturn nil\n}\n\nfunc (msg MsgSwapWithinBatch) GetSignBytes() []byte {\n\treturn sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg))\n}\n\nfunc (msg MsgSwapWithinBatch) GetSigners() []sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(msg.SwapRequesterAddress)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn []sdk.AccAddress{addr}\n}\n\nfunc (msg MsgSwapWithinBatch) GetSwapRequester() sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(msg.SwapRequesterAddress)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn addr\n}\n"
  },
  {
    "path": "x/liquidity/types/params.go",
    "content": "package types\n\nimport (\n\t\"fmt\"\n\n\t\"cosmossdk.io/math\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"gopkg.in/yaml.v2\"\n)\n\nconst (\n\t// CancelOrderLifeSpan is the lifespan of order cancellation.\n\tCancelOrderLifeSpan int64 = 0\n\n\t// MinReserveCoinNum is the minimum number of reserve coins in each liquidity pool.\n\tMinReserveCoinNum uint32 = 2\n\n\t// MaxReserveCoinNum is the maximum number of reserve coins in each liquidity pool.\n\tMaxReserveCoinNum uint32 = 2\n\n\t// DefaultUnitBatchHeight is the default number of blocks in one batch. This param is used for scalability.\n\tDefaultUnitBatchHeight uint32 = 1\n\n\t// DefaultPoolTypeID is the default pool type id. The only supported pool type id is 1.\n\tDefaultPoolTypeID uint32 = 1\n\n\t// DefaultSwapTypeID is the default swap type id. The only supported swap type (instant swap) id is 1.\n\tDefaultSwapTypeID uint32 = 1\n\n\t// DefaultCircuitBreakerEnabled is the default circuit breaker status. This param is used for a contingency plan.\n\tDefaultCircuitBreakerEnabled = false\n)\n\n// Parameter store keys\nvar (\n\tKeyPoolTypes              = []byte(\"PoolTypes\")\n\tKeyMinInitDepositAmount   = []byte(\"MinInitDepositAmount\")\n\tKeyInitPoolCoinMintAmount = []byte(\"InitPoolCoinMintAmount\")\n\tKeyMaxReserveCoinAmount   = []byte(\"MaxReserveCoinAmount\")\n\tKeySwapFeeRate            = []byte(\"SwapFeeRate\")\n\tKeyPoolCreationFee        = []byte(\"PoolCreationFee\")\n\tKeyUnitBatchHeight        = []byte(\"UnitBatchHeight\")\n\tKeyWithdrawFeeRate        = []byte(\"WithdrawFeeRate\")\n\tKeyMaxOrderAmountRatio    = []byte(\"MaxOrderAmountRatio\")\n\tKeyCircuitBreakerEnabled  = []byte(\"CircuitBreakerEnabled\")\n)\n\nvar (\n\tDefaultMinInitDepositAmount   = sdk.NewInt(1000000)\n\tDefaultInitPoolCoinMintAmount = sdk.NewInt(1000000)\n\tDefaultMaxReserveCoinAmount   = sdk.ZeroInt()\n\tDefaultSwapFeeRate            = sdk.NewDecWithPrec(3, 3) // \"0.003000000000000000\"\n\tDefaultWithdrawFeeRate        = sdk.ZeroDec()\n\tDefaultMaxOrderAmountRatio    = sdk.NewDecWithPrec(1, 1) // \"0.100000000000000000\"\n\tDefaultPoolCreationFee        = sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(40000000)))\n\tDefaultPoolType               = PoolType{\n\t\tId:                1,\n\t\tName:              \"StandardLiquidityPool\",\n\t\tMinReserveCoinNum: MinReserveCoinNum,\n\t\tMaxReserveCoinNum: MaxReserveCoinNum,\n\t\tDescription:       \"Standard liquidity pool with pool price function X/Y, ESPM constraint, and two kinds of reserve coins\",\n\t}\n\tDefaultPoolTypes = []PoolType{DefaultPoolType}\n\n\tMinOfferCoinAmount = sdk.NewInt(100)\n)\n\n// DefaultParams returns the default liquidity module parameters.\nfunc DefaultParams() Params {\n\treturn Params{\n\t\tPoolTypes:              DefaultPoolTypes,\n\t\tMinInitDepositAmount:   DefaultMinInitDepositAmount,\n\t\tInitPoolCoinMintAmount: DefaultInitPoolCoinMintAmount,\n\t\tMaxReserveCoinAmount:   DefaultMaxReserveCoinAmount,\n\t\tPoolCreationFee:        DefaultPoolCreationFee,\n\t\tSwapFeeRate:            DefaultSwapFeeRate,\n\t\tWithdrawFeeRate:        DefaultWithdrawFeeRate,\n\t\tMaxOrderAmountRatio:    DefaultMaxOrderAmountRatio,\n\t\tUnitBatchHeight:        DefaultUnitBatchHeight,\n\t\tCircuitBreakerEnabled:  DefaultCircuitBreakerEnabled,\n\t}\n}\n\n// String returns a human readable string representation of the parameters.\nfunc (p Params) String() string {\n\tout, _ := yaml.Marshal(p)\n\treturn string(out)\n}\n\n// Validate validates parameters.\nfunc (p Params) Validate() error {\n\tfor _, v := range []struct {\n\t\tvalue     interface{}\n\t\tvalidator func(interface{}) error\n\t}{\n\t\t{p.PoolTypes, validatePoolTypes},\n\t\t{p.MinInitDepositAmount, validateMinInitDepositAmount},\n\t\t{p.InitPoolCoinMintAmount, validateInitPoolCoinMintAmount},\n\t\t{p.MaxReserveCoinAmount, validateMaxReserveCoinAmount},\n\t\t{p.PoolCreationFee, validatePoolCreationFee},\n\t\t{p.SwapFeeRate, validateSwapFeeRate},\n\t\t{p.WithdrawFeeRate, validateWithdrawFeeRate},\n\t\t{p.MaxOrderAmountRatio, validateMaxOrderAmountRatio},\n\t\t{p.UnitBatchHeight, validateUnitBatchHeight},\n\t\t{p.CircuitBreakerEnabled, validateCircuitBreakerEnabled},\n\t} {\n\t\tif err := v.validator(v.value); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc validatePoolTypes(i interface{}) error {\n\tv, ok := i.([]PoolType)\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif len(v) == 0 {\n\t\treturn fmt.Errorf(\"pool types must not be empty\")\n\t}\n\n\tfor i, p := range v {\n\t\tif int(p.Id) != i+1 {\n\t\t\treturn fmt.Errorf(\"pool type ids must be sorted\")\n\t\t}\n\t\tif p.MaxReserveCoinNum > MaxReserveCoinNum || MinReserveCoinNum > p.MinReserveCoinNum {\n\t\t\treturn fmt.Errorf(\"min, max reserve coin num value of pool types are out of bounds\")\n\t\t}\n\t}\n\n\tif len(v) > 1 || !v[0].Equal(DefaultPoolType) {\n\t\treturn fmt.Errorf(\"the only supported pool type is 1\")\n\t}\n\n\treturn nil\n}\n\n//nolint:staticcheck,nolintlint\nfunc validateMinInitDepositAmount(i interface{}) error {\n\tv, ok := i.(math.Int)\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v.IsNil() {\n\t\treturn fmt.Errorf(\"minimum initial deposit amount must not be nil\")\n\t}\n\n\tif !v.IsPositive() {\n\t\treturn fmt.Errorf(\"minimum initial deposit amount must be positive: %s\", v)\n\t}\n\n\treturn nil\n}\n\n//nolint:staticcheck,nolintlint\nfunc validateInitPoolCoinMintAmount(i interface{}) error {\n\tv, ok := i.(math.Int)\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v.IsNil() {\n\t\treturn fmt.Errorf(\"initial pool coin mint amount must not be nil\")\n\t}\n\n\tif !v.IsPositive() {\n\t\treturn fmt.Errorf(\"initial pool coin mint amount must be positive: %s\", v)\n\t}\n\n\tif v.LT(DefaultInitPoolCoinMintAmount) {\n\t\treturn fmt.Errorf(\"initial pool coin mint amount must be greater than or equal to 1000000: %s\", v)\n\t}\n\n\treturn nil\n}\n\n//nolint:staticcheck,nolintlint\nfunc validateMaxReserveCoinAmount(i interface{}) error {\n\tv, ok := i.(math.Int)\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v.IsNil() {\n\t\treturn fmt.Errorf(\"max reserve coin amount must not be nil\")\n\t}\n\n\tif v.IsNegative() {\n\t\treturn fmt.Errorf(\"max reserve coin amount must not be negative: %s\", v)\n\t}\n\n\treturn nil\n}\n\nfunc validateSwapFeeRate(i interface{}) error {\n\tv, ok := i.(sdk.Dec) //nolint:nolintlint\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v.IsNil() {\n\t\treturn fmt.Errorf(\"swap fee rate must not be nil\")\n\t}\n\n\tif v.IsNegative() {\n\t\treturn fmt.Errorf(\"swap fee rate must not be negative: %s\", v)\n\t}\n\n\tif v.GT(sdk.OneDec()) {\n\t\treturn fmt.Errorf(\"swap fee rate too large: %s\", v)\n\t}\n\n\treturn nil\n}\n\nfunc validateWithdrawFeeRate(i interface{}) error {\n\tv, ok := i.(sdk.Dec) //nolint:nolintlint\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v.IsNil() {\n\t\treturn fmt.Errorf(\"withdraw fee rate must not be nil\")\n\t}\n\n\tif v.IsNegative() {\n\t\treturn fmt.Errorf(\"withdraw fee rate must not be negative: %s\", v)\n\t}\n\n\tif v.GT(sdk.OneDec()) {\n\t\treturn fmt.Errorf(\"withdraw fee rate too large: %s\", v)\n\t}\n\n\treturn nil\n}\n\nfunc validateMaxOrderAmountRatio(i interface{}) error {\n\tv, ok := i.(sdk.Dec) //nolint:nolintlint\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v.IsNil() {\n\t\treturn fmt.Errorf(\"max order amount ratio must not be nil\")\n\t}\n\n\tif v.IsNegative() {\n\t\treturn fmt.Errorf(\"max order amount ratio must not be negative: %s\", v)\n\t}\n\n\tif v.GT(sdk.OneDec()) {\n\t\treturn fmt.Errorf(\"max order amount ratio too large: %s\", v)\n\t}\n\n\treturn nil\n}\n\nfunc validatePoolCreationFee(i interface{}) error {\n\tv, ok := i.(sdk.Coins)\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif err := v.Validate(); err != nil {\n\t\treturn err\n\t}\n\n\tif v.Empty() {\n\t\treturn fmt.Errorf(\"pool creation fee must not be empty\")\n\t}\n\n\treturn nil\n}\n\nfunc validateUnitBatchHeight(i interface{}) error {\n\tv, ok := i.(uint32)\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v == 0 {\n\t\treturn fmt.Errorf(\"unit batch height must be positive: %d\", v)\n\t}\n\n\treturn nil\n}\n\nfunc validateCircuitBreakerEnabled(i interface{}) error {\n\t_, ok := i.(bool)\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/liquidity/types/params_legacy.go",
    "content": "package types\n\nimport paramstypes \"github.com/cosmos/cosmos-sdk/x/params/types\"\n\n// Deprecated: Type declaration for parameters\nfunc ParamKeyTable() paramstypes.KeyTable {\n\treturn paramstypes.NewKeyTable().RegisterParamSet(&Params{})\n}\n\n// ParamSetPairs implements paramstypes.ParamSet.\nfunc (p *Params) ParamSetPairs() paramstypes.ParamSetPairs {\n\treturn paramstypes.ParamSetPairs{\n\t\tparamstypes.NewParamSetPair(KeyPoolTypes, &p.PoolTypes, validatePoolTypes),\n\t\tparamstypes.NewParamSetPair(KeyMinInitDepositAmount, &p.MinInitDepositAmount, validateMinInitDepositAmount),\n\t\tparamstypes.NewParamSetPair(KeyInitPoolCoinMintAmount, &p.InitPoolCoinMintAmount, validateInitPoolCoinMintAmount),\n\t\tparamstypes.NewParamSetPair(KeyMaxReserveCoinAmount, &p.MaxReserveCoinAmount, validateMaxReserveCoinAmount),\n\t\tparamstypes.NewParamSetPair(KeyPoolCreationFee, &p.PoolCreationFee, validatePoolCreationFee),\n\t\tparamstypes.NewParamSetPair(KeySwapFeeRate, &p.SwapFeeRate, validateSwapFeeRate),\n\t\tparamstypes.NewParamSetPair(KeyWithdrawFeeRate, &p.WithdrawFeeRate, validateWithdrawFeeRate),\n\t\tparamstypes.NewParamSetPair(KeyMaxOrderAmountRatio, &p.MaxOrderAmountRatio, validateMaxOrderAmountRatio),\n\t\tparamstypes.NewParamSetPair(KeyUnitBatchHeight, &p.UnitBatchHeight, validateUnitBatchHeight),\n\t\tparamstypes.NewParamSetPair(KeyCircuitBreakerEnabled, &p.CircuitBreakerEnabled, validateCircuitBreakerEnabled),\n\t}\n}\n"
  },
  {
    "path": "x/liquidity/types/querier.go",
    "content": "package types\n\n// DONTCOVER\n// client is excluded from test coverage in the poc phase milestone 1 and will be included in milestone 2 with completeness\n\n// QueryLiquidityPool liquidity query endpoint supported by the liquidity querier\nconst (\n\tQueryLiquidityPool  = \"liquidityPool\"\n\tQueryLiquidityPools = \"liquidityPools\"\n)\n\n// QueryLiquidityPoolParams is the query parameters for 'custom/liquidity'\ntype QueryLiquidityPoolParams struct {\n\tPoolId uint64 `json:\"pool_id\" yaml:\"pool_id\"` // nolint:revive,nolintlint\n}\n\n// return params of Liquidity Pool Query\nfunc NewQueryLiquidityPoolParams(poolID uint64) QueryLiquidityPoolParams {\n\treturn QueryLiquidityPoolParams{\n\t\tPoolId: poolID,\n\t}\n}\n\n// QueryLiquidityPoolsParams defines the params for the following queries:\n// - 'custom/liquidity/liquidityPools'\ntype QueryLiquidityPoolsParams struct {\n\tPage, Limit int\n}\n\n// return params of Liquidity Pools Query\nfunc NewQueryLiquidityPoolsParams(page, limit int) QueryLiquidityPoolsParams {\n\treturn QueryLiquidityPoolsParams{page, limit}\n}\n"
  },
  {
    "path": "x/liquidity/types/query.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/liquidity/v1beta1/query.proto\n\npackage types\n\nimport (\n\tcontext \"context\"\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\tquery \"github.com/cosmos/cosmos-sdk/types/query\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tgrpc1 \"github.com/cosmos/gogoproto/grpc\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\n// the request type for the QueryLiquidityPool RPC method. requestable specified\n// pool_id.\ntype QueryLiquidityPoolRequest struct {\n\tPoolId uint64 `protobuf:\"varint,1,opt,name=pool_id,json=poolId,proto3\" json:\"pool_id,omitempty\"`\n}\n\nfunc (m *QueryLiquidityPoolRequest) Reset()         { *m = QueryLiquidityPoolRequest{} }\nfunc (m *QueryLiquidityPoolRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryLiquidityPoolRequest) ProtoMessage()    {}\nfunc (*QueryLiquidityPoolRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{0}\n}\n\nfunc (m *QueryLiquidityPoolRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryLiquidityPoolRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryLiquidityPoolRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryLiquidityPoolRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryLiquidityPoolRequest.Merge(m, src)\n}\n\nfunc (m *QueryLiquidityPoolRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryLiquidityPoolRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryLiquidityPoolRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryLiquidityPoolRequest proto.InternalMessageInfo\n\nfunc (m *QueryLiquidityPoolRequest) GetPoolId() uint64 {\n\tif m != nil {\n\t\treturn m.PoolId\n\t}\n\treturn 0\n}\n\n// the response type for the QueryLiquidityPoolResponse RPC method. Returns the\n// liquidity pool that corresponds to the requested pool_id.\ntype QueryLiquidityPoolResponse struct {\n\tPool Pool `protobuf:\"bytes,1,opt,name=pool,proto3\" json:\"pool\"`\n}\n\nfunc (m *QueryLiquidityPoolResponse) Reset()         { *m = QueryLiquidityPoolResponse{} }\nfunc (m *QueryLiquidityPoolResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryLiquidityPoolResponse) ProtoMessage()    {}\nfunc (*QueryLiquidityPoolResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{1}\n}\n\nfunc (m *QueryLiquidityPoolResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryLiquidityPoolResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryLiquidityPoolResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryLiquidityPoolResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryLiquidityPoolResponse.Merge(m, src)\n}\n\nfunc (m *QueryLiquidityPoolResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryLiquidityPoolResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryLiquidityPoolResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryLiquidityPoolResponse proto.InternalMessageInfo\n\nfunc (m *QueryLiquidityPoolResponse) GetPool() Pool {\n\tif m != nil {\n\t\treturn m.Pool\n\t}\n\treturn Pool{}\n}\n\n// the request type for the QueryLiquidityByPoolCoinDenomPool RPC method.\n// Requestable specified pool_coin_denom.\ntype QueryLiquidityPoolByPoolCoinDenomRequest struct {\n\tPoolCoinDenom string `protobuf:\"bytes,1,opt,name=pool_coin_denom,json=poolCoinDenom,proto3\" json:\"pool_coin_denom,omitempty\"`\n}\n\nfunc (m *QueryLiquidityPoolByPoolCoinDenomRequest) Reset() {\n\t*m = QueryLiquidityPoolByPoolCoinDenomRequest{}\n}\nfunc (m *QueryLiquidityPoolByPoolCoinDenomRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryLiquidityPoolByPoolCoinDenomRequest) ProtoMessage()    {}\nfunc (*QueryLiquidityPoolByPoolCoinDenomRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{2}\n}\n\nfunc (m *QueryLiquidityPoolByPoolCoinDenomRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryLiquidityPoolByPoolCoinDenomRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryLiquidityPoolByPoolCoinDenomRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryLiquidityPoolByPoolCoinDenomRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryLiquidityPoolByPoolCoinDenomRequest.Merge(m, src)\n}\n\nfunc (m *QueryLiquidityPoolByPoolCoinDenomRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryLiquidityPoolByPoolCoinDenomRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryLiquidityPoolByPoolCoinDenomRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryLiquidityPoolByPoolCoinDenomRequest proto.InternalMessageInfo\n\nfunc (m *QueryLiquidityPoolByPoolCoinDenomRequest) GetPoolCoinDenom() string {\n\tif m != nil {\n\t\treturn m.PoolCoinDenom\n\t}\n\treturn \"\"\n}\n\n// the request type for the QueryLiquidityByReserveAcc RPC method. Requestable\n// specified reserve_acc.\ntype QueryLiquidityPoolByReserveAccRequest struct {\n\tReserveAcc string `protobuf:\"bytes,1,opt,name=reserve_acc,json=reserveAcc,proto3\" json:\"reserve_acc,omitempty\"`\n}\n\nfunc (m *QueryLiquidityPoolByReserveAccRequest) Reset()         { *m = QueryLiquidityPoolByReserveAccRequest{} }\nfunc (m *QueryLiquidityPoolByReserveAccRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryLiquidityPoolByReserveAccRequest) ProtoMessage()    {}\nfunc (*QueryLiquidityPoolByReserveAccRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{3}\n}\n\nfunc (m *QueryLiquidityPoolByReserveAccRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryLiquidityPoolByReserveAccRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryLiquidityPoolByReserveAccRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryLiquidityPoolByReserveAccRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryLiquidityPoolByReserveAccRequest.Merge(m, src)\n}\n\nfunc (m *QueryLiquidityPoolByReserveAccRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryLiquidityPoolByReserveAccRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryLiquidityPoolByReserveAccRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryLiquidityPoolByReserveAccRequest proto.InternalMessageInfo\n\nfunc (m *QueryLiquidityPoolByReserveAccRequest) GetReserveAcc() string {\n\tif m != nil {\n\t\treturn m.ReserveAcc\n\t}\n\treturn \"\"\n}\n\n// the request type for the QueryLiquidityPoolBatch RPC method. requestable\n// including specified pool_id.\ntype QueryLiquidityPoolBatchRequest struct {\n\t// id of the target pool for query\n\tPoolId uint64 `protobuf:\"varint,1,opt,name=pool_id,json=poolId,proto3\" json:\"pool_id,omitempty\"`\n}\n\nfunc (m *QueryLiquidityPoolBatchRequest) Reset()         { *m = QueryLiquidityPoolBatchRequest{} }\nfunc (m *QueryLiquidityPoolBatchRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryLiquidityPoolBatchRequest) ProtoMessage()    {}\nfunc (*QueryLiquidityPoolBatchRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{4}\n}\n\nfunc (m *QueryLiquidityPoolBatchRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryLiquidityPoolBatchRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryLiquidityPoolBatchRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryLiquidityPoolBatchRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryLiquidityPoolBatchRequest.Merge(m, src)\n}\n\nfunc (m *QueryLiquidityPoolBatchRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryLiquidityPoolBatchRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryLiquidityPoolBatchRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryLiquidityPoolBatchRequest proto.InternalMessageInfo\n\nfunc (m *QueryLiquidityPoolBatchRequest) GetPoolId() uint64 {\n\tif m != nil {\n\t\treturn m.PoolId\n\t}\n\treturn 0\n}\n\n// the response type for the QueryLiquidityPoolBatchResponse RPC method. Returns\n// the liquidity pool batch that corresponds to the requested pool_id.\ntype QueryLiquidityPoolBatchResponse struct {\n\tBatch PoolBatch `protobuf:\"bytes,1,opt,name=batch,proto3\" json:\"batch\"`\n}\n\nfunc (m *QueryLiquidityPoolBatchResponse) Reset()         { *m = QueryLiquidityPoolBatchResponse{} }\nfunc (m *QueryLiquidityPoolBatchResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryLiquidityPoolBatchResponse) ProtoMessage()    {}\nfunc (*QueryLiquidityPoolBatchResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{5}\n}\n\nfunc (m *QueryLiquidityPoolBatchResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryLiquidityPoolBatchResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryLiquidityPoolBatchResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryLiquidityPoolBatchResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryLiquidityPoolBatchResponse.Merge(m, src)\n}\n\nfunc (m *QueryLiquidityPoolBatchResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryLiquidityPoolBatchResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryLiquidityPoolBatchResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryLiquidityPoolBatchResponse proto.InternalMessageInfo\n\nfunc (m *QueryLiquidityPoolBatchResponse) GetBatch() PoolBatch {\n\tif m != nil {\n\t\treturn m.Batch\n\t}\n\treturn PoolBatch{}\n}\n\n// the request type for the QueryLiquidityPools RPC method. Requestable\n// including pagination offset, limit, key.\ntype QueryLiquidityPoolsRequest struct {\n\t// pagination defines an optional pagination for the request.\n\tPagination *query.PageRequest `protobuf:\"bytes,1,opt,name=pagination,proto3\" json:\"pagination,omitempty\"`\n}\n\nfunc (m *QueryLiquidityPoolsRequest) Reset()         { *m = QueryLiquidityPoolsRequest{} }\nfunc (m *QueryLiquidityPoolsRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryLiquidityPoolsRequest) ProtoMessage()    {}\nfunc (*QueryLiquidityPoolsRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{6}\n}\n\nfunc (m *QueryLiquidityPoolsRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryLiquidityPoolsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryLiquidityPoolsRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryLiquidityPoolsRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryLiquidityPoolsRequest.Merge(m, src)\n}\n\nfunc (m *QueryLiquidityPoolsRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryLiquidityPoolsRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryLiquidityPoolsRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryLiquidityPoolsRequest proto.InternalMessageInfo\n\nfunc (m *QueryLiquidityPoolsRequest) GetPagination() *query.PageRequest {\n\tif m != nil {\n\t\treturn m.Pagination\n\t}\n\treturn nil\n}\n\n// the response type for the QueryLiquidityPoolsResponse RPC method. This\n// includes a list of all existing liquidity pools and paging results that\n// contain next_key and total count.\ntype QueryLiquidityPoolsResponse struct {\n\tPools []Pool `protobuf:\"bytes,1,rep,name=pools,proto3\" json:\"pools\"`\n\t// pagination defines the pagination in the response. not working on this\n\t// version.\n\tPagination *query.PageResponse `protobuf:\"bytes,2,opt,name=pagination,proto3\" json:\"pagination,omitempty\"`\n}\n\nfunc (m *QueryLiquidityPoolsResponse) Reset()         { *m = QueryLiquidityPoolsResponse{} }\nfunc (m *QueryLiquidityPoolsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryLiquidityPoolsResponse) ProtoMessage()    {}\nfunc (*QueryLiquidityPoolsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{7}\n}\n\nfunc (m *QueryLiquidityPoolsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryLiquidityPoolsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryLiquidityPoolsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryLiquidityPoolsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryLiquidityPoolsResponse.Merge(m, src)\n}\n\nfunc (m *QueryLiquidityPoolsResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryLiquidityPoolsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryLiquidityPoolsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryLiquidityPoolsResponse proto.InternalMessageInfo\n\nfunc (m *QueryLiquidityPoolsResponse) GetPools() []Pool {\n\tif m != nil {\n\t\treturn m.Pools\n\t}\n\treturn nil\n}\n\nfunc (m *QueryLiquidityPoolsResponse) GetPagination() *query.PageResponse {\n\tif m != nil {\n\t\treturn m.Pagination\n\t}\n\treturn nil\n}\n\n// QueryParamsRequest is request type for the QueryParams RPC method.\ntype QueryParamsRequest struct{}\n\nfunc (m *QueryParamsRequest) Reset()         { *m = QueryParamsRequest{} }\nfunc (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryParamsRequest) ProtoMessage()    {}\nfunc (*QueryParamsRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{8}\n}\n\nfunc (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryParamsRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryParamsRequest.Merge(m, src)\n}\n\nfunc (m *QueryParamsRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryParamsRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryParamsRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo\n\n// the response type for the QueryParamsResponse RPC method. This includes\n// current parameter of the liquidity module.\ntype QueryParamsResponse struct {\n\t// params holds all the parameters of this module.\n\tParams Params `protobuf:\"bytes,1,opt,name=params,proto3\" json:\"params\"`\n}\n\nfunc (m *QueryParamsResponse) Reset()         { *m = QueryParamsResponse{} }\nfunc (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryParamsResponse) ProtoMessage()    {}\nfunc (*QueryParamsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{9}\n}\n\nfunc (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryParamsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryParamsResponse.Merge(m, src)\n}\n\nfunc (m *QueryParamsResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryParamsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryParamsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo\n\nfunc (m *QueryParamsResponse) GetParams() Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn Params{}\n}\n\n// the request type for the QueryPoolBatchSwapMsgs RPC method. Requestable\n// including specified pool_id and pagination offset, limit, key.\ntype QueryPoolBatchSwapMsgsRequest struct {\n\t// id of the target pool for query\n\tPoolId uint64 `protobuf:\"varint,1,opt,name=pool_id,json=poolId,proto3\" json:\"pool_id,omitempty\"`\n\t// pagination defines an optional pagination for the request.\n\tPagination *query.PageRequest `protobuf:\"bytes,2,opt,name=pagination,proto3\" json:\"pagination,omitempty\"`\n}\n\nfunc (m *QueryPoolBatchSwapMsgsRequest) Reset()         { *m = QueryPoolBatchSwapMsgsRequest{} }\nfunc (m *QueryPoolBatchSwapMsgsRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryPoolBatchSwapMsgsRequest) ProtoMessage()    {}\nfunc (*QueryPoolBatchSwapMsgsRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{10}\n}\n\nfunc (m *QueryPoolBatchSwapMsgsRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryPoolBatchSwapMsgsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryPoolBatchSwapMsgsRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryPoolBatchSwapMsgsRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryPoolBatchSwapMsgsRequest.Merge(m, src)\n}\n\nfunc (m *QueryPoolBatchSwapMsgsRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryPoolBatchSwapMsgsRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryPoolBatchSwapMsgsRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryPoolBatchSwapMsgsRequest proto.InternalMessageInfo\n\nfunc (m *QueryPoolBatchSwapMsgsRequest) GetPoolId() uint64 {\n\tif m != nil {\n\t\treturn m.PoolId\n\t}\n\treturn 0\n}\n\nfunc (m *QueryPoolBatchSwapMsgsRequest) GetPagination() *query.PageRequest {\n\tif m != nil {\n\t\treturn m.Pagination\n\t}\n\treturn nil\n}\n\n// the request type for the QueryPoolBatchSwap RPC method. Requestable including\n// specified pool_id and msg_index.\ntype QueryPoolBatchSwapMsgRequest struct {\n\t// id of the target pool for query\n\tPoolId uint64 `protobuf:\"varint,1,opt,name=pool_id,json=poolId,proto3\" json:\"pool_id,omitempty\"`\n\t// target msg_index of the pool\n\tMsgIndex uint64 `protobuf:\"varint,2,opt,name=msg_index,json=msgIndex,proto3\" json:\"msg_index,omitempty\"`\n}\n\nfunc (m *QueryPoolBatchSwapMsgRequest) Reset()         { *m = QueryPoolBatchSwapMsgRequest{} }\nfunc (m *QueryPoolBatchSwapMsgRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryPoolBatchSwapMsgRequest) ProtoMessage()    {}\nfunc (*QueryPoolBatchSwapMsgRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{11}\n}\n\nfunc (m *QueryPoolBatchSwapMsgRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryPoolBatchSwapMsgRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryPoolBatchSwapMsgRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryPoolBatchSwapMsgRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryPoolBatchSwapMsgRequest.Merge(m, src)\n}\n\nfunc (m *QueryPoolBatchSwapMsgRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryPoolBatchSwapMsgRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryPoolBatchSwapMsgRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryPoolBatchSwapMsgRequest proto.InternalMessageInfo\n\nfunc (m *QueryPoolBatchSwapMsgRequest) GetPoolId() uint64 {\n\tif m != nil {\n\t\treturn m.PoolId\n\t}\n\treturn 0\n}\n\nfunc (m *QueryPoolBatchSwapMsgRequest) GetMsgIndex() uint64 {\n\tif m != nil {\n\t\treturn m.MsgIndex\n\t}\n\treturn 0\n}\n\n// the response type for the QueryPoolBatchSwapMsgs RPC method. This includes\n// list of all currently existing swap messages of the batch and paging results\n// that contain next_key and total count.\ntype QueryPoolBatchSwapMsgsResponse struct {\n\tSwaps []SwapMsgState `protobuf:\"bytes,1,rep,name=swaps,proto3\" json:\"swaps\"`\n\t// pagination defines the pagination in the response. not working on this\n\t// version.\n\tPagination *query.PageResponse `protobuf:\"bytes,2,opt,name=pagination,proto3\" json:\"pagination,omitempty\"`\n}\n\nfunc (m *QueryPoolBatchSwapMsgsResponse) Reset()         { *m = QueryPoolBatchSwapMsgsResponse{} }\nfunc (m *QueryPoolBatchSwapMsgsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryPoolBatchSwapMsgsResponse) ProtoMessage()    {}\nfunc (*QueryPoolBatchSwapMsgsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{12}\n}\n\nfunc (m *QueryPoolBatchSwapMsgsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryPoolBatchSwapMsgsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryPoolBatchSwapMsgsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryPoolBatchSwapMsgsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryPoolBatchSwapMsgsResponse.Merge(m, src)\n}\n\nfunc (m *QueryPoolBatchSwapMsgsResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryPoolBatchSwapMsgsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryPoolBatchSwapMsgsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryPoolBatchSwapMsgsResponse proto.InternalMessageInfo\n\nfunc (m *QueryPoolBatchSwapMsgsResponse) GetSwaps() []SwapMsgState {\n\tif m != nil {\n\t\treturn m.Swaps\n\t}\n\treturn nil\n}\n\nfunc (m *QueryPoolBatchSwapMsgsResponse) GetPagination() *query.PageResponse {\n\tif m != nil {\n\t\treturn m.Pagination\n\t}\n\treturn nil\n}\n\n// the response type for the QueryPoolBatchSwapMsg RPC method. This includes a\n// batch swap message of the batch.\ntype QueryPoolBatchSwapMsgResponse struct {\n\tSwap SwapMsgState `protobuf:\"bytes,1,opt,name=swap,proto3\" json:\"swap\"`\n}\n\nfunc (m *QueryPoolBatchSwapMsgResponse) Reset()         { *m = QueryPoolBatchSwapMsgResponse{} }\nfunc (m *QueryPoolBatchSwapMsgResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryPoolBatchSwapMsgResponse) ProtoMessage()    {}\nfunc (*QueryPoolBatchSwapMsgResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{13}\n}\n\nfunc (m *QueryPoolBatchSwapMsgResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryPoolBatchSwapMsgResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryPoolBatchSwapMsgResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryPoolBatchSwapMsgResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryPoolBatchSwapMsgResponse.Merge(m, src)\n}\n\nfunc (m *QueryPoolBatchSwapMsgResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryPoolBatchSwapMsgResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryPoolBatchSwapMsgResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryPoolBatchSwapMsgResponse proto.InternalMessageInfo\n\nfunc (m *QueryPoolBatchSwapMsgResponse) GetSwap() SwapMsgState {\n\tif m != nil {\n\t\treturn m.Swap\n\t}\n\treturn SwapMsgState{}\n}\n\n// the request type for the QueryPoolBatchDeposit RPC method. Requestable\n// including specified pool_id and pagination offset, limit, key.\ntype QueryPoolBatchDepositMsgsRequest struct {\n\t// id of the target pool for query\n\tPoolId uint64 `protobuf:\"varint,1,opt,name=pool_id,json=poolId,proto3\" json:\"pool_id,omitempty\"`\n\t// pagination defines an optional pagination for the request.\n\tPagination *query.PageRequest `protobuf:\"bytes,2,opt,name=pagination,proto3\" json:\"pagination,omitempty\"`\n}\n\nfunc (m *QueryPoolBatchDepositMsgsRequest) Reset()         { *m = QueryPoolBatchDepositMsgsRequest{} }\nfunc (m *QueryPoolBatchDepositMsgsRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryPoolBatchDepositMsgsRequest) ProtoMessage()    {}\nfunc (*QueryPoolBatchDepositMsgsRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{14}\n}\n\nfunc (m *QueryPoolBatchDepositMsgsRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryPoolBatchDepositMsgsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryPoolBatchDepositMsgsRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryPoolBatchDepositMsgsRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryPoolBatchDepositMsgsRequest.Merge(m, src)\n}\n\nfunc (m *QueryPoolBatchDepositMsgsRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryPoolBatchDepositMsgsRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryPoolBatchDepositMsgsRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryPoolBatchDepositMsgsRequest proto.InternalMessageInfo\n\nfunc (m *QueryPoolBatchDepositMsgsRequest) GetPoolId() uint64 {\n\tif m != nil {\n\t\treturn m.PoolId\n\t}\n\treturn 0\n}\n\nfunc (m *QueryPoolBatchDepositMsgsRequest) GetPagination() *query.PageRequest {\n\tif m != nil {\n\t\treturn m.Pagination\n\t}\n\treturn nil\n}\n\n// the request type for the QueryPoolBatchDeposit RPC method. requestable\n// including specified pool_id and msg_index.\ntype QueryPoolBatchDepositMsgRequest struct {\n\t// id of the target pool for query\n\tPoolId uint64 `protobuf:\"varint,1,opt,name=pool_id,json=poolId,proto3\" json:\"pool_id,omitempty\"`\n\t// target msg_index of the pool\n\tMsgIndex uint64 `protobuf:\"varint,2,opt,name=msg_index,json=msgIndex,proto3\" json:\"msg_index,omitempty\"`\n}\n\nfunc (m *QueryPoolBatchDepositMsgRequest) Reset()         { *m = QueryPoolBatchDepositMsgRequest{} }\nfunc (m *QueryPoolBatchDepositMsgRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryPoolBatchDepositMsgRequest) ProtoMessage()    {}\nfunc (*QueryPoolBatchDepositMsgRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{15}\n}\n\nfunc (m *QueryPoolBatchDepositMsgRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryPoolBatchDepositMsgRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryPoolBatchDepositMsgRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryPoolBatchDepositMsgRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryPoolBatchDepositMsgRequest.Merge(m, src)\n}\n\nfunc (m *QueryPoolBatchDepositMsgRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryPoolBatchDepositMsgRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryPoolBatchDepositMsgRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryPoolBatchDepositMsgRequest proto.InternalMessageInfo\n\nfunc (m *QueryPoolBatchDepositMsgRequest) GetPoolId() uint64 {\n\tif m != nil {\n\t\treturn m.PoolId\n\t}\n\treturn 0\n}\n\nfunc (m *QueryPoolBatchDepositMsgRequest) GetMsgIndex() uint64 {\n\tif m != nil {\n\t\treturn m.MsgIndex\n\t}\n\treturn 0\n}\n\n// the response type for the QueryPoolBatchDeposit RPC method. This includes a\n// list of all currently existing deposit messages of the batch and paging\n// results that contain next_key and total count.\ntype QueryPoolBatchDepositMsgsResponse struct {\n\tDeposits []DepositMsgState `protobuf:\"bytes,1,rep,name=deposits,proto3\" json:\"deposits\"`\n\t// pagination defines the pagination in the response. not working on this\n\t// version.\n\tPagination *query.PageResponse `protobuf:\"bytes,2,opt,name=pagination,proto3\" json:\"pagination,omitempty\"`\n}\n\nfunc (m *QueryPoolBatchDepositMsgsResponse) Reset()         { *m = QueryPoolBatchDepositMsgsResponse{} }\nfunc (m *QueryPoolBatchDepositMsgsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryPoolBatchDepositMsgsResponse) ProtoMessage()    {}\nfunc (*QueryPoolBatchDepositMsgsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{16}\n}\n\nfunc (m *QueryPoolBatchDepositMsgsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryPoolBatchDepositMsgsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryPoolBatchDepositMsgsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryPoolBatchDepositMsgsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryPoolBatchDepositMsgsResponse.Merge(m, src)\n}\n\nfunc (m *QueryPoolBatchDepositMsgsResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryPoolBatchDepositMsgsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryPoolBatchDepositMsgsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryPoolBatchDepositMsgsResponse proto.InternalMessageInfo\n\nfunc (m *QueryPoolBatchDepositMsgsResponse) GetDeposits() []DepositMsgState {\n\tif m != nil {\n\t\treturn m.Deposits\n\t}\n\treturn nil\n}\n\nfunc (m *QueryPoolBatchDepositMsgsResponse) GetPagination() *query.PageResponse {\n\tif m != nil {\n\t\treturn m.Pagination\n\t}\n\treturn nil\n}\n\n// the response type for the QueryPoolBatchDepositMsg RPC method. This includes\n// a batch swap message of the batch.\ntype QueryPoolBatchDepositMsgResponse struct {\n\tDeposit DepositMsgState `protobuf:\"bytes,1,opt,name=deposit,proto3\" json:\"deposit\"`\n}\n\nfunc (m *QueryPoolBatchDepositMsgResponse) Reset()         { *m = QueryPoolBatchDepositMsgResponse{} }\nfunc (m *QueryPoolBatchDepositMsgResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryPoolBatchDepositMsgResponse) ProtoMessage()    {}\nfunc (*QueryPoolBatchDepositMsgResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{17}\n}\n\nfunc (m *QueryPoolBatchDepositMsgResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryPoolBatchDepositMsgResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryPoolBatchDepositMsgResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryPoolBatchDepositMsgResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryPoolBatchDepositMsgResponse.Merge(m, src)\n}\n\nfunc (m *QueryPoolBatchDepositMsgResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryPoolBatchDepositMsgResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryPoolBatchDepositMsgResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryPoolBatchDepositMsgResponse proto.InternalMessageInfo\n\nfunc (m *QueryPoolBatchDepositMsgResponse) GetDeposit() DepositMsgState {\n\tif m != nil {\n\t\treturn m.Deposit\n\t}\n\treturn DepositMsgState{}\n}\n\n// the request type for the QueryPoolBatchWithdraw RPC method. Requestable\n// including specified pool_id and pagination offset, limit, key.\ntype QueryPoolBatchWithdrawMsgsRequest struct {\n\t// id of the target pool for query\n\tPoolId uint64 `protobuf:\"varint,1,opt,name=pool_id,json=poolId,proto3\" json:\"pool_id,omitempty\"`\n\t// pagination defines an optional pagination for the request.\n\tPagination *query.PageRequest `protobuf:\"bytes,2,opt,name=pagination,proto3\" json:\"pagination,omitempty\"`\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsRequest) Reset()         { *m = QueryPoolBatchWithdrawMsgsRequest{} }\nfunc (m *QueryPoolBatchWithdrawMsgsRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryPoolBatchWithdrawMsgsRequest) ProtoMessage()    {}\nfunc (*QueryPoolBatchWithdrawMsgsRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{18}\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryPoolBatchWithdrawMsgsRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryPoolBatchWithdrawMsgsRequest.Merge(m, src)\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryPoolBatchWithdrawMsgsRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryPoolBatchWithdrawMsgsRequest proto.InternalMessageInfo\n\nfunc (m *QueryPoolBatchWithdrawMsgsRequest) GetPoolId() uint64 {\n\tif m != nil {\n\t\treturn m.PoolId\n\t}\n\treturn 0\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsRequest) GetPagination() *query.PageRequest {\n\tif m != nil {\n\t\treturn m.Pagination\n\t}\n\treturn nil\n}\n\n// the request type for the QueryPoolBatchWithdraw RPC method. requestable\n// including specified pool_id and msg_index.\ntype QueryPoolBatchWithdrawMsgRequest struct {\n\t// id of the target pool for query\n\tPoolId uint64 `protobuf:\"varint,1,opt,name=pool_id,json=poolId,proto3\" json:\"pool_id,omitempty\"`\n\t// target msg_index of the pool\n\tMsgIndex uint64 `protobuf:\"varint,2,opt,name=msg_index,json=msgIndex,proto3\" json:\"msg_index,omitempty\"`\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgRequest) Reset()         { *m = QueryPoolBatchWithdrawMsgRequest{} }\nfunc (m *QueryPoolBatchWithdrawMsgRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryPoolBatchWithdrawMsgRequest) ProtoMessage()    {}\nfunc (*QueryPoolBatchWithdrawMsgRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{19}\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryPoolBatchWithdrawMsgRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryPoolBatchWithdrawMsgRequest.Merge(m, src)\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryPoolBatchWithdrawMsgRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryPoolBatchWithdrawMsgRequest proto.InternalMessageInfo\n\nfunc (m *QueryPoolBatchWithdrawMsgRequest) GetPoolId() uint64 {\n\tif m != nil {\n\t\treturn m.PoolId\n\t}\n\treturn 0\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgRequest) GetMsgIndex() uint64 {\n\tif m != nil {\n\t\treturn m.MsgIndex\n\t}\n\treturn 0\n}\n\n// the response type for the QueryPoolBatchWithdraw RPC method. This includes a\n// list of all currently existing withdraw messages of the batch and paging\n// results that contain next_key and total count.\ntype QueryPoolBatchWithdrawMsgsResponse struct {\n\tWithdraws []WithdrawMsgState `protobuf:\"bytes,1,rep,name=withdraws,proto3\" json:\"withdraws\"`\n\t// pagination defines the pagination in the response. Not supported on this\n\t// version.\n\tPagination *query.PageResponse `protobuf:\"bytes,2,opt,name=pagination,proto3\" json:\"pagination,omitempty\"`\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsResponse) Reset()         { *m = QueryPoolBatchWithdrawMsgsResponse{} }\nfunc (m *QueryPoolBatchWithdrawMsgsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryPoolBatchWithdrawMsgsResponse) ProtoMessage()    {}\nfunc (*QueryPoolBatchWithdrawMsgsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{20}\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryPoolBatchWithdrawMsgsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryPoolBatchWithdrawMsgsResponse.Merge(m, src)\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryPoolBatchWithdrawMsgsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryPoolBatchWithdrawMsgsResponse proto.InternalMessageInfo\n\nfunc (m *QueryPoolBatchWithdrawMsgsResponse) GetWithdraws() []WithdrawMsgState {\n\tif m != nil {\n\t\treturn m.Withdraws\n\t}\n\treturn nil\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsResponse) GetPagination() *query.PageResponse {\n\tif m != nil {\n\t\treturn m.Pagination\n\t}\n\treturn nil\n}\n\n// the response type for the QueryPoolBatchWithdrawMsg RPC method. This includes\n// a batch swap message of the batch.\ntype QueryPoolBatchWithdrawMsgResponse struct {\n\tWithdraw WithdrawMsgState `protobuf:\"bytes,1,opt,name=withdraw,proto3\" json:\"withdraw\"`\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgResponse) Reset()         { *m = QueryPoolBatchWithdrawMsgResponse{} }\nfunc (m *QueryPoolBatchWithdrawMsgResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryPoolBatchWithdrawMsgResponse) ProtoMessage()    {}\nfunc (*QueryPoolBatchWithdrawMsgResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_456c121a8965f63a, []int{21}\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryPoolBatchWithdrawMsgResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryPoolBatchWithdrawMsgResponse.Merge(m, src)\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryPoolBatchWithdrawMsgResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryPoolBatchWithdrawMsgResponse proto.InternalMessageInfo\n\nfunc (m *QueryPoolBatchWithdrawMsgResponse) GetWithdraw() WithdrawMsgState {\n\tif m != nil {\n\t\treturn m.Withdraw\n\t}\n\treturn WithdrawMsgState{}\n}\n\nfunc init() {\n\tproto.RegisterType((*QueryLiquidityPoolRequest)(nil), \"cyber.liquidity.v1beta1.QueryLiquidityPoolRequest\")\n\tproto.RegisterType((*QueryLiquidityPoolResponse)(nil), \"cyber.liquidity.v1beta1.QueryLiquidityPoolResponse\")\n\tproto.RegisterType((*QueryLiquidityPoolByPoolCoinDenomRequest)(nil), \"cyber.liquidity.v1beta1.QueryLiquidityPoolByPoolCoinDenomRequest\")\n\tproto.RegisterType((*QueryLiquidityPoolByReserveAccRequest)(nil), \"cyber.liquidity.v1beta1.QueryLiquidityPoolByReserveAccRequest\")\n\tproto.RegisterType((*QueryLiquidityPoolBatchRequest)(nil), \"cyber.liquidity.v1beta1.QueryLiquidityPoolBatchRequest\")\n\tproto.RegisterType((*QueryLiquidityPoolBatchResponse)(nil), \"cyber.liquidity.v1beta1.QueryLiquidityPoolBatchResponse\")\n\tproto.RegisterType((*QueryLiquidityPoolsRequest)(nil), \"cyber.liquidity.v1beta1.QueryLiquidityPoolsRequest\")\n\tproto.RegisterType((*QueryLiquidityPoolsResponse)(nil), \"cyber.liquidity.v1beta1.QueryLiquidityPoolsResponse\")\n\tproto.RegisterType((*QueryParamsRequest)(nil), \"cyber.liquidity.v1beta1.QueryParamsRequest\")\n\tproto.RegisterType((*QueryParamsResponse)(nil), \"cyber.liquidity.v1beta1.QueryParamsResponse\")\n\tproto.RegisterType((*QueryPoolBatchSwapMsgsRequest)(nil), \"cyber.liquidity.v1beta1.QueryPoolBatchSwapMsgsRequest\")\n\tproto.RegisterType((*QueryPoolBatchSwapMsgRequest)(nil), \"cyber.liquidity.v1beta1.QueryPoolBatchSwapMsgRequest\")\n\tproto.RegisterType((*QueryPoolBatchSwapMsgsResponse)(nil), \"cyber.liquidity.v1beta1.QueryPoolBatchSwapMsgsResponse\")\n\tproto.RegisterType((*QueryPoolBatchSwapMsgResponse)(nil), \"cyber.liquidity.v1beta1.QueryPoolBatchSwapMsgResponse\")\n\tproto.RegisterType((*QueryPoolBatchDepositMsgsRequest)(nil), \"cyber.liquidity.v1beta1.QueryPoolBatchDepositMsgsRequest\")\n\tproto.RegisterType((*QueryPoolBatchDepositMsgRequest)(nil), \"cyber.liquidity.v1beta1.QueryPoolBatchDepositMsgRequest\")\n\tproto.RegisterType((*QueryPoolBatchDepositMsgsResponse)(nil), \"cyber.liquidity.v1beta1.QueryPoolBatchDepositMsgsResponse\")\n\tproto.RegisterType((*QueryPoolBatchDepositMsgResponse)(nil), \"cyber.liquidity.v1beta1.QueryPoolBatchDepositMsgResponse\")\n\tproto.RegisterType((*QueryPoolBatchWithdrawMsgsRequest)(nil), \"cyber.liquidity.v1beta1.QueryPoolBatchWithdrawMsgsRequest\")\n\tproto.RegisterType((*QueryPoolBatchWithdrawMsgRequest)(nil), \"cyber.liquidity.v1beta1.QueryPoolBatchWithdrawMsgRequest\")\n\tproto.RegisterType((*QueryPoolBatchWithdrawMsgsResponse)(nil), \"cyber.liquidity.v1beta1.QueryPoolBatchWithdrawMsgsResponse\")\n\tproto.RegisterType((*QueryPoolBatchWithdrawMsgResponse)(nil), \"cyber.liquidity.v1beta1.QueryPoolBatchWithdrawMsgResponse\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"cyber/liquidity/v1beta1/query.proto\", fileDescriptor_456c121a8965f63a)\n}\n\nvar fileDescriptor_456c121a8965f63a = []byte{\n\t// 1129 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xdf, 0x6f, 0xdb, 0x54,\n\t0x14, 0xee, 0x1d, 0x69, 0xd7, 0x9e, 0x69, 0xfc, 0xb8, 0x2b, 0xda, 0xe6, 0x75, 0x49, 0x67, 0xb4,\n\t0xb5, 0x63, 0x10, 0xab, 0xed, 0xb6, 0x34, 0x9d, 0x36, 0xc8, 0x56, 0xb6, 0x15, 0x56, 0x69, 0x64,\n\t0x43, 0x43, 0xbc, 0x14, 0xc7, 0xb9, 0x72, 0x2d, 0x25, 0xbe, 0x6e, 0xae, 0xbb, 0xae, 0xaa, 0x2a,\n\t0x21, 0xe0, 0x15, 0x09, 0x89, 0xbf, 0x00, 0x89, 0x37, 0xf8, 0x03, 0x78, 0xe0, 0x01, 0x89, 0x97,\n\t0x3d, 0x20, 0x31, 0xa9, 0x2f, 0x7b, 0x40, 0x68, 0xb4, 0xfc, 0x21, 0xc8, 0xf7, 0x5e, 0x3b, 0x4e,\n\t0x62, 0x27, 0xb9, 0x5e, 0xb5, 0x97, 0xaa, 0xbe, 0x39, 0xdf, 0x39, 0xdf, 0x77, 0xce, 0x49, 0xfc,\n\t0xd9, 0xf0, 0x8e, 0xb5, 0x5d, 0x23, 0x2d, 0xa3, 0xe1, 0x6c, 0x6c, 0x3a, 0x75, 0xc7, 0xdf, 0x36,\n\t0x1e, 0xcf, 0xd5, 0x88, 0x6f, 0xce, 0x19, 0x1b, 0x9b, 0xa4, 0xb5, 0x5d, 0xf4, 0x5a, 0xd4, 0xa7,\n\t0xf8, 0x24, 0x0f, 0x2a, 0x46, 0x41, 0x45, 0x19, 0xa4, 0x4d, 0xda, 0xd4, 0xa6, 0x3c, 0xc6, 0x08,\n\t0xfe, 0x13, 0xe1, 0xda, 0x4c, 0x5a, 0xce, 0x76, 0x02, 0x11, 0x38, 0x65, 0x53, 0x6a, 0x37, 0x88,\n\t0x61, 0x7a, 0x8e, 0x61, 0xba, 0x2e, 0xf5, 0x4d, 0xdf, 0xa1, 0x2e, 0x93, 0x9f, 0xbe, 0x6b, 0x51,\n\t0xd6, 0xa4, 0xcc, 0xa8, 0x99, 0x8c, 0x08, 0x3a, 0x51, 0x22, 0xcf, 0xb4, 0x1d, 0x97, 0x07, 0x8b,\n\t0x58, 0xfd, 0x32, 0x9c, 0xfe, 0x34, 0x88, 0xb8, 0x17, 0x56, 0xb8, 0x4f, 0x69, 0xa3, 0x4a, 0x36,\n\t0x36, 0x09, 0xf3, 0xf1, 0x49, 0x38, 0xea, 0x51, 0xda, 0x58, 0x73, 0xea, 0xa7, 0xd0, 0x34, 0x9a,\n\t0xcd, 0x55, 0xc7, 0x82, 0xcb, 0x95, 0xba, 0xfe, 0x19, 0x68, 0x49, 0x28, 0xe6, 0x51, 0x97, 0x11,\n\t0x5c, 0x82, 0x5c, 0x10, 0xc7, 0x31, 0xc7, 0xe6, 0xcf, 0x16, 0x53, 0x9a, 0x50, 0x0c, 0x40, 0x37,\n\t0x73, 0x4f, 0xff, 0x29, 0x8c, 0x54, 0x39, 0x40, 0xaf, 0xc2, 0x6c, 0x6f, 0xda, 0x9b, 0xfc, 0xef,\n\t0x2d, 0xea, 0xb8, 0xcb, 0xc4, 0xa5, 0xcd, 0x90, 0xdb, 0x05, 0x78, 0x83, 0x73, 0xb3, 0xa8, 0xe3,\n\t0xae, 0xd5, 0x83, 0x4f, 0x78, 0xbd, 0x89, 0xea, 0x71, 0x2f, 0x1e, 0xae, 0xdf, 0x85, 0xf3, 0x49,\n\t0x39, 0xab, 0x84, 0x91, 0xd6, 0x63, 0x52, 0xb1, 0xac, 0x30, 0x61, 0x01, 0x8e, 0xb5, 0xc4, 0xe1,\n\t0x9a, 0x69, 0x59, 0x32, 0x19, 0xb4, 0xa2, 0x38, 0xbd, 0x0c, 0xf9, 0x84, 0x4c, 0xa6, 0x6f, 0xad,\n\t0x0f, 0xec, 0x97, 0x09, 0x85, 0x54, 0xa8, 0x6c, 0xda, 0x0d, 0x18, 0xad, 0x05, 0x07, 0xb2, 0x6b,\n\t0x7a, 0xff, 0xae, 0x05, 0x91, 0xb2, 0x75, 0x02, 0xa6, 0xd7, 0x93, 0x46, 0xc2, 0x42, 0x66, 0xb7,\n\t0x01, 0xda, 0xa3, 0x97, 0x25, 0x2e, 0x14, 0xc5, 0x9e, 0x14, 0x83, 0x3d, 0x29, 0x8a, 0xb5, 0x8d,\n\t0x8a, 0x98, 0x36, 0x91, 0xd8, 0x6a, 0x0c, 0xa9, 0xff, 0x88, 0xe0, 0x4c, 0x62, 0x19, 0xa9, 0xa2,\n\t0x0c, 0xa3, 0x81, 0x64, 0x76, 0x0a, 0x4d, 0xbf, 0x36, 0xec, 0xec, 0x05, 0x02, 0xdf, 0xe9, 0xa0,\n\t0x78, 0x84, 0x53, 0x9c, 0x19, 0x48, 0x51, 0xd4, 0xed, 0xe0, 0x38, 0x09, 0x98, 0x53, 0xbc, 0x6f,\n\t0xb6, 0xcc, 0x66, 0xd8, 0x01, 0xfd, 0x21, 0x9c, 0xe8, 0x38, 0x95, 0x84, 0xaf, 0xc3, 0x98, 0xc7,\n\t0x4f, 0x64, 0x53, 0x0a, 0xe9, 0x8c, 0x79, 0x98, 0xe4, 0x2c, 0x41, 0xfa, 0x57, 0x08, 0xce, 0x8a,\n\t0xb4, 0xe1, 0x54, 0x1e, 0x6c, 0x99, 0xde, 0x2a, 0xb3, 0xd9, 0xa0, 0x9d, 0xe8, 0x1a, 0xc9, 0x91,\n\t0xcc, 0x23, 0x79, 0x08, 0x53, 0x89, 0x0c, 0x06, 0x12, 0x38, 0x03, 0x13, 0x4d, 0x66, 0xaf, 0x39,\n\t0x6e, 0x9d, 0x3c, 0xe1, 0xf5, 0x73, 0xd5, 0xf1, 0x26, 0xb3, 0x57, 0x82, 0x6b, 0xfd, 0x17, 0x24,\n\t0xb7, 0x3d, 0x41, 0x98, 0x6c, 0x5d, 0x05, 0x46, 0xd9, 0x96, 0xe9, 0x85, 0xb3, 0x3e, 0x9f, 0xda,\n\t0x39, 0x89, 0x7c, 0xe0, 0x9b, 0x3e, 0x09, 0x67, 0xce, 0x91, 0x87, 0x37, 0xf3, 0x2f, 0x53, 0xc6,\n\t0x10, 0x91, 0xfd, 0x00, 0x72, 0x41, 0x49, 0x39, 0x65, 0x25, 0xae, 0x1c, 0xa8, 0x7f, 0x83, 0x60,\n\t0xba, 0xb3, 0xc4, 0x32, 0xf1, 0x28, 0x73, 0xfc, 0x57, 0x3a, 0xec, 0x47, 0xf2, 0x87, 0x24, 0x81,\n\t0xc4, 0xcb, 0xcd, 0xfb, 0x57, 0x04, 0xe7, 0xfa, 0xc8, 0x93, 0x5d, 0xfc, 0x18, 0xc6, 0xeb, 0xe2,\n\t0x38, 0x9c, 0xfa, 0x6c, 0x6a, 0x27, 0xdb, 0xf8, 0x78, 0x33, 0x23, 0xfc, 0xe1, 0xcd, 0xbe, 0x91,\n\t0x3e, 0x98, 0x88, 0xf8, 0x5d, 0x38, 0x2a, 0x0b, 0xcb, 0x0d, 0x50, 0xe5, 0x1d, 0xc2, 0xf5, 0x6f,\n\t0x7b, 0x1a, 0xf5, 0xc8, 0xf1, 0xd7, 0xeb, 0x2d, 0x73, 0xeb, 0x95, 0x2e, 0xc2, 0xe7, 0xdd, 0xa2,\n\t0x63, 0x2c, 0x5e, 0x6e, 0x13, 0x7e, 0x43, 0xa0, 0xf7, 0x13, 0x28, 0x3b, 0xba, 0x0a, 0x13, 0x5b,\n\t0xf2, 0x3c, 0xdc, 0x85, 0x8b, 0xa9, 0x3d, 0x8d, 0x65, 0x88, 0x37, 0xb5, 0x9d, 0xe1, 0xf0, 0xb6,\n\t0xc1, 0xeb, 0x33, 0x9e, 0x88, 0xfc, 0x27, 0x30, 0x1e, 0x96, 0x96, 0xfb, 0xa0, 0xcc, 0x3d, 0x4a,\n\t0x30, 0xff, 0x02, 0xc3, 0x28, 0x2f, 0x89, 0x7f, 0x42, 0xf0, 0x7a, 0xe7, 0x8d, 0x11, 0x2f, 0xa4,\n\t0xe6, 0x4d, 0xbf, 0x5b, 0x6b, 0x97, 0xd5, 0x40, 0x42, 0x94, 0x3e, 0xf3, 0xf5, 0xde, 0x7f, 0x3f,\n\t0x1c, 0x39, 0x87, 0x0b, 0x86, 0xf4, 0x7f, 0xbd, 0x3e, 0x52, 0xdc, 0x69, 0x7f, 0x46, 0x70, 0xbc,\n\t0x23, 0x07, 0x9e, 0x57, 0x28, 0x18, 0x92, 0x5c, 0x50, 0xc2, 0x48, 0x8e, 0x73, 0x9c, 0xe3, 0x25,\n\t0x7c, 0x71, 0x00, 0x47, 0x63, 0x47, 0x6e, 0xee, 0x2e, 0xfe, 0x17, 0xc1, 0x54, 0x3f, 0x43, 0x88,\n\t0x2b, 0x0a, 0x44, 0x92, 0xcd, 0x64, 0x36, 0x2d, 0x2b, 0x5c, 0xcb, 0x2d, 0x5c, 0x19, 0xa4, 0xa5,\n\t0xcb, 0xa7, 0x4a, 0x6d, 0xed, 0x83, 0x5d, 0xbc, 0x87, 0xe0, 0x74, 0xaa, 0x41, 0xc5, 0x37, 0x94,\n\t0x04, 0xf6, 0x38, 0xdb, 0x6c, 0xea, 0x2a, 0x5c, 0xdd, 0x35, 0x5c, 0x1e, 0xa4, 0x2e, 0x66, 0x9a,\n\t0x8d, 0x9d, 0xd8, 0xc5, 0x2e, 0xfe, 0x1d, 0x01, 0xee, 0x75, 0xbc, 0xb8, 0xa4, 0x22, 0x27, 0x66,\n\t0xaf, 0xb5, 0x45, 0x75, 0xa0, 0x14, 0x53, 0xe2, 0x62, 0xe6, 0xb0, 0x31, 0xf4, 0xda, 0x19, 0xdc,\n\t0x55, 0xe3, 0x3f, 0x10, 0xbc, 0xd5, 0xe3, 0x80, 0xf0, 0xd5, 0xfe, 0x44, 0xd2, 0xbc, 0xa0, 0x56,\n\t0x52, 0xc6, 0x49, 0xfe, 0xd7, 0x39, 0xff, 0x12, 0xbe, 0xa2, 0xc8, 0xdf, 0x10, 0x36, 0xeb, 0x4f,\n\t0x04, 0x6f, 0x76, 0x27, 0xc7, 0x57, 0xd4, 0xc8, 0x84, 0x1a, 0xae, 0xaa, 0xc2, 0x54, 0xbf, 0x2d,\n\t0x89, 0x12, 0x8c, 0x9d, 0xe8, 0x86, 0xb5, 0x8b, 0xff, 0x42, 0x30, 0x99, 0x64, 0x53, 0x70, 0x79,\n\t0x48, 0x6e, 0xbd, 0xce, 0x4d, 0x5b, 0xca, 0x02, 0x95, 0xd2, 0x3e, 0xe4, 0xd2, 0x96, 0xf0, 0xa2,\n\t0xaa, 0xb4, 0xc8, 0x0b, 0x3d, 0x47, 0x70, 0x22, 0xa1, 0x04, 0x5e, 0x54, 0x66, 0x15, 0xea, 0x29,\n\t0x67, 0x40, 0x4a, 0x39, 0xf7, 0xb8, 0x9c, 0xdb, 0x78, 0x39, 0xab, 0x9c, 0x8e, 0x61, 0xed, 0x21,\n\t0x78, 0x3b, 0xd1, 0x49, 0xe0, 0x61, 0x5b, 0x9e, 0xe0, 0xaf, 0xb4, 0x6b, 0x99, 0xb0, 0xaa, 0x3f,\n\t0x6d, 0xdd, 0x02, 0xdb, 0x76, 0xe5, 0xef, 0xf8, 0x0a, 0xc6, 0x8a, 0x0c, 0xbd, 0x82, 0xbd, 0x76,\n\t0x4d, 0x5b, 0xca, 0x02, 0x95, 0x92, 0x56, 0xb9, 0xa4, 0x3b, 0xf8, 0xa3, 0xcc, 0x92, 0x3a, 0x86,\n\t0xf6, 0x1d, 0x82, 0x31, 0xf1, 0xbc, 0x8b, 0x2f, 0x0d, 0x60, 0x15, 0x7f, 0xc8, 0xd6, 0xde, 0x1b,\n\t0x2e, 0x58, 0x92, 0x9e, 0xe5, 0xa4, 0x75, 0x3c, 0xdd, 0x87, 0xb4, 0x78, 0xe8, 0x5e, 0x7d, 0xba,\n\t0x9f, 0x47, 0xcf, 0xf6, 0xf3, 0xe8, 0xc5, 0x7e, 0x1e, 0x7d, 0x7f, 0x90, 0x1f, 0x79, 0x76, 0x90,\n\t0x1f, 0x79, 0x7e, 0x90, 0x1f, 0xf9, 0x62, 0xc1, 0x76, 0xfc, 0xf5, 0xcd, 0x5a, 0xd1, 0xa2, 0x4d,\n\t0x83, 0xd7, 0xb6, 0xa8, 0x6b, 0xb7, 0x08, 0x63, 0x86, 0x4d, 0xdf, 0x17, 0xaf, 0xd3, 0x9e, 0xc4,\n\t0xf2, 0xfa, 0xdb, 0x1e, 0x61, 0xb5, 0x31, 0xfe, 0xee, 0x6b, 0xe1, 0xff, 0x00, 0x00, 0x00, 0xff,\n\t0xff, 0xa6, 0xdb, 0xfb, 0x91, 0xc4, 0x13, 0x00, 0x00,\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ context.Context\n\t_ grpc.ClientConn\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// QueryClient is the client API for Query service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype QueryClient interface {\n\t// Get existing liquidity pools.\n\tLiquidityPools(ctx context.Context, in *QueryLiquidityPoolsRequest, opts ...grpc.CallOption) (*QueryLiquidityPoolsResponse, error)\n\t// Get specific liquidity pool.\n\tLiquidityPool(ctx context.Context, in *QueryLiquidityPoolRequest, opts ...grpc.CallOption) (*QueryLiquidityPoolResponse, error)\n\t// Get specific liquidity pool corresponding to the pool_coin_denom.\n\tLiquidityPoolByPoolCoinDenom(ctx context.Context, in *QueryLiquidityPoolByPoolCoinDenomRequest, opts ...grpc.CallOption) (*QueryLiquidityPoolResponse, error)\n\t// Get specific liquidity pool corresponding to the reserve account.\n\tLiquidityPoolByReserveAcc(ctx context.Context, in *QueryLiquidityPoolByReserveAccRequest, opts ...grpc.CallOption) (*QueryLiquidityPoolResponse, error)\n\t// Get the pool's current batch.\n\tLiquidityPoolBatch(ctx context.Context, in *QueryLiquidityPoolBatchRequest, opts ...grpc.CallOption) (*QueryLiquidityPoolBatchResponse, error)\n\t// Get all swap messages in the pool's current batch.\n\tPoolBatchSwapMsgs(ctx context.Context, in *QueryPoolBatchSwapMsgsRequest, opts ...grpc.CallOption) (*QueryPoolBatchSwapMsgsResponse, error)\n\t// Get a specific swap message in the pool's current batch.\n\tPoolBatchSwapMsg(ctx context.Context, in *QueryPoolBatchSwapMsgRequest, opts ...grpc.CallOption) (*QueryPoolBatchSwapMsgResponse, error)\n\t// Get all deposit messages in the pool's current batch.\n\tPoolBatchDepositMsgs(ctx context.Context, in *QueryPoolBatchDepositMsgsRequest, opts ...grpc.CallOption) (*QueryPoolBatchDepositMsgsResponse, error)\n\t// Get a specific deposit message in the pool's current batch.\n\tPoolBatchDepositMsg(ctx context.Context, in *QueryPoolBatchDepositMsgRequest, opts ...grpc.CallOption) (*QueryPoolBatchDepositMsgResponse, error)\n\t// Get all withdraw messages in the pool's current batch.\n\tPoolBatchWithdrawMsgs(ctx context.Context, in *QueryPoolBatchWithdrawMsgsRequest, opts ...grpc.CallOption) (*QueryPoolBatchWithdrawMsgsResponse, error)\n\t// Get a specific withdraw message in the pool's current batch.\n\tPoolBatchWithdrawMsg(ctx context.Context, in *QueryPoolBatchWithdrawMsgRequest, opts ...grpc.CallOption) (*QueryPoolBatchWithdrawMsgResponse, error)\n\t// Get all parameters of the liquidity module.\n\tParams(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error)\n}\n\ntype queryClient struct {\n\tcc grpc1.ClientConn\n}\n\nfunc NewQueryClient(cc grpc1.ClientConn) QueryClient {\n\treturn &queryClient{cc}\n}\n\nfunc (c *queryClient) LiquidityPools(ctx context.Context, in *QueryLiquidityPoolsRequest, opts ...grpc.CallOption) (*QueryLiquidityPoolsResponse, error) {\n\tout := new(QueryLiquidityPoolsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.liquidity.v1beta1.Query/LiquidityPools\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) LiquidityPool(ctx context.Context, in *QueryLiquidityPoolRequest, opts ...grpc.CallOption) (*QueryLiquidityPoolResponse, error) {\n\tout := new(QueryLiquidityPoolResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.liquidity.v1beta1.Query/LiquidityPool\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) LiquidityPoolByPoolCoinDenom(ctx context.Context, in *QueryLiquidityPoolByPoolCoinDenomRequest, opts ...grpc.CallOption) (*QueryLiquidityPoolResponse, error) {\n\tout := new(QueryLiquidityPoolResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.liquidity.v1beta1.Query/LiquidityPoolByPoolCoinDenom\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) LiquidityPoolByReserveAcc(ctx context.Context, in *QueryLiquidityPoolByReserveAccRequest, opts ...grpc.CallOption) (*QueryLiquidityPoolResponse, error) {\n\tout := new(QueryLiquidityPoolResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.liquidity.v1beta1.Query/LiquidityPoolByReserveAcc\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) LiquidityPoolBatch(ctx context.Context, in *QueryLiquidityPoolBatchRequest, opts ...grpc.CallOption) (*QueryLiquidityPoolBatchResponse, error) {\n\tout := new(QueryLiquidityPoolBatchResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.liquidity.v1beta1.Query/LiquidityPoolBatch\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) PoolBatchSwapMsgs(ctx context.Context, in *QueryPoolBatchSwapMsgsRequest, opts ...grpc.CallOption) (*QueryPoolBatchSwapMsgsResponse, error) {\n\tout := new(QueryPoolBatchSwapMsgsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.liquidity.v1beta1.Query/PoolBatchSwapMsgs\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) PoolBatchSwapMsg(ctx context.Context, in *QueryPoolBatchSwapMsgRequest, opts ...grpc.CallOption) (*QueryPoolBatchSwapMsgResponse, error) {\n\tout := new(QueryPoolBatchSwapMsgResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.liquidity.v1beta1.Query/PoolBatchSwapMsg\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) PoolBatchDepositMsgs(ctx context.Context, in *QueryPoolBatchDepositMsgsRequest, opts ...grpc.CallOption) (*QueryPoolBatchDepositMsgsResponse, error) {\n\tout := new(QueryPoolBatchDepositMsgsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.liquidity.v1beta1.Query/PoolBatchDepositMsgs\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) PoolBatchDepositMsg(ctx context.Context, in *QueryPoolBatchDepositMsgRequest, opts ...grpc.CallOption) (*QueryPoolBatchDepositMsgResponse, error) {\n\tout := new(QueryPoolBatchDepositMsgResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.liquidity.v1beta1.Query/PoolBatchDepositMsg\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) PoolBatchWithdrawMsgs(ctx context.Context, in *QueryPoolBatchWithdrawMsgsRequest, opts ...grpc.CallOption) (*QueryPoolBatchWithdrawMsgsResponse, error) {\n\tout := new(QueryPoolBatchWithdrawMsgsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.liquidity.v1beta1.Query/PoolBatchWithdrawMsgs\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) PoolBatchWithdrawMsg(ctx context.Context, in *QueryPoolBatchWithdrawMsgRequest, opts ...grpc.CallOption) (*QueryPoolBatchWithdrawMsgResponse, error) {\n\tout := new(QueryPoolBatchWithdrawMsgResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.liquidity.v1beta1.Query/PoolBatchWithdrawMsg\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) {\n\tout := new(QueryParamsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.liquidity.v1beta1.Query/Params\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// QueryServer is the server API for Query service.\ntype QueryServer interface {\n\t// Get existing liquidity pools.\n\tLiquidityPools(context.Context, *QueryLiquidityPoolsRequest) (*QueryLiquidityPoolsResponse, error)\n\t// Get specific liquidity pool.\n\tLiquidityPool(context.Context, *QueryLiquidityPoolRequest) (*QueryLiquidityPoolResponse, error)\n\t// Get specific liquidity pool corresponding to the pool_coin_denom.\n\tLiquidityPoolByPoolCoinDenom(context.Context, *QueryLiquidityPoolByPoolCoinDenomRequest) (*QueryLiquidityPoolResponse, error)\n\t// Get specific liquidity pool corresponding to the reserve account.\n\tLiquidityPoolByReserveAcc(context.Context, *QueryLiquidityPoolByReserveAccRequest) (*QueryLiquidityPoolResponse, error)\n\t// Get the pool's current batch.\n\tLiquidityPoolBatch(context.Context, *QueryLiquidityPoolBatchRequest) (*QueryLiquidityPoolBatchResponse, error)\n\t// Get all swap messages in the pool's current batch.\n\tPoolBatchSwapMsgs(context.Context, *QueryPoolBatchSwapMsgsRequest) (*QueryPoolBatchSwapMsgsResponse, error)\n\t// Get a specific swap message in the pool's current batch.\n\tPoolBatchSwapMsg(context.Context, *QueryPoolBatchSwapMsgRequest) (*QueryPoolBatchSwapMsgResponse, error)\n\t// Get all deposit messages in the pool's current batch.\n\tPoolBatchDepositMsgs(context.Context, *QueryPoolBatchDepositMsgsRequest) (*QueryPoolBatchDepositMsgsResponse, error)\n\t// Get a specific deposit message in the pool's current batch.\n\tPoolBatchDepositMsg(context.Context, *QueryPoolBatchDepositMsgRequest) (*QueryPoolBatchDepositMsgResponse, error)\n\t// Get all withdraw messages in the pool's current batch.\n\tPoolBatchWithdrawMsgs(context.Context, *QueryPoolBatchWithdrawMsgsRequest) (*QueryPoolBatchWithdrawMsgsResponse, error)\n\t// Get a specific withdraw message in the pool's current batch.\n\tPoolBatchWithdrawMsg(context.Context, *QueryPoolBatchWithdrawMsgRequest) (*QueryPoolBatchWithdrawMsgResponse, error)\n\t// Get all parameters of the liquidity module.\n\tParams(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error)\n}\n\n// UnimplementedQueryServer can be embedded to have forward compatible implementations.\ntype UnimplementedQueryServer struct{}\n\nfunc (*UnimplementedQueryServer) LiquidityPools(ctx context.Context, req *QueryLiquidityPoolsRequest) (*QueryLiquidityPoolsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method LiquidityPools not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) LiquidityPool(ctx context.Context, req *QueryLiquidityPoolRequest) (*QueryLiquidityPoolResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method LiquidityPool not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) LiquidityPoolByPoolCoinDenom(ctx context.Context, req *QueryLiquidityPoolByPoolCoinDenomRequest) (*QueryLiquidityPoolResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method LiquidityPoolByPoolCoinDenom not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) LiquidityPoolByReserveAcc(ctx context.Context, req *QueryLiquidityPoolByReserveAccRequest) (*QueryLiquidityPoolResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method LiquidityPoolByReserveAcc not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) LiquidityPoolBatch(ctx context.Context, req *QueryLiquidityPoolBatchRequest) (*QueryLiquidityPoolBatchResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method LiquidityPoolBatch not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) PoolBatchSwapMsgs(ctx context.Context, req *QueryPoolBatchSwapMsgsRequest) (*QueryPoolBatchSwapMsgsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method PoolBatchSwapMsgs not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) PoolBatchSwapMsg(ctx context.Context, req *QueryPoolBatchSwapMsgRequest) (*QueryPoolBatchSwapMsgResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method PoolBatchSwapMsg not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) PoolBatchDepositMsgs(ctx context.Context, req *QueryPoolBatchDepositMsgsRequest) (*QueryPoolBatchDepositMsgsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method PoolBatchDepositMsgs not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) PoolBatchDepositMsg(ctx context.Context, req *QueryPoolBatchDepositMsgRequest) (*QueryPoolBatchDepositMsgResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method PoolBatchDepositMsg not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) PoolBatchWithdrawMsgs(ctx context.Context, req *QueryPoolBatchWithdrawMsgsRequest) (*QueryPoolBatchWithdrawMsgsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method PoolBatchWithdrawMsgs not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) PoolBatchWithdrawMsg(ctx context.Context, req *QueryPoolBatchWithdrawMsgRequest) (*QueryPoolBatchWithdrawMsgResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method PoolBatchWithdrawMsg not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Params not implemented\")\n}\n\nfunc RegisterQueryServer(s grpc1.Server, srv QueryServer) {\n\ts.RegisterService(&_Query_serviceDesc, srv)\n}\n\nfunc _Query_LiquidityPools_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryLiquidityPoolsRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).LiquidityPools(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.liquidity.v1beta1.Query/LiquidityPools\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).LiquidityPools(ctx, req.(*QueryLiquidityPoolsRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_LiquidityPool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryLiquidityPoolRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).LiquidityPool(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.liquidity.v1beta1.Query/LiquidityPool\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).LiquidityPool(ctx, req.(*QueryLiquidityPoolRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_LiquidityPoolByPoolCoinDenom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryLiquidityPoolByPoolCoinDenomRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).LiquidityPoolByPoolCoinDenom(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.liquidity.v1beta1.Query/LiquidityPoolByPoolCoinDenom\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).LiquidityPoolByPoolCoinDenom(ctx, req.(*QueryLiquidityPoolByPoolCoinDenomRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_LiquidityPoolByReserveAcc_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryLiquidityPoolByReserveAccRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).LiquidityPoolByReserveAcc(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.liquidity.v1beta1.Query/LiquidityPoolByReserveAcc\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).LiquidityPoolByReserveAcc(ctx, req.(*QueryLiquidityPoolByReserveAccRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_LiquidityPoolBatch_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryLiquidityPoolBatchRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).LiquidityPoolBatch(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.liquidity.v1beta1.Query/LiquidityPoolBatch\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).LiquidityPoolBatch(ctx, req.(*QueryLiquidityPoolBatchRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_PoolBatchSwapMsgs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryPoolBatchSwapMsgsRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).PoolBatchSwapMsgs(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.liquidity.v1beta1.Query/PoolBatchSwapMsgs\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).PoolBatchSwapMsgs(ctx, req.(*QueryPoolBatchSwapMsgsRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_PoolBatchSwapMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryPoolBatchSwapMsgRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).PoolBatchSwapMsg(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.liquidity.v1beta1.Query/PoolBatchSwapMsg\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).PoolBatchSwapMsg(ctx, req.(*QueryPoolBatchSwapMsgRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_PoolBatchDepositMsgs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryPoolBatchDepositMsgsRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).PoolBatchDepositMsgs(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.liquidity.v1beta1.Query/PoolBatchDepositMsgs\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).PoolBatchDepositMsgs(ctx, req.(*QueryPoolBatchDepositMsgsRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_PoolBatchDepositMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryPoolBatchDepositMsgRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).PoolBatchDepositMsg(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.liquidity.v1beta1.Query/PoolBatchDepositMsg\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).PoolBatchDepositMsg(ctx, req.(*QueryPoolBatchDepositMsgRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_PoolBatchWithdrawMsgs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryPoolBatchWithdrawMsgsRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).PoolBatchWithdrawMsgs(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.liquidity.v1beta1.Query/PoolBatchWithdrawMsgs\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).PoolBatchWithdrawMsgs(ctx, req.(*QueryPoolBatchWithdrawMsgsRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_PoolBatchWithdrawMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryPoolBatchWithdrawMsgRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).PoolBatchWithdrawMsg(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.liquidity.v1beta1.Query/PoolBatchWithdrawMsg\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).PoolBatchWithdrawMsg(ctx, req.(*QueryPoolBatchWithdrawMsgRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryParamsRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).Params(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.liquidity.v1beta1.Query/Params\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _Query_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"cyber.liquidity.v1beta1.Query\",\n\tHandlerType: (*QueryServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"LiquidityPools\",\n\t\t\tHandler:    _Query_LiquidityPools_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"LiquidityPool\",\n\t\t\tHandler:    _Query_LiquidityPool_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"LiquidityPoolByPoolCoinDenom\",\n\t\t\tHandler:    _Query_LiquidityPoolByPoolCoinDenom_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"LiquidityPoolByReserveAcc\",\n\t\t\tHandler:    _Query_LiquidityPoolByReserveAcc_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"LiquidityPoolBatch\",\n\t\t\tHandler:    _Query_LiquidityPoolBatch_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"PoolBatchSwapMsgs\",\n\t\t\tHandler:    _Query_PoolBatchSwapMsgs_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"PoolBatchSwapMsg\",\n\t\t\tHandler:    _Query_PoolBatchSwapMsg_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"PoolBatchDepositMsgs\",\n\t\t\tHandler:    _Query_PoolBatchDepositMsgs_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"PoolBatchDepositMsg\",\n\t\t\tHandler:    _Query_PoolBatchDepositMsg_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"PoolBatchWithdrawMsgs\",\n\t\t\tHandler:    _Query_PoolBatchWithdrawMsgs_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"PoolBatchWithdrawMsg\",\n\t\t\tHandler:    _Query_PoolBatchWithdrawMsg_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Params\",\n\t\t\tHandler:    _Query_Params_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"cyber/liquidity/v1beta1/query.proto\",\n}\n\nfunc (m *QueryLiquidityPoolRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryLiquidityPoolRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryLiquidityPoolRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.PoolId != 0 {\n\t\ti = encodeVarintQuery(dAtA, i, uint64(m.PoolId))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryLiquidityPoolResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryLiquidityPoolResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryLiquidityPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Pool.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryLiquidityPoolByPoolCoinDenomRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryLiquidityPoolByPoolCoinDenomRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryLiquidityPoolByPoolCoinDenomRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.PoolCoinDenom) > 0 {\n\t\ti -= len(m.PoolCoinDenom)\n\t\tcopy(dAtA[i:], m.PoolCoinDenom)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.PoolCoinDenom)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryLiquidityPoolByReserveAccRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryLiquidityPoolByReserveAccRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryLiquidityPoolByReserveAccRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.ReserveAcc) > 0 {\n\t\ti -= len(m.ReserveAcc)\n\t\tcopy(dAtA[i:], m.ReserveAcc)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.ReserveAcc)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryLiquidityPoolBatchRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryLiquidityPoolBatchRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryLiquidityPoolBatchRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.PoolId != 0 {\n\t\ti = encodeVarintQuery(dAtA, i, uint64(m.PoolId))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryLiquidityPoolBatchResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryLiquidityPoolBatchResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryLiquidityPoolBatchResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Batch.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryLiquidityPoolsRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryLiquidityPoolsRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryLiquidityPoolsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Pagination != nil {\n\t\t{\n\t\t\tsize, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\ti -= size\n\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryLiquidityPoolsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryLiquidityPoolsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryLiquidityPoolsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Pagination != nil {\n\t\t{\n\t\t\tsize, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\ti -= size\n\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Pools) > 0 {\n\t\tfor iNdEx := len(m.Pools) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.Pools[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0xa\n\t\t}\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryPoolBatchSwapMsgsRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryPoolBatchSwapMsgsRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryPoolBatchSwapMsgsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Pagination != nil {\n\t\t{\n\t\t\tsize, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\ti -= size\n\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif m.PoolId != 0 {\n\t\ti = encodeVarintQuery(dAtA, i, uint64(m.PoolId))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryPoolBatchSwapMsgRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryPoolBatchSwapMsgRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryPoolBatchSwapMsgRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.MsgIndex != 0 {\n\t\ti = encodeVarintQuery(dAtA, i, uint64(m.MsgIndex))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif m.PoolId != 0 {\n\t\ti = encodeVarintQuery(dAtA, i, uint64(m.PoolId))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryPoolBatchSwapMsgsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryPoolBatchSwapMsgsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryPoolBatchSwapMsgsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Pagination != nil {\n\t\t{\n\t\t\tsize, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\ti -= size\n\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Swaps) > 0 {\n\t\tfor iNdEx := len(m.Swaps) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.Swaps[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0xa\n\t\t}\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryPoolBatchSwapMsgResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryPoolBatchSwapMsgResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryPoolBatchSwapMsgResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Swap.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryPoolBatchDepositMsgsRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryPoolBatchDepositMsgsRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryPoolBatchDepositMsgsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Pagination != nil {\n\t\t{\n\t\t\tsize, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\ti -= size\n\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif m.PoolId != 0 {\n\t\ti = encodeVarintQuery(dAtA, i, uint64(m.PoolId))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryPoolBatchDepositMsgRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryPoolBatchDepositMsgRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryPoolBatchDepositMsgRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.MsgIndex != 0 {\n\t\ti = encodeVarintQuery(dAtA, i, uint64(m.MsgIndex))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif m.PoolId != 0 {\n\t\ti = encodeVarintQuery(dAtA, i, uint64(m.PoolId))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryPoolBatchDepositMsgsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryPoolBatchDepositMsgsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryPoolBatchDepositMsgsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Pagination != nil {\n\t\t{\n\t\t\tsize, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\ti -= size\n\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Deposits) > 0 {\n\t\tfor iNdEx := len(m.Deposits) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.Deposits[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0xa\n\t\t}\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryPoolBatchDepositMsgResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryPoolBatchDepositMsgResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryPoolBatchDepositMsgResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Deposit.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Pagination != nil {\n\t\t{\n\t\t\tsize, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\ti -= size\n\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif m.PoolId != 0 {\n\t\ti = encodeVarintQuery(dAtA, i, uint64(m.PoolId))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.MsgIndex != 0 {\n\t\ti = encodeVarintQuery(dAtA, i, uint64(m.MsgIndex))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif m.PoolId != 0 {\n\t\ti = encodeVarintQuery(dAtA, i, uint64(m.PoolId))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Pagination != nil {\n\t\t{\n\t\t\tsize, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\ti -= size\n\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Withdraws) > 0 {\n\t\tfor iNdEx := len(m.Withdraws) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.Withdraws[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0xa\n\t\t}\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Withdraw.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintQuery(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovQuery(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *QueryLiquidityPoolRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.PoolId != 0 {\n\t\tn += 1 + sovQuery(uint64(m.PoolId))\n\t}\n\treturn n\n}\n\nfunc (m *QueryLiquidityPoolResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Pool.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc (m *QueryLiquidityPoolByPoolCoinDenomRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.PoolCoinDenom)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryLiquidityPoolByReserveAccRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.ReserveAcc)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryLiquidityPoolBatchRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.PoolId != 0 {\n\t\tn += 1 + sovQuery(uint64(m.PoolId))\n\t}\n\treturn n\n}\n\nfunc (m *QueryLiquidityPoolBatchResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Batch.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc (m *QueryLiquidityPoolsRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.Pagination != nil {\n\t\tl = m.Pagination.Size()\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryLiquidityPoolsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif len(m.Pools) > 0 {\n\t\tfor _, e := range m.Pools {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovQuery(uint64(l))\n\t\t}\n\t}\n\tif m.Pagination != nil {\n\t\tl = m.Pagination.Size()\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryParamsRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *QueryParamsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Params.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc (m *QueryPoolBatchSwapMsgsRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.PoolId != 0 {\n\t\tn += 1 + sovQuery(uint64(m.PoolId))\n\t}\n\tif m.Pagination != nil {\n\t\tl = m.Pagination.Size()\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryPoolBatchSwapMsgRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.PoolId != 0 {\n\t\tn += 1 + sovQuery(uint64(m.PoolId))\n\t}\n\tif m.MsgIndex != 0 {\n\t\tn += 1 + sovQuery(uint64(m.MsgIndex))\n\t}\n\treturn n\n}\n\nfunc (m *QueryPoolBatchSwapMsgsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif len(m.Swaps) > 0 {\n\t\tfor _, e := range m.Swaps {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovQuery(uint64(l))\n\t\t}\n\t}\n\tif m.Pagination != nil {\n\t\tl = m.Pagination.Size()\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryPoolBatchSwapMsgResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Swap.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc (m *QueryPoolBatchDepositMsgsRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.PoolId != 0 {\n\t\tn += 1 + sovQuery(uint64(m.PoolId))\n\t}\n\tif m.Pagination != nil {\n\t\tl = m.Pagination.Size()\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryPoolBatchDepositMsgRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.PoolId != 0 {\n\t\tn += 1 + sovQuery(uint64(m.PoolId))\n\t}\n\tif m.MsgIndex != 0 {\n\t\tn += 1 + sovQuery(uint64(m.MsgIndex))\n\t}\n\treturn n\n}\n\nfunc (m *QueryPoolBatchDepositMsgsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif len(m.Deposits) > 0 {\n\t\tfor _, e := range m.Deposits {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovQuery(uint64(l))\n\t\t}\n\t}\n\tif m.Pagination != nil {\n\t\tl = m.Pagination.Size()\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryPoolBatchDepositMsgResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Deposit.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.PoolId != 0 {\n\t\tn += 1 + sovQuery(uint64(m.PoolId))\n\t}\n\tif m.Pagination != nil {\n\t\tl = m.Pagination.Size()\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.PoolId != 0 {\n\t\tn += 1 + sovQuery(uint64(m.PoolId))\n\t}\n\tif m.MsgIndex != 0 {\n\t\tn += 1 + sovQuery(uint64(m.MsgIndex))\n\t}\n\treturn n\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif len(m.Withdraws) > 0 {\n\t\tfor _, e := range m.Withdraws {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovQuery(uint64(l))\n\t\t}\n\t}\n\tif m.Pagination != nil {\n\t\tl = m.Pagination.Size()\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Withdraw.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc sovQuery(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozQuery(x uint64) (n int) {\n\treturn sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *QueryLiquidityPoolRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLiquidityPoolRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLiquidityPoolRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolId\", wireType)\n\t\t\t}\n\t\t\tm.PoolId = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.PoolId |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryLiquidityPoolResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLiquidityPoolResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLiquidityPoolResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Pool\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Pool.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryLiquidityPoolByPoolCoinDenomRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLiquidityPoolByPoolCoinDenomRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLiquidityPoolByPoolCoinDenomRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolCoinDenom\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.PoolCoinDenom = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryLiquidityPoolByReserveAccRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLiquidityPoolByReserveAccRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLiquidityPoolByReserveAccRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field ReserveAcc\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.ReserveAcc = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryLiquidityPoolBatchRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLiquidityPoolBatchRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLiquidityPoolBatchRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolId\", wireType)\n\t\t\t}\n\t\t\tm.PoolId = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.PoolId |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryLiquidityPoolBatchResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLiquidityPoolBatchResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLiquidityPoolBatchResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Batch\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Batch.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryLiquidityPoolsRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLiquidityPoolsRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLiquidityPoolsRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Pagination\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif m.Pagination == nil {\n\t\t\t\tm.Pagination = &query.PageRequest{}\n\t\t\t}\n\t\t\tif err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryLiquidityPoolsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLiquidityPoolsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLiquidityPoolsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Pools\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Pools = append(m.Pools, Pool{})\n\t\t\tif err := m.Pools[len(m.Pools)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Pagination\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif m.Pagination == nil {\n\t\t\t\tm.Pagination = &query.PageResponse{}\n\t\t\t}\n\t\t\tif err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryParamsRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryParamsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryPoolBatchSwapMsgsRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchSwapMsgsRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchSwapMsgsRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolId\", wireType)\n\t\t\t}\n\t\t\tm.PoolId = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.PoolId |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Pagination\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif m.Pagination == nil {\n\t\t\t\tm.Pagination = &query.PageRequest{}\n\t\t\t}\n\t\t\tif err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryPoolBatchSwapMsgRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchSwapMsgRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchSwapMsgRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolId\", wireType)\n\t\t\t}\n\t\t\tm.PoolId = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.PoolId |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MsgIndex\", wireType)\n\t\t\t}\n\t\t\tm.MsgIndex = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.MsgIndex |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryPoolBatchSwapMsgsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchSwapMsgsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchSwapMsgsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Swaps\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Swaps = append(m.Swaps, SwapMsgState{})\n\t\t\tif err := m.Swaps[len(m.Swaps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Pagination\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif m.Pagination == nil {\n\t\t\t\tm.Pagination = &query.PageResponse{}\n\t\t\t}\n\t\t\tif err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryPoolBatchSwapMsgResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchSwapMsgResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchSwapMsgResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Swap\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Swap.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryPoolBatchDepositMsgsRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchDepositMsgsRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchDepositMsgsRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolId\", wireType)\n\t\t\t}\n\t\t\tm.PoolId = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.PoolId |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Pagination\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif m.Pagination == nil {\n\t\t\t\tm.Pagination = &query.PageRequest{}\n\t\t\t}\n\t\t\tif err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryPoolBatchDepositMsgRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchDepositMsgRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchDepositMsgRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolId\", wireType)\n\t\t\t}\n\t\t\tm.PoolId = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.PoolId |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MsgIndex\", wireType)\n\t\t\t}\n\t\t\tm.MsgIndex = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.MsgIndex |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryPoolBatchDepositMsgsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchDepositMsgsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchDepositMsgsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Deposits\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Deposits = append(m.Deposits, DepositMsgState{})\n\t\t\tif err := m.Deposits[len(m.Deposits)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Pagination\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif m.Pagination == nil {\n\t\t\t\tm.Pagination = &query.PageResponse{}\n\t\t\t}\n\t\t\tif err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryPoolBatchDepositMsgResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchDepositMsgResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchDepositMsgResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Deposit\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Deposit.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchWithdrawMsgsRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchWithdrawMsgsRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolId\", wireType)\n\t\t\t}\n\t\t\tm.PoolId = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.PoolId |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Pagination\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif m.Pagination == nil {\n\t\t\t\tm.Pagination = &query.PageRequest{}\n\t\t\t}\n\t\t\tif err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchWithdrawMsgRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchWithdrawMsgRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolId\", wireType)\n\t\t\t}\n\t\t\tm.PoolId = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.PoolId |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MsgIndex\", wireType)\n\t\t\t}\n\t\t\tm.MsgIndex = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.MsgIndex |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchWithdrawMsgsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchWithdrawMsgsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Withdraws\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Withdraws = append(m.Withdraws, WithdrawMsgState{})\n\t\t\tif err := m.Withdraws[len(m.Withdraws)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Pagination\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif m.Pagination == nil {\n\t\t\t\tm.Pagination = &query.PageResponse{}\n\t\t\t}\n\t\t\tif err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryPoolBatchWithdrawMsgResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchWithdrawMsgResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryPoolBatchWithdrawMsgResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Withdraw\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Withdraw.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipQuery(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupQuery\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthQuery\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthQuery        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowQuery          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupQuery = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/liquidity/types/query.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: cyber/liquidity/v1beta1/query.proto\n\n/*\nPackage types is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage types\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/golang/protobuf/descriptor\"\n\t\"github.com/golang/protobuf/proto\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = descriptor.ForMessage\n\t_ = metadata.Join\n)\n\nvar filter_Query_LiquidityPools_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_Query_LiquidityPools_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryLiquidityPoolsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_LiquidityPools_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.LiquidityPools(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_LiquidityPools_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryLiquidityPoolsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_LiquidityPools_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.LiquidityPools(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_Query_LiquidityPool_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryLiquidityPoolRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"pool_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"pool_id\")\n\t}\n\n\tprotoReq.PoolId, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"pool_id\", err)\n\t}\n\n\tmsg, err := client.LiquidityPool(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_LiquidityPool_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryLiquidityPoolRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"pool_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"pool_id\")\n\t}\n\n\tprotoReq.PoolId, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"pool_id\", err)\n\t}\n\n\tmsg, err := server.LiquidityPool(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_Query_LiquidityPoolByPoolCoinDenom_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryLiquidityPoolByPoolCoinDenomRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"pool_coin_denom\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"pool_coin_denom\")\n\t}\n\n\tprotoReq.PoolCoinDenom, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"pool_coin_denom\", err)\n\t}\n\n\tmsg, err := client.LiquidityPoolByPoolCoinDenom(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_LiquidityPoolByPoolCoinDenom_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryLiquidityPoolByPoolCoinDenomRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"pool_coin_denom\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"pool_coin_denom\")\n\t}\n\n\tprotoReq.PoolCoinDenom, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"pool_coin_denom\", err)\n\t}\n\n\tmsg, err := server.LiquidityPoolByPoolCoinDenom(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_Query_LiquidityPoolByReserveAcc_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryLiquidityPoolByReserveAccRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"reserve_acc\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"reserve_acc\")\n\t}\n\n\tprotoReq.ReserveAcc, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"reserve_acc\", err)\n\t}\n\n\tmsg, err := client.LiquidityPoolByReserveAcc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_LiquidityPoolByReserveAcc_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryLiquidityPoolByReserveAccRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"reserve_acc\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"reserve_acc\")\n\t}\n\n\tprotoReq.ReserveAcc, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"reserve_acc\", err)\n\t}\n\n\tmsg, err := server.LiquidityPoolByReserveAcc(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_Query_LiquidityPoolBatch_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryLiquidityPoolBatchRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"pool_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"pool_id\")\n\t}\n\n\tprotoReq.PoolId, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"pool_id\", err)\n\t}\n\n\tmsg, err := client.LiquidityPoolBatch(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_LiquidityPoolBatch_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryLiquidityPoolBatchRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"pool_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"pool_id\")\n\t}\n\n\tprotoReq.PoolId, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"pool_id\", err)\n\t}\n\n\tmsg, err := server.LiquidityPoolBatch(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Query_PoolBatchSwapMsgs_0 = &utilities.DoubleArray{Encoding: map[string]int{\"pool_id\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_Query_PoolBatchSwapMsgs_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryPoolBatchSwapMsgsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"pool_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"pool_id\")\n\t}\n\n\tprotoReq.PoolId, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"pool_id\", err)\n\t}\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_PoolBatchSwapMsgs_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.PoolBatchSwapMsgs(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_PoolBatchSwapMsgs_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryPoolBatchSwapMsgsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"pool_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"pool_id\")\n\t}\n\n\tprotoReq.PoolId, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"pool_id\", err)\n\t}\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_PoolBatchSwapMsgs_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.PoolBatchSwapMsgs(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_Query_PoolBatchSwapMsg_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryPoolBatchSwapMsgRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"pool_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"pool_id\")\n\t}\n\n\tprotoReq.PoolId, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"pool_id\", err)\n\t}\n\n\tval, ok = pathParams[\"msg_index\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"msg_index\")\n\t}\n\n\tprotoReq.MsgIndex, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"msg_index\", err)\n\t}\n\n\tmsg, err := client.PoolBatchSwapMsg(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_PoolBatchSwapMsg_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryPoolBatchSwapMsgRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"pool_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"pool_id\")\n\t}\n\n\tprotoReq.PoolId, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"pool_id\", err)\n\t}\n\n\tval, ok = pathParams[\"msg_index\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"msg_index\")\n\t}\n\n\tprotoReq.MsgIndex, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"msg_index\", err)\n\t}\n\n\tmsg, err := server.PoolBatchSwapMsg(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Query_PoolBatchDepositMsgs_0 = &utilities.DoubleArray{Encoding: map[string]int{\"pool_id\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_Query_PoolBatchDepositMsgs_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryPoolBatchDepositMsgsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"pool_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"pool_id\")\n\t}\n\n\tprotoReq.PoolId, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"pool_id\", err)\n\t}\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_PoolBatchDepositMsgs_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.PoolBatchDepositMsgs(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_PoolBatchDepositMsgs_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryPoolBatchDepositMsgsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"pool_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"pool_id\")\n\t}\n\n\tprotoReq.PoolId, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"pool_id\", err)\n\t}\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_PoolBatchDepositMsgs_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.PoolBatchDepositMsgs(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_Query_PoolBatchDepositMsg_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryPoolBatchDepositMsgRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"pool_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"pool_id\")\n\t}\n\n\tprotoReq.PoolId, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"pool_id\", err)\n\t}\n\n\tval, ok = pathParams[\"msg_index\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"msg_index\")\n\t}\n\n\tprotoReq.MsgIndex, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"msg_index\", err)\n\t}\n\n\tmsg, err := client.PoolBatchDepositMsg(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_PoolBatchDepositMsg_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryPoolBatchDepositMsgRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"pool_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"pool_id\")\n\t}\n\n\tprotoReq.PoolId, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"pool_id\", err)\n\t}\n\n\tval, ok = pathParams[\"msg_index\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"msg_index\")\n\t}\n\n\tprotoReq.MsgIndex, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"msg_index\", err)\n\t}\n\n\tmsg, err := server.PoolBatchDepositMsg(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Query_PoolBatchWithdrawMsgs_0 = &utilities.DoubleArray{Encoding: map[string]int{\"pool_id\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_Query_PoolBatchWithdrawMsgs_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryPoolBatchWithdrawMsgsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"pool_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"pool_id\")\n\t}\n\n\tprotoReq.PoolId, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"pool_id\", err)\n\t}\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_PoolBatchWithdrawMsgs_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.PoolBatchWithdrawMsgs(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_PoolBatchWithdrawMsgs_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryPoolBatchWithdrawMsgsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"pool_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"pool_id\")\n\t}\n\n\tprotoReq.PoolId, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"pool_id\", err)\n\t}\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_PoolBatchWithdrawMsgs_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.PoolBatchWithdrawMsgs(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_Query_PoolBatchWithdrawMsg_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryPoolBatchWithdrawMsgRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"pool_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"pool_id\")\n\t}\n\n\tprotoReq.PoolId, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"pool_id\", err)\n\t}\n\n\tval, ok = pathParams[\"msg_index\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"msg_index\")\n\t}\n\n\tprotoReq.MsgIndex, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"msg_index\", err)\n\t}\n\n\tmsg, err := client.PoolBatchWithdrawMsg(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_PoolBatchWithdrawMsg_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryPoolBatchWithdrawMsgRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"pool_id\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"pool_id\")\n\t}\n\n\tprotoReq.PoolId, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"pool_id\", err)\n\t}\n\n\tval, ok = pathParams[\"msg_index\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"msg_index\")\n\t}\n\n\tprotoReq.MsgIndex, err = runtime.Uint64(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"msg_index\", err)\n\t}\n\n\tmsg, err := server.PoolBatchWithdrawMsg(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryParamsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryParamsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := server.Params(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterQueryHandlerServer registers the http handlers for service Query to \"mux\".\n// UnaryRPC     :call QueryServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead.\nfunc RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error {\n\tmux.Handle(\"GET\", pattern_Query_LiquidityPools_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_LiquidityPools_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_LiquidityPools_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_LiquidityPool_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_LiquidityPool_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_LiquidityPool_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_LiquidityPoolByPoolCoinDenom_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_LiquidityPoolByPoolCoinDenom_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_LiquidityPoolByPoolCoinDenom_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_LiquidityPoolByReserveAcc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_LiquidityPoolByReserveAcc_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_LiquidityPoolByReserveAcc_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_LiquidityPoolBatch_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_LiquidityPoolBatch_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_LiquidityPoolBatch_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_PoolBatchSwapMsgs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_PoolBatchSwapMsgs_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_PoolBatchSwapMsgs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_PoolBatchSwapMsg_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_PoolBatchSwapMsg_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_PoolBatchSwapMsg_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_PoolBatchDepositMsgs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_PoolBatchDepositMsgs_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_PoolBatchDepositMsgs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_PoolBatchDepositMsg_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_PoolBatchDepositMsg_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_PoolBatchDepositMsg_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_PoolBatchWithdrawMsgs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_PoolBatchWithdrawMsgs_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_PoolBatchWithdrawMsgs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_PoolBatchWithdrawMsg_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_PoolBatchWithdrawMsg_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_PoolBatchWithdrawMsg_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.Dial(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Infof(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Infof(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\n\treturn RegisterQueryHandler(ctx, mux, conn)\n}\n\n// RegisterQueryHandler registers the http handlers for service Query to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn))\n}\n\n// RegisterQueryHandlerClient registers the http handlers for service Query\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"QueryClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"QueryClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"QueryClient\" to call the correct interceptors.\nfunc RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error {\n\tmux.Handle(\"GET\", pattern_Query_LiquidityPools_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_LiquidityPools_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_LiquidityPools_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_LiquidityPool_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_LiquidityPool_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_LiquidityPool_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_LiquidityPoolByPoolCoinDenom_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_LiquidityPoolByPoolCoinDenom_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_LiquidityPoolByPoolCoinDenom_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_LiquidityPoolByReserveAcc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_LiquidityPoolByReserveAcc_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_LiquidityPoolByReserveAcc_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_LiquidityPoolBatch_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_LiquidityPoolBatch_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_LiquidityPoolBatch_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_PoolBatchSwapMsgs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_PoolBatchSwapMsgs_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_PoolBatchSwapMsgs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_PoolBatchSwapMsg_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_PoolBatchSwapMsg_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_PoolBatchSwapMsg_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_PoolBatchDepositMsgs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_PoolBatchDepositMsgs_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_PoolBatchDepositMsgs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_PoolBatchDepositMsg_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_PoolBatchDepositMsg_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_PoolBatchDepositMsg_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_PoolBatchWithdrawMsgs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_PoolBatchWithdrawMsgs_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_PoolBatchWithdrawMsgs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_PoolBatchWithdrawMsg_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_PoolBatchWithdrawMsg_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_PoolBatchWithdrawMsg_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\nvar (\n\tpattern_Query_LiquidityPools_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"cosmos\", \"liquidity\", \"v1beta1\", \"pools\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_LiquidityPool_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{\"cosmos\", \"liquidity\", \"v1beta1\", \"pools\", \"pool_id\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_LiquidityPoolByPoolCoinDenom_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 4}, []string{\"cosmos\", \"liquidity\", \"v1beta1\", \"pools\", \"pool_coin_denom\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_LiquidityPoolByReserveAcc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 4}, []string{\"cosmos\", \"liquidity\", \"v1beta1\", \"pools\", \"reserve_acc\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_LiquidityPoolBatch_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{\"cosmos\", \"liquidity\", \"v1beta1\", \"pools\", \"pool_id\", \"batch\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_PoolBatchSwapMsgs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 2, 6}, []string{\"cosmos\", \"liquidity\", \"v1beta1\", \"pools\", \"pool_id\", \"batch\", \"swaps\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_PoolBatchSwapMsg_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 2, 6, 1, 0, 4, 1, 5, 7}, []string{\"cosmos\", \"liquidity\", \"v1beta1\", \"pools\", \"pool_id\", \"batch\", \"swaps\", \"msg_index\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_PoolBatchDepositMsgs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 2, 6}, []string{\"cosmos\", \"liquidity\", \"v1beta1\", \"pools\", \"pool_id\", \"batch\", \"deposits\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_PoolBatchDepositMsg_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 2, 6, 1, 0, 4, 1, 5, 7}, []string{\"cosmos\", \"liquidity\", \"v1beta1\", \"pools\", \"pool_id\", \"batch\", \"deposits\", \"msg_index\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_PoolBatchWithdrawMsgs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 2, 6}, []string{\"cosmos\", \"liquidity\", \"v1beta1\", \"pools\", \"pool_id\", \"batch\", \"withdraws\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_PoolBatchWithdrawMsg_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 2, 6, 1, 0, 4, 1, 5, 7}, []string{\"cosmos\", \"liquidity\", \"v1beta1\", \"pools\", \"pool_id\", \"batch\", \"withdraws\", \"msg_index\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"cosmos\", \"liquidity\", \"v1beta1\", \"params\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n)\n\nvar (\n\tforward_Query_LiquidityPools_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_LiquidityPool_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_LiquidityPoolByPoolCoinDenom_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_LiquidityPoolByReserveAcc_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_LiquidityPoolBatch_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_PoolBatchSwapMsgs_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_PoolBatchSwapMsg_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_PoolBatchDepositMsgs_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_PoolBatchDepositMsg_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_PoolBatchWithdrawMsgs_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_PoolBatchWithdrawMsg_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_Params_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "x/liquidity/types/swap.go",
    "content": "package types\n\nimport (\n\t\"sort\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\n// Type of match\ntype MatchType int\n\nconst (\n\tExactMatch MatchType = iota + 1\n\tNoMatch\n\tFractionalMatch\n)\n\n// Direction of price\ntype PriceDirection int\n\nconst (\n\tIncreasing PriceDirection = iota + 1\n\tDecreasing\n\tStaying\n)\n\n// Direction of order\ntype OrderDirection int\n\nconst (\n\tDirectionXtoY OrderDirection = iota + 1\n\tDirectionYtoX\n)\n\n// Type of order map to index at price, having the pointer list of the swap batch message.\ntype Order struct {\n\tPrice         sdk.Dec\n\tBuyOfferAmt   sdk.Int\n\tSellOfferAmt  sdk.Int\n\tSwapMsgStates []*SwapMsgState\n}\n\n// OrderBook is a list of orders\ntype OrderBook []Order\n\n// Len implements sort.Interface for OrderBook\nfunc (orderBook OrderBook) Len() int { return len(orderBook) }\n\n// Less implements sort.Interface for OrderBook\nfunc (orderBook OrderBook) Less(i, j int) bool {\n\treturn orderBook[i].Price.LT(orderBook[j].Price)\n}\n\n// Swap implements sort.Interface for OrderBook\nfunc (orderBook OrderBook) Swap(i, j int) { orderBook[i], orderBook[j] = orderBook[j], orderBook[i] }\n\n// increasing sort orderbook by order price\nfunc (orderBook OrderBook) Sort() {\n\tsort.Slice(orderBook, func(i, j int) bool {\n\t\treturn orderBook[i].Price.LT(orderBook[j].Price)\n\t})\n}\n\n// decreasing sort orderbook by order price\nfunc (orderBook OrderBook) Reverse() {\n\tsort.Slice(orderBook, func(i, j int) bool {\n\t\treturn orderBook[i].Price.GT(orderBook[j].Price)\n\t})\n}\n\n// Get number of not matched messages on the list.\nfunc CountNotMatchedMsgs(swapMsgStates []*SwapMsgState) int {\n\tcnt := 0\n\tfor _, m := range swapMsgStates {\n\t\tif m.Executed && !m.Succeeded {\n\t\t\tcnt++\n\t\t}\n\t}\n\treturn cnt\n}\n\n// Get number of fractional matched messages on the list.\nfunc CountFractionalMatchedMsgs(swapMsgStates []*SwapMsgState) int {\n\tcnt := 0\n\tfor _, m := range swapMsgStates {\n\t\tif m.Executed && m.Succeeded && !m.ToBeDeleted {\n\t\t\tcnt++\n\t\t}\n\t}\n\treturn cnt\n}\n\n// Order map type indexed by order price at price\ntype OrderMap map[string]Order\n\n// Make orderbook by sort orderMap.\nfunc (orderMap OrderMap) SortOrderBook() (orderBook OrderBook) {\n\tfor _, o := range orderMap {\n\t\torderBook = append(orderBook, o)\n\t}\n\torderBook.Sort()\n\treturn orderBook\n}\n\n// struct of swap matching result of the batch\ntype BatchResult struct {\n\tMatchType      MatchType\n\tPriceDirection PriceDirection\n\tSwapPrice      sdk.Dec\n\tEX             sdk.Dec\n\tEY             sdk.Dec\n\tOriginalEX     sdk.Int\n\tOriginalEY     sdk.Int\n\tPoolX          sdk.Dec\n\tPoolY          sdk.Dec\n\tTransactAmt    sdk.Dec\n}\n\n// return of zero object, to avoid nil\nfunc NewBatchResult() BatchResult {\n\treturn BatchResult{\n\t\tSwapPrice:   sdk.ZeroDec(),\n\t\tEX:          sdk.ZeroDec(),\n\t\tEY:          sdk.ZeroDec(),\n\t\tOriginalEX:  sdk.ZeroInt(),\n\t\tOriginalEY:  sdk.ZeroInt(),\n\t\tPoolX:       sdk.ZeroDec(),\n\t\tPoolY:       sdk.ZeroDec(),\n\t\tTransactAmt: sdk.ZeroDec(),\n\t}\n}\n\n// struct of swap matching result of each Batch swap message\ntype MatchResult struct {\n\tOrderDirection         OrderDirection\n\tOrderMsgIndex          uint64\n\tOrderPrice             sdk.Dec\n\tOfferCoinAmt           sdk.Dec\n\tTransactedCoinAmt      sdk.Dec\n\tExchangedDemandCoinAmt sdk.Dec\n\tOfferCoinFeeAmt        sdk.Dec\n\tExchangedCoinFeeAmt    sdk.Dec\n\tSwapMsgState           *SwapMsgState\n}\n\n// The price and coins of swap messages in orderbook are calculated\n// to derive match result with the price direction.\nfunc (orderBook OrderBook) Match(x, y sdk.Dec) (BatchResult, bool) {\n\tcurrentPrice := x.Quo(y)\n\tpriceDirection := orderBook.PriceDirection(currentPrice)\n\tif priceDirection == Staying {\n\t\treturn orderBook.CalculateMatchStay(currentPrice), true\n\t}\n\treturn orderBook.CalculateMatch(priceDirection, x, y)\n}\n\n// Check orderbook validity naively\nfunc (orderBook OrderBook) Validate(currentPrice sdk.Dec) bool {\n\tif !currentPrice.IsPositive() {\n\t\treturn false\n\t}\n\tmaxBuyOrderPrice := sdk.ZeroDec()\n\tminSellOrderPrice := sdk.NewDec(1000000000000)\n\tfor _, order := range orderBook {\n\t\tif order.BuyOfferAmt.IsPositive() && order.Price.GT(maxBuyOrderPrice) {\n\t\t\tmaxBuyOrderPrice = order.Price\n\t\t}\n\t\tif order.SellOfferAmt.IsPositive() && (order.Price.LT(minSellOrderPrice)) {\n\t\t\tminSellOrderPrice = order.Price\n\t\t}\n\t}\n\tif maxBuyOrderPrice.GT(minSellOrderPrice) ||\n\t\tmaxBuyOrderPrice.Quo(currentPrice).GT(sdk.MustNewDecFromStr(\"1.10\")) ||\n\t\tminSellOrderPrice.Quo(currentPrice).LT(sdk.MustNewDecFromStr(\"0.90\")) {\n\t\treturn false\n\t}\n\treturn true\n}\n\n// Calculate results for orderbook matching with unchanged price case\nfunc (orderBook OrderBook) CalculateMatchStay(currentPrice sdk.Dec) (r BatchResult) {\n\tr = NewBatchResult()\n\tr.SwapPrice = currentPrice\n\tr.OriginalEX, r.OriginalEY = orderBook.ExecutableAmt(r.SwapPrice)\n\tr.EX = r.OriginalEX.ToLegacyDec()\n\tr.EY = r.OriginalEY.ToLegacyDec()\n\tr.PriceDirection = Staying\n\n\ts := r.SwapPrice.Mul(r.EY)\n\tif r.EX.IsZero() || r.EY.IsZero() {\n\t\tr.MatchType = NoMatch\n\t} else if r.EX.Equal(s) { // Normalization to an integrator for easy determination of exactMatch\n\t\tr.MatchType = ExactMatch\n\t} else {\n\t\t// Decimal Error, When calculating the Executable value, conservatively Truncated decimal\n\t\tr.MatchType = FractionalMatch\n\t\tif r.EX.GT(s) {\n\t\t\tr.EX = s\n\t\t} else if r.EX.LT(s) {\n\t\t\tr.EY = r.EX.Quo(r.SwapPrice)\n\t\t}\n\t}\n\treturn\n}\n\n// Calculates the batch results with the logic for each direction\nfunc (orderBook OrderBook) CalculateMatch(direction PriceDirection, x, y sdk.Dec) (maxScenario BatchResult, found bool) {\n\tcurrentPrice := x.Quo(y)\n\tlastOrderPrice := currentPrice\n\tvar matchScenarios []BatchResult\n\tstart, end, delta := 0, len(orderBook)-1, 1\n\tif direction == Decreasing {\n\t\tstart, end, delta = end, start, -1\n\t}\n\tfor i := start; i != end+delta; i += delta {\n\t\torder := orderBook[i]\n\t\tif (direction == Increasing && order.Price.LT(currentPrice)) ||\n\t\t\t(direction == Decreasing && order.Price.GT(currentPrice)) {\n\t\t\tcontinue\n\t\t} else {\n\t\t\torderPrice := order.Price\n\t\t\tr := orderBook.CalculateSwap(direction, x, y, orderPrice, lastOrderPrice)\n\t\t\t// Check to see if it exceeds a value that can be a decimal error\n\t\t\tif (direction == Increasing && r.PoolY.Sub(r.EX.Quo(r.SwapPrice)).GTE(sdk.OneDec())) ||\n\t\t\t\t(direction == Decreasing && r.PoolX.Sub(r.EY.Mul(r.SwapPrice)).GTE(sdk.OneDec())) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tmatchScenarios = append(matchScenarios, r)\n\t\t\tlastOrderPrice = orderPrice\n\t\t}\n\t}\n\tmaxScenario = NewBatchResult()\n\tfor _, s := range matchScenarios {\n\t\tMEX, MEY := orderBook.MustExecutableAmt(s.SwapPrice)\n\t\tif s.EX.GTE(MEX.ToLegacyDec()) && s.EY.GTE(MEY.ToLegacyDec()) {\n\t\t\tif s.MatchType == ExactMatch && s.TransactAmt.IsPositive() {\n\t\t\t\tmaxScenario = s\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t} else if s.TransactAmt.GT(maxScenario.TransactAmt) {\n\t\t\t\tmaxScenario = s\n\t\t\t\tfound = true\n\t\t\t}\n\t\t}\n\t}\n\tmaxScenario.PriceDirection = direction\n\treturn maxScenario, found\n}\n\n// CalculateSwap calculates the batch result.\nfunc (orderBook OrderBook) CalculateSwap(direction PriceDirection, x, y, orderPrice, lastOrderPrice sdk.Dec) BatchResult {\n\tr := NewBatchResult()\n\tr.OriginalEX, r.OriginalEY = orderBook.ExecutableAmt(lastOrderPrice.Add(orderPrice).Quo(sdk.NewDec(2)))\n\tr.EX = r.OriginalEX.ToLegacyDec()\n\tr.EY = r.OriginalEY.ToLegacyDec()\n\n\tr.SwapPrice = x.Add(r.EX.MulInt64(2)).Quo(y.Add(r.EY.MulInt64(2))) // P_s = (X + 2EX) / (Y + 2EY)\n\n\tif direction == Increasing {\n\t\tr.PoolY = r.SwapPrice.Mul(y).Sub(x).Quo(r.SwapPrice.MulInt64(2)) // (P_s * Y - X / 2P_s)\n\t\tif lastOrderPrice.LT(r.SwapPrice) && r.SwapPrice.LT(orderPrice) && !r.PoolY.IsNegative() {\n\t\t\tif r.EX.IsZero() && r.EY.IsZero() {\n\t\t\t\tr.MatchType = NoMatch\n\t\t\t} else {\n\t\t\t\tr.MatchType = ExactMatch\n\t\t\t}\n\t\t}\n\t} else if direction == Decreasing {\n\t\tr.PoolX = x.Sub(r.SwapPrice.Mul(y)).QuoInt64(2) // (X - P_s * Y) / 2\n\t\tif orderPrice.LT(r.SwapPrice) && r.SwapPrice.LT(lastOrderPrice) && !r.PoolX.IsNegative() {\n\t\t\tif r.EX.IsZero() && r.EY.IsZero() {\n\t\t\t\tr.MatchType = NoMatch\n\t\t\t} else {\n\t\t\t\tr.MatchType = ExactMatch\n\t\t\t}\n\t\t}\n\t}\n\n\tif r.MatchType == 0 {\n\t\tr.OriginalEX, r.OriginalEY = orderBook.ExecutableAmt(orderPrice)\n\t\tr.EX = r.OriginalEX.ToLegacyDec()\n\t\tr.EY = r.OriginalEY.ToLegacyDec()\n\t\tr.SwapPrice = orderPrice\n\t\t// When calculating the Pool value, conservatively Truncated decimal, so Ceil it to reduce the decimal error\n\t\tif direction == Increasing {\n\t\t\tr.PoolY = r.SwapPrice.Mul(y).Sub(x).Quo(r.SwapPrice.MulInt64(2)) // (P_s * Y - X) / 2P_s\n\t\t\tr.EX = sdk.MinDec(r.EX, r.EY.Add(r.PoolY).Mul(r.SwapPrice)).Ceil()\n\t\t\tr.EY = sdk.MaxDec(sdk.MinDec(r.EY, r.EX.Quo(r.SwapPrice).Sub(r.PoolY)), sdk.ZeroDec()).Ceil()\n\t\t} else if direction == Decreasing {\n\t\t\tr.PoolX = x.Sub(r.SwapPrice.Mul(y)).QuoInt64(2) // (X - P_s * Y) / 2\n\t\t\tr.EY = sdk.MinDec(r.EY, r.EX.Add(r.PoolX).Quo(r.SwapPrice)).Ceil()\n\t\t\tr.EX = sdk.MaxDec(sdk.MinDec(r.EX, r.EY.Mul(r.SwapPrice).Sub(r.PoolX)), sdk.ZeroDec()).Ceil()\n\t\t}\n\t\tr.MatchType = FractionalMatch\n\t}\n\n\tif direction == Increasing {\n\t\tif r.SwapPrice.LT(x.Quo(y)) || r.PoolY.IsNegative() {\n\t\t\tr.TransactAmt = sdk.ZeroDec()\n\t\t} else {\n\t\t\tr.TransactAmt = sdk.MinDec(r.EX, r.EY.Add(r.PoolY).Mul(r.SwapPrice))\n\t\t}\n\t} else if direction == Decreasing {\n\t\tif r.SwapPrice.GT(x.Quo(y)) || r.PoolX.IsNegative() {\n\t\t\tr.TransactAmt = sdk.ZeroDec()\n\t\t} else {\n\t\t\tr.TransactAmt = sdk.MinDec(r.EY, r.EX.Add(r.PoolX).Quo(r.SwapPrice))\n\t\t}\n\t}\n\treturn r\n}\n\n// Get Price direction of the orderbook with current Price\nfunc (orderBook OrderBook) PriceDirection(currentPrice sdk.Dec) PriceDirection {\n\tbuyAmtOverCurrentPrice := sdk.ZeroDec()\n\tbuyAmtAtCurrentPrice := sdk.ZeroDec()\n\tsellAmtUnderCurrentPrice := sdk.ZeroDec()\n\tsellAmtAtCurrentPrice := sdk.ZeroDec()\n\n\tfor _, order := range orderBook {\n\t\tif order.Price.GT(currentPrice) {\n\t\t\tbuyAmtOverCurrentPrice = buyAmtOverCurrentPrice.Add(order.BuyOfferAmt.ToLegacyDec())\n\t\t} else if order.Price.Equal(currentPrice) {\n\t\t\tbuyAmtAtCurrentPrice = buyAmtAtCurrentPrice.Add(order.BuyOfferAmt.ToLegacyDec())\n\t\t\tsellAmtAtCurrentPrice = sellAmtAtCurrentPrice.Add(order.SellOfferAmt.ToLegacyDec())\n\t\t} else if order.Price.LT(currentPrice) {\n\t\t\tsellAmtUnderCurrentPrice = sellAmtUnderCurrentPrice.Add(order.SellOfferAmt.ToLegacyDec())\n\t\t}\n\t}\n\tif buyAmtOverCurrentPrice.GT(currentPrice.Mul(sellAmtUnderCurrentPrice.Add(sellAmtAtCurrentPrice))) {\n\t\treturn Increasing\n\t} else if currentPrice.Mul(sellAmtUnderCurrentPrice).GT(buyAmtOverCurrentPrice.Add(buyAmtAtCurrentPrice)) {\n\t\treturn Decreasing\n\t}\n\treturn Staying\n}\n\n// calculate the executable amount of the orderbook for each X, Y\nfunc (orderBook OrderBook) ExecutableAmt(swapPrice sdk.Dec) (executableBuyAmtX, executableSellAmtY sdk.Int) {\n\texecutableBuyAmtX = sdk.ZeroInt()\n\texecutableSellAmtY = sdk.ZeroInt()\n\tfor _, order := range orderBook {\n\t\tif order.Price.GTE(swapPrice) {\n\t\t\texecutableBuyAmtX = executableBuyAmtX.Add(order.BuyOfferAmt)\n\t\t}\n\t\tif order.Price.LTE(swapPrice) {\n\t\t\texecutableSellAmtY = executableSellAmtY.Add(order.SellOfferAmt)\n\t\t}\n\t}\n\treturn\n}\n\n// Check swap executable amount validity of the orderbook\nfunc (orderBook OrderBook) MustExecutableAmt(swapPrice sdk.Dec) (mustExecutableBuyAmtX, mustExecutableSellAmtY sdk.Int) {\n\tmustExecutableBuyAmtX = sdk.ZeroInt()\n\tmustExecutableSellAmtY = sdk.ZeroInt()\n\tfor _, order := range orderBook {\n\t\tif order.Price.GT(swapPrice) {\n\t\t\tmustExecutableBuyAmtX = mustExecutableBuyAmtX.Add(order.BuyOfferAmt)\n\t\t}\n\t\tif order.Price.LT(swapPrice) {\n\t\t\tmustExecutableSellAmtY = mustExecutableSellAmtY.Add(order.SellOfferAmt)\n\t\t}\n\t}\n\treturn\n}\n\n// make orderMap key as swap price, value as Buy, Sell Amount from swap msgs, with split as Buy xToY, Sell yToX msg list.\nfunc MakeOrderMap(swapMsgs []*SwapMsgState, denomX, denomY string, onlyNotMatched bool) (OrderMap, []*SwapMsgState, []*SwapMsgState) {\n\torderMap := make(OrderMap)\n\tvar xToY []*SwapMsgState // buying Y from X\n\tvar yToX []*SwapMsgState // selling Y for X\n\tfor _, m := range swapMsgs {\n\t\tif onlyNotMatched && (m.ToBeDeleted || m.RemainingOfferCoin.IsZero()) {\n\t\t\tcontinue\n\t\t}\n\t\torder := Order{\n\t\t\tPrice:        m.Msg.OrderPrice,\n\t\t\tBuyOfferAmt:  sdk.ZeroInt(),\n\t\t\tSellOfferAmt: sdk.ZeroInt(),\n\t\t}\n\t\torderPriceString := m.Msg.OrderPrice.String()\n\t\tswitch {\n\t\t// buying Y from X\n\t\tcase m.Msg.OfferCoin.Denom == denomX:\n\t\t\txToY = append(xToY, m)\n\t\t\tif o, ok := orderMap[orderPriceString]; ok {\n\t\t\t\torder = o\n\t\t\t\torder.BuyOfferAmt = o.BuyOfferAmt.Add(m.RemainingOfferCoin.Amount)\n\t\t\t} else {\n\t\t\t\torder.BuyOfferAmt = m.RemainingOfferCoin.Amount\n\t\t\t}\n\t\t// selling Y for X\n\t\tcase m.Msg.OfferCoin.Denom == denomY:\n\t\t\tyToX = append(yToX, m)\n\t\t\tif o, ok := orderMap[orderPriceString]; ok {\n\t\t\t\torder = o\n\t\t\t\torder.SellOfferAmt = o.SellOfferAmt.Add(m.RemainingOfferCoin.Amount)\n\t\t\t} else {\n\t\t\t\torder.SellOfferAmt = m.RemainingOfferCoin.Amount\n\t\t\t}\n\t\tdefault:\n\t\t\tpanic(ErrInvalidDenom)\n\t\t}\n\t\torder.SwapMsgStates = append(order.SwapMsgStates, m)\n\t\torderMap[orderPriceString] = order\n\t}\n\treturn orderMap, xToY, yToX\n}\n\n// check validity state of the batch swap messages, and set to delete state to height timeout expired order\nfunc ValidateStateAndExpireOrders(swapMsgStates []*SwapMsgState, currentHeight int64, expireThisHeight bool) {\n\tfor _, order := range swapMsgStates {\n\t\tif !order.Executed {\n\t\t\tpanic(\"not executed\")\n\t\t}\n\t\tif order.RemainingOfferCoin.IsZero() {\n\t\t\tif !order.Succeeded || !order.ToBeDeleted {\n\t\t\t\tpanic(\"broken state consistency for not matched order\")\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\t// set toDelete, expired msgs\n\t\tif currentHeight > order.OrderExpiryHeight {\n\t\t\tif order.Succeeded || !order.ToBeDeleted {\n\t\t\t\tpanic(\"broken state consistency for fractional matched order\")\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif expireThisHeight && currentHeight == order.OrderExpiryHeight {\n\t\t\torder.ToBeDeleted = true\n\t\t}\n\t}\n}\n\n// Check swap price validity using list of match result.\nfunc CheckSwapPrice(matchResultXtoY, matchResultYtoX []MatchResult, swapPrice sdk.Dec) bool {\n\tif len(matchResultXtoY) == 0 && len(matchResultYtoX) == 0 {\n\t\treturn true\n\t}\n\t// Check if it is greater than a value that can be a decimal error\n\tfor _, m := range matchResultXtoY {\n\t\tif m.TransactedCoinAmt.Quo(swapPrice).Sub(m.ExchangedDemandCoinAmt).Abs().GT(sdk.OneDec()) {\n\t\t\treturn false\n\t\t}\n\t}\n\tfor _, m := range matchResultYtoX {\n\t\tif m.TransactedCoinAmt.Mul(swapPrice).Sub(m.ExchangedDemandCoinAmt).Abs().GT(sdk.OneDec()) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn !swapPrice.IsZero()\n}\n\n// Find matched orders and set status for msgs\nfunc FindOrderMatch(direction OrderDirection, swapMsgStates []*SwapMsgState, executableAmt, swapPrice sdk.Dec, height int64) (\n\tmatchResults []MatchResult, poolXDelta, poolYDelta sdk.Dec,\n) {\n\tpoolXDelta = sdk.ZeroDec()\n\tpoolYDelta = sdk.ZeroDec()\n\n\tif executableAmt.IsZero() {\n\t\treturn\n\t}\n\n\tif direction == DirectionXtoY {\n\t\tsort.SliceStable(swapMsgStates, func(i, j int) bool {\n\t\t\treturn swapMsgStates[i].Msg.OrderPrice.GT(swapMsgStates[j].Msg.OrderPrice)\n\t\t})\n\t} else if direction == DirectionYtoX {\n\t\tsort.SliceStable(swapMsgStates, func(i, j int) bool {\n\t\t\treturn swapMsgStates[i].Msg.OrderPrice.LT(swapMsgStates[j].Msg.OrderPrice)\n\t\t})\n\t}\n\n\tmatchAmt := sdk.ZeroInt()\n\taccumMatchAmt := sdk.ZeroInt()\n\tvar matchedSwapMsgStates []*SwapMsgState //nolint:prealloc\n\n\tfor i, order := range swapMsgStates {\n\t\t// include the matched order in matchAmt, matchedSwapMsgStates\n\t\tif (direction == DirectionXtoY && order.Msg.OrderPrice.LT(swapPrice)) ||\n\t\t\t(direction == DirectionYtoX && order.Msg.OrderPrice.GT(swapPrice)) {\n\t\t\tbreak\n\t\t}\n\n\t\tmatchAmt = matchAmt.Add(order.RemainingOfferCoin.Amount)\n\t\tmatchedSwapMsgStates = append(matchedSwapMsgStates, order)\n\n\t\tif i == len(swapMsgStates)-1 || !swapMsgStates[i+1].Msg.OrderPrice.Equal(order.Msg.OrderPrice) {\n\t\t\tif matchAmt.IsPositive() {\n\t\t\t\tvar fractionalMatchRatio sdk.Dec\n\t\t\t\tif accumMatchAmt.Add(matchAmt).ToLegacyDec().GTE(executableAmt) {\n\t\t\t\t\tfractionalMatchRatio = executableAmt.Sub(accumMatchAmt.ToLegacyDec()).Quo(matchAmt.ToLegacyDec())\n\t\t\t\t\tif fractionalMatchRatio.GT(sdk.NewDec(1)) {\n\t\t\t\t\t\tpanic(\"fractionalMatchRatio should be between 0 and 1\")\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfractionalMatchRatio = sdk.OneDec()\n\t\t\t\t}\n\t\t\t\tif !fractionalMatchRatio.IsPositive() {\n\t\t\t\t\tfractionalMatchRatio = sdk.OneDec()\n\t\t\t\t}\n\t\t\t\tfor _, matchOrder := range matchedSwapMsgStates {\n\t\t\t\t\tofferAmt := matchOrder.RemainingOfferCoin.Amount.ToLegacyDec()\n\t\t\t\t\tmatchResult := MatchResult{\n\t\t\t\t\t\tOrderDirection: direction,\n\t\t\t\t\t\tOfferCoinAmt:   offerAmt,\n\t\t\t\t\t\t// TransactedCoinAmt is a value that should not be lost, so Ceil it conservatively considering the decimal error.\n\t\t\t\t\t\tTransactedCoinAmt: offerAmt.Mul(fractionalMatchRatio).Ceil(),\n\t\t\t\t\t\tSwapMsgState:      matchOrder,\n\t\t\t\t\t}\n\t\t\t\t\tif matchResult.OfferCoinAmt.Sub(matchResult.TransactedCoinAmt).LTE(sdk.OneDec()) {\n\t\t\t\t\t\t// Use ReservedOfferCoinFee to avoid decimal errors when OfferCoinAmt and TransactedCoinAmt are almost equal in value.\n\t\t\t\t\t\tmatchResult.OfferCoinFeeAmt = matchResult.SwapMsgState.ReservedOfferCoinFee.Amount.ToLegacyDec()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatchResult.OfferCoinFeeAmt = matchResult.SwapMsgState.ReservedOfferCoinFee.Amount.ToLegacyDec().Mul(fractionalMatchRatio)\n\t\t\t\t\t}\n\t\t\t\t\tif direction == DirectionXtoY {\n\t\t\t\t\t\tmatchResult.ExchangedDemandCoinAmt = matchResult.TransactedCoinAmt.Quo(swapPrice)\n\t\t\t\t\t\tmatchResult.ExchangedCoinFeeAmt = matchResult.OfferCoinFeeAmt.Quo(swapPrice)\n\t\t\t\t\t} else if direction == DirectionYtoX {\n\t\t\t\t\t\tmatchResult.ExchangedDemandCoinAmt = matchResult.TransactedCoinAmt.Mul(swapPrice)\n\t\t\t\t\t\tmatchResult.ExchangedCoinFeeAmt = matchResult.OfferCoinFeeAmt.Mul(swapPrice)\n\t\t\t\t\t}\n\t\t\t\t\t// Check for differences above maximum decimal error\n\t\t\t\t\tif matchResult.TransactedCoinAmt.GT(matchResult.OfferCoinAmt) {\n\t\t\t\t\t\tpanic(\"bad TransactedCoinAmt\")\n\t\t\t\t\t}\n\t\t\t\t\tif matchResult.OfferCoinFeeAmt.GT(matchResult.OfferCoinAmt) && matchResult.OfferCoinFeeAmt.GT(sdk.OneDec()) {\n\t\t\t\t\t\tpanic(\"bad OfferCoinFeeAmt\")\n\t\t\t\t\t}\n\t\t\t\t\tmatchResults = append(matchResults, matchResult)\n\t\t\t\t\tif direction == DirectionXtoY {\n\t\t\t\t\t\tpoolXDelta = poolXDelta.Add(matchResult.TransactedCoinAmt)\n\t\t\t\t\t\tpoolYDelta = poolYDelta.Sub(matchResult.ExchangedDemandCoinAmt)\n\t\t\t\t\t} else if direction == DirectionYtoX {\n\t\t\t\t\t\tpoolXDelta = poolXDelta.Sub(matchResult.ExchangedDemandCoinAmt)\n\t\t\t\t\t\tpoolYDelta = poolYDelta.Add(matchResult.TransactedCoinAmt)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\taccumMatchAmt = accumMatchAmt.Add(matchAmt)\n\t\t\t}\n\n\t\t\tmatchAmt = sdk.ZeroInt()\n\t\t\tmatchedSwapMsgStates = matchedSwapMsgStates[:0]\n\t\t}\n\t}\n\treturn matchResults, poolXDelta, poolYDelta\n}\n\n// UpdateSwapMsgStates updates SwapMsgStates using the MatchResults.\nfunc UpdateSwapMsgStates(x, y sdk.Dec, xToY, yToX []*SwapMsgState, matchResultXtoY, matchResultYtoX []MatchResult) (\n\t[]*SwapMsgState, []*SwapMsgState, sdk.Dec, sdk.Dec, sdk.Dec, sdk.Dec,\n) {\n\tsort.SliceStable(xToY, func(i, j int) bool {\n\t\treturn xToY[i].Msg.OrderPrice.GT(xToY[j].Msg.OrderPrice)\n\t})\n\tsort.SliceStable(yToX, func(i, j int) bool {\n\t\treturn yToX[i].Msg.OrderPrice.LT(yToX[j].Msg.OrderPrice)\n\t})\n\n\tpoolXDelta := sdk.ZeroDec()\n\tpoolYDelta := sdk.ZeroDec()\n\n\t// Variables to accumulate and offset the values of int 1 caused by decimal error\n\tdecimalErrorX := sdk.ZeroDec()\n\tdecimalErrorY := sdk.ZeroDec()\n\n\tfor _, match := range append(matchResultXtoY, matchResultYtoX...) {\n\t\tsms := match.SwapMsgState\n\t\tif match.OrderDirection == DirectionXtoY {\n\t\t\tpoolXDelta = poolXDelta.Add(match.TransactedCoinAmt)\n\t\t\tpoolYDelta = poolYDelta.Sub(match.ExchangedDemandCoinAmt)\n\t\t} else {\n\t\t\tpoolXDelta = poolXDelta.Sub(match.ExchangedDemandCoinAmt)\n\t\t\tpoolYDelta = poolYDelta.Add(match.TransactedCoinAmt)\n\t\t}\n\t\tif sms.RemainingOfferCoin.Amount.ToLegacyDec().Sub(match.TransactedCoinAmt).LTE(sdk.OneDec()) {\n\t\t\t// when RemainingOfferCoin and TransactedCoinAmt are almost equal in value, corrects the decimal error and processes as a exact match.\n\t\t\tsms.ExchangedOfferCoin.Amount = sms.ExchangedOfferCoin.Amount.Add(match.TransactedCoinAmt.TruncateInt())\n\t\t\tsms.RemainingOfferCoin.Amount = sms.RemainingOfferCoin.Amount.Sub(match.TransactedCoinAmt.TruncateInt())\n\t\t\tsms.ReservedOfferCoinFee.Amount = sms.ReservedOfferCoinFee.Amount.Sub(match.OfferCoinFeeAmt.TruncateInt())\n\t\t\tif sms.ExchangedOfferCoin.IsNegative() || sms.RemainingOfferCoin.IsNegative() || sms.ReservedOfferCoinFee.IsNegative() {\n\t\t\t\tpanic(\"negative coin amount after update\")\n\t\t\t}\n\t\t\tif sms.RemainingOfferCoin.Amount.Equal(sdk.OneInt()) {\n\t\t\t\tdecimalErrorY = decimalErrorY.Add(sdk.OneDec())\n\t\t\t\tsms.RemainingOfferCoin.Amount = sdk.ZeroInt()\n\t\t\t}\n\t\t\tif !sms.RemainingOfferCoin.IsZero() || sms.ExchangedOfferCoin.Amount.GT(sms.Msg.OfferCoin.Amount) ||\n\t\t\t\tsms.ReservedOfferCoinFee.Amount.GT(sdk.OneInt()) {\n\t\t\t\tpanic(\"invalid state after update\")\n\t\t\t} else {\n\t\t\t\tsms.Succeeded = true\n\t\t\t\tsms.ToBeDeleted = true\n\t\t\t}\n\t\t} else {\n\t\t\t// fractional match\n\t\t\tsms.ExchangedOfferCoin.Amount = sms.ExchangedOfferCoin.Amount.Add(match.TransactedCoinAmt.TruncateInt())\n\t\t\tsms.RemainingOfferCoin.Amount = sms.RemainingOfferCoin.Amount.Sub(match.TransactedCoinAmt.TruncateInt())\n\t\t\tsms.ReservedOfferCoinFee.Amount = sms.ReservedOfferCoinFee.Amount.Sub(match.OfferCoinFeeAmt.TruncateInt())\n\t\t\tif sms.ExchangedOfferCoin.IsNegative() || sms.RemainingOfferCoin.IsNegative() || sms.ReservedOfferCoinFee.IsNegative() {\n\t\t\t\tpanic(\"negative coin amount after update\")\n\t\t\t}\n\t\t\tsms.Succeeded = true\n\t\t\tsms.ToBeDeleted = false\n\t\t}\n\t}\n\n\t// Offset accumulated decimal error values\n\tpoolXDelta = poolXDelta.Add(decimalErrorX)\n\tpoolYDelta = poolYDelta.Add(decimalErrorY)\n\n\tx = x.Add(poolXDelta)\n\ty = y.Add(poolYDelta)\n\n\treturn xToY, yToX, x, y, poolXDelta, poolYDelta\n}\n"
  },
  {
    "path": "x/liquidity/types/tx.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/liquidity/v1beta1/tx.proto\n\npackage types\n\nimport (\n\tcontext \"context\"\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\t_ \"github.com/cosmos/cosmos-proto\"\n\tgithub_com_cosmos_cosmos_sdk_types \"github.com/cosmos/cosmos-sdk/types\"\n\ttypes \"github.com/cosmos/cosmos-sdk/types\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tgrpc1 \"github.com/cosmos/gogoproto/grpc\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\n// MsgCreatePool defines an sdk.Msg type that supports submitting a create\n// liquidity pool tx.\n//\n// See:\n// https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\ntype MsgCreatePool struct {\n\tPoolCreatorAddress string `protobuf:\"bytes,1,opt,name=pool_creator_address,json=poolCreatorAddress,proto3\" json:\"pool_creator_address,omitempty\" yaml:\"pool_creator_address\"`\n\t// id of the target pool type, must match the value in the pool. Only\n\t// pool-type-id 1 is supported.\n\tPoolTypeId uint32 `protobuf:\"varint,2,opt,name=pool_type_id,json=poolTypeId,proto3\" json:\"pool_type_id,omitempty\" yaml:\"pool_type_id\"`\n\t// reserve coin pair of the pool to deposit.\n\tDepositCoins github_com_cosmos_cosmos_sdk_types.Coins `protobuf:\"bytes,4,rep,name=deposit_coins,json=depositCoins,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins\" json:\"deposit_coins\" yaml:\"deposit_coins\"`\n}\n\nfunc (m *MsgCreatePool) Reset()         { *m = MsgCreatePool{} }\nfunc (m *MsgCreatePool) String() string { return proto.CompactTextString(m) }\nfunc (*MsgCreatePool) ProtoMessage()    {}\nfunc (*MsgCreatePool) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_d6c6519f5f802cc0, []int{0}\n}\n\nfunc (m *MsgCreatePool) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgCreatePool) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgCreatePool.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgCreatePool) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgCreatePool.Merge(m, src)\n}\n\nfunc (m *MsgCreatePool) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgCreatePool) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgCreatePool.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgCreatePool proto.InternalMessageInfo\n\n// MsgCreatePoolResponse defines the Msg/CreatePool response type.\ntype MsgCreatePoolResponse struct{}\n\nfunc (m *MsgCreatePoolResponse) Reset()         { *m = MsgCreatePoolResponse{} }\nfunc (m *MsgCreatePoolResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgCreatePoolResponse) ProtoMessage()    {}\nfunc (*MsgCreatePoolResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_d6c6519f5f802cc0, []int{1}\n}\n\nfunc (m *MsgCreatePoolResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgCreatePoolResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgCreatePoolResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgCreatePoolResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgCreatePoolResponse.Merge(m, src)\n}\n\nfunc (m *MsgCreatePoolResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgCreatePoolResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgCreatePoolResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgCreatePoolResponse proto.InternalMessageInfo\n\n// `MsgDepositWithinBatch defines` an `sdk.Msg` type that supports submitting\n// a deposit request to the batch of the liquidity pool.\n// Deposit is submitted to the batch of the Liquidity pool with the specified\n// `pool_id`, `deposit_coins` for reserve.\n// This request is stacked in the batch of the liquidity pool, is not processed\n// immediately, and is processed in the `endblock` at the same time as other\n// requests.\n//\n// See:\n// https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\ntype MsgDepositWithinBatch struct {\n\tDepositorAddress string `protobuf:\"bytes,1,opt,name=depositor_address,json=depositorAddress,proto3\" json:\"depositor_address,omitempty\" yaml:\"depositor_address\"`\n\t// id of the target pool\n\tPoolId uint64 `protobuf:\"varint,2,opt,name=pool_id,json=poolId,proto3\" json:\"pool_id,omitempty\" yaml:\"pool_id\"`\n\t// reserve coin pair of the pool to deposit\n\tDepositCoins github_com_cosmos_cosmos_sdk_types.Coins `protobuf:\"bytes,3,rep,name=deposit_coins,json=depositCoins,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins\" json:\"deposit_coins\" yaml:\"deposit_coins\"`\n}\n\nfunc (m *MsgDepositWithinBatch) Reset()         { *m = MsgDepositWithinBatch{} }\nfunc (m *MsgDepositWithinBatch) String() string { return proto.CompactTextString(m) }\nfunc (*MsgDepositWithinBatch) ProtoMessage()    {}\nfunc (*MsgDepositWithinBatch) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_d6c6519f5f802cc0, []int{2}\n}\n\nfunc (m *MsgDepositWithinBatch) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgDepositWithinBatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgDepositWithinBatch.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgDepositWithinBatch) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgDepositWithinBatch.Merge(m, src)\n}\n\nfunc (m *MsgDepositWithinBatch) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgDepositWithinBatch) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgDepositWithinBatch.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgDepositWithinBatch proto.InternalMessageInfo\n\n// MsgDepositWithinBatchResponse defines the Msg/DepositWithinBatch response\n// type.\ntype MsgDepositWithinBatchResponse struct{}\n\nfunc (m *MsgDepositWithinBatchResponse) Reset()         { *m = MsgDepositWithinBatchResponse{} }\nfunc (m *MsgDepositWithinBatchResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgDepositWithinBatchResponse) ProtoMessage()    {}\nfunc (*MsgDepositWithinBatchResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_d6c6519f5f802cc0, []int{3}\n}\n\nfunc (m *MsgDepositWithinBatchResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgDepositWithinBatchResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgDepositWithinBatchResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgDepositWithinBatchResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgDepositWithinBatchResponse.Merge(m, src)\n}\n\nfunc (m *MsgDepositWithinBatchResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgDepositWithinBatchResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgDepositWithinBatchResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgDepositWithinBatchResponse proto.InternalMessageInfo\n\n// `MsgWithdrawWithinBatch` defines an `sdk.Msg` type that supports submitting\n// a withdraw request to the batch of the liquidity pool.\n// Withdraw is submitted to the batch from the Liquidity pool with the\n// specified `pool_id`, `pool_coin` of the pool.\n// This request is stacked in the batch of the liquidity pool, is not processed\n// immediately, and is processed in the `endblock` at the same time as other\n// requests.\n//\n// See:\n// https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\ntype MsgWithdrawWithinBatch struct {\n\tWithdrawerAddress string `protobuf:\"bytes,1,opt,name=withdrawer_address,json=withdrawerAddress,proto3\" json:\"withdrawer_address,omitempty\" yaml:\"withdrawer_address\"`\n\t// id of the target pool\n\tPoolId   uint64     `protobuf:\"varint,2,opt,name=pool_id,json=poolId,proto3\" json:\"pool_id,omitempty\" yaml:\"pool_id\"`\n\tPoolCoin types.Coin `protobuf:\"bytes,3,opt,name=pool_coin,json=poolCoin,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coin\" json:\"pool_coin\" yaml:\"pool_coin\"`\n}\n\nfunc (m *MsgWithdrawWithinBatch) Reset()         { *m = MsgWithdrawWithinBatch{} }\nfunc (m *MsgWithdrawWithinBatch) String() string { return proto.CompactTextString(m) }\nfunc (*MsgWithdrawWithinBatch) ProtoMessage()    {}\nfunc (*MsgWithdrawWithinBatch) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_d6c6519f5f802cc0, []int{4}\n}\n\nfunc (m *MsgWithdrawWithinBatch) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgWithdrawWithinBatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgWithdrawWithinBatch.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgWithdrawWithinBatch) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgWithdrawWithinBatch.Merge(m, src)\n}\n\nfunc (m *MsgWithdrawWithinBatch) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgWithdrawWithinBatch) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgWithdrawWithinBatch.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgWithdrawWithinBatch proto.InternalMessageInfo\n\n// MsgWithdrawWithinBatchResponse defines the Msg/WithdrawWithinBatch response\n// type.\ntype MsgWithdrawWithinBatchResponse struct{}\n\nfunc (m *MsgWithdrawWithinBatchResponse) Reset()         { *m = MsgWithdrawWithinBatchResponse{} }\nfunc (m *MsgWithdrawWithinBatchResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgWithdrawWithinBatchResponse) ProtoMessage()    {}\nfunc (*MsgWithdrawWithinBatchResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_d6c6519f5f802cc0, []int{5}\n}\n\nfunc (m *MsgWithdrawWithinBatchResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgWithdrawWithinBatchResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgWithdrawWithinBatchResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgWithdrawWithinBatchResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgWithdrawWithinBatchResponse.Merge(m, src)\n}\n\nfunc (m *MsgWithdrawWithinBatchResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgWithdrawWithinBatchResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgWithdrawWithinBatchResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgWithdrawWithinBatchResponse proto.InternalMessageInfo\n\n// `MsgSwapWithinBatch` defines an sdk.Msg type that supports submitting a swap\n// offer request to the batch of the liquidity pool. Submit swap offer to the\n// liquidity pool batch with the specified the `pool_id`, `swap_type_id`,\n// `demand_coin_denom` with the coin and the price you're offering\n// and `offer_coin_fee` must be half of offer coin amount * current\n// `params.swap_fee_rate` and ceil for reservation to pay fees. This request is\n// stacked in the batch of the liquidity pool, is not processed immediately, and\n// is processed in the `endblock` at the same time as other requests. You must\n// request the same fields as the pool. Only the default `swap_type_id` 1 is\n// supported.\n//\n// See: https://github.com/gravity-devs/liquidity/tree/develop/doc\n// https://github.com/gravity-devs/liquidity/blob/develop/x/liquidity/spec/04_messages.md\ntype MsgSwapWithinBatch struct {\n\t// address of swap requester\n\tSwapRequesterAddress string `protobuf:\"bytes,1,opt,name=swap_requester_address,json=swapRequesterAddress,proto3\" json:\"swap_requester_address,omitempty\" yaml:\"swap_requester_address\"`\n\t// id of swap type, must match the value in the pool. Only `swap_type_id` 1 is\n\t// supported.\n\tPoolId uint64 `protobuf:\"varint,2,opt,name=pool_id,json=poolId,proto3\" json:\"pool_id,omitempty\" yaml:\"pool_id\"`\n\t// id of swap type. Must match the value in the pool.\n\tSwapTypeId uint32 `protobuf:\"varint,3,opt,name=swap_type_id,json=swapTypeId,proto3\" json:\"swap_type_id,omitempty\" yaml:\"swap_type_id\"`\n\t// offer sdk.coin for the swap request, must match the denom in the pool.\n\tOfferCoin types.Coin `protobuf:\"bytes,4,opt,name=offer_coin,json=offerCoin,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coin\" json:\"offer_coin\" yaml:\"offer_coin\"`\n\t// denom of demand coin to be exchanged on the swap request, must match the\n\t// denom in the pool.\n\tDemandCoinDenom string `protobuf:\"bytes,5,opt,name=demand_coin_denom,json=demandCoinDenom,proto3\" json:\"demand_coin_denom,omitempty\" yaml:\"demand_coin_denom\"`\n\t// half of offer coin amount * params.swap_fee_rate and ceil for reservation\n\t// to pay fees.\n\tOfferCoinFee types.Coin `protobuf:\"bytes,6,opt,name=offer_coin_fee,json=offerCoinFee,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coin\" json:\"offer_coin_fee\" yaml:\"offer_coin_fee\"`\n\t// limit order price for the order, the price is the exchange ratio of X/Y\n\t// where X is the amount of the first coin and Y is the amount\n\t// of the second coin when their denoms are sorted alphabetically.\n\tOrderPrice github_com_cosmos_cosmos_sdk_types.Dec `protobuf:\"bytes,7,opt,name=order_price,json=orderPrice,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec\" json:\"order_price\" yaml:\"order_price\"`\n}\n\nfunc (m *MsgSwapWithinBatch) Reset()         { *m = MsgSwapWithinBatch{} }\nfunc (m *MsgSwapWithinBatch) String() string { return proto.CompactTextString(m) }\nfunc (*MsgSwapWithinBatch) ProtoMessage()    {}\nfunc (*MsgSwapWithinBatch) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_d6c6519f5f802cc0, []int{6}\n}\n\nfunc (m *MsgSwapWithinBatch) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgSwapWithinBatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgSwapWithinBatch.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgSwapWithinBatch) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgSwapWithinBatch.Merge(m, src)\n}\n\nfunc (m *MsgSwapWithinBatch) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgSwapWithinBatch) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgSwapWithinBatch.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgSwapWithinBatch proto.InternalMessageInfo\n\n// MsgSwapWithinBatchResponse defines the Msg/Swap response type.\ntype MsgSwapWithinBatchResponse struct{}\n\nfunc (m *MsgSwapWithinBatchResponse) Reset()         { *m = MsgSwapWithinBatchResponse{} }\nfunc (m *MsgSwapWithinBatchResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgSwapWithinBatchResponse) ProtoMessage()    {}\nfunc (*MsgSwapWithinBatchResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_d6c6519f5f802cc0, []int{7}\n}\n\nfunc (m *MsgSwapWithinBatchResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgSwapWithinBatchResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgSwapWithinBatchResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgSwapWithinBatchResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgSwapWithinBatchResponse.Merge(m, src)\n}\n\nfunc (m *MsgSwapWithinBatchResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgSwapWithinBatchResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgSwapWithinBatchResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgSwapWithinBatchResponse proto.InternalMessageInfo\n\nfunc init() {\n\tproto.RegisterType((*MsgCreatePool)(nil), \"cyber.liquidity.v1beta1.MsgCreatePool\")\n\tproto.RegisterType((*MsgCreatePoolResponse)(nil), \"cyber.liquidity.v1beta1.MsgCreatePoolResponse\")\n\tproto.RegisterType((*MsgDepositWithinBatch)(nil), \"cyber.liquidity.v1beta1.MsgDepositWithinBatch\")\n\tproto.RegisterType((*MsgDepositWithinBatchResponse)(nil), \"cyber.liquidity.v1beta1.MsgDepositWithinBatchResponse\")\n\tproto.RegisterType((*MsgWithdrawWithinBatch)(nil), \"cyber.liquidity.v1beta1.MsgWithdrawWithinBatch\")\n\tproto.RegisterType((*MsgWithdrawWithinBatchResponse)(nil), \"cyber.liquidity.v1beta1.MsgWithdrawWithinBatchResponse\")\n\tproto.RegisterType((*MsgSwapWithinBatch)(nil), \"cyber.liquidity.v1beta1.MsgSwapWithinBatch\")\n\tproto.RegisterType((*MsgSwapWithinBatchResponse)(nil), \"cyber.liquidity.v1beta1.MsgSwapWithinBatchResponse\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/liquidity/v1beta1/tx.proto\", fileDescriptor_d6c6519f5f802cc0) }\n\nvar fileDescriptor_d6c6519f5f802cc0 = []byte{\n\t// 864 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x96, 0xbf, 0x6f, 0xdb, 0x46,\n\t0x14, 0xc7, 0x45, 0xcb, 0x71, 0xe2, 0x8b, 0x9d, 0xc6, 0x17, 0x25, 0xa6, 0xd5, 0x84, 0x14, 0x38,\n\t0xa4, 0x06, 0x02, 0x93, 0x48, 0xdc, 0x36, 0x70, 0xb6, 0xca, 0x42, 0x91, 0x0e, 0x02, 0x02, 0xa6,\n\t0x40, 0x81, 0x2e, 0x04, 0x45, 0x9e, 0xa9, 0x43, 0x25, 0x1e, 0xc3, 0xa3, 0xab, 0x08, 0x2d, 0xda,\n\t0x35, 0xdd, 0xfa, 0x27, 0x64, 0xee, 0x58, 0x74, 0xec, 0xd4, 0x29, 0xe8, 0x14, 0x14, 0x1d, 0x8a,\n\t0x0e, 0x6c, 0x61, 0x2f, 0x9d, 0xf9, 0x17, 0x14, 0xf7, 0x83, 0x14, 0x25, 0xd1, 0x8a, 0x94, 0x25,\n\t0x13, 0x79, 0xf7, 0xbe, 0xef, 0xbd, 0x7b, 0x9f, 0xbb, 0x7b, 0x24, 0x68, 0x79, 0xe3, 0x1e, 0x8a,\n\t0xad, 0x01, 0x7e, 0x76, 0x8a, 0x7d, 0x9c, 0x8c, 0xad, 0xaf, 0xef, 0xf7, 0x50, 0xe2, 0xde, 0xb7,\n\t0x92, 0xe7, 0x66, 0x14, 0x93, 0x84, 0xc0, 0x5d, 0xae, 0x30, 0x0b, 0x85, 0x29, 0x15, 0xcd, 0x46,\n\t0x40, 0x02, 0xc2, 0x35, 0x16, 0x7b, 0x13, 0xf2, 0xa6, 0xe6, 0x11, 0x3a, 0x24, 0xd4, 0xea, 0xb9,\n\t0x14, 0x15, 0xc1, 0x3c, 0x82, 0x43, 0x69, 0xdf, 0x13, 0x76, 0x47, 0x38, 0x8a, 0x81, 0x30, 0x19,\n\t0xbf, 0xaf, 0x81, 0xed, 0x2e, 0x0d, 0x8e, 0x63, 0xe4, 0x26, 0xe8, 0x09, 0x21, 0x03, 0x88, 0x41,\n\t0x23, 0x22, 0x64, 0xe0, 0x78, 0x6c, 0x8a, 0xc4, 0x8e, 0xeb, 0xfb, 0x31, 0xa2, 0x54, 0x55, 0x5a,\n\t0xca, 0xfe, 0x66, 0xfb, 0x61, 0x96, 0xea, 0xef, 0x8f, 0xdd, 0xe1, 0xe0, 0x91, 0x51, 0xa5, 0x32,\n\t0xfe, 0xf8, 0xe5, 0xa0, 0x21, 0x13, 0x7c, 0x22, 0xa6, 0x9e, 0x26, 0x31, 0x0e, 0x03, 0x1b, 0x32,\n\t0xf9, 0xb1, 0x50, 0x4b, 0x0b, 0x3c, 0x02, 0x5b, 0x3c, 0x48, 0x32, 0x8e, 0x90, 0x83, 0x7d, 0x75,\n\t0xad, 0xa5, 0xec, 0x6f, 0xb7, 0x77, 0xb3, 0x54, 0xbf, 0x51, 0x4a, 0x21, 0xad, 0x86, 0x0d, 0xd8,\n\t0xf0, 0xf3, 0x71, 0x84, 0x3e, 0xf3, 0xe1, 0x0b, 0x05, 0x6c, 0xfb, 0x28, 0x22, 0x14, 0x27, 0x0e,\n\t0xab, 0x94, 0xaa, 0xeb, 0xad, 0xfa, 0xfe, 0xd5, 0x07, 0x7b, 0xa6, 0xcc, 0xce, 0x58, 0xe4, 0xd8,\n\t0xcc, 0x63, 0x82, 0xc3, 0xf6, 0xe3, 0x57, 0xa9, 0x5e, 0xcb, 0x52, 0xbd, 0x21, 0x62, 0x4f, 0x79,\n\t0x1b, 0x3f, 0xfd, 0xa3, 0xef, 0x07, 0x38, 0xe9, 0x9f, 0xf6, 0x4c, 0x8f, 0x0c, 0x25, 0x23, 0xf9,\n\t0x38, 0xa0, 0xfe, 0x57, 0x16, 0x5b, 0x05, 0xe5, 0x81, 0xa8, 0xbd, 0x25, 0x7d, 0xf9, 0xe8, 0xd1,\n\t0x95, 0x17, 0x2f, 0xf5, 0xda, 0x7f, 0x2f, 0xf5, 0x9a, 0xb1, 0x0b, 0x6e, 0x4e, 0xb1, 0xb4, 0x11,\n\t0x8d, 0x48, 0x48, 0x91, 0xf1, 0xeb, 0x1a, 0xb7, 0x74, 0x84, 0xdb, 0x17, 0x38, 0xe9, 0xe3, 0xb0,\n\t0xed, 0x26, 0x5e, 0x1f, 0xba, 0x60, 0x47, 0x06, 0x9b, 0x43, 0xfd, 0x61, 0x96, 0xea, 0xea, 0xd4,\n\t0x5a, 0x97, 0xe1, 0x7c, 0xbd, 0xd0, 0xe6, 0x94, 0xef, 0x81, 0xcb, 0x9c, 0xa3, 0x04, 0xbc, 0xde,\n\t0x86, 0x59, 0xaa, 0x5f, 0x2b, 0x01, 0x66, 0x6c, 0x37, 0xd8, 0x5b, 0x25, 0xd7, 0xfa, 0xbb, 0xe7,\n\t0xaa, 0x83, 0x3b, 0x95, 0xf4, 0x0a, 0xbe, 0x3f, 0xaf, 0x81, 0x5b, 0x5d, 0x1a, 0x30, 0x93, 0x1f,\n\t0xbb, 0xa3, 0x32, 0x60, 0x1f, 0xc0, 0x91, 0x9c, 0x46, 0xb3, 0x84, 0x3f, 0xca, 0x52, 0x7d, 0x4f,\n\t0xac, 0x7a, 0x5e, 0x73, 0x31, 0xe2, 0x9d, 0x89, 0xf8, 0xad, 0x18, 0x7f, 0x03, 0x36, 0xc5, 0xdd,\n\t0x21, 0x38, 0x54, 0xeb, 0x2d, 0x65, 0x31, 0xde, 0x63, 0x89, 0xf7, 0x7a, 0xf9, 0xd6, 0x11, 0x1c,\n\t0x32, 0xb4, 0x1f, 0x2c, 0x89, 0xd6, 0xbe, 0xc2, 0x6f, 0x1f, 0xc1, 0x61, 0x89, 0x6a, 0x0b, 0x68,\n\t0xd5, 0xcc, 0x0a, 0xac, 0xbf, 0x5d, 0x02, 0xb0, 0x4b, 0x83, 0xa7, 0x23, 0x37, 0x2a, 0x23, 0x25,\n\t0xe0, 0x16, 0x1d, 0xb9, 0x91, 0x13, 0xa3, 0x67, 0xa7, 0x88, 0x26, 0x73, 0x58, 0x8f, 0xb2, 0x54,\n\t0xbf, 0x23, 0x56, 0x5b, 0xad, 0xbb, 0x18, 0x6d, 0x83, 0x39, 0xd8, 0xb9, 0xfe, 0xad, 0xe8, 0x1e,\n\t0x81, 0x2d, 0x9e, 0x35, 0x6f, 0x2a, 0xf5, 0xd9, 0xa6, 0x52, 0xb6, 0x1a, 0x36, 0x60, 0x43, 0xd9,\n\t0x54, 0xbe, 0x03, 0x80, 0x9c, 0x9c, 0xa0, 0x58, 0xec, 0xcc, 0xfa, 0x9b, 0x76, 0xa6, 0x23, 0x77,\n\t0x66, 0x47, 0xc4, 0x9d, 0xb8, 0xae, 0xb4, 0x35, 0x9b, 0xdc, 0x8f, 0xbd, 0xc2, 0xc7, 0xac, 0x19,\n\t0x0c, 0xdd, 0xd0, 0xe7, 0x51, 0x1c, 0x1f, 0x85, 0x64, 0xa8, 0x5e, 0xe2, 0x4c, 0x6f, 0x97, 0x9b,\n\t0xc1, 0x8c, 0xc4, 0xb0, 0xdf, 0x13, 0x73, 0x2c, 0x48, 0x87, 0xcd, 0xc0, 0x1f, 0x14, 0x70, 0x6d,\n\t0xb2, 0x1e, 0xe7, 0x04, 0x21, 0x75, 0xe3, 0x4d, 0xe5, 0xe4, 0xf7, 0xf8, 0xe6, 0x6c, 0x39, 0xcc,\n\t0x7d, 0xa5, 0x92, 0xb6, 0x8a, 0x92, 0x3e, 0x45, 0x08, 0x52, 0x70, 0x95, 0xc4, 0x3e, 0x8a, 0x9d,\n\t0x28, 0xc6, 0x1e, 0x52, 0x2f, 0xf3, 0x7a, 0x6c, 0x96, 0xec, 0xef, 0x54, 0xbf, 0xbb, 0x44, 0xcc,\n\t0x0e, 0xf2, 0xb2, 0x54, 0x87, 0x72, 0x59, 0x93, 0x50, 0xec, 0x18, 0x01, 0x59, 0x4e, 0x07, 0x79,\n\t0x36, 0xe0, 0xb6, 0x27, 0xcc, 0x54, 0x3a, 0xe6, 0xb7, 0x41, 0x73, 0xfe, 0x0c, 0xe7, 0x47, 0xfc,\n\t0xc1, 0x9f, 0x75, 0x50, 0xef, 0xd2, 0x00, 0xfa, 0x00, 0x94, 0xbe, 0x81, 0x77, 0xcd, 0x0b, 0x3e,\n\t0xc0, 0xe6, 0x54, 0x7f, 0x6f, 0x9a, 0xcb, 0xe9, 0xf2, 0x6c, 0xf0, 0x5b, 0x00, 0x2b, 0xbe, 0x01,\n\t0x0b, 0xa3, 0xcc, 0xeb, 0x9b, 0x1f, 0xaf, 0xa6, 0x2f, 0xb2, 0x7f, 0x0f, 0x6e, 0x54, 0x75, 0x48,\n\t0x6b, 0x51, 0xb8, 0x0a, 0x87, 0xe6, 0xc3, 0x15, 0x1d, 0x8a, 0x05, 0xf4, 0xc1, 0x3a, 0xdb, 0x07,\n\t0x78, 0x6f, 0x51, 0x80, 0x99, 0x9d, 0x6a, 0x1e, 0xae, 0x20, 0xce, 0x33, 0xb5, 0xbb, 0xaf, 0xce,\n\t0x34, 0xe5, 0xf5, 0x99, 0xa6, 0xfc, 0x7b, 0xa6, 0x29, 0x3f, 0x9e, 0x6b, 0xb5, 0xd7, 0xe7, 0x5a,\n\t0xed, 0xaf, 0x73, 0xad, 0xf6, 0xe5, 0x61, 0xf9, 0xc0, 0xb1, 0xc0, 0x1e, 0x09, 0x03, 0xd6, 0x65,\n\t0xac, 0x80, 0x1c, 0x88, 0x1f, 0xb3, 0xe7, 0xa5, 0x5f, 0x33, 0x7e, 0x02, 0x7b, 0x1b, 0xfc, 0x67,\n\t0xe9, 0xf0, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7a, 0x2f, 0xd4, 0x33, 0xba, 0x09, 0x00, 0x00,\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ context.Context\n\t_ grpc.ClientConn\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// MsgClient is the client API for Msg service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype MsgClient interface {\n\t// Submit a create liquidity pool message.\n\tCreatePool(ctx context.Context, in *MsgCreatePool, opts ...grpc.CallOption) (*MsgCreatePoolResponse, error)\n\t// Submit a deposit to the liquidity pool batch.\n\tDepositWithinBatch(ctx context.Context, in *MsgDepositWithinBatch, opts ...grpc.CallOption) (*MsgDepositWithinBatchResponse, error)\n\t// Submit a withdraw from the liquidity pool batch.\n\tWithdrawWithinBatch(ctx context.Context, in *MsgWithdrawWithinBatch, opts ...grpc.CallOption) (*MsgWithdrawWithinBatchResponse, error)\n\t// Submit a swap to the liquidity pool batch.\n\tSwap(ctx context.Context, in *MsgSwapWithinBatch, opts ...grpc.CallOption) (*MsgSwapWithinBatchResponse, error)\n}\n\ntype msgClient struct {\n\tcc grpc1.ClientConn\n}\n\nfunc NewMsgClient(cc grpc1.ClientConn) MsgClient {\n\treturn &msgClient{cc}\n}\n\nfunc (c *msgClient) CreatePool(ctx context.Context, in *MsgCreatePool, opts ...grpc.CallOption) (*MsgCreatePoolResponse, error) {\n\tout := new(MsgCreatePoolResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.liquidity.v1beta1.Msg/CreatePool\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) DepositWithinBatch(ctx context.Context, in *MsgDepositWithinBatch, opts ...grpc.CallOption) (*MsgDepositWithinBatchResponse, error) {\n\tout := new(MsgDepositWithinBatchResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.liquidity.v1beta1.Msg/DepositWithinBatch\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) WithdrawWithinBatch(ctx context.Context, in *MsgWithdrawWithinBatch, opts ...grpc.CallOption) (*MsgWithdrawWithinBatchResponse, error) {\n\tout := new(MsgWithdrawWithinBatchResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.liquidity.v1beta1.Msg/WithdrawWithinBatch\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) Swap(ctx context.Context, in *MsgSwapWithinBatch, opts ...grpc.CallOption) (*MsgSwapWithinBatchResponse, error) {\n\tout := new(MsgSwapWithinBatchResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.liquidity.v1beta1.Msg/Swap\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// MsgServer is the server API for Msg service.\ntype MsgServer interface {\n\t// Submit a create liquidity pool message.\n\tCreatePool(context.Context, *MsgCreatePool) (*MsgCreatePoolResponse, error)\n\t// Submit a deposit to the liquidity pool batch.\n\tDepositWithinBatch(context.Context, *MsgDepositWithinBatch) (*MsgDepositWithinBatchResponse, error)\n\t// Submit a withdraw from the liquidity pool batch.\n\tWithdrawWithinBatch(context.Context, *MsgWithdrawWithinBatch) (*MsgWithdrawWithinBatchResponse, error)\n\t// Submit a swap to the liquidity pool batch.\n\tSwap(context.Context, *MsgSwapWithinBatch) (*MsgSwapWithinBatchResponse, error)\n}\n\n// UnimplementedMsgServer can be embedded to have forward compatible implementations.\ntype UnimplementedMsgServer struct{}\n\nfunc (*UnimplementedMsgServer) CreatePool(ctx context.Context, req *MsgCreatePool) (*MsgCreatePoolResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CreatePool not implemented\")\n}\n\nfunc (*UnimplementedMsgServer) DepositWithinBatch(ctx context.Context, req *MsgDepositWithinBatch) (*MsgDepositWithinBatchResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method DepositWithinBatch not implemented\")\n}\n\nfunc (*UnimplementedMsgServer) WithdrawWithinBatch(ctx context.Context, req *MsgWithdrawWithinBatch) (*MsgWithdrawWithinBatchResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method WithdrawWithinBatch not implemented\")\n}\n\nfunc (*UnimplementedMsgServer) Swap(ctx context.Context, req *MsgSwapWithinBatch) (*MsgSwapWithinBatchResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Swap not implemented\")\n}\n\nfunc RegisterMsgServer(s grpc1.Server, srv MsgServer) {\n\ts.RegisterService(&_Msg_serviceDesc, srv)\n}\n\nfunc _Msg_CreatePool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgCreatePool)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).CreatePool(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.liquidity.v1beta1.Msg/CreatePool\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).CreatePool(ctx, req.(*MsgCreatePool))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_DepositWithinBatch_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgDepositWithinBatch)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).DepositWithinBatch(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.liquidity.v1beta1.Msg/DepositWithinBatch\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).DepositWithinBatch(ctx, req.(*MsgDepositWithinBatch))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_WithdrawWithinBatch_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgWithdrawWithinBatch)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).WithdrawWithinBatch(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.liquidity.v1beta1.Msg/WithdrawWithinBatch\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).WithdrawWithinBatch(ctx, req.(*MsgWithdrawWithinBatch))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_Swap_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgSwapWithinBatch)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).Swap(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.liquidity.v1beta1.Msg/Swap\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).Swap(ctx, req.(*MsgSwapWithinBatch))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _Msg_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"cyber.liquidity.v1beta1.Msg\",\n\tHandlerType: (*MsgServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"CreatePool\",\n\t\t\tHandler:    _Msg_CreatePool_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"DepositWithinBatch\",\n\t\t\tHandler:    _Msg_DepositWithinBatch_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"WithdrawWithinBatch\",\n\t\t\tHandler:    _Msg_WithdrawWithinBatch_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Swap\",\n\t\t\tHandler:    _Msg_Swap_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"cyber/liquidity/v1beta1/tx.proto\",\n}\n\nfunc (m *MsgCreatePool) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgCreatePool) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgCreatePool) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.DepositCoins) > 0 {\n\t\tfor iNdEx := len(m.DepositCoins) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.DepositCoins[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0x22\n\t\t}\n\t}\n\tif m.PoolTypeId != 0 {\n\t\ti = encodeVarintTx(dAtA, i, uint64(m.PoolTypeId))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif len(m.PoolCreatorAddress) > 0 {\n\t\ti -= len(m.PoolCreatorAddress)\n\t\tcopy(dAtA[i:], m.PoolCreatorAddress)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.PoolCreatorAddress)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgCreatePoolResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgCreatePoolResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgCreatePoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgDepositWithinBatch) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgDepositWithinBatch) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgDepositWithinBatch) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.DepositCoins) > 0 {\n\t\tfor iNdEx := len(m.DepositCoins) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.DepositCoins[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0x1a\n\t\t}\n\t}\n\tif m.PoolId != 0 {\n\t\ti = encodeVarintTx(dAtA, i, uint64(m.PoolId))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif len(m.DepositorAddress) > 0 {\n\t\ti -= len(m.DepositorAddress)\n\t\tcopy(dAtA[i:], m.DepositorAddress)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.DepositorAddress)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgDepositWithinBatchResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgDepositWithinBatchResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgDepositWithinBatchResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgWithdrawWithinBatch) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgWithdrawWithinBatch) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgWithdrawWithinBatch) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.PoolCoin.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x1a\n\tif m.PoolId != 0 {\n\t\ti = encodeVarintTx(dAtA, i, uint64(m.PoolId))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif len(m.WithdrawerAddress) > 0 {\n\t\ti -= len(m.WithdrawerAddress)\n\t\tcopy(dAtA[i:], m.WithdrawerAddress)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.WithdrawerAddress)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgWithdrawWithinBatchResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgWithdrawWithinBatchResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgWithdrawWithinBatchResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgSwapWithinBatch) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgSwapWithinBatch) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgSwapWithinBatch) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize := m.OrderPrice.Size()\n\t\ti -= size\n\t\tif _, err := m.OrderPrice.MarshalTo(dAtA[i:]); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x3a\n\t{\n\t\tsize, err := m.OfferCoinFee.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x32\n\tif len(m.DemandCoinDenom) > 0 {\n\t\ti -= len(m.DemandCoinDenom)\n\t\tcopy(dAtA[i:], m.DemandCoinDenom)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.DemandCoinDenom)))\n\t\ti--\n\t\tdAtA[i] = 0x2a\n\t}\n\t{\n\t\tsize, err := m.OfferCoin.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x22\n\tif m.SwapTypeId != 0 {\n\t\ti = encodeVarintTx(dAtA, i, uint64(m.SwapTypeId))\n\t\ti--\n\t\tdAtA[i] = 0x18\n\t}\n\tif m.PoolId != 0 {\n\t\ti = encodeVarintTx(dAtA, i, uint64(m.PoolId))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif len(m.SwapRequesterAddress) > 0 {\n\t\ti -= len(m.SwapRequesterAddress)\n\t\tcopy(dAtA[i:], m.SwapRequesterAddress)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.SwapRequesterAddress)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgSwapWithinBatchResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgSwapWithinBatchResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgSwapWithinBatchResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintTx(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovTx(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *MsgCreatePool) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.PoolCreatorAddress)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tif m.PoolTypeId != 0 {\n\t\tn += 1 + sovTx(uint64(m.PoolTypeId))\n\t}\n\tif len(m.DepositCoins) > 0 {\n\t\tfor _, e := range m.DepositCoins {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovTx(uint64(l))\n\t\t}\n\t}\n\treturn n\n}\n\nfunc (m *MsgCreatePoolResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgDepositWithinBatch) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.DepositorAddress)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tif m.PoolId != 0 {\n\t\tn += 1 + sovTx(uint64(m.PoolId))\n\t}\n\tif len(m.DepositCoins) > 0 {\n\t\tfor _, e := range m.DepositCoins {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovTx(uint64(l))\n\t\t}\n\t}\n\treturn n\n}\n\nfunc (m *MsgDepositWithinBatchResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgWithdrawWithinBatch) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.WithdrawerAddress)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tif m.PoolId != 0 {\n\t\tn += 1 + sovTx(uint64(m.PoolId))\n\t}\n\tl = m.PoolCoin.Size()\n\tn += 1 + l + sovTx(uint64(l))\n\treturn n\n}\n\nfunc (m *MsgWithdrawWithinBatchResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgSwapWithinBatch) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.SwapRequesterAddress)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tif m.PoolId != 0 {\n\t\tn += 1 + sovTx(uint64(m.PoolId))\n\t}\n\tif m.SwapTypeId != 0 {\n\t\tn += 1 + sovTx(uint64(m.SwapTypeId))\n\t}\n\tl = m.OfferCoin.Size()\n\tn += 1 + l + sovTx(uint64(l))\n\tl = len(m.DemandCoinDenom)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = m.OfferCoinFee.Size()\n\tn += 1 + l + sovTx(uint64(l))\n\tl = m.OrderPrice.Size()\n\tn += 1 + l + sovTx(uint64(l))\n\treturn n\n}\n\nfunc (m *MsgSwapWithinBatchResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc sovTx(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozTx(x uint64) (n int) {\n\treturn sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *MsgCreatePool) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgCreatePool: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgCreatePool: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolCreatorAddress\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.PoolCreatorAddress = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolTypeId\", wireType)\n\t\t\t}\n\t\t\tm.PoolTypeId = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.PoolTypeId |= uint32(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 4:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field DepositCoins\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.DepositCoins = append(m.DepositCoins, types.Coin{})\n\t\t\tif err := m.DepositCoins[len(m.DepositCoins)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgCreatePoolResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgCreatePoolResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgCreatePoolResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgDepositWithinBatch) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgDepositWithinBatch: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgDepositWithinBatch: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field DepositorAddress\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.DepositorAddress = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolId\", wireType)\n\t\t\t}\n\t\t\tm.PoolId = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.PoolId |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field DepositCoins\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.DepositCoins = append(m.DepositCoins, types.Coin{})\n\t\t\tif err := m.DepositCoins[len(m.DepositCoins)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgDepositWithinBatchResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgDepositWithinBatchResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgDepositWithinBatchResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgWithdrawWithinBatch) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgWithdrawWithinBatch: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgWithdrawWithinBatch: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field WithdrawerAddress\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.WithdrawerAddress = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolId\", wireType)\n\t\t\t}\n\t\t\tm.PoolId = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.PoolId |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolCoin\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.PoolCoin.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgWithdrawWithinBatchResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgWithdrawWithinBatchResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgWithdrawWithinBatchResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgSwapWithinBatch) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgSwapWithinBatch: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgSwapWithinBatch: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field SwapRequesterAddress\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.SwapRequesterAddress = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PoolId\", wireType)\n\t\t\t}\n\t\t\tm.PoolId = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.PoolId |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 3:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field SwapTypeId\", wireType)\n\t\t\t}\n\t\t\tm.SwapTypeId = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.SwapTypeId |= uint32(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 4:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field OfferCoin\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.OfferCoin.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 5:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field DemandCoinDenom\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.DemandCoinDenom = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 6:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field OfferCoinFee\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.OfferCoinFee.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 7:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field OrderPrice\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.OrderPrice.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgSwapWithinBatchResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgSwapWithinBatchResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgSwapWithinBatchResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipTx(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthTx\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupTx\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthTx\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthTx        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowTx          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupTx = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/liquidity/types/utils.go",
    "content": "package types\n\nimport (\n\t\"crypto/sha256\"\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"cosmossdk.io/math\"\n\t\"github.com/cometbft/cometbft/crypto\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/address\"\n)\n\n// AlphabeticalDenomPair returns denom pairs that are alphabetically sorted.\nfunc AlphabeticalDenomPair(denom1, denom2 string) (resDenom1, resDenom2 string) {\n\tif denom1 > denom2 {\n\t\treturn denom2, denom1\n\t}\n\treturn denom1, denom2\n}\n\n// SortDenoms sorts denoms in alphabetical order.\nfunc SortDenoms(denoms []string) []string {\n\tsort.Strings(denoms)\n\treturn denoms\n}\n\n// GetPoolReserveAcc returns the address of the pool's reserve account.\nfunc GetPoolReserveAcc(poolName string, len32 bool) sdk.AccAddress {\n\tif len32 {\n\t\t// The rules are temporarily added for testing on 32-length bytes addresses of ADR-28 and are subject to change.\n\t\tpoolCoinDenom := GetPoolCoinDenom(poolName)\n\t\tpoolCoinDenom = strings.TrimPrefix(poolCoinDenom, PoolCoinDenomPrefix)\n\t\treturn sdk.AccAddress(address.Module(ModuleName, []byte(poolCoinDenom)))\n\t}\n\treturn sdk.AccAddress(crypto.AddressHash([]byte(poolName)))\n}\n\n// GetPoolCoinDenom returns the denomination of the pool coin.\nfunc GetPoolCoinDenom(poolName string) string {\n\t// Originally pool coin denom has prefix with / splitter, but removed prefix for pass validation of ibc-transfer\n\treturn fmt.Sprintf(\"%s%X\", PoolCoinDenomPrefix, sha256.Sum256([]byte(poolName)))\n}\n\n// GetReserveAcc extracts and returns reserve account from pool coin denom.\nfunc GetReserveAcc(poolCoinDenom string, len32 bool) (sdk.AccAddress, error) {\n\tif err := sdk.ValidateDenom(poolCoinDenom); err != nil {\n\t\treturn nil, err\n\t}\n\tif !strings.HasPrefix(poolCoinDenom, PoolCoinDenomPrefix) {\n\t\treturn nil, ErrInvalidDenom\n\t}\n\tpoolCoinDenom = strings.TrimPrefix(poolCoinDenom, PoolCoinDenomPrefix)\n\tif len(poolCoinDenom) != 64 {\n\t\treturn nil, ErrInvalidDenom\n\t}\n\tif len32 {\n\t\t// The rules are temporarily added for testing on 32-length bytes addresses of ADR-28 and are subject to change.\n\t\treturn sdk.AccAddress(address.Module(ModuleName, []byte(poolCoinDenom))), nil\n\t}\n\treturn sdk.AccAddressFromHexUnsafe(poolCoinDenom[:40])\n}\n\n// GetCoinsTotalAmount returns total amount of all coins in sdk.Coins.\nfunc GetCoinsTotalAmount(coins sdk.Coins) math.Int {\n\ttotalAmount := sdk.ZeroInt()\n\tfor _, coin := range coins {\n\t\ttotalAmount = totalAmount.Add(coin.Amount)\n\t}\n\treturn totalAmount\n}\n\n// ValidateReserveCoinLimit checks if total amounts of depositCoins exceed maxReserveCoinAmount.\nfunc ValidateReserveCoinLimit(maxReserveCoinAmount math.Int, depositCoins sdk.Coins) error {\n\ttotalAmount := GetCoinsTotalAmount(depositCoins)\n\tif maxReserveCoinAmount.IsZero() {\n\t\treturn nil\n\t} else if totalAmount.GT(maxReserveCoinAmount) {\n\t\treturn ErrExceededReserveCoinLimit\n\t} else {\n\t\treturn nil\n\t}\n}\n\nfunc GetOfferCoinFee(offerCoin sdk.Coin, swapFeeRate sdk.Dec) sdk.Coin {\n\tif swapFeeRate.IsZero() {\n\t\treturn sdk.NewCoin(offerCoin.Denom, sdk.ZeroInt())\n\t}\n\t// apply half-ratio swap fee rate and ceiling\n\t// see https://github.com/tendermint/liquidity/issues/41 for details\n\treturn sdk.NewCoin(offerCoin.Denom, sdk.NewDecFromInt(offerCoin.Amount).Mul(swapFeeRate.QuoInt64(2)).Ceil().TruncateInt()) // Ceil(offerCoin.Amount * (swapFeeRate/2))\n}\n\nfunc MustParseCoinsNormalized(coinStr string) sdk.Coins {\n\tcoins, err := sdk.ParseCoinsNormalized(coinStr)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn coins\n}\n\n//nolint:staticcheck\nfunc CheckOverflow(a, b math.Int) (err error) {\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\terr = ErrOverflowAmount\n\t\t}\n\t}()\n\ta.Mul(b)\n\ta.Quo(b)\n\tb.Quo(a)\n\treturn nil\n}\n\nfunc CheckOverflowWithDec(a, b sdk.Dec) (err error) {\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\terr = ErrOverflowAmount\n\t\t}\n\t}()\n\ta.Mul(b)\n\ta.Quo(b)\n\tb.Quo(a)\n\treturn nil\n}\n"
  },
  {
    "path": "x/liquidity/wasm/liquidity.go",
    "content": "package wasm\n\nimport (\n\t\"encoding/json\"\n\n\twasmkeeper \"github.com/CosmWasm/wasmd/x/wasm/keeper\"\n\twasmvmtypes \"github.com/CosmWasm/wasmvm/types\"\n\n\tliquiditytypes \"github.com/cybercongress/go-cyber/v7/x/liquidity/types\"\n\n\t\"github.com/CosmWasm/wasmd/x/wasm\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tsdkerrors \"github.com/cosmos/cosmos-sdk/types/errors\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/liquidity/keeper\"\n)\n\n// TODO refactor to the new query and message handler or remove\n\nvar (\n// _ WasmQuerierInterface   = WasmQuerier{}\n// _ WasmMsgParserInterface = WasmMsgParser{}\n)\n\n//--------------------------------------------------\n\ntype WasmMsgParser struct{}\n\nfunc NewLiquidityWasmMsgParser() WasmMsgParser {\n\treturn WasmMsgParser{}\n}\n\nfunc (WasmMsgParser) Parse(_ sdk.AccAddress, _ wasmvmtypes.CosmosMsg) ([]sdk.Msg, error) {\n\treturn nil, nil\n}\n\ntype CosmosMsg struct {\n\tCreatePool          *liquiditytypes.MsgCreatePool          `json:\"create_pool,omitempty\"`\n\tDepositWithinBatch  *liquiditytypes.MsgDepositWithinBatch  `json:\"deposit_within_batch,omitempty\"`\n\tWithdrawWithinBatch *liquiditytypes.MsgWithdrawWithinBatch `json:\"withdraw_within_batch,omitempty\"`\n\tSwapWithinBatch     *liquiditytypes.MsgSwapWithinBatch     `json:\"swap_within_batch,omitempty\"`\n}\n\n// Deprecated\nfunc (WasmMsgParser) ParseCustom(contractAddr sdk.AccAddress, data json.RawMessage) ([]sdk.Msg, error) {\n\tvar sdkMsg CosmosMsg\n\terr := json.Unmarshal(data, &sdkMsg)\n\tif err != nil {\n\t\treturn nil, sdkerrors.Wrap(err, \"failed to parse link custom msg\")\n\t}\n\n\tswitch {\n\tcase sdkMsg.SwapWithinBatch != nil:\n\t\treturn []sdk.Msg{sdkMsg.SwapWithinBatch}, sdkMsg.SwapWithinBatch.ValidateBasic()\n\tcase sdkMsg.DepositWithinBatch != nil:\n\t\treturn []sdk.Msg{sdkMsg.DepositWithinBatch}, sdkMsg.DepositWithinBatch.ValidateBasic()\n\tcase sdkMsg.WithdrawWithinBatch != nil:\n\t\treturn []sdk.Msg{sdkMsg.WithdrawWithinBatch}, sdkMsg.WithdrawWithinBatch.ValidateBasic()\n\tcase sdkMsg.CreatePool != nil:\n\t\treturn []sdk.Msg{sdkMsg.CreatePool}, sdkMsg.CreatePool.ValidateBasic()\n\tdefault:\n\t\treturn nil, sdkerrors.Wrap(wasm.ErrInvalidMsg, \"Unknown variant of Liquidity\")\n\t}\n}\n\n//--------------------------------------------------\n\ntype WasmQuerier struct {\n\tkeeper.Keeper\n}\n\nfunc NewLiquidityWasmQuerier(keeper keeper.Keeper) WasmQuerier {\n\treturn WasmQuerier{keeper}\n}\n\nfunc (WasmQuerier) Query(_ sdk.Context, _ wasmvmtypes.QueryRequest) ([]byte, error) { return nil, nil }\n\ntype CosmosQuery struct {\n\tPoolParams    *QueryPoolParams `json:\"pool_params,omitempty\"`\n\tPoolLiquidity *QueryPoolParams `json:\"pool_liquidity,omitempty\"`\n\tPoolSupply    *QueryPoolParams `json:\"pool_supply,omitempty\"`\n\tPoolPrice     *QueryPoolParams `json:\"pool_price,omitempty\"`\n\tPoolAddress   *QueryPoolParams `json:\"pool_address,omitempty\"`\n}\n\ntype QueryPoolParams struct {\n\tPoolID uint64 `json:\"pool_id\"`\n}\n\ntype PoolParamsResponse struct {\n\tTypeID                uint32   `json:\"type_id\"`\n\tReserveCoinDenoms     []string `json:\"reserve_coin_denoms\"`\n\tReserveAccountAddress string   `json:\"reserve_account_address\"`\n\tPoolCoinDenom         string   `json:\"pool_coin_denom\"`\n}\n\ntype PoolLiquidityResponse struct {\n\tLiquidity wasmvmtypes.Coins `json:\"liquidity\"`\n}\n\ntype PoolSupplyResponse struct {\n\tSupply wasmvmtypes.Coin `json:\"supply\"`\n}\n\ntype PoolPriceResponse struct {\n\tPrice string `json:\"price\"`\n}\n\ntype PoolAddressResponse struct {\n\tAddress string `json:\"address\"`\n}\n\n// Deprecated\nfunc (querier WasmQuerier) QueryCustom(ctx sdk.Context, data json.RawMessage) ([]byte, error) {\n\tvar query CosmosQuery\n\terr := json.Unmarshal(data, &query)\n\tif err != nil {\n\t\treturn nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())\n\t}\n\n\tvar bz []byte\n\n\tswitch {\n\tcase query.PoolParams != nil:\n\t\tpool, found := querier.Keeper.GetPool(ctx, query.PoolParams.PoolID)\n\t\tif !found {\n\t\t\treturn nil, sdkerrors.ErrInvalidRequest\n\t\t}\n\n\t\tbz, err = json.Marshal(\n\t\t\tPoolParamsResponse{\n\t\t\t\tTypeID:                pool.TypeId,\n\t\t\t\tReserveCoinDenoms:     pool.ReserveCoinDenoms,\n\t\t\t\tReserveAccountAddress: pool.ReserveAccountAddress,\n\t\t\t\tPoolCoinDenom:         pool.PoolCoinDenom,\n\t\t\t},\n\t\t)\n\tcase query.PoolLiquidity != nil:\n\t\tpool, found := querier.Keeper.GetPool(ctx, query.PoolLiquidity.PoolID)\n\t\tif !found {\n\t\t\treturn nil, sdkerrors.ErrInvalidRequest\n\t\t}\n\n\t\treserveCoins := querier.Keeper.GetReserveCoins(ctx, pool)\n\n\t\tbz, err = json.Marshal(\n\t\t\tPoolLiquidityResponse{\n\t\t\t\tLiquidity: wasmkeeper.ConvertSdkCoinsToWasmCoins(reserveCoins),\n\t\t\t},\n\t\t)\n\tcase query.PoolSupply != nil:\n\t\tpool, found := querier.Keeper.GetPool(ctx, query.PoolSupply.PoolID)\n\t\tif !found {\n\t\t\treturn nil, sdkerrors.ErrInvalidRequest\n\t\t}\n\n\t\tpoolSupply := querier.Keeper.GetPoolCoinTotal(ctx, pool)\n\n\t\tbz, err = json.Marshal(\n\t\t\tPoolSupplyResponse{\n\t\t\t\tSupply: wasmkeeper.ConvertSdkCoinToWasmCoin(poolSupply),\n\t\t\t},\n\t\t)\n\tcase query.PoolPrice != nil:\n\t\tpool, found := querier.Keeper.GetPool(ctx, query.PoolPrice.PoolID)\n\t\tif !found {\n\t\t\treturn nil, sdkerrors.ErrInvalidRequest\n\t\t}\n\n\t\treserveCoins := querier.Keeper.GetReserveCoins(ctx, pool)\n\t\tX := reserveCoins[0].Amount.ToLegacyDec()\n\t\tY := reserveCoins[1].Amount.ToLegacyDec()\n\n\t\tbz, err = json.Marshal(\n\t\t\tPoolPriceResponse{\n\t\t\t\tPrice: X.Quo(Y).String(),\n\t\t\t},\n\t\t)\n\tcase query.PoolAddress != nil:\n\t\tpool, found := querier.Keeper.GetPool(ctx, query.PoolAddress.PoolID)\n\t\tif !found {\n\t\t\treturn nil, sdkerrors.ErrInvalidRequest\n\t\t}\n\n\t\tbz, err = json.Marshal(\n\t\t\tPoolAddressResponse{\n\t\t\t\tAddress: pool.ReserveAccountAddress,\n\t\t\t},\n\t\t)\n\tdefault:\n\t\treturn nil, wasmvmtypes.UnsupportedRequest{Kind: \"unknown Liquidity variant\"}\n\t}\n\n\tif err != nil {\n\t\treturn nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())\n\t}\n\n\treturn bz, nil\n}\n"
  },
  {
    "path": "x/rank/abci.go",
    "content": "package rank\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/rank/keeper\"\n)\n\nfunc EndBlocker(ctx sdk.Context, k *keeper.StateKeeper) {\n\tk.EndBlocker(ctx)\n}\n"
  },
  {
    "path": "x/rank/client/cli/query.go",
    "content": "package cli\n\nimport (\n\t\"context\"\n\t\"strconv\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/cosmos/cosmos-sdk/client/flags\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/ipfs/go-cid\"\n\t\"github.com/spf13/cobra\"\n\n\tgraphtypes \"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/rank/types\"\n)\n\nfunc GetQueryCmd() *cobra.Command {\n\tqueryCmd := &cobra.Command{\n\t\tUse:                        types.ModuleName,\n\t\tShort:                      \"Querying commands for the rank module\",\n\t\tDisableFlagParsing:         true,\n\t\tSuggestionsMinimumDistance: 2,\n\t\tRunE:                       client.ValidateCmd,\n\t}\n\n\tqueryCmd.AddCommand(\n\t\tGetCmdQueryParams(),\n\t\tGetCmdQueryRank(),\n\t\tGetCmdQuerySearch(),\n\t\tGetCmdQueryBacklinks(),\n\t\tGetCmdQueryTop(),\n\t\tGetCmdQueryIsLinkExist(),\n\t\tGetCmdQueryIsAnyLinkExist(),\n\t\tGetCmdQueryNegentropyParticle(),\n\t\tGetCmdQueryNegentropy(),\n\t)\n\n\treturn queryCmd\n}\n\nfunc GetCmdQueryParams() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"params\",\n\t\tShort: \"Query the current rank parameters\",\n\t\tArgs:  cobra.NoArgs,\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tres, err := queryClient.Params(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryParamsRequest{},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryRank() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"rank [particle]\",\n\t\tShort: \"Query the current rank of given particle\",\n\t\tArgs:  cobra.ExactArgs(1),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tif _, err := cid.Decode(args[0]); err != nil {\n\t\t\t\treturn graphtypes.ErrInvalidParticle\n\t\t\t}\n\n\t\t\tres, err := queryClient.Rank(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryRankRequest{Particle: args[0]},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQuerySearch() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"search [particle] [page] [limit]\",\n\t\tShort: \"Query search of given particle\",\n\t\tArgs:  cobra.MinimumNArgs(1),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tif _, err := cid.Decode(args[0]); err != nil {\n\t\t\t\treturn graphtypes.ErrInvalidParticle\n\t\t\t}\n\n\t\t\tvar page, limit uint32\n\t\t\tif len(args) == 3 {\n\t\t\t\tp, err := strconv.ParseUint(args[1], 10, 32)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tpage = uint32(p)\n\t\t\t\tl, err := strconv.ParseUint(args[2], 10, 32)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tlimit = uint32(l)\n\t\t\t} else {\n\t\t\t\tpage = 0\n\t\t\t\tlimit = 10\n\t\t\t}\n\n\t\t\tres, err := queryClient.Search(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QuerySearchRequest{Particle: args[0], Pagination: &types.PageRequest{Page: page, PerPage: limit}},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryBacklinks() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"backlinks [particle] [page] [limit]\",\n\t\tShort: \"Query backlinks of given particle\",\n\t\tArgs:  cobra.MinimumNArgs(1),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tif _, err := cid.Decode(args[0]); err != nil {\n\t\t\t\treturn graphtypes.ErrInvalidParticle\n\t\t\t}\n\n\t\t\tvar page, limit uint32\n\t\t\tif len(args) == 3 {\n\t\t\t\tp, err := strconv.ParseUint(args[1], 10, 32)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tpage = uint32(p)\n\t\t\t\tl, err := strconv.ParseUint(args[2], 10, 32)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tlimit = uint32(l)\n\t\t\t} else {\n\t\t\t\tpage = 0\n\t\t\t\tlimit = 10\n\t\t\t}\n\n\t\t\tres, err := queryClient.Backlinks(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QuerySearchRequest{Particle: args[0], Pagination: &types.PageRequest{Page: page, PerPage: limit}},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryTop() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"top\",\n\t\tShort: \"Query top\",\n\t\tArgs:  cobra.MinimumNArgs(0),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tvar page, limit uint32\n\t\t\tif len(args) == 2 {\n\t\t\t\tp, err := strconv.ParseUint(args[1], 10, 32)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tpage = uint32(p)\n\t\t\t\tl, err := strconv.ParseUint(args[2], 10, 32)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tlimit = uint32(l)\n\t\t\t} else {\n\t\t\t\tpage = 0\n\t\t\t\tlimit = 10\n\t\t\t}\n\n\t\t\tres, err := queryClient.Top(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryTopRequest{\n\t\t\t\t\tPagination: &types.PageRequest{Page: page, PerPage: limit},\n\t\t\t\t},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryIsLinkExist() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"is-exist [from] [to] [account]\",\n\t\tShort: \"Query is link exist between particles for given account\",\n\t\tArgs:  cobra.ExactArgs(3),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tif _, err := cid.Decode(args[0]); err != nil {\n\t\t\t\treturn graphtypes.ErrInvalidParticle\n\t\t\t}\n\n\t\t\tif _, err := cid.Decode(args[1]); err != nil {\n\t\t\t\treturn graphtypes.ErrInvalidParticle\n\t\t\t}\n\n\t\t\taddress, err := sdk.AccAddressFromBech32(args[2])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tres, err := queryClient.IsLinkExist(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryIsLinkExistRequest{From: args[0], To: args[1], Address: address.String()},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryIsAnyLinkExist() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"is-exist-any [from] [to]\",\n\t\tShort: \"Query is any link exist between particles\",\n\t\tArgs:  cobra.ExactArgs(2),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tif _, err := cid.Decode(args[0]); err != nil {\n\t\t\t\treturn graphtypes.ErrInvalidParticle\n\t\t\t}\n\n\t\t\tif _, err := cid.Decode(args[1]); err != nil {\n\t\t\t\treturn graphtypes.ErrInvalidParticle\n\t\t\t}\n\n\t\t\tres, err := queryClient.IsAnyLinkExist(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryIsAnyLinkExistRequest{From: args[0], To: args[1]},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryNegentropyParticle() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"negentropy [particle]\",\n\t\tShort: \"Query focus entropy contribution of a particle: -pi*log2(pi)\",\n\t\tArgs:  cobra.ExactArgs(1),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tif _, err := cid.Decode(args[0]); err != nil {\n\t\t\t\treturn graphtypes.ErrInvalidParticle\n\t\t\t}\n\n\t\t\tres, err := queryClient.ParticleNegentropy(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryNegentropyPartilceRequest{Particle: args[0]},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryNegentropy() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"negentropy-total\",\n\t\tShort: \"Query system-wide negentropy: J(pi) = log2(n) - H(pi)\",\n\t\tArgs:  cobra.NoArgs,\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tres, err := queryClient.Negentropy(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryNegentropyRequest{},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\n\n"
  },
  {
    "path": "x/rank/cuda/Makefile",
    "content": "# NVCC is path to nvcc. Here it is assumed /usr/local/cuda is on one's PATH.\n\nNVCC = nvcc\n\nBUILD_DIR = build\n\nNVCCFLAGS = -fmad=false --compiler-options '-fPIC -frounding-math -fsignaling-nans'\n\nall: build\n\nbuild: build_dir build_gpu install_gpu\n\nbuild_dir:\n\tmkdir -p $(BUILD_DIR)\n\nbuild_gpu:\n\t$(NVCC) $(NVCCFLAGS) -o $(BUILD_DIR)/libcbdrank.so -shared ./rank.cu\n\ninstall_gpu:\n\tcp $(BUILD_DIR)/libcbdrank.so /usr/lib\n\tcp ./cbdrank.h /usr/lib\n\nclean:\n\trm $(BUILD_DIR)"
  },
  {
    "path": "x/rank/cuda/cbdrank.h",
    "content": "#include <stdint.h>\n\nvoid calculate_rank(\n    uint64_t *stakes, uint64_t stakesSize,                    /* user stakes and corresponding array size */\n    uint64_t cidsSize, uint64_t linksSize,                    /* cids and links array size */\n    uint32_t *inLinksCount, uint32_t *outLinksCount,          /* array index - cid index*/\n    uint64_t *inLinksOuts, uint64_t *outLinksIns,\n    uint64_t *inLinksUsers,                                   /*all incoming links from all users*/\n    uint64_t *outLinksUsers,                                  /*all outgoing links from all users*/\n    double dampingFactor,                                     /* value of damping factor*/\n    double tolerance,                                         /* value of needed tolerance */\n    double *rank                                              /* array index - cid index*/\n);\n"
  },
  {
    "path": "x/rank/cuda/rank.cu",
    "content": "#include <stdint.h>\n#include <stdio.h>\n#include <thrust/transform.h>\n#include <thrust/transform_reduce.h>\n#include <thrust/device_vector.h>\n#include <thrust/execution_policy.h>\n#include <thrust/functional.h>\n#include \"types.h\"\n\nconst int CUDA_THREAD_BLOCK_SIZE = 256;\n\n/*****************************************************/\n/* KERNEL: RUN SINGLE RANK ITERATION                 */\n/*****************************************************/\n/* All in links used here are compressed in links    */\n/*****************************************************/\n__global__\nvoid run_rank_iteration(\n    CompressedInLink *inLinks,                            /* all compressed in links */\n    double *prevRank, double *rank, uint64_t rankSize,    /* array index - cid index */\n    uint64_t *inLinksStartIndex, uint32_t *inLinksCount,  /* array index - cid index */\n    double defaultRankWithCorrection,                     /* default rank + inner product correction */\n    double dampingFactor\n) {\n\n\tint index = blockIdx.x * blockDim.x + threadIdx.x;\n    uint64_t stride = blockDim.x * gridDim.x;\n\n    for (uint64_t i = index; i < rankSize; i += stride) {\n        if(inLinksCount[i] == 0) { continue; }\n\n        double ksum = 0;\n        for (uint64_t j = inLinksStartIndex[i]; j < inLinksStartIndex[i] + inLinksCount[i]; j++) {\n           if (inLinks[j].weight == 0) {continue;}\n           ksum = prevRank[inLinks[j].fromIndex] * inLinks[j].weight + ksum;\n        }\n        rank[i] = ksum * dampingFactor + defaultRankWithCorrection;\n    }\n}\n\n\n/*****************************************************/\n/* KERNEL: DOUBLE ABS FUNCTOR                        */\n/*****************************************************/\n/* Return absolute value for double                  */\n/*****************************************************/\nstruct absolute_value {\n  __device__ double operator()(const double &x) const {\n    return x < 0.0 ? -x : x;\n  }\n};\n\n\n/*****************************************************/\n/* HOST: FINDS MAXIMUM RANKS DIFFERENCE              */\n/*****************************************************/\n/* Finds maximum rank difference for single element  */\n/*                                                   */\n/*****************************************************/\ndouble find_max_ranks_diff(double *prevRank, double *newRank, uint64_t rankSize) {\n\n    thrust::device_vector<double> ranksDiff(rankSize);\n    thrust::device_ptr<double> newRankBegin(newRank);\n    thrust::device_ptr<double> prevRankBegin(prevRank);\n    thrust::device_ptr<double> prevRankEnd(prevRank + rankSize);\n    thrust::transform(thrust::device,\n        prevRankBegin, prevRankEnd, newRankBegin, ranksDiff.begin(), thrust::minus<double>()\n    );\n\n    return thrust::transform_reduce(thrust::device,\n        ranksDiff.begin(), ranksDiff.end(), absolute_value(), 0.0, thrust::maximum<double>()\n    );\n}\n\n/*******************************************************/\n/* KERNEL: CALCULATE PARTICLE STAKE BY IN OR OUT LINKS */\n/*******************************************************/\n__global__\nvoid get_particle_stake_by_links(\n    uint64_t cidsSize,\n    uint64_t *stakes,                                /*array index - user index*/\n    uint64_t *linksStartIndex, uint32_t *linksCount, /*array index - cid index*/\n    uint64_t *linksUsers,                            /*all links from all users*/\n    /*returns*/ uint64_t *cidsTotalOutStakes         /*array index - cid index*/\n) {\n\n\tint index = blockIdx.x * blockDim.x + threadIdx.x;\n    uint64_t stride = blockDim.x * gridDim.x;\n\n    for (uint64_t i = index; i < cidsSize; i += stride) {\n        uint64_t totalOutStake = 0;\n        for (uint64_t j = linksStartIndex[i]; j < linksStartIndex[i] + linksCount[i]; j++) {\n           totalOutStake = __dadd_rn(totalOutStake, stakes[linksUsers[j]]);\n        }\n        cidsTotalOutStakes[i] = totalOutStake;\n    }\n}\n\n/*********************************************************/\n/* DEVICE: USER TO DIVIDE TWO uint64                     */\n/*********************************************************/\n__device__ __forceinline__\ndouble ddiv_rn(uint64_t *a, uint64_t *b) {\n    return __ddiv_rn(__ull2double_rn(*a), __ull2double_rn(*b));\n}\n\n/*********************************************************/\n/* KERNEL: CALCULATE COMPRESSED IN LINKS COUNT FOR CIDS  */\n/*********************************************************/\n__global__\nvoid get_compressed_in_links_count(\n    uint64_t cidsSize,\n    uint64_t *inLinksStartIndex, uint32_t *inLinksCount, /*array index - cid index*/\n    uint64_t *inLinksOuts,                               /*all incoming links from all users*/\n    /*returns*/ uint32_t *compressedInLinksCount         /*array index - cid index*/\n) {\n\n\tint index = blockIdx.x * blockDim.x + threadIdx.x;\n    uint64_t stride = blockDim.x * gridDim.x;\n\n    for (uint64_t i = index; i < cidsSize; i += stride) {\n\n        if(inLinksCount[i] == 0) {\n            compressedInLinksCount[i]=0;\n            continue;\n        }\n\n        uint32_t compressedLinksCount = 0;\n        for(uint64_t j = inLinksStartIndex[i]; j < inLinksStartIndex[i]+inLinksCount[i]; j++) {\n            if(j == inLinksStartIndex[i] || inLinksOuts[j] != inLinksOuts[j-1]) {\n                compressedLinksCount++;\n            }\n        }\n        compressedInLinksCount[i] = compressedLinksCount;\n    }\n}\n\n\n/*********************************************************/\n/* KERNEL: CALCULATE COMPRESSED IN LINKS                 */\n/*********************************************************/\n__global__\nvoid get_compressed_in_links(\n    uint64_t cidsSize,\n    uint64_t *inLinksStartIndex, uint32_t *inLinksCount, uint64_t *cidsTotalOutStakes, /*array index - cid index*/\n    uint64_t *inLinksOuts, uint64_t *inLinksUsers,                                     /*all incoming links from all users*/\n    uint64_t *stakes,                                                                  /*array index - user index*/\n    uint64_t *compressedInLinksStartIndex, uint32_t *compressedInLinksCount,           /*array index - cid index*/\n    /*returns*/ CompressedInLink *compressedInLinks                                    /*all incoming compressed links*/\n) {\n\n\tint index = blockIdx.x * blockDim.x + threadIdx.x;\n    uint64_t stride = blockDim.x * gridDim.x;\n\n    for (uint64_t i = index; i < cidsSize; i += stride) {\n\n        if(inLinksCount[i] == 0) {\n            continue;\n        }\n\n        uint32_t compressedLinksIndex = compressedInLinksStartIndex[i];\n\n        if(inLinksCount[i] == 1) {\n            uint64_t oppositeCid = inLinksOuts[inLinksStartIndex[i]];\n            uint64_t compressedLinkStake = stakes[inLinksUsers[inLinksStartIndex[i]]];\n            double weight = ddiv_rn(&compressedLinkStake, &cidsTotalOutStakes[oppositeCid]);\n            if (isnan(weight)) { weight = 0; }\n            compressedInLinks[compressedLinksIndex] = CompressedInLink {oppositeCid, weight};\n            continue;\n        }\n\n        uint64_t compressedLinkStake = 0;\n        uint64_t lastLinkIndex = inLinksStartIndex[i] + inLinksCount[i] - 1;\n        for(uint64_t j = inLinksStartIndex[i]; j < lastLinkIndex + 1; j++) {\n\n            compressedLinkStake += stakes[inLinksUsers[j]];\n            if(j == lastLinkIndex || inLinksOuts[j] != inLinksOuts[j+1]) {\n                uint64_t oppositeCid = inLinksOuts[j];\n                double weight = ddiv_rn(&compressedLinkStake, &cidsTotalOutStakes[oppositeCid]);\n                if (isnan(weight)) { weight = 0; }\n                compressedInLinks[compressedLinksIndex] = CompressedInLink {oppositeCid, weight};\n                compressedLinksIndex++;\n                compressedLinkStake=0;\n            }\n        }\n    }\n}\n\n/************************************************************/\n/* HOST: CALCULATE COMPRESSED IN LINKS START INDEXES        */\n/************************************************************/\n/* SEQUENTIAL LOGIC -> CALCULATE ON CPU                     */\n/* RETURNS TOTAL COMPRESSED LINKS SIZE                      */\n/************************************************************/\n__host__\nuint64_t get_links_start_index(\n    uint64_t cidsSize,\n    uint32_t *linksCount,                   /*array index - cid index*/\n    /*returns*/ uint64_t *linksStartIndex   /*array index - cid index*/\n) {\n\n    uint64_t index = 0;\n    for (uint64_t i = 0; i < cidsSize; i++) {\n        linksStartIndex[i] = index;\n        index += linksCount[i];\n    }\n    return index;\n}\n\nvoid swap(double* &a, double* &b){\n    double *temp = a;\n    a = b;\n    b = temp;\n}\n\nextern \"C\" {\n\n    void calculate_rank(\n        uint64_t *stakes, uint64_t stakesSize,                    /* User stakes and corresponding array size */\n        uint64_t cidsSize, uint64_t linksSize,                    /* Cids count */\n        uint32_t *inLinksCount, uint32_t *outLinksCount,          /* array index - cid index*/\n        uint64_t *inLinksOuts,\n        uint64_t *outLinksIns,\n        uint64_t *inLinksUsers,                                   /*all incoming links from all users*/\n        uint64_t *outLinksUsers,                                  /*all outgoing links from all users*/\n        double dampingFactor,                                     /* value of damping factor*/\n        double tolerance,                                         /* value of needed tolerance */\n        double *rank                                              /* array index - cid index*/\n    ) {\n\n        int CUDA_BLOCKS_NUMBER = (cidsSize + CUDA_THREAD_BLOCK_SIZE - 1) / CUDA_THREAD_BLOCK_SIZE;\n\n        // STEP0: Calculate compressed in/out links start indexes\n        /*-------------------------------------------------------------------*/\n        uint64_t *inLinksStartIndex = (uint64_t*) malloc(cidsSize*sizeof(uint64_t));\n        uint64_t *outLinksStartIndex = (uint64_t*) malloc(cidsSize*sizeof(uint64_t));\n        get_links_start_index(cidsSize, inLinksCount, inLinksStartIndex);\n        get_links_start_index(cidsSize, outLinksCount, outLinksStartIndex);\n        /*-------------------------------------------------------------------*/\n\n\n        // STEP1: Calculate for each particle stake by OUT cyberlinks\n        /*-------------------------------------------------------------------*/\n        uint64_t *d_outLinksStartIndex;\n        uint32_t *d_outLinksCount;\n        uint64_t *d_outLinksUsers;\n        uint64_t *d_stakes;\n        uint64_t *d_cidsTotalOutStakes;\n\n        cudaMalloc(&d_outLinksStartIndex, cidsSize*sizeof(uint64_t));\n        cudaMalloc(&d_outLinksCount,      cidsSize*sizeof(uint32_t));\n        cudaMalloc(&d_outLinksUsers,     linksSize*sizeof(uint64_t));\n        cudaMalloc(&d_stakes,           stakesSize*sizeof(uint64_t));\n        cudaMalloc(&d_cidsTotalOutStakes, cidsSize*sizeof(uint64_t));\n\n        cudaMemcpy(d_outLinksStartIndex, outLinksStartIndex, cidsSize*sizeof(uint64_t), cudaMemcpyHostToDevice);\n        cudaMemcpy(d_outLinksCount,      outLinksCount,      cidsSize*sizeof(uint32_t), cudaMemcpyHostToDevice);\n        cudaMemcpy(d_outLinksUsers,      outLinksUsers,     linksSize*sizeof(uint64_t), cudaMemcpyHostToDevice);\n        cudaMemcpy(d_stakes,             stakes,           stakesSize*sizeof(uint64_t), cudaMemcpyHostToDevice);\n\n        get_particle_stake_by_links<<<CUDA_BLOCKS_NUMBER,CUDA_THREAD_BLOCK_SIZE>>>(\n            cidsSize, d_stakes, d_outLinksStartIndex,\n            d_outLinksCount, d_outLinksUsers, d_cidsTotalOutStakes\n        );\n\n        cudaFree(d_outLinksStartIndex);\n        cudaFree(d_outLinksCount);\n        cudaFree(d_outLinksUsers);\n        /*-------------------------------------------------------------------*/\n\n\n        // STEP2: Calculate compressed in links count\n        /*-------------------------------------------------------------------*/\n        uint64_t *d_inLinksStartIndex;\n        uint32_t *d_inLinksCount;\n        uint64_t *d_inLinksOuts;\n        uint32_t *d_compressedInLinksCount;\n\n        cudaMalloc(&d_inLinksStartIndex, cidsSize*sizeof(uint64_t));\n        cudaMalloc(&d_inLinksCount,      cidsSize*sizeof(uint32_t));\n        cudaMalloc(&d_inLinksOuts,           linksSize*sizeof(uint64_t));\n        cudaMalloc(&d_compressedInLinksCount, cidsSize*sizeof(uint32_t));\n\n        cudaMemcpy(d_inLinksStartIndex, inLinksStartIndex, cidsSize*sizeof(uint64_t), cudaMemcpyHostToDevice);\n        cudaMemcpy(d_inLinksCount,      inLinksCount,      cidsSize*sizeof(uint32_t), cudaMemcpyHostToDevice);\n        cudaMemcpy(d_inLinksOuts,       inLinksOuts,      linksSize*sizeof(uint64_t), cudaMemcpyHostToDevice);\n\n        get_compressed_in_links_count<<<CUDA_BLOCKS_NUMBER,CUDA_THREAD_BLOCK_SIZE>>>(\n            cidsSize, d_inLinksStartIndex, d_inLinksCount, d_inLinksOuts, d_compressedInLinksCount\n        );\n        /*-------------------------------------------------------------------*/\n\n\n        // STEP3: Calculate compressed in links start indexes\n        /*-------------------------------------------------------------------*/\n        uint32_t *compressedInLinksCount = (uint32_t*) malloc(cidsSize*sizeof(uint32_t));\n        uint64_t *compressedInLinksStartIndex = (uint64_t*) malloc(cidsSize*sizeof(uint64_t));\n        cudaMemcpy(compressedInLinksCount, d_compressedInLinksCount, cidsSize * sizeof(uint32_t), cudaMemcpyDeviceToHost);\n\n        uint64_t compressedInLinksSize = get_links_start_index(\n            cidsSize, compressedInLinksCount, compressedInLinksStartIndex\n        );\n\n        uint64_t *d_compressedInLinksStartIndex;\n        cudaMalloc(&d_compressedInLinksStartIndex, cidsSize*sizeof(uint64_t));\n        cudaMemcpy(d_compressedInLinksStartIndex, compressedInLinksStartIndex, cidsSize*sizeof(uint64_t), cudaMemcpyHostToDevice);\n        free(compressedInLinksStartIndex);\n        /*-------------------------------------------------------------------*/\n\n\n        // STEP4: Calculate compressed in links\n        /*-------------------------------------------------------------------*/\n        uint64_t *d_inLinksUsers;\n        cudaMalloc(&d_inLinksUsers, linksSize*sizeof(uint64_t));\n        cudaMemcpy(d_inLinksUsers, inLinksUsers, linksSize*sizeof(uint64_t), cudaMemcpyHostToDevice);\n\n        CompressedInLink *d_compressedInLinks;\n        cudaMalloc(&d_compressedInLinks,  compressedInLinksSize*sizeof(CompressedInLink));\n\n        get_compressed_in_links<<<CUDA_BLOCKS_NUMBER,CUDA_THREAD_BLOCK_SIZE>>>(\n            cidsSize,\n            d_inLinksStartIndex, d_inLinksCount, d_cidsTotalOutStakes,\n            d_inLinksOuts, d_inLinksUsers, d_stakes,\n            d_compressedInLinksStartIndex, d_compressedInLinksCount,\n            d_compressedInLinks\n        );\n\n        cudaFree(d_inLinksStartIndex);\n        cudaFree(d_inLinksCount);\n        cudaFree(d_inLinksUsers);\n        cudaFree(d_inLinksOuts);\n        cudaFree(d_stakes);\n        cudaFree(d_cidsTotalOutStakes);\n        /*-------------------------------------------------------------------*/\n\n\n        // STEP5: Calculate dangling nodes rank, and default rank\n        /*-------------------------------------------------------------------*/\n        double defaultRank = (1.0 - dampingFactor) / cidsSize;\n        uint64_t danglingNodesSize = 0;\n        for(uint64_t i=0; i< cidsSize; i++){\n            rank[i] = defaultRank;\n            if(inLinksCount[i] == 0) {\n                danglingNodesSize++;\n            }\n        }\n\n        double innerProductOverSize = defaultRank * ((double) danglingNodesSize / (double)cidsSize);\n        double defaultRankWithCorrection = (dampingFactor * innerProductOverSize) + defaultRank;\n        /*-------------------------------------------------------------------*/\n\n\n        // STEP6: Calculate Rank\n        /*-------------------------------------------------------------------*/\n        double *d_rank, *d_prevRank;\n        cudaMalloc(&d_rank,     cidsSize*sizeof(double));\n        cudaMalloc(&d_prevRank, cidsSize*sizeof(double));\n        cudaMemcpy(d_rank,     rank, cidsSize*sizeof(double), cudaMemcpyHostToDevice);\n        cudaMemcpy(d_prevRank, rank, cidsSize*sizeof(double), cudaMemcpyHostToDevice);\n\n        int steps = 0;\n        double change = tolerance + 1.0;\n        while(change > tolerance) {\n            swap(d_rank, d_prevRank);\n            steps++;\n        \trun_rank_iteration<<<CUDA_BLOCKS_NUMBER,CUDA_THREAD_BLOCK_SIZE>>>(\n                d_compressedInLinks,\n                d_prevRank, d_rank, cidsSize,\n                d_compressedInLinksStartIndex, d_compressedInLinksCount,\n                defaultRankWithCorrection, dampingFactor\n        \t);\n        \tchange = find_max_ranks_diff(d_prevRank, d_rank, cidsSize);\n        \tcudaDeviceSynchronize();\n        }\n\n        cudaMemcpy(rank, d_rank, cidsSize * sizeof(double), cudaMemcpyDeviceToHost);\n\n        cudaFree(d_prevRank);\n        cudaFree(d_rank);\n        cudaFree(d_compressedInLinksStartIndex);\n        cudaFree(d_compressedInLinksCount);\n        cudaFree(d_compressedInLinks);\n        /*-------------------------------------------------------------------*/\n\n        free(inLinksStartIndex);\n        free(outLinksStartIndex);\n        free(compressedInLinksCount);\n    }\n};\n"
  },
  {
    "path": "x/rank/cuda/test_rank.cu",
    "content": "#include \"rank.cu\"\n#include <stdint.h>\n\n\n\nvoid test_getCompressedInLinksStartIndex() {\n\n    uint32_t compressedInLinksCount [6] = { 0, 2, 0, 40, 13, 0 };\n    uint64_t compressedInLinksStartIndex [6] = { };\n    uint64_t size = get_links_start_index(6, compressedInLinksCount, compressedInLinksStartIndex);\n\n    if (size != 55) {\n        printf(\"getCompressedInLinksStartIndex() wrong composed in links size!\\n\");\n    }\n\n    uint64_t expected [6] = {0,0,2,2,42,55};\n    if (std::equal(std::begin(expected), std::end(expected), std::begin(compressedInLinksStartIndex)))\n        printf(\"getCompressedInLinksStartIndex() works as expected!\\n\");\n    else {\n        printf(\"getCompressedInLinksStartIndex() doesn't works :(\\n\");\n        for (int i = sizeof(expected) / sizeof(expected[0])-1; i >= 0; i--)\n            std::cout << compressedInLinksStartIndex[i] << ' ' << expected[i] << '\\n';\n    }\n}\n\nvoid test_getCompressedInLinksCount() {\n\n    uint64_t cidsSize = 6;\n    uint32_t inLinksCount [6] = { 0, 2, 0, 1, 3, 3 };\n    uint64_t inLinksStartIndex [6] = { 0, 0, 2, 2, 3, 6 };\n    uint64_t inLinksOuts [] = { 1, 1, 2, 2, 2, 1, 2, 1, 1};\n    int outSize = (sizeof(inLinksOuts)/sizeof(*inLinksOuts));\n\n    uint32_t *dev_inLinksCount;\n    uint32_t *dev_compressedInLinksCount;\n    uint64_t *dev_inLinksStartIndex;\n    uint64_t *dev_inLinksOuts;\n\n    cudaMalloc(&dev_inLinksCount, cidsSize*sizeof(uint32_t));\n    cudaMalloc(&dev_compressedInLinksCount, cidsSize*sizeof(uint32_t));\n    cudaMalloc(&dev_inLinksStartIndex, cidsSize*sizeof(uint64_t));\n    cudaMalloc(&dev_inLinksOuts, outSize*sizeof(uint64_t));\n\n    cudaMemcpy(dev_inLinksCount, inLinksCount, cidsSize*sizeof(uint32_t), cudaMemcpyHostToDevice);\n    cudaMemcpy(dev_inLinksStartIndex, inLinksStartIndex, cidsSize*sizeof(uint64_t), cudaMemcpyHostToDevice);\n    cudaMemcpy(dev_inLinksOuts, inLinksOuts, outSize*sizeof(uint64_t), cudaMemcpyHostToDevice);\n\n    cudaDeviceSynchronize();\n    get_compressed_in_links_count<<<2,3>>>(\n        cidsSize,\n        dev_inLinksStartIndex, dev_inLinksCount,\n        dev_inLinksOuts, dev_compressedInLinksCount\n    );\n    cudaDeviceSynchronize();\n\n    uint32_t actual[6] = {};\n    cudaMemcpy(actual, dev_compressedInLinksCount, cidsSize*sizeof(uint32_t), cudaMemcpyDeviceToHost);\n\n    uint64_t expected[6] = {0,1,0,1,2,2};\n    if (std::equal(std::begin(expected), std::end(expected), std::begin(actual)))\n        printf(\"getCompressedInLinksCount() works as expected!\\n\");\n    else {\n       printf(\"getCompressedInLinksCount() doesn't works :(\\n\");\n       for (int i = sizeof(actual) / sizeof(actual[0])-1; i >= 0; i--)\n           std::cout << actual[i] << ' ' << expected[i] << '\\n';\n    }\n}\n\nvoid test_calculateCidTotalOutStake() {\n\n    int cidsSize = 6;\n    int linksSize = 9;\n    int usersSize = 3;\n\n    uint32_t outLinksCount [6] = { 0, 2, 0, 1, 3, 3 };\n    uint64_t outLinksStartIndex [6] = { 0, 0, 2, 2, 3, 6 };\n    uint64_t outLinksUsers [9] = { 1, 0, 2, 0, 2, 1, 2, 1, 0};\n    uint64_t stakes [3] = { 1, 2, 3};\n\n    uint32_t *dev_outLinksCount;\n    uint64_t *dev_outLinksStartIndex;\n    uint64_t *dev_outLinksUsers;\n    uint64_t *dev_stakes;\n    uint64_t *dev_cidsTotalOutStakes;\n\n    cudaMalloc(&dev_outLinksCount, cidsSize*sizeof(uint32_t));\n    cudaMalloc(&dev_outLinksStartIndex, cidsSize*sizeof(uint64_t));\n    cudaMalloc(&dev_outLinksUsers, linksSize*sizeof(uint64_t));\n    cudaMalloc(&dev_stakes, usersSize*sizeof(uint64_t));\n    cudaMalloc(&dev_cidsTotalOutStakes, cidsSize*sizeof(uint64_t));\n\n    cudaMemcpy(dev_outLinksCount, outLinksCount, cidsSize*sizeof(uint32_t), cudaMemcpyHostToDevice);\n    cudaMemcpy(dev_outLinksStartIndex, outLinksStartIndex, cidsSize*sizeof(uint64_t), cudaMemcpyHostToDevice);\n    cudaMemcpy(dev_outLinksUsers, outLinksUsers, linksSize*sizeof(uint64_t), cudaMemcpyHostToDevice);\n    cudaMemcpy(dev_stakes, stakes, usersSize*sizeof(uint64_t), cudaMemcpyHostToDevice);\n\n    cudaDeviceSynchronize();\n\n    get_particle_stake_by_links<<<2,3>>>(\n        cidsSize, dev_stakes,\n        dev_outLinksStartIndex, dev_outLinksCount,\n        dev_outLinksUsers, dev_cidsTotalOutStakes\n    );\n    cudaDeviceSynchronize();\n\n    uint64_t actual[6] = {};\n    cudaMemcpy(actual, dev_cidsTotalOutStakes, cidsSize*sizeof(uint64_t), cudaMemcpyDeviceToHost);\n\n    uint64_t expected[6] = {0,3,0,3,6,6};\n    if (std::equal(std::begin(expected), std::end(expected), std::begin(actual)))\n        printf(\"calculateCidTotalOutStake() works as expected!\\n\");\n    else {\n       printf(\"calculateCidTotalOutStake() doesn't works :(\\n\");\n       for (int i = sizeof(actual) / sizeof(actual[0])-1; i >= 0; i--)\n           std::cout << actual[i] << ' ' << expected[i] << '\\n';\n    }\n}\n\nvoid test_find_max_ranks_diff() {\n\n    double prevRank [6] = { -1.324, 32.1, 0.001, 2.231, -3.22, -0.02 };\n    double newRank [6] = {1.3242, 32.22, 0.032, 2.231, -3.232, 0.02 };\n\n    double *dev_prevRank;\n    double *dev_newRank;\n    cudaMalloc(&dev_prevRank, 6*sizeof(double));\n    cudaMalloc(&dev_newRank, 6*sizeof(double));\n    cudaMemcpy(dev_prevRank, prevRank, 6*sizeof(double), cudaMemcpyHostToDevice);\n    cudaMemcpy(dev_newRank, newRank, 6*sizeof(double), cudaMemcpyHostToDevice);\n\n    double maxDiff = find_max_ranks_diff(dev_prevRank, dev_newRank, 6);\n    if (maxDiff == 2.6482)\n        printf(\"find_max_ranks_diff() works as expected!\\n\");\n    else {\n       printf(\"find_max_ranks_diff() doesn't works :(\\n\");\n       std::cout << maxDiff << ' ' << 2.6482 << '\\n';\n    }\n}\n\nvoid test_getCompressedInLinks() {\n\n    int cidsSize = 8;\n    int linksSize = 11;\n    int compressedLinksSize = 8;\n    int usersSize = 3;\n\n    uint32_t inLinksCount [8] =           {0,0,1,5,4,0,1,0};\n    uint32_t compressedInLinksCount [8] = {0,0,1,3,3,0,1,0};\n    uint64_t inLinksStartIndex [8] =                {0,0,0,1,6,10,10,11};\n    uint64_t compressedInLinksStartIndex [8] =      {0,0,0,1,4,7,7,8};\n    uint64_t cidsTotalOutStakes [8] =    {3,3,3,1,6,1,0,3};\n    uint64_t inLinksOuts [11]  = {7,1,4,4,4,2,5,0,0,1,3};\n    uint64_t inLinksUsers [11] = {0,2,0,1,2,0,1,1,2,1,1};\n    uint64_t stakes [3] = {3,1,2};\n\n    uint64_t *dev_inLinksStartIndex;\n    uint32_t *dev_inLinksCount;\n    uint64_t *dev_cidsTotalOutStakes;\n    uint64_t *dev_inLinksOuts;\n    uint64_t *dev_inLinksUsers;\n    uint64_t *dev_stakes;\n    uint64_t *dev_compressedInLinksStartIndex;\n    uint32_t *dev_compressedInLinksCount;\n    CompressedInLink *dev_compressedInLinks;\n\n    cudaMalloc(&dev_inLinksStartIndex, cidsSize*sizeof(uint64_t));\n    cudaMalloc(&dev_inLinksCount, cidsSize*sizeof(uint32_t));\n    cudaMalloc(&dev_cidsTotalOutStakes, cidsSize*sizeof(uint64_t));\n    cudaMalloc(&dev_inLinksOuts, linksSize*sizeof(uint64_t));\n    cudaMalloc(&dev_inLinksUsers, linksSize*sizeof(uint64_t));\n    cudaMalloc(&dev_stakes, usersSize*sizeof(uint64_t));\n    cudaMalloc(&dev_compressedInLinksStartIndex, cidsSize*sizeof(uint64_t));\n    cudaMalloc(&dev_compressedInLinksCount, cidsSize*sizeof(uint32_t));\n    cudaMalloc(&dev_compressedInLinks, compressedLinksSize*sizeof(CompressedInLink));\n\n    cudaMemcpy(dev_inLinksStartIndex, inLinksStartIndex, cidsSize*sizeof(uint64_t), cudaMemcpyHostToDevice);\n    cudaMemcpy(dev_inLinksCount, inLinksCount, cidsSize*sizeof(uint32_t), cudaMemcpyHostToDevice);\n    cudaMemcpy(dev_cidsTotalOutStakes, cidsTotalOutStakes, cidsSize*sizeof(uint64_t), cudaMemcpyHostToDevice);\n    cudaMemcpy(dev_inLinksOuts, inLinksOuts, linksSize*sizeof(uint64_t), cudaMemcpyHostToDevice);\n    cudaMemcpy(dev_inLinksUsers, inLinksUsers, linksSize*sizeof(uint64_t), cudaMemcpyHostToDevice);\n    cudaMemcpy(dev_stakes, stakes, usersSize*sizeof(uint64_t), cudaMemcpyHostToDevice);\n    cudaMemcpy(dev_compressedInLinksStartIndex, compressedInLinksStartIndex, cidsSize*sizeof(uint64_t), cudaMemcpyHostToDevice);\n    cudaMemcpy(dev_compressedInLinksCount, compressedInLinksCount, cidsSize*sizeof(uint32_t), cudaMemcpyHostToDevice);\n\n    cudaDeviceSynchronize();\n    get_compressed_in_links<<<4,2>>>(\n        cidsSize,\n        dev_inLinksStartIndex, dev_inLinksCount, dev_cidsTotalOutStakes,\n        dev_inLinksOuts, dev_inLinksUsers,\n        dev_stakes,\n        dev_compressedInLinksStartIndex, compressedInLinksCount,\n        dev_compressedInLinks\n    );\n    cudaDeviceSynchronize();\n\n    CompressedInLink actual[8] = {};\n    cudaMemcpy(actual, dev_compressedInLinks, compressedLinksSize*sizeof(CompressedInLink), cudaMemcpyDeviceToHost);\n\n    CompressedInLink expected[8] = {\n        {7,1.0},{1,0.666667},{4,1},{2,1},{5,1},{0,1},{1,0.333333},{3,1}\n    };\n\n    printf(\"calculateCidTotalOutStake() output\\n\");\n    for (int i = sizeof(actual) / sizeof(actual[0])-1; i >= 0; i--) {\n       std::cout << actual[i].fromIndex <<'_'<< actual[i].weight << \"   \";\n       std::cout << expected[i].fromIndex <<'_'<< expected[i].weight << '\\n';\n    }\n}\n\n// To run use `nvcc test_rank.cu -o test && ./test && rm test` command.\nint main(void) {\n    printf(\"Start testing !!!!!!!!!!!!!!!!!!\\n\");\n    test_getCompressedInLinksStartIndex();\n    test_getCompressedInLinksCount();\n    test_calculateCidTotalOutStake();\n    test_find_max_ranks_diff();\n    test_getCompressedInLinks();\n}"
  },
  {
    "path": "x/rank/cuda/types.h",
    "content": "#ifndef TYPES_HEADER_FILE\n#define TYPES_HEADER_FILE\n\n#include <stdint.h>\n\n/*******************************************/\n/* REPRESENTS INCOMING LINK WITH IT WEIGHT */\n/*******************************************/\n/* Finds maximum rank difference for single element  */\n/*                                                   */\n/*****************************************************/\ntypedef struct {\n    /* Index of opposite cid in cids array */\n    uint64_t fromIndex;\n    /* Index of user stake in stakes array */\n    double weight;\n} CompressedInLink;\n\n#endif\n"
  },
  {
    "path": "x/rank/exported/exported.go",
    "content": "package exported\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tparamtypes \"github.com/cosmos/cosmos-sdk/x/params/types\"\n)\n\ntype (\n\tParamSet = paramtypes.ParamSet\n\n\t// Subspace defines an interface that implements the legacy x/params Subspace\n\t// type.\n\t//\n\t// NOTE: This is used solely for migration of x/params managed parameters.\n\tSubspace interface {\n\t\tGetParamSet(ctx sdk.Context, ps ParamSet)\n\t}\n)\n"
  },
  {
    "path": "x/rank/keeper/calculate.go",
    "content": "package keeper\n\nimport (\n\t\"fmt\"\n\t\"runtime/debug\"\n\t\"time\"\n\n\t\"github.com/cosmos/cosmos-sdk/telemetry\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/rank/types\"\n\n\t\"github.com/cometbft/cometbft/libs/log\"\n)\n\nfunc CalculateRank(ctx *types.CalculationContext, unit types.ComputeUnit, mock bool, logger log.Logger) (rank types.Rank) {\n\tdefer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), \"rank_calculation\")\n\n\tif mock {\n\t\trank = types.NewRank(mockRank(ctx), logger, ctx.FullTree)\n\t\treturn\n\t}\n\n\tstart := time.Now()\n\tif unit == types.CPU {\n\t\t// used only for development\n\t\trank = types.NewRank(calculateRankCPU(ctx), logger, ctx.FullTree)\n\t} else {\n\t\trank = types.NewRank(calculateRankGPU(ctx, logger), logger, ctx.FullTree)\n\t}\n\n\tdiff := time.Since(start)\n\n\tlogger.Info(\n\t\t\"cyber~Rank calculated\", \"duration\", diff.String(),\n\t\t\"cyberlinks\", ctx.LinksCount, \"particles\", ctx.CidsCount,\n\t)\n\n\treturn\n}\n\nfunc CalculateRankInParallel(\n\tctx *types.CalculationContext, rankChan chan types.Rank, err chan error, unit types.ComputeUnit, mock bool, logger log.Logger,\n) {\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\tfmt.Println(\"trace from panic: \\n\" + string(debug.Stack()))\n\t\t\terr <- r.(error)\n\t\t}\n\t}()\n\n\trank := CalculateRank(ctx, unit, mock, logger)\n\trankChan <- rank\n}\n"
  },
  {
    "path": "x/rank/keeper/calculate_cpu.go",
    "content": "package keeper\n\nimport (\n\tgraphtypes \"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n\t\"github.com/cybercongress/go-cyber/v7/x/rank/types\"\n)\n\nfunc calculateRankCPU(ctx *types.CalculationContext) types.EMState {\n\tinLinks := ctx.GetInLinks()\n\ttolerance := ctx.GetTolerance()\n\tdampingFactor := ctx.GetDampingFactor()\n\n\tsize := ctx.GetCidsCount()\n\tif size == 0 || len(ctx.GetStakes()) == 0 {\n\t\treturn types.EMState{\n\t\t\tRankValues: []float64{},\n\t\t}\n\t}\n\n\trank := make([]float64, size)\n\tdefaultRank := (1.0 - dampingFactor) / float64(size)\n\tdanglingNodesSize := uint64(0)\n\n\tfor i := range rank {\n\t\trank[i] = defaultRank\n\t\tif len(inLinks[graphtypes.CidNumber(i)]) == 0 {\n\t\t\tdanglingNodesSize++\n\t\t}\n\t}\n\n\tinnerProductOverSize := defaultRank * (float64(danglingNodesSize) / float64(size))\n\tdefaultRankWithCorrection := dampingFactor*innerProductOverSize + defaultRank\n\n\tchange := tolerance + 1\n\n\tsteps := 0\n\tprevrank := make([]float64, 0)\n\tprevrank = append(prevrank, rank...)\n\tfor change > tolerance {\n\t\trank = step(ctx, defaultRankWithCorrection, dampingFactor, prevrank)\n\t\tchange = calculateChange(prevrank, rank)\n\t\tprevrank = rank\n\t\tsteps++\n\t}\n\n\treturn types.EMState{\n\t\tRankValues: rank,\n\t}\n}\n\nfunc step(ctx *types.CalculationContext, defaultRankWithCorrection float64, dampingFactor float64, prevrank []float64) []float64 {\n\trank := append(make([]float64, 0, len(prevrank)), prevrank...)\n\n\tfor cid := range ctx.GetInLinks() {\n\t\t_, sortedCids, ok := ctx.GetSortedInLinks(cid)\n\n\t\tif !ok {\n\t\t\tcontinue\n\t\t} else {\n\t\t\tksum := float64(0)\n\t\t\tfor _, j := range sortedCids {\n\t\t\t\tlinkStake := getOverallLinkStake(ctx, j, cid)\n\t\t\t\tjCidOutStake := getOverallOutLinksStake(ctx, j)\n\t\t\t\tif linkStake == 0 || jCidOutStake == 0 {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tweight := float64(linkStake) / float64(jCidOutStake)\n\t\t\t\tksum = prevrank[j]*weight + ksum // force no-fma here by explicit conversion\n\t\t\t}\n\t\t\trank[cid] = ksum*dampingFactor + defaultRankWithCorrection // force no-fma here by explicit conversion\n\t\t}\n\t}\n\n\treturn rank\n}\n\nfunc getOverallLinkStake(ctx *types.CalculationContext, from graphtypes.CidNumber, to graphtypes.CidNumber) uint64 {\n\tstake := uint64(0)\n\tusers := ctx.GetOutLinks()[from][to]\n\tfor user := range users {\n\t\tstake += getNormalizedStake(ctx, uint64(user))\n\t}\n\treturn stake\n}\n\nfunc getOverallOutLinksStake(ctx *types.CalculationContext, from graphtypes.CidNumber) uint64 {\n\tstake := uint64(0)\n\tfor to := range ctx.GetOutLinks()[from] {\n\t\tstake += getOverallLinkStake(ctx, from, to)\n\t}\n\treturn stake\n}\n\nfunc getNormalizedStake(ctx *types.CalculationContext, agent uint64) uint64 {\n\treturn ctx.GetStakes()[agent] / ctx.GetNeudegs()[agent]\n}\n\nfunc calculateChange(prevrank, rank []float64) float64 {\n\tmaxDiff := 0.0\n\tdiff := 0.0\n\tfor i, pForI := range prevrank {\n\t\tif pForI > rank[i] {\n\t\t\tdiff = pForI - rank[i]\n\t\t} else {\n\t\t\tdiff = rank[i] - pForI\n\t\t}\n\t\tif diff > maxDiff {\n\t\t\tmaxDiff = diff\n\t\t}\n\t}\n\n\treturn maxDiff\n}\n\n"
  },
  {
    "path": "x/rank/keeper/calculate_gpu.go",
    "content": "//go:build cuda\n// +build cuda\n\npackage keeper\n\nimport (\n\t\"time\"\n\n\t\"github.com/cometbft/cometbft/libs/log\"\n\n\tgraphtypes \"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n\t\"github.com/cybercongress/go-cyber/v7/x/rank/types\"\n)\n\n/*\n#cgo CFLAGS: -I/usr/lib/\n#cgo LDFLAGS: -L/usr/local/cuda/lib64 -lcbdrank -lcudart\n#include \"cbdrank.h\"\n*/\nimport \"C\"\n\nfunc calculateRankGPU(ctx *types.CalculationContext, logger log.Logger) types.EMState {\n\tstart := time.Now()\n\tif ctx.GetCidsCount() == 0 {\n\t\treturn types.EMState{\n\t\t\tRankValues: make([]float64, 0),\n\t\t}\n\t}\n\n\ttolerance := ctx.GetTolerance()\n\tdampingFactor := ctx.GetDampingFactor()\n\n\tcidsCount := ctx.GetCidsCount()\n\tstakesCount := ctx.GetNeuronsCount()\n\n\trank := make([]float64, cidsCount)\n\n\tinLinksCount := make([]uint32, cidsCount)\n\toutLinksCount := make([]uint32, cidsCount)\n\toutLinksIns := make([]uint64, 0)\n\tinLinksOuts := make([]uint64, 0)\n\tinLinksUsers := make([]uint64, 0)\n\toutLinksUsers := make([]uint64, 0)\n\t// will fail if amount of indexed accounts will not equal all accounts\n\t// distribute current flow through all neuron's cyberlinks\n\tstakes := make([]uint64, stakesCount)\n\tfor neuron, stake := range ctx.GetStakes() {\n\t\tneudeg := ctx.GetNeudegs()[neuron]\n\t\tif neudeg != 0 {\n\t\t\tstakes[neuron] = stake / neudeg\n\t\t} else {\n\t\t\tstakes[neuron] = 0\n\t\t}\n\t}\n\n\tfor i := int64(0); i < cidsCount; i++ {\n\n\t\tif inLinks, sortedCids, ok := ctx.GetSortedInLinks(graphtypes.CidNumber(i)); ok {\n\t\t\tfor _, cid := range sortedCids {\n\t\t\t\tinLinksCount[i] += uint32(len(inLinks[cid]))\n\t\t\t\tfor acc := range inLinks[cid] {\n\t\t\t\t\tinLinksOuts = append(inLinksOuts, uint64(cid))\n\t\t\t\t\tinLinksUsers = append(inLinksUsers, uint64(acc))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif outLinks, sortedCids, ok := ctx.GetSortedOutLinks(graphtypes.CidNumber(i)); ok {\n\t\t\tfor _, cid := range sortedCids {\n\t\t\t\toutLinksCount[i] += uint32(len(outLinks[cid]))\n\t\t\t\tfor acc := range outLinks[cid] {\n\t\t\t\t\toutLinksIns = append(outLinksIns, uint64(cid))\n\t\t\t\t\toutLinksUsers = append(outLinksUsers, uint64(acc))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/* Convert to C types */\n\tcStakes := (*C.ulong)(&stakes[0])\n\n\tcStakesSize := C.ulong(len(stakes))\n\tcCidsSize := C.ulong(len(inLinksCount))\n\tcLinksSize := C.ulong(len(inLinksOuts))\n\n\tcInLinksCount := (*C.uint)(&inLinksCount[0])\n\tcOutLinksCount := (*C.uint)(&outLinksCount[0])\n\n\tcOutLinksIns := (*C.ulong)(&outLinksIns[0])\n\tcInLinksOuts := (*C.ulong)(&inLinksOuts[0])\n\n\tcInLinksUsers := (*C.ulong)(&inLinksUsers[0])\n\tcOutLinksUsers := (*C.ulong)(&outLinksUsers[0])\n\n\tcDampingFactor := C.double(dampingFactor)\n\tcTolerance := C.double(tolerance)\n\n\tlogger.Info(\"Data transform\", \"duration\", time.Since(start).String())\n\n\tstart = time.Now()\n\tcRank := (*C.double)(&rank[0])\n\tC.calculate_rank(\n\t\tcStakes, cStakesSize, cCidsSize, cLinksSize,\n\t\tcInLinksCount, cOutLinksCount,\n\t\tcInLinksOuts, cOutLinksIns,\n\t\tcInLinksUsers, cOutLinksUsers,\n\t\tcDampingFactor, cTolerance,\n\t\tcRank,\n\t)\n\tlogger.Info(\"Rank computation\", \"duration\", time.Since(start).String())\n\n\treturn types.EMState{\n\t\tRankValues: rank,\n\t}\n}\n"
  },
  {
    "path": "x/rank/keeper/calculate_gpu_nop.go",
    "content": "//go:build !cuda\n// +build !cuda\n\npackage keeper\n\nimport (\n\t\"github.com/cybercongress/go-cyber/v7/x/rank/types\"\n\n\t\"github.com/cometbft/cometbft/libs/log\"\n)\n\nfunc calculateRankGPU(ctx *types.CalculationContext, logger log.Logger) types.EMState {\n\tpanic(\"Daemon compiled without gpu support, but started in gpu mode\")\n}\n"
  },
  {
    "path": "x/rank/keeper/calculate_mock.go",
    "content": "package keeper\n\nimport (\n\t\"github.com/cybercongress/go-cyber/v7/x/rank/types\"\n)\n\nfunc mockRank(ctx *types.CalculationContext) types.EMState {\n\n\tsize := ctx.GetCidsCount()\n\tif size == 0 || len(ctx.GetStakes()) == 0 {\n\t\treturn types.EMState{\n\t\t\tRankValues: []float64{},\n\t\t}\n\t}\n\n\trank := make([]float64, size)\n\n\t// Rank: deterministic descending normalized distribution\n\tdenom := float64(size * (size + 1) / 2)\n\tfor i := int64(0); i < size; i++ {\n\t\trank[i] = float64(size-i) / denom\n\t}\n\n\treturn types.EMState{\n\t\tRankValues: rank,\n\t}\n}\n"
  },
  {
    "path": "x/rank/keeper/genesis.go",
    "content": "package keeper\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/rank/types\"\n)\n\nfunc InitGenesis(ctx sdk.Context, sk StateKeeper, data types.GenesisState) {\n\tif err := sk.SetParams(ctx, data.Params); err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc ExportGenesis(ctx sdk.Context, keeper StateKeeper) *types.GenesisState {\n\treturn types.NewGenesisState(keeper.GetParams(ctx))\n}\n"
  },
  {
    "path": "x/rank/keeper/grpc_query.go",
    "content": "package keeper\n\nimport (\n\t\"context\"\n\t\"math\"\n\n\terrorsmod \"cosmossdk.io/errors\"\n\t\"github.com/ipfs/go-cid\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tsdkerrors \"github.com/cosmos/cosmos-sdk/types/errors\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/status\"\n\n\tgraphtypes \"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n\t\"github.com/cybercongress/go-cyber/v7/x/rank/types\"\n\tquerytypes \"github.com/cybercongress/go-cyber/v7/x/rank/types\"\n)\n\nvar _ types.QueryServer = &StateKeeper{}\n\nfunc (sk StateKeeper) Params(goCtx context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\tparams := sk.GetParams(ctx)\n\n\treturn &types.QueryParamsResponse{Params: params}, nil\n}\n\nfunc (sk StateKeeper) Rank(goCtx context.Context, req *types.QueryRankRequest) (*types.QueryRankResponse, error) {\n\tif req == nil {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tparticle, err := cid.Decode(req.Particle)\n\tif err != nil {\n\t\treturn nil, graphtypes.ErrInvalidParticle\n\t}\n\n\tif particle.Version() != 0 {\n\t\treturn nil, graphtypes.ErrCidVersion\n\t}\n\n\tcidNum, exist := sk.graphKeeper.GetCidNumber(ctx, graphtypes.Cid(req.Particle))\n\tif !exist {\n\t\treturn nil, errorsmod.Wrap(graphtypes.ErrCidNotFound, req.Particle)\n\t}\n\n\t// rankValue := sk.index.GetRankValue(cidNum) // TODO it was the bug, test wasm\n\trankValue := sk.networkCidRank.RankValues[cidNum]\n\treturn &types.QueryRankResponse{Rank: rankValue}, nil\n}\n\nfunc (sk *StateKeeper) Search(goCtx context.Context, req *types.QuerySearchRequest) (*types.QuerySearchResponse, error) {\n\tif req == nil {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tcidNum, exist := sk.graphKeeper.GetCidNumber(ctx, graphtypes.Cid(req.Particle))\n\tif !exist {\n\t\treturn nil, errorsmod.Wrap(graphtypes.ErrCidNotFound, \"\")\n\t}\n\n\tpage, limit := uint32(0), uint32(10)\n\tif req.Pagination != nil {\n\t\tpage, limit = req.Pagination.Page, req.Pagination.PerPage\n\t}\n\trankedCidNumbers, totalSize, err := sk.index.Search(cidNum, page, limit)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tresult := make([]types.RankedParticle, 0, len(rankedCidNumbers))\n\tfor _, c := range rankedCidNumbers {\n\t\tresult = append(result, types.RankedParticle{Particle: string(sk.graphKeeper.GetCid(ctx, c.GetNumber())), Rank: c.GetRank()})\n\t}\n\n\treturn &types.QuerySearchResponse{Result: result, Pagination: &querytypes.PageResponse{Total: totalSize}}, nil\n}\n\nfunc (sk *StateKeeper) Backlinks(goCtx context.Context, req *types.QuerySearchRequest) (*types.QuerySearchResponse, error) {\n\tif req == nil {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tcidNum, exist := sk.graphKeeper.GetCidNumber(ctx, graphtypes.Cid(req.Particle))\n\tif !exist {\n\t\treturn nil, errorsmod.Wrap(graphtypes.ErrCidNotFound, req.Particle)\n\t}\n\n\tpage, limit := uint32(0), uint32(10)\n\tif req.Pagination != nil {\n\t\tpage, limit = req.Pagination.Page, req.Pagination.PerPage\n\t}\n\trankedCidNumbers, totalSize, err := sk.index.Backlinks(cidNum, page, limit)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tresult := make([]types.RankedParticle, 0, len(rankedCidNumbers))\n\tfor _, c := range rankedCidNumbers {\n\t\tresult = append(result, types.RankedParticle{Particle: string(sk.graphKeeper.GetCid(ctx, c.GetNumber())), Rank: c.GetRank()})\n\t}\n\n\treturn &types.QuerySearchResponse{Result: result, Pagination: &querytypes.PageResponse{Total: totalSize}}, nil\n}\n\nfunc (sk *StateKeeper) Top(goCtx context.Context, req *querytypes.QueryTopRequest) (*types.QuerySearchResponse, error) {\n\tif req == nil {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tif req.Pagination.PerPage > uint32(1000) {\n\t\treturn nil, sdkerrors.ErrInvalidRequest\n\t}\n\tpage, limit := req.Pagination.Page, req.Pagination.PerPage\n\ttopRankedCidNumbers, totalSize, err := sk.index.Top(page, limit)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tresult := make([]types.RankedParticle, 0, len(topRankedCidNumbers))\n\tfor _, c := range topRankedCidNumbers {\n\t\tresult = append(result, types.RankedParticle{Particle: string(sk.graphKeeper.GetCid(ctx, c.GetNumber())), Rank: c.GetRank()})\n\t}\n\n\treturn &types.QuerySearchResponse{Result: result, Pagination: &querytypes.PageResponse{Total: totalSize}}, nil\n}\n\nfunc (sk StateKeeper) IsLinkExist(goCtx context.Context, req *types.QueryIsLinkExistRequest) (*types.QueryLinkExistResponse, error) {\n\tif req == nil {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\taddr, err := sdk.AccAddressFromBech32(req.Address)\n\tif err != nil {\n\t\treturn nil, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, err.Error())\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tcidNumFrom, exist := sk.graphKeeper.GetCidNumber(ctx, graphtypes.Cid(req.From))\n\tif !exist {\n\t\treturn nil, errorsmod.Wrap(graphtypes.ErrCidNotFound, req.From)\n\t}\n\n\tcidNumTo, exist := sk.graphKeeper.GetCidNumber(ctx, graphtypes.Cid(req.To))\n\tif !exist {\n\t\treturn nil, errorsmod.Wrap(graphtypes.ErrCidNotFound, req.To)\n\t}\n\n\tvar accountNum uint64\n\taccount := sk.accountKeeper.GetAccount(ctx, addr)\n\tif account != nil {\n\t\taccountNum = account.GetAccountNumber()\n\t} else {\n\t\treturn nil, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, \"Invalid neuron address\")\n\t}\n\n\texists := sk.graphIndexedKeeper.IsLinkExist(graphtypes.CompactLink{\n\t\tFrom:    uint64(cidNumFrom),\n\t\tTo:      uint64(cidNumTo),\n\t\tAccount: accountNum,\n\t})\n\n\treturn &types.QueryLinkExistResponse{Exist: exists}, nil\n}\n\nfunc (sk StateKeeper) IsAnyLinkExist(goCtx context.Context, req *types.QueryIsAnyLinkExistRequest) (*types.QueryLinkExistResponse, error) {\n\tif req == nil {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tcidNumFrom, exist := sk.graphKeeper.GetCidNumber(ctx, graphtypes.Cid(req.From))\n\tif !exist {\n\t\treturn nil, errorsmod.Wrap(graphtypes.ErrCidNotFound, req.From)\n\t}\n\n\tcidNumTo, exist := sk.graphKeeper.GetCidNumber(ctx, graphtypes.Cid(req.To))\n\tif !exist {\n\t\treturn nil, errorsmod.Wrap(graphtypes.ErrCidNotFound, req.To)\n\t}\n\n\texists := sk.graphIndexedKeeper.IsAnyLinkExist(cidNumFrom, cidNumTo)\n\n\treturn &types.QueryLinkExistResponse{Exist: exists}, nil\n}\n\n// ParticleNegentropy returns the per-particle contribution to focus entropy.\n// Computed at query time from RankValues: -πi × log2(πi) scaled by 1e15.\n// No state is stored; this is a pure function of the current rank distribution.\nfunc (sk *StateKeeper) ParticleNegentropy(goCtx context.Context, req *types.QueryNegentropyPartilceRequest) (*types.QueryNegentropyParticleResponse, error) {\n\tif req == nil {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tcidNum, exist := sk.graphKeeper.GetCidNumber(ctx, graphtypes.Cid(req.Particle))\n\tif !exist {\n\t\treturn nil, errorsmod.Wrap(graphtypes.ErrCidNotFound, req.Particle)\n\t}\n\n\trankValues := sk.networkCidRank.RankValues\n\tif rankValues == nil || uint64(cidNum) >= uint64(len(rankValues)) {\n\t\treturn &types.QueryNegentropyParticleResponse{Entropy: 0}, nil\n\t}\n\n\ttotalRank := uint64(0)\n\tfor _, r := range rankValues {\n\t\ttotalRank += r\n\t}\n\tif totalRank == 0 {\n\t\treturn &types.QueryNegentropyParticleResponse{Entropy: 0}, nil\n\t}\n\n\tri := rankValues[cidNum]\n\tif ri == 0 {\n\t\treturn &types.QueryNegentropyParticleResponse{Entropy: 0}, nil\n\t}\n\n\t// -πi × log2(πi), scaled to uint64 by 1e15\n\tpi := float64(ri) / float64(totalRank)\n\tcontribution := -pi * math.Log2(pi)\n\tentropy := uint64(contribution * 1e15)\n\n\treturn &types.QueryNegentropyParticleResponse{Entropy: entropy}, nil\n}\n\n// Negentropy returns system-wide negentropy: J(π) = log2(n) − H(π).\n// Computed at query time from RankValues. No state is stored.\n// H(π) = −Σ πi × log2(πi), where πi = rankValue_i / Σ rankValues.\n// J(π) measures how far the focus distribution deviates from uniform.\nfunc (sk *StateKeeper) Negentropy(_ context.Context, _ *types.QueryNegentropyRequest) (*types.QueryNegentropyResponse, error) {\n\trankValues := sk.networkCidRank.RankValues\n\tn := uint64(len(rankValues))\n\tif n == 0 {\n\t\treturn &types.QueryNegentropyResponse{Negentropy: 0}, nil\n\t}\n\n\ttotalRank := uint64(0)\n\tfor _, r := range rankValues {\n\t\ttotalRank += r\n\t}\n\tif totalRank == 0 {\n\t\treturn &types.QueryNegentropyResponse{Negentropy: 0}, nil\n\t}\n\n\t// H(π) = −Σ πi × log2(πi)\n\th := 0.0\n\tfor _, r := range rankValues {\n\t\tif r == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tpi := float64(r) / float64(totalRank)\n\t\th -= pi * math.Log2(pi)\n\t}\n\n\t// J(π) = log2(n) − H(π)\n\tlogN := math.Log2(float64(n))\n\tnegentropy := logN - h\n\tif negentropy < 0 {\n\t\tnegentropy = 0\n\t}\n\n\t// Scale to uint64 by 1e15 (same convention as rank values)\n\tresult := uint64(negentropy * 1e15)\n\treturn &types.QueryNegentropyResponse{Negentropy: result}, nil\n}\n\n// Deprecated: karma removed. Stub kept for protobuf interface compatibility.\nfunc (sk *StateKeeper) Karma(_ context.Context, _ *types.QueryKarmaRequest) (*types.QueryKarmaResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"karma removed\")\n}\n"
  },
  {
    "path": "x/rank/keeper/keeper.go",
    "content": "package keeper\n\nimport (\n\t\"bytes\"\n\t\"crypto/sha256\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tstoretypes \"github.com/cosmos/cosmos-sdk/store/types\"\n\n\tsdkerrors \"github.com/cosmos/cosmos-sdk/types/errors\"\n\n\t\"github.com/cosmos/cosmos-sdk/x/auth/keeper\"\n\n\t\"github.com/cybercongress/go-cyber/v7/merkle\"\n\tgraphkeeper \"github.com/cybercongress/go-cyber/v7/x/graph/keeper\"\n\tgraphtypes \"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n\t\"github.com/cybercongress/go-cyber/v7/x/rank/types\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cometbft/cometbft/libs/log\"\n)\n\ntype StateKeeper struct {\n\tcdc      codec.BinaryCodec\n\tstoreKey storetypes.StoreKey\n\n\tnetworkCidRank types.Rank\n\tnextCidRank    types.Rank\n\n\trankCalculationFinished bool\n\t//cidCount                int64\n\n\thasNewLinksForPeriod bool\n\n\trankCalcChan chan types.Rank\n\trankErrChan  chan error\n\tallowSearch  bool\n\tcomputeUnit  types.ComputeUnit\n\tcomputeMock  bool // only for tests\n\n\tstakeKeeper        types.StakeKeeper\n\tgraphKeeper        types.GraphKeeper\n\tgraphIndexedKeeper *graphkeeper.IndexKeeper\n\taccountKeeper      keeper.AccountKeeper\n\n\tindex         types.SearchIndex\n\tgetIndexError types.GetError\n\n\tauthority string\n}\n\nfunc NewKeeper(\n\tcdc codec.BinaryCodec,\n\tkey storetypes.StoreKey,\n\tallowSearch bool,\n\tstakeIndex types.StakeKeeper,\n\tgraphIndexedKeeper *graphkeeper.IndexKeeper,\n\tgraphKeeper types.GraphKeeper,\n\taccountKeeper keeper.AccountKeeper,\n\tunit types.ComputeUnit,\n\tmock bool,\n\tauthority string,\n) *StateKeeper {\n\treturn &StateKeeper{\n\t\tstoreKey:                key,\n\t\tcdc:                     cdc,\n\t\tallowSearch:             allowSearch,\n\t\trankCalcChan:            make(chan types.Rank, 1),\n\t\trankErrChan:             make(chan error),\n\t\trankCalculationFinished: true,\n\t\tstakeKeeper:             stakeIndex,\n\t\tgraphIndexedKeeper:      graphIndexedKeeper,\n\t\tgraphKeeper:             graphKeeper,\n\t\taccountKeeper:           accountKeeper,\n\t\tcomputeUnit:             unit,\n\t\tcomputeMock:             mock,\n\t\thasNewLinksForPeriod:    true,\n\t\tauthority:               authority,\n\t}\n}\n\nfunc (sk *StateKeeper) GetAuthority() string { return sk.authority }\n\nfunc (sk *StateKeeper) Logger(ctx sdk.Context) log.Logger {\n\treturn ctx.Logger().With(\"module\", \"x/\"+types.ModuleName)\n}\n\nfunc (k *StateKeeper) SetParams(ctx sdk.Context, p types.Params) error {\n\tif err := p.Validate(); err != nil {\n\t\treturn err\n\t}\n\n\tstore := ctx.KVStore(k.storeKey)\n\tbz := k.cdc.MustMarshal(&p)\n\tstore.Set(types.ParamsKey, bz)\n\n\treturn nil\n}\n\nfunc (k *StateKeeper) GetParams(ctx sdk.Context) (p types.Params) {\n\tstore := ctx.KVStore(k.storeKey)\n\tbz := store.Get(types.ParamsKey)\n\tif bz == nil {\n\t\treturn p\n\t}\n\n\tk.cdc.MustUnmarshal(bz, &p)\n\treturn p\n}\n\nfunc (sk *StateKeeper) LoadState(ctx sdk.Context) {\n\tsk.networkCidRank = types.NewFromMerkle(sk.graphKeeper.GetCidsCount(ctx), sk.GetLatestMerkleTree(ctx))\n\tsk.nextCidRank = types.NewFromMerkle(sk.GetNextRankCidCount(ctx), sk.GetNextMerkleTree(ctx))\n\n\tsk.index = sk.BuildSearchIndex(sk.Logger(ctx))\n\tsk.index.Load(sk.graphIndexedKeeper.GetOutLinks())\n\tsk.getIndexError = sk.index.Run()\n}\n\nfunc (sk *StateKeeper) StartRankCalculation(ctx sdk.Context) {\n\tparams := sk.GetParams(ctx)\n\n\tdampingFactor, err := strconv.ParseFloat(params.DampingFactor.String(), 64)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\ttolerance, err := strconv.ParseFloat(params.Tolerance.String(), 64)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tsk.startRankCalculation(ctx, dampingFactor, tolerance)\n\tsk.rankCalculationFinished = false\n}\n\nfunc (sk *StateKeeper) BuildSearchIndex(logger log.Logger) types.SearchIndex {\n\tif sk.allowSearch {\n\t\treturn types.NewBaseSearchIndex(logger)\n\t}\n\treturn types.NoopSearchIndex{}\n}\n\nfunc (sk *StateKeeper) EndBlocker(ctx sdk.Context) {\n\tsk.StoreLatestBlockNumber(ctx, uint64(ctx.BlockHeight()))\n\tcurrentCidsCount := sk.graphKeeper.GetCidsCount(ctx)\n\n\tsk.index.PutNewLinks(sk.graphIndexedKeeper.GetCurrentBlockNewLinks(ctx))\n\t// TODO MergeContextLinks need to be in graph'sk end blocker\n\t// but need to get new links here before nextRankLinks will be updated\n\tsk.graphIndexedKeeper.MergeContextLinks(ctx)\n\n\tblockHasNewLinks := sk.graphIndexedKeeper.HasNewLinks(ctx)\n\tsk.hasNewLinksForPeriod = sk.hasNewLinksForPeriod || blockHasNewLinks\n\n\tparams := sk.GetParams(ctx)\n\n\tif ctx.BlockHeight()%params.CalculationPeriod == 0 || ctx.BlockHeight() == 1 {\n\t\tdampingFactor, err := strconv.ParseFloat(params.DampingFactor.String(), 64)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\n\t\ttolerance, err := strconv.ParseFloat(params.Tolerance.String(), 64)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\n\t\tsk.checkRankCalcFinished(ctx, true)\n\t\tsk.applyNextRank()\n\t\tstakeChanged := sk.stakeKeeper.DetectUsersStakeAmpereChange(ctx)\n\n\t\t// start new calculation\n\t\tif sk.hasNewLinksForPeriod || stakeChanged {\n\t\t\tsk.graphIndexedKeeper.UpdateRankLinks()\n\t\t\tsk.graphKeeper.UpdateRankNeudegs()\n\t\t\tsk.rankCalculationFinished = false\n\t\t\tsk.hasNewLinksForPeriod = false\n\t\t\tsk.prepareContext(ctx)\n\t\t\tsk.startRankCalculation(ctx, dampingFactor, tolerance)\n\t\t}\n\t}\n\n\tsk.networkCidRank.AddNewCids(currentCidsCount)\n\tnetworkMerkleTreeAsBytes := sk.getNetworkMerkleTreeAsBytes()\n\tsk.Logger(ctx).Info(\n\t\t\"Latest Rank\", \"hash\", fmt.Sprintf(\"%X\", networkMerkleTreeAsBytes),\n\t)\n\n\tsk.StoreLatestMerkleTree(ctx, networkMerkleTreeAsBytes)\n}\n\nfunc (sk *StateKeeper) startRankCalculation(ctx sdk.Context, dampingFactor float64, tolerance float64) {\n\tcalcCtx := types.NewCalcContext(\n\t\tsk.graphIndexedKeeper, sk.graphKeeper, sk.stakeKeeper,\n\t\tsk.allowSearch, dampingFactor, tolerance,\n\t\tsk.GetContextCidCount(ctx),\n\t\tsk.GetContextLinkCount(ctx),\n\t\tsk.GetAccountCount(ctx),\n\t)\n\n\tgo CalculateRankInParallel(calcCtx, sk.rankCalcChan, sk.rankErrChan, sk.computeUnit, sk.computeMock, sk.Logger(ctx))\n}\n\nfunc (sk *StateKeeper) checkRankCalcFinished(ctx sdk.Context, block bool) {\n\tif !sk.rankCalculationFinished {\n\t\tfor {\n\t\t\tselect {\n\t\t\tcase newRank := <-sk.rankCalcChan:\n\t\t\t\tsk.handleNextRank(ctx, newRank)\n\t\t\t\treturn\n\t\t\tcase err := <-sk.rankErrChan:\n\t\t\t\tsk.Logger(ctx).Error(\"Error during cyber~Rank calculation, call cyber_devs! \" + err.Error())\n\t\t\t\tpanic(err.Error())\n\t\t\tdefault:\n\t\t\t\tif !block {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t\tsk.Logger(ctx).Info(\"Waiting for cyber~Rank calculation to finish\")\n\n\t\t\ttime.Sleep(2000 * time.Millisecond)\n\t\t}\n\t}\n}\n\nfunc (sk *StateKeeper) handleNextRank(ctx sdk.Context, newRank types.Rank) {\n\tsk.nextCidRank = newRank\n\tnextMerkleTreeAsBytes := sk.getNextMerkleTreeAsBytes()\n\tsk.Logger(ctx).Info(\n\t\t\"Next Rank\", \"hash\", fmt.Sprintf(\"%X\", nextMerkleTreeAsBytes),\n\t)\n\tsk.StoreNextMerkleTree(ctx, nextMerkleTreeAsBytes)\n\tsk.StoreNextRankCidCount(ctx, newRank.CidCount)\n\tsk.rankCalculationFinished = true\n}\n\nfunc (sk *StateKeeper) applyNextRank() {\n\tif !sk.nextCidRank.IsEmpty() {\n\t\tsk.networkCidRank = sk.nextCidRank\n\t\tsk.index.PutNewRank(sk.networkCidRank)\n\t}\n\tsk.nextCidRank.Clear()\n}\n\nfunc (sk *StateKeeper) GetRankValueByNumber(number uint64) uint64 {\n\tif number >= uint64(len(sk.networkCidRank.RankValues)) {\n\t\treturn 0\n\t}\n\treturn sk.networkCidRank.RankValues[number]\n}\n\nfunc (sk *StateKeeper) GetRankValueByParticle(ctx sdk.Context, particle string) (uint64, error) {\n\tnumber, exist := sk.graphKeeper.GetCidNumber(ctx, graphtypes.Cid(particle))\n\tif !exist {\n\t\treturn 0, sdkerrors.ErrInvalidRequest\n\t}\n\treturn sk.networkCidRank.RankValues[number], nil\n}\n\nfunc (sk *StateKeeper) GetNextNetworkRankHash() []byte {\n\treturn sk.nextCidRank.MerkleTree.RootHash()\n}\n\nfunc (sk *StateKeeper) GetNetworkRankHash() []byte {\n\treturn sk.networkCidRank.MerkleTree.RootHash()\n}\n\nfunc (sk *StateKeeper) getNetworkMerkleTreeAsBytes() []byte {\n\treturn sk.networkCidRank.MerkleTree.ExportSubtreesRoots()\n}\n\nfunc (sk *StateKeeper) getNextMerkleTreeAsBytes() []byte {\n\treturn sk.nextCidRank.MerkleTree.ExportSubtreesRoots()\n}\n\nfunc (sk *StateKeeper) GetLastCidNum() graphtypes.CidNumber {\n\treturn graphtypes.CidNumber(len(sk.networkCidRank.RankValues) - 1)\n}\n\nfunc (sk *StateKeeper) GetMerkleTree() *merkle.Tree {\n\treturn sk.networkCidRank.MerkleTree\n}\n\n\nfunc (sk *StateKeeper) GetIndexError() error {\n\treturn sk.getIndexError()\n}\n\nfunc (sk StateKeeper) GetLatestBlockNumber(ctx sdk.Context) uint64 {\n\tstore := ctx.KVStore(sk.storeKey)\n\tnumberAsBytes := store.Get(types.LatestBlockNumber)\n\tif numberAsBytes == nil {\n\t\treturn 0\n\t}\n\treturn binary.LittleEndian.Uint64(numberAsBytes)\n}\n\nfunc (sk StateKeeper) StoreLatestBlockNumber(ctx sdk.Context, number uint64) {\n\tstore := ctx.KVStore(sk.storeKey)\n\tnumberAsBytes := make([]byte, 8)\n\tbinary.LittleEndian.PutUint64(numberAsBytes, number)\n\tstore.Set(types.LatestBlockNumber, numberAsBytes)\n}\n\nfunc (sk StateKeeper) GetLatestMerkleTree(ctx sdk.Context) []byte {\n\tstore := ctx.KVStore(sk.storeKey)\n\treturn store.Get(types.LatestMerkleTree)\n}\n\nfunc (sk StateKeeper) StoreLatestMerkleTree(ctx sdk.Context, treeAsBytes []byte) {\n\tstore := ctx.KVStore(sk.storeKey)\n\tif bytes.Compare(sk.GetLatestMerkleTree(ctx), treeAsBytes) != 0 { //nolint:gosimple\n\t\tstore.Set(types.LatestMerkleTree, treeAsBytes)\n\t}\n}\n\nfunc (sk StateKeeper) GetNextMerkleTree(ctx sdk.Context) []byte {\n\tstore := ctx.KVStore(sk.storeKey)\n\treturn store.Get(types.NextMerkleTree)\n}\n\nfunc (sk StateKeeper) StoreNextMerkleTree(ctx sdk.Context, treeAsBytes []byte) {\n\tstore := ctx.KVStore(sk.storeKey)\n\tif bytes.Compare(sk.GetNextMerkleTree(ctx), treeAsBytes) != 0 { //nolint:gosimple\n\t\tstore.Set(types.NextMerkleTree, treeAsBytes)\n\t}\n}\n\nfunc (sk StateKeeper) SetDebugMerkleTrees(ctx sdk.Context, cidCount uint64) {\n\tmerkleTree := merkle.NewTree(sha256.New(), false)\n\tzeroRankBytes := make([]byte, 8)\n\n\tfor i := uint64(0); i < cidCount; i++ {\n\t\tmerkleTree.Push(zeroRankBytes)\n\t}\n\n\ttreeBytes := merkleTree.ExportSubtreesRoots()\n\n\tstore := ctx.KVStore(sk.storeKey)\n\tstore.Set(types.LatestMerkleTree, treeBytes)\n\tstore.Set(types.NextMerkleTree, treeBytes)\n}\n\nfunc (sk StateKeeper) GetNextRankCidCount(ctx sdk.Context) uint64 {\n\tstore := ctx.KVStore(sk.storeKey)\n\tnumberAsBytes := store.Get(types.NextRankCidCount)\n\tif numberAsBytes == nil {\n\t\treturn sk.graphKeeper.GetCidsCount(ctx)\n\t}\n\treturn binary.LittleEndian.Uint64(numberAsBytes)\n}\n\nfunc (sk StateKeeper) StoreNextRankCidCount(ctx sdk.Context, number uint64) {\n\tif sk.GetNextRankCidCount(ctx) != number {\n\t\tstore := ctx.KVStore(sk.storeKey)\n\t\tnumberAsBytes := make([]byte, 8)\n\t\tbinary.LittleEndian.PutUint64(numberAsBytes, number)\n\t\tstore.Set(types.NextRankCidCount, numberAsBytes)\n\t}\n}\n\nfunc (sk StateKeeper) GetContextCidCount(ctx sdk.Context) uint64 {\n\tstore := ctx.KVStore(sk.storeKey)\n\tnumberAsBytes := store.Get(types.ContextCidCount)\n\tif numberAsBytes == nil {\n\t\treturn 0\n\t}\n\treturn binary.LittleEndian.Uint64(numberAsBytes)\n}\n\nfunc (sk StateKeeper) StoreContextCidCount(ctx sdk.Context, number uint64) {\n\tif sk.GetContextCidCount(ctx) != number {\n\t\tstore := ctx.KVStore(sk.storeKey)\n\t\tnumberAsBytes := make([]byte, 8)\n\t\tbinary.LittleEndian.PutUint64(numberAsBytes, number)\n\t\tstore.Set(types.ContextCidCount, numberAsBytes)\n\t}\n}\n\nfunc (sk StateKeeper) GetContextLinkCount(ctx sdk.Context) uint64 {\n\tstore := ctx.KVStore(sk.storeKey)\n\tnumberAsBytes := store.Get(types.ContextLinkCount)\n\tif numberAsBytes == nil {\n\t\treturn 0\n\t}\n\treturn binary.LittleEndian.Uint64(numberAsBytes)\n}\n\nfunc (sk StateKeeper) StoreContextLinkCount(ctx sdk.Context, number uint64) {\n\tif sk.GetContextLinkCount(ctx) != number {\n\t\tstore := ctx.KVStore(sk.storeKey)\n\t\tnumberAsBytes := make([]byte, 8)\n\t\tbinary.LittleEndian.PutUint64(numberAsBytes, number)\n\t\tstore.Set(types.ContextLinkCount, numberAsBytes)\n\t}\n}\n\nfunc (sk *StateKeeper) prepareContext(ctx sdk.Context) {\n\tsk.StoreContextCidCount(ctx, sk.graphKeeper.GetCidsCount(ctx))\n\tsk.StoreContextLinkCount(ctx, sk.graphIndexedKeeper.GetLinksCount(ctx))\n}\n\nfunc (sk *StateKeeper) GetAccountCount(ctx sdk.Context) uint64 {\n\treturn sk.stakeKeeper.GetNextAccountNumber(ctx)\n}\n"
  },
  {
    "path": "x/rank/keeper/migrator.go",
    "content": "package keeper\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/rank/exported\"\n\tv2 \"github.com/cybercongress/go-cyber/v7/x/rank/migrations/v2\"\n)\n\n// Migrator is a struct for handling in-place state migrations.\ntype Migrator struct {\n\tkeeper         StateKeeper\n\tlegacySubspace exported.Subspace\n}\n\nfunc NewMigrator(k StateKeeper, ss exported.Subspace) Migrator {\n\treturn Migrator{\n\t\tkeeper:         k,\n\t\tlegacySubspace: ss,\n\t}\n}\n\nfunc (m Migrator) Migrate1to2(ctx sdk.Context) error {\n\treturn v2.Migrate(ctx, ctx.KVStore(m.keeper.storeKey), m.legacySubspace, m.keeper.cdc)\n}\n"
  },
  {
    "path": "x/rank/keeper/msg_server.go",
    "content": "package keeper\n\nimport (\n\t\"context\"\n\n\tgovtypes \"github.com/cosmos/cosmos-sdk/x/gov/types\"\n\n\t\"cosmossdk.io/errors\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/rank/types\"\n)\n\ntype msgServer struct {\n\tStateKeeper\n}\n\nfunc NewMsgServerImpl(sk StateKeeper) types.MsgServer {\n\treturn &msgServer{StateKeeper: sk}\n}\n\nvar _ types.MsgServer = msgServer{}\n\nfunc (server msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) {\n\tif server.authority != req.Authority {\n\t\treturn nil, errors.Wrapf(govtypes.ErrInvalidSigner, \"invalid authority; expected %s, got %s\", server.authority, req.Authority)\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\tif err := server.SetParams(ctx, req.Params); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &types.MsgUpdateParamsResponse{}, nil\n}\n"
  },
  {
    "path": "x/rank/keeper/snapshotter.go",
    "content": "package keeper\n\nimport (\n\t\"github.com/cometbft/cometbft/libs/log\"\n\ttmproto \"github.com/cometbft/cometbft/proto/tendermint/types\"\n\tsnapshot \"github.com/cosmos/cosmos-sdk/snapshots/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cybercongress/go-cyber/v7/x/rank/types\"\n)\n\nvar _ snapshot.ExtensionSnapshotter = &RankSnapshotter{}\n\nconst SnapshotFormat = 1\n\ntype RankSnapshotter struct {\n\tkeeper *StateKeeper\n\tcms    sdk.MultiStore\n}\n\nfunc NewRankSnapshotter(cms sdk.MultiStore, keeper *StateKeeper) *RankSnapshotter {\n\treturn &RankSnapshotter{\n\t\tkeeper: keeper,\n\t\tcms:    cms,\n\t}\n}\n\nfunc (rs *RankSnapshotter) SnapshotName() string {\n\treturn types.ModuleName\n}\n\nfunc (rs *RankSnapshotter) SnapshotFormat() uint32 {\n\treturn SnapshotFormat\n}\n\nfunc (rs *RankSnapshotter) SupportedFormats() []uint32 {\n\t// If we support older formats, add them here and handle them in Restore\n\treturn []uint32{SnapshotFormat}\n}\n\nfunc (rs *RankSnapshotter) SnapshotExtension(_ uint64, _ snapshot.ExtensionPayloadWriter) error {\n\treturn nil\n}\n\nfunc (rs *RankSnapshotter) RestoreExtension(height uint64, format uint32, _ snapshot.ExtensionPayloadReader) error {\n\tif format == SnapshotFormat {\n\n\t\tfreshCtx := sdk.NewContext(rs.cms, tmproto.Header{Height: int64(height)}, false, log.NewNopLogger())\n\t\trs.keeper.LoadState(freshCtx)\n\t\trs.keeper.StartRankCalculation(freshCtx)\n\n\t\treturn nil\n\t}\n\treturn snapshot.ErrUnknownFormat\n}\n"
  },
  {
    "path": "x/rank/migrations/v2/migrate.go",
    "content": "package v2\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/rank/exported\"\n\t\"github.com/cybercongress/go-cyber/v7/x/rank/types\"\n)\n\nfunc Migrate(\n\tctx sdk.Context,\n\tstore sdk.KVStore,\n\tlegacySubspace exported.Subspace,\n\tcdc codec.BinaryCodec,\n) error {\n\tvar currParams types.Params\n\tlegacySubspace.GetParamSet(ctx, &currParams)\n\n\tif err := currParams.Validate(); err != nil {\n\t\treturn err\n\t}\n\n\tbz := cdc.MustMarshal(&currParams)\n\tstore.Set(types.ParamsKey, bz)\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/rank/module.go",
    "content": "package rank\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\tcodectypes \"github.com/cosmos/cosmos-sdk/codec/types\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/runtime\"\n\n\tabci \"github.com/cometbft/cometbft/abci/types\"\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/module\"\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/rank/client/cli\"\n\t\"github.com/cybercongress/go-cyber/v7/x/rank/exported\"\n\t\"github.com/cybercongress/go-cyber/v7/x/rank/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/rank/types\"\n)\n\nvar (\n\t_ module.AppModule      = AppModule{}\n\t_ module.AppModuleBasic = AppModuleBasic{}\n)\n\nconst (\n\tFlagComputeGPU  = \"compute-gpu\"\n\tFlagComputeMock = \"compute-mock\"\n\tFlagSearchAPI   = \"search-api\"\n)\n\ntype AppModuleBasic struct {\n\tcdc codec.Codec\n}\n\nfunc (AppModuleBasic) Name() string { return types.ModuleName }\n\nfunc (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {\n\ttypes.RegisterLegacyAminoCodec(cdc)\n}\n\nfunc (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage {\n\treturn cdc.MustMarshalJSON(types.DefaultGenesisState())\n}\n\nfunc (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, _ client.TxEncodingConfig, bz json.RawMessage) error {\n\tvar data types.GenesisState\n\tif err := cdc.UnmarshalJSON(bz, &data); err != nil {\n\t\treturn fmt.Errorf(\"failed to unmarshal %s genesis state: %w\", types.ModuleName, err)\n\t}\n\treturn types.ValidateGenesis(&data)\n}\n\nfunc (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) {\n\tif err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc (AppModuleBasic) GetTxCmd() *cobra.Command { return nil }\n\nfunc (AppModuleBasic) GetQueryCmd() *cobra.Command {\n\treturn cli.GetQueryCmd()\n}\n\nfunc (AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) {\n\ttypes.RegisterInterfaces(registry)\n}\n\ntype AppModule struct {\n\tAppModuleBasic\n\tcdc codec.Codec\n\n\trk             *keeper.StateKeeper\n\tlegacySubspace exported.Subspace\n}\n\nfunc NewAppModule(\n\tcdc codec.Codec,\n\trankKeeper *keeper.StateKeeper,\n\tss exported.Subspace,\n) AppModule {\n\treturn AppModule{\n\t\tAppModuleBasic: AppModuleBasic{cdc: cdc},\n\t\tcdc:            cdc,\n\t\trk:             rankKeeper,\n\t\tlegacySubspace: ss,\n\t}\n}\n\nfunc AddModuleInitFlags(startCmd *cobra.Command) {\n\tstartCmd.Flags().Bool(FlagComputeGPU, true, \"Compute on GPU\")\n\tstartCmd.Flags().Bool(FlagComputeMock, false, \"Compute mock data\")\n\tstartCmd.Flags().Bool(FlagSearchAPI, false, \"Run search API\")\n}\n\nfunc (AppModule) Name() string { return types.ModuleName }\n\nfunc (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {}\n\nfunc (am AppModule) RegisterServices(cfg module.Configurator) {\n\ttypes.RegisterQueryServer(cfg.QueryServer(), am.rk)\n\ttypes.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(*am.rk))\n\n\tm := keeper.NewMigrator(*am.rk, am.legacySubspace)\n\tif err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil {\n\t\tpanic(fmt.Sprintf(\"failed to migrate x/%s from version 1 to 2: %v\", types.ModuleName, err))\n\t}\n}\n\nfunc (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate {\n\tvar genesisState types.GenesisState\n\tcdc.MustUnmarshalJSON(data, &genesisState)\n\tkeeper.InitGenesis(ctx, *am.rk, genesisState)\n\treturn []abci.ValidatorUpdate{}\n}\n\nfunc (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage {\n\tgs := keeper.ExportGenesis(ctx, *am.rk)\n\treturn cdc.MustMarshalJSON(gs)\n}\n\nfunc (am AppModule) ConsensusVersion() uint64 {\n\treturn 2\n}\n\nfunc (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {}\n\nfunc (am AppModule) EndBlock(ctx sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate {\n\tEndBlocker(ctx, am.rk)\n\treturn []abci.ValidatorUpdate{}\n}\n"
  },
  {
    "path": "x/rank/types/codec.go",
    "content": "package types\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\t\"github.com/cosmos/cosmos-sdk/codec/legacy\"\n\t\"github.com/cosmos/cosmos-sdk/codec/types\"\n\tcryptocodec \"github.com/cosmos/cosmos-sdk/crypto/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/msgservice\"\n\tauthzcodec \"github.com/cosmos/cosmos-sdk/x/authz/codec\"\n\tgovcodec \"github.com/cosmos/cosmos-sdk/x/gov/codec\"\n)\n\nfunc RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {\n\tlegacy.RegisterAminoMsg(cdc, &MsgUpdateParams{}, \"cyber/rank/MsgUpdateParams\")\n\n\tcdc.RegisterConcrete(Params{}, \"cyber/rank/Params\", nil)\n}\n\nfunc RegisterInterfaces(registry types.InterfaceRegistry) {\n\tregistry.RegisterImplementations((*sdk.Msg)(nil),\n\t\t&MsgUpdateParams{},\n\t)\n\n\tmsgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc)\n}\n\nvar (\n\tamino     = codec.NewLegacyAmino()\n\tModuleCdc = codec.NewAminoCodec(amino)\n)\n\nfunc init() {\n\tRegisterLegacyAminoCodec(amino)\n\tcryptocodec.RegisterCrypto(amino)\n\tsdk.RegisterLegacyAminoCodec(amino)\n\n\tRegisterLegacyAminoCodec(authzcodec.Amino)\n\tRegisterLegacyAminoCodec(govcodec.Amino)\n}\n"
  },
  {
    "path": "x/rank/types/compute.go",
    "content": "package types\n\ntype ComputeUnit int\n\nconst (\n\tCPU ComputeUnit = iota\n\tGPU ComputeUnit = iota\n)\n"
  },
  {
    "path": "x/rank/types/context.go",
    "content": "package types\n\nimport (\n\t\"sort\"\n\n\tgraphtypes \"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n)\n\ntype CalculationContext struct {\n\tCidsCount    int64\n\tLinksCount   int64\n\tNeuronsCount int64\n\n\tinLinks  map[graphtypes.CidNumber]graphtypes.CidLinks\n\toutLinks map[graphtypes.CidNumber]graphtypes.CidLinks\n\n\tstakes  map[uint64]uint64\n\tneudegs map[uint64]uint64\n\n\tFullTree bool\n\n\tDampingFactor float64\n\tTolerance     float64\n}\n\nfunc NewCalcContext(\n\tlinkIndex GraphIndexedKeeper, graphKeeper GraphKeeper,\n\tstakeKeeper StakeKeeper, fullTree bool, dampingFactor float64, tolerance float64,\n\tcidsCount, linksCount, neuronsCount uint64,\n) *CalculationContext {\n\treturn &CalculationContext{\n\t\tCidsCount:    int64(cidsCount),\n\t\tLinksCount:   int64(linksCount),\n\t\tNeuronsCount: int64(neuronsCount),\n\n\t\tinLinks:  linkIndex.GetInLinks(),\n\t\toutLinks: linkIndex.GetOutLinks(),\n\n\t\tstakes:  stakeKeeper.GetTotalStakesAmpere(),\n\t\tneudegs: graphKeeper.GetNeudegs(),\n\n\t\tFullTree: fullTree,\n\n\t\tDampingFactor: dampingFactor,\n\t\tTolerance:     tolerance,\n\t}\n}\n\nfunc (calctx *CalculationContext) GetInLinks() map[graphtypes.CidNumber]graphtypes.CidLinks {\n\treturn calctx.inLinks\n}\n\nfunc (calctx *CalculationContext) GetOutLinks() map[graphtypes.CidNumber]graphtypes.CidLinks {\n\treturn calctx.outLinks\n}\n\nfunc (calctx *CalculationContext) GetCidsCount() int64 {\n\treturn calctx.CidsCount\n}\n\nfunc (calctx *CalculationContext) GetNeuronsCount() int64 {\n\treturn calctx.NeuronsCount\n}\n\nfunc (calctx *CalculationContext) GetStakes() map[uint64]uint64 {\n\treturn calctx.stakes\n}\n\nfunc (calctx *CalculationContext) GetNeudegs() map[uint64]uint64 {\n\treturn calctx.neudegs\n}\n\nfunc (calctx *CalculationContext) GetTolerance() float64 {\n\treturn calctx.Tolerance\n}\n\nfunc (calctx *CalculationContext) GetDampingFactor() float64 {\n\treturn calctx.DampingFactor\n}\n\nfunc (calctx *CalculationContext) GetSortedInLinks(cid graphtypes.CidNumber) (graphtypes.CidLinks, []graphtypes.CidNumber, bool) {\n\tlinks := calctx.inLinks[cid]\n\n\tif len(links) == 0 {\n\t\treturn nil, nil, false\n\t}\n\n\tnumbers := make([]graphtypes.CidNumber, 0, len(links))\n\tfor num := range links {\n\t\tnumbers = append(numbers, num)\n\t}\n\n\tsort.Slice(numbers, func(i, j int) bool { return numbers[i] < numbers[j] })\n\n\treturn links, numbers, true\n}\n\nfunc (calctx *CalculationContext) GetSortedOutLinks(cid graphtypes.CidNumber) (graphtypes.CidLinks, []graphtypes.CidNumber, bool) {\n\tlinks := calctx.outLinks[cid]\n\n\tif len(links) == 0 {\n\t\treturn nil, nil, false\n\t}\n\n\tnumbers := make([]graphtypes.CidNumber, 0, len(links))\n\tfor num := range links {\n\t\tnumbers = append(numbers, num)\n\t}\n\n\tsort.Slice(numbers, func(i, j int) bool { return numbers[i] < numbers[j] })\n\n\treturn links, numbers, true\n}\n"
  },
  {
    "path": "x/rank/types/expected_keepers.go",
    "content": "package types\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\tgraphtypes \"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n)\n\ntype StakeKeeper interface {\n\tDetectUsersStakeAmpereChange(ctx sdk.Context) bool\n\tGetTotalStakesAmpere() map[uint64]uint64\n\tGetNextAccountNumber(ctx sdk.Context) uint64\n}\n\ntype GraphIndexedKeeper interface {\n\tUpdateRankLinks()\n\tMergeContextLinks(sdk.Context)\n\n\tGetOutLinks() graphtypes.Links\n\tGetInLinks() graphtypes.Links\n\n\tGetLinksCount(sdk.Context) uint64\n\tGetCurrentBlockNewLinks(ctx sdk.Context) []graphtypes.CompactLink\n\tGetCidsCount(sdk.Context) uint64\n}\n\ntype GraphKeeper interface {\n\tGetCidsCount(sdk.Context) uint64\n\tGetCidNumber(sdk.Context, graphtypes.Cid) (graphtypes.CidNumber, bool)\n\tGetCid(ctx sdk.Context, num graphtypes.CidNumber) graphtypes.Cid\n\tGetNeudegs() map[uint64]uint64\n\tUpdateRankNeudegs()\n}\n"
  },
  {
    "path": "x/rank/types/genesis.go",
    "content": "package types\n\nfunc NewGenesisState(params Params) *GenesisState {\n\treturn &GenesisState{\n\t\tParams: params,\n\t}\n}\n\nfunc DefaultGenesisState() *GenesisState {\n\treturn NewGenesisState(DefaultParams())\n}\n\nfunc ValidateGenesis(data *GenesisState) error {\n\treturn data.Params.Validate()\n}\n"
  },
  {
    "path": "x/rank/types/genesis.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/rank/v1beta1/genesis.proto\n\npackage types\n\nimport (\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype GenesisState struct {\n\tParams Params `protobuf:\"bytes,1,opt,name=params,proto3\" json:\"params\"`\n}\n\nfunc (m *GenesisState) Reset()         { *m = GenesisState{} }\nfunc (m *GenesisState) String() string { return proto.CompactTextString(m) }\nfunc (*GenesisState) ProtoMessage()    {}\nfunc (*GenesisState) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_2c3626db1bd06e3d, []int{0}\n}\n\nfunc (m *GenesisState) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_GenesisState.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *GenesisState) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GenesisState.Merge(m, src)\n}\n\nfunc (m *GenesisState) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *GenesisState) XXX_DiscardUnknown() {\n\txxx_messageInfo_GenesisState.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GenesisState proto.InternalMessageInfo\n\nfunc (m *GenesisState) GetParams() Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn Params{}\n}\n\nfunc init() {\n\tproto.RegisterType((*GenesisState)(nil), \"cyber.rank.v1beta1.GenesisState\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/rank/v1beta1/genesis.proto\", fileDescriptor_2c3626db1bd06e3d) }\n\nvar fileDescriptor_2c3626db1bd06e3d = []byte{\n\t// 205 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x48, 0xae, 0x4c, 0x4a,\n\t0x2d, 0xd2, 0x2f, 0x4a, 0xcc, 0xcb, 0xd6, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x4f,\n\t0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x02, 0xab,\n\t0xd0, 0x03, 0xa9, 0xd0, 0x83, 0xaa, 0x90, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0x4b, 0xeb, 0x83,\n\t0x58, 0x10, 0x95, 0x52, 0x72, 0x58, 0xcc, 0x2a, 0xa9, 0x2c, 0x48, 0x85, 0x9a, 0xa4, 0xe4, 0xc1,\n\t0xc5, 0xe3, 0x0e, 0x31, 0x3a, 0xb8, 0x24, 0xb1, 0x24, 0x55, 0xc8, 0x82, 0x8b, 0xad, 0x20, 0xb1,\n\t0x28, 0x31, 0xb7, 0x58, 0x82, 0x51, 0x81, 0x51, 0x83, 0xdb, 0x48, 0x4a, 0x0f, 0xd3, 0x2a, 0xbd,\n\t0x00, 0xb0, 0x0a, 0x27, 0x96, 0x13, 0xf7, 0xe4, 0x19, 0x82, 0xa0, 0xea, 0x9d, 0x3c, 0x4e, 0x3c,\n\t0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e,\n\t0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, 0x21, 0x4a, 0x2f, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49,\n\t0x2f, 0x39, 0x3f, 0x57, 0x1f, 0x6c, 0x5a, 0x72, 0x7e, 0x5e, 0x7a, 0x51, 0x6a, 0x71, 0xb1, 0x7e,\n\t0x7a, 0xbe, 0x2e, 0xc4, 0x7d, 0x15, 0x10, 0x17, 0x82, 0x5d, 0x96, 0xc4, 0x06, 0x76, 0x9a, 0x31,\n\t0x20, 0x00, 0x00, 0xff, 0xff, 0x2e, 0xb5, 0x91, 0x33, 0x08, 0x01, 0x00, 0x00,\n}\n\nfunc (m *GenesisState) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *GenesisState) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintGenesis(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintGenesis(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovGenesis(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *GenesisState) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Params.Size()\n\tn += 1 + l + sovGenesis(uint64(l))\n\treturn n\n}\n\nfunc sovGenesis(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozGenesis(x uint64) (n int) {\n\treturn sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *GenesisState) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: GenesisState: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: GenesisState: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipGenesis(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipGenesis(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupGenesis\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthGenesis\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthGenesis        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowGenesis          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupGenesis = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/rank/types/index.go",
    "content": "package types\n\nimport (\n\t\"errors\"\n\t\"sort\"\n\t\"time\"\n\n\t\"github.com/cometbft/cometbft/libs/log\"\n\n\tgraphtypes \"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n)\n\ntype BaseSearchIndex struct {\n\tlinks     []CidLinks\n\tbacklinks []CidLinks\n\trank      Rank\n\n\tlinksChan chan graphtypes.CompactLink\n\trankChan  chan Rank\n\terrChan   chan error\n\n\tlocked bool\n\n\tlogger log.Logger\n}\n\nfunc NewBaseSearchIndex(log log.Logger) *BaseSearchIndex {\n\treturn &BaseSearchIndex{\n\t\tlinksChan: make(chan graphtypes.CompactLink, 1000),\n\t\trankChan:  make(chan Rank, 1),\n\t\terrChan:   make(chan error),\n\t\tlocked:    true,\n\t\tlogger:    log,\n\t}\n}\n\nfunc (i *BaseSearchIndex) Run() GetError {\n\tgo i.startListenNewLinks()\n\tgo i.startListenNewRank()\n\n\treturn i.checkIndexError\n}\n\n// LoadState links with zero rank values. No sorting. Index should be unavailable for read\nfunc (i *BaseSearchIndex) Load(links graphtypes.Links) {\n\tstartTime := time.Now()\n\ti.lock() // lock index for read\n\n\ti.links = make([]CidLinks, 0, 1000000)\n\ti.backlinks = make([]CidLinks, 0, 1000000)\n\n\tfor from, toCids := range links {\n\t\ti.extendIndex(uint64(from))\n\n\t\tfor to := range toCids {\n\t\t\ti.putLinkIntoIndex(from, to)\n\n\t\t\ti.extendReverseIndex(uint64(to))\n\t\t\ti.putBacklinkIntoIndex(from, to)\n\t\t}\n\t}\n\n\ti.logger.Info(\"The node search index is loaded\", \"time\", time.Since(startTime))\n}\n\nfunc (i *BaseSearchIndex) PutNewLinks(links []graphtypes.CompactLink) {\n\tfor _, link := range links {\n\t\ti.linksChan <- link\n\t}\n}\n\nfunc (i *BaseSearchIndex) PutNewRank(rank Rank) {\n\ti.rankChan <- rank.CopyWithoutTree()\n}\n\nfunc (i *BaseSearchIndex) Search(cidNumber graphtypes.CidNumber, page, perPage uint32) ([]RankedCidNumber, uint32, error) {\n\ti.logger.Info(\"Search query\", \"particle\", cidNumber, \"page\", page, \"perPage\", perPage)\n\n\tif i.locked {\n\t\treturn nil, 0, errors.New(\"search index currently unavailable after node restart\")\n\t}\n\n\tif uint64(cidNumber) >= uint64(len(i.links)) {\n\t\treturn []RankedCidNumber{}, 0, nil\n\t}\n\n\tcidLinks := i.links[cidNumber]\n\tif cidLinks.sortedLinks == nil || len(cidLinks.sortedLinks) == 0 {\n\t\treturn []RankedCidNumber{}, 0, nil\n\t}\n\n\ttotalSize := uint32(len(cidLinks.sortedLinks))\n\tstartIndex := page * perPage\n\tif startIndex >= totalSize {\n\t\treturn nil, totalSize, errors.New(\"page not found\")\n\t}\n\n\tendIndex := startIndex + perPage\n\tif endIndex > totalSize {\n\t\tendIndex = startIndex + (totalSize % perPage)\n\t}\n\n\tresultSet := cidLinks.sortedLinks[startIndex:endIndex]\n\n\treturn resultSet, totalSize, nil\n}\n\nfunc (i *BaseSearchIndex) Backlinks(cidNumber graphtypes.CidNumber, page, perPage uint32) ([]RankedCidNumber, uint32, error) {\n\ti.logger.Info(\"Backlinks query\", \"cid\", cidNumber, \"page\", page, \"perPage\", perPage)\n\n\tif i.locked {\n\t\treturn nil, 0, errors.New(\"the search index is currently unavailable after node restart\")\n\t}\n\n\tif uint64(cidNumber) >= uint64(len(i.backlinks)) {\n\t\treturn []RankedCidNumber{}, 0, nil\n\t}\n\n\tcidLinks := i.backlinks[cidNumber]\n\tif cidLinks.sortedLinks == nil || len(cidLinks.sortedLinks) == 0 {\n\t\treturn []RankedCidNumber{}, 0, nil\n\t}\n\n\ttotalSize := uint32(len(cidLinks.sortedLinks))\n\tstartIndex := page * perPage\n\tif startIndex >= totalSize {\n\t\treturn nil, totalSize, errors.New(\"page not found\")\n\t}\n\n\tendIndex := startIndex + perPage\n\tif endIndex > totalSize {\n\t\tendIndex = startIndex + (totalSize % perPage)\n\t}\n\n\tresultSet := cidLinks.sortedLinks[startIndex:endIndex]\n\n\treturn resultSet, totalSize, nil\n}\n\nfunc (i *BaseSearchIndex) Top(page, perPage uint32) ([]RankedCidNumber, uint32, error) {\n\tif i.locked {\n\t\treturn nil, 0, errors.New(\"the search index is currently unavailable after node restart\")\n\t}\n\n\ttotalSize := uint32(len(i.rank.TopCIDs))\n\tstartIndex := page * perPage\n\tif startIndex >= totalSize {\n\t\treturn nil, totalSize, errors.New(\"page not found\")\n\t}\n\n\tendIndex := startIndex + perPage\n\tif endIndex > totalSize {\n\t\tendIndex = startIndex + (totalSize % perPage)\n\t}\n\n\tresultSet := i.rank.TopCIDs[startIndex:endIndex]\n\n\treturn resultSet, totalSize, nil\n}\n\n// make sure that this link (from-to) is new\nfunc (i *BaseSearchIndex) handleLink(link graphtypes.CompactLink) {\n\ti.extendIndex(link.From)\n\n\tfromIndex := i.links[link.From]\n\t// in case unlock signal received we could operate on this index otherwise put link in the end of queue and finish\n\tselect {\n\tcase <-fromIndex.unlockSignal:\n\t\ti.putLinkIntoIndex(graphtypes.CidNumber(link.From), graphtypes.CidNumber(link.To))\n\t\tfromIndex.Unlock()\n\t\tbreak\n\tdefault:\n\t\ti.linksChan <- link\n\t}\n}\n\nfunc (i *BaseSearchIndex) handleBacklink(link graphtypes.CompactLink) {\n\ti.extendReverseIndex(link.To)\n\n\ttoIndex := i.backlinks[link.To]\n\t// in case unlock signal received we could operate on this index otherwise put link in the end of queue and finish\n\tselect {\n\tcase <-toIndex.unlockSignal:\n\t\ti.putBacklinkIntoIndex(graphtypes.CidNumber(link.From), graphtypes.CidNumber(link.To))\n\t\ttoIndex.Unlock()\n\t\tbreak\n\tdefault:\n\t\ti.linksChan <- link\n\t}\n}\n\nfunc (i *BaseSearchIndex) GetRankValue(cid graphtypes.CidNumber) uint64 {\n\tif i.rank.RankValues == nil || uint64(len(i.rank.RankValues)) <= uint64(cid) {\n\t\treturn 0\n\t}\n\treturn i.rank.RankValues[cid]\n}\n\nfunc (i *BaseSearchIndex) extendIndex(fromCidNumber uint64) {\n\tindexLen := uint64(len(i.links))\n\tif fromCidNumber >= indexLen {\n\t\tfor j := indexLen; j <= fromCidNumber; j++ {\n\t\t\tlinks := NewCidLinks()\n\t\t\tlinks.Unlock() // allow operations on this index\n\t\t\ti.links = append(i.links, links)\n\t\t}\n\t}\n}\n\nfunc (i *BaseSearchIndex) extendReverseIndex(fromCidNumber uint64) {\n\tindexLen := uint64(len(i.backlinks))\n\tif fromCidNumber >= indexLen {\n\t\tfor j := indexLen; j <= fromCidNumber; j++ {\n\t\t\tbacklinks := NewCidLinks()\n\t\t\tbacklinks.Unlock() // allow operations on this index\n\t\t\ti.backlinks = append(i.backlinks, backlinks)\n\t\t}\n\t}\n}\n\nfunc (i *BaseSearchIndex) putLinkIntoIndex(from graphtypes.CidNumber, to graphtypes.CidNumber) {\n\tfromLinks := i.links[uint64(from)].sortedLinks\n\trankedTo := RankedCidNumber{to, i.GetRankValue(to)}\n\tpos := sort.Search(len(fromLinks), func(i int) bool { return fromLinks[i].rank < rankedTo.rank })\n\tfromLinks = append(fromLinks, RankedCidNumber{})\n\tcopy(fromLinks[pos+1:], fromLinks[pos:])\n\tfromLinks[pos] = rankedTo\n\ti.links[uint64(from)].sortedLinks = fromLinks\n}\n\nfunc (i *BaseSearchIndex) putBacklinkIntoIndex(from graphtypes.CidNumber, to graphtypes.CidNumber) {\n\ttoLinks := i.backlinks[uint64(to)].sortedLinks\n\trankedFrom := RankedCidNumber{from, i.GetRankValue(from)}\n\tpos := sort.Search(len(toLinks), func(i int) bool { return toLinks[i].rank < rankedFrom.rank })\n\ttoLinks = append(toLinks, RankedCidNumber{})\n\tcopy(toLinks[pos+1:], toLinks[pos:])\n\ttoLinks[pos] = rankedFrom\n\ti.backlinks[uint64(to)].sortedLinks = toLinks\n}\n\n// for parallel usage\nfunc (i *BaseSearchIndex) startListenNewLinks() {\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\ti.errChan <- r.(error)\n\t\t}\n\t}()\n\n\t// i.logger.Info(\"The search index is starting to listen to new links\")\n\tfor {\n\t\tlink := <-i.linksChan\n\t\ti.handleLink(link)\n\t\ti.handleBacklink(link)\n\t}\n}\n\n// for parallel usage\nfunc (i *BaseSearchIndex) startListenNewRank() {\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\ti.errChan <- r.(error)\n\t\t}\n\t}()\n\n\t// i.logger.Info(\"The search index is starting to listen to new rank\")\n\tfor {\n\t\trank := <-i.rankChan // TODO could be problems if recalculation lasts more than rank period\n\t\ti.rank = rank\n\t\ti.recalculateIndices()\n\t}\n}\n\nfunc (i *BaseSearchIndex) recalculateIndices() {\n\tdefer i.unlock()\n\tn := len(i.links) // TODO: fix index length to avoid concurrency modification\n\n\t// TODO: run in parallel\n\tfor j := 0; j < n; j++ {\n\n\t\t<-i.links[j].unlockSignal // wait till some operations done on this index\n\n\t\tcurrentSortedLinks := i.links[j].sortedLinks\n\t\tnewSortedLinks := make(sortableCidNumbers, 0, len(currentSortedLinks))\n\t\tfor _, cidNumber := range currentSortedLinks {\n\t\t\tnewRankedCid := RankedCidNumber{cidNumber.number, i.GetRankValue(cidNumber.number)}\n\t\t\tnewSortedLinks = append(newSortedLinks, newRankedCid)\n\t\t}\n\t\tsort.Stable(sort.Reverse(newSortedLinks))\n\t\ti.links[j].sortedLinks = newSortedLinks\n\t\ti.links[j].Unlock()\n\t}\n\n\t// same process for backlinks\n\tn = len(i.backlinks)\n\n\tfor j := 0; j < n; j++ {\n\n\t\t<-i.backlinks[j].unlockSignal // wait till some operations done on this index\n\n\t\tcurrentSortedLinks := i.backlinks[j].sortedLinks\n\t\tnewSortedLinks := make(sortableCidNumbers, 0, len(currentSortedLinks))\n\t\tfor _, cidNumber := range currentSortedLinks {\n\t\t\tnewRankedCid := RankedCidNumber{cidNumber.number, i.GetRankValue(cidNumber.number)}\n\t\t\tnewSortedLinks = append(newSortedLinks, newRankedCid)\n\t\t}\n\t\tsort.Stable(sort.Reverse(newSortedLinks))\n\t\ti.backlinks[j].sortedLinks = newSortedLinks\n\t\ti.backlinks[j].Unlock()\n\t}\n}\n\nfunc (i *BaseSearchIndex) lock() {\n\ti.locked = true\n}\n\nfunc (i *BaseSearchIndex) unlock() {\n\ti.locked = false\n}\n\nfunc (i *BaseSearchIndex) checkIndexError() error {\n\tselect {\n\tcase err := <-i.errChan:\n\t\treturn err\n\tdefault:\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "x/rank/types/index_types.go",
    "content": "package types\n\nimport (\n\t\"errors\"\n\n\tgraphtypes \"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n)\n\ntype RankedCidNumber struct {\n\tnumber graphtypes.CidNumber\n\trank   uint64\n}\n\nfunc (c RankedCidNumber) GetNumber() graphtypes.CidNumber { return c.number }\nfunc (c RankedCidNumber) GetRank() uint64                 { return c.rank }\n\n// Local type for sorting\ntype CidLinks struct {\n\tsortedLinks sortableCidNumbers\n\n\tunlockSignal chan struct{}\n}\n\nfunc NewCidLinks() CidLinks {\n\treturn CidLinks{\n\t\tsortedLinks:  make(sortableCidNumbers, 0),\n\t\tunlockSignal: make(chan struct{}, 1),\n\t}\n}\n\ntype sortableCidNumbers []RankedCidNumber\n\n// Sort Interface functions\nfunc (links sortableCidNumbers) Len() int { return len(links) }\n\nfunc (links sortableCidNumbers) Less(i, j int) bool { return links[i].rank < links[j].rank }\n\nfunc (links sortableCidNumbers) Swap(i, j int) { links[i], links[j] = links[j], links[i] }\n\n// Send unlock signal so others could operate on this index\nfunc (links CidLinks) Unlock() {\n\tlinks.unlockSignal <- struct{}{}\n}\n\ntype GetError func() error\n\ntype SearchIndex interface {\n\tRun() GetError\n\tLoad(links graphtypes.Links)\n\tSearch(cidNumber graphtypes.CidNumber, page, perPage uint32) ([]RankedCidNumber, uint32, error)\n\tBacklinks(cidNumber graphtypes.CidNumber, page, perPage uint32) ([]RankedCidNumber, uint32, error)\n\tTop(page, perPage uint32) ([]RankedCidNumber, uint32, error)\n\tGetRankValue(cidNumber graphtypes.CidNumber) uint64\n\tPutNewLinks(links []graphtypes.CompactLink)\n\tPutNewRank(rank Rank)\n}\n\ntype NoopSearchIndex struct{}\n\nfunc (i NoopSearchIndex) Run() GetError {\n\treturn func() error {\n\t\treturn nil\n\t}\n}\n\nfunc (i NoopSearchIndex) Load(links graphtypes.Links) {}\nfunc (i NoopSearchIndex) Search(cidNumber graphtypes.CidNumber, page, perPage uint32) ([]RankedCidNumber, uint32, error) {\n\treturn nil, 0, errors.New(\"the search API is not enabled on this node\")\n}\n\nfunc (i NoopSearchIndex) Backlinks(cidNumber graphtypes.CidNumber, page, perPage uint32) ([]RankedCidNumber, uint32, error) {\n\treturn nil, 0, errors.New(\"the search API is not enabled on this node\")\n}\n\nfunc (i NoopSearchIndex) Top(page, perPage uint32) ([]RankedCidNumber, uint32, error) {\n\treturn nil, 0, errors.New(\"the search API is not enabled on this node\")\n}\nfunc (i NoopSearchIndex) PutNewLinks(links []graphtypes.CompactLink) {}\nfunc (i NoopSearchIndex) PutNewRank(rank Rank)                       {}\nfunc (i NoopSearchIndex) GetRankValue(cidNumber graphtypes.CidNumber) uint64 {\n\treturn 0\n}\n"
  },
  {
    "path": "x/rank/types/keys.go",
    "content": "package types\n\nconst (\n\tModuleName = \"rank\"\n\tStoreKey   = ModuleName\n)\n\nvar (\n\tGlobalStoreKeyPrefix = []byte{0x00}\n\tParamsKey            = []byte{0x01}\n\n\tLatestBlockNumber = append(GlobalStoreKeyPrefix, []byte(\"latestBlockNumber\")...)\n\tLatestMerkleTree  = append(GlobalStoreKeyPrefix, []byte(\"latestMerkleTree\")...)\n\tNextMerkleTree    = append(GlobalStoreKeyPrefix, []byte(\"nextMerkleTree\")...)\n\tNextRankCidCount  = append(GlobalStoreKeyPrefix, []byte(\"nextRankParticlesAmount\")...)\n\tContextCidCount   = append(GlobalStoreKeyPrefix, []byte(\"contextParticlesAmount\")...)\n\tContextLinkCount  = append(GlobalStoreKeyPrefix, []byte(\"contextLinkAmount\")...)\n)\n"
  },
  {
    "path": "x/rank/types/msgs.go",
    "content": "package types\n\nimport (\n\terrorsmod \"cosmossdk.io/errors\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\nvar _ sdk.Msg = &MsgUpdateParams{}\n\n// GetSignBytes implements the LegacyMsg interface.\nfunc (m MsgUpdateParams) GetSignBytes() []byte {\n\treturn sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))\n}\n\n// GetSigners returns the expected signers for a MsgUpdateParams message.\nfunc (m *MsgUpdateParams) GetSigners() []sdk.AccAddress {\n\taddr, _ := sdk.AccAddressFromBech32(m.Authority)\n\treturn []sdk.AccAddress{addr}\n}\n\n// ValidateBasic does a sanity check on the provided data.\nfunc (m *MsgUpdateParams) ValidateBasic() error {\n\tif _, err := sdk.AccAddressFromBech32(m.Authority); err != nil {\n\t\treturn errorsmod.Wrap(err, \"invalid authority address\")\n\t}\n\n\treturn m.Params.Validate()\n}\n"
  },
  {
    "path": "x/rank/types/pagination.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/rank/v1beta1/pagination.proto\n\npackage types\n\nimport (\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\tproto \"github.com/cosmos/gogoproto/proto\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype PageRequest struct {\n\tPage    uint32 `protobuf:\"varint,1,opt,name=page,proto3\" json:\"page,omitempty\"`\n\tPerPage uint32 `protobuf:\"varint,2,opt,name=per_page,json=perPage,proto3\" json:\"per_page,omitempty\"`\n}\n\nfunc (m *PageRequest) Reset()         { *m = PageRequest{} }\nfunc (m *PageRequest) String() string { return proto.CompactTextString(m) }\nfunc (*PageRequest) ProtoMessage()    {}\nfunc (*PageRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_c6472f2c93262fe3, []int{0}\n}\n\nfunc (m *PageRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *PageRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_PageRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *PageRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PageRequest.Merge(m, src)\n}\n\nfunc (m *PageRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *PageRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_PageRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PageRequest proto.InternalMessageInfo\n\nfunc (m *PageRequest) GetPage() uint32 {\n\tif m != nil {\n\t\treturn m.Page\n\t}\n\treturn 0\n}\n\nfunc (m *PageRequest) GetPerPage() uint32 {\n\tif m != nil {\n\t\treturn m.PerPage\n\t}\n\treturn 0\n}\n\ntype PageResponse struct {\n\tTotal uint32 `protobuf:\"varint,1,opt,name=total,proto3\" json:\"total,omitempty\"`\n}\n\nfunc (m *PageResponse) Reset()         { *m = PageResponse{} }\nfunc (m *PageResponse) String() string { return proto.CompactTextString(m) }\nfunc (*PageResponse) ProtoMessage()    {}\nfunc (*PageResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_c6472f2c93262fe3, []int{1}\n}\n\nfunc (m *PageResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *PageResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_PageResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *PageResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PageResponse.Merge(m, src)\n}\n\nfunc (m *PageResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *PageResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_PageResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PageResponse proto.InternalMessageInfo\n\nfunc (m *PageResponse) GetTotal() uint32 {\n\tif m != nil {\n\t\treturn m.Total\n\t}\n\treturn 0\n}\n\nfunc init() {\n\tproto.RegisterType((*PageRequest)(nil), \"cyber.rank.v1beta1.PageRequest\")\n\tproto.RegisterType((*PageResponse)(nil), \"cyber.rank.v1beta1.PageResponse\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"cyber/rank/v1beta1/pagination.proto\", fileDescriptor_c6472f2c93262fe3)\n}\n\nvar fileDescriptor_c6472f2c93262fe3 = []byte{\n\t// 214 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x2c, 0x8f, 0xbd, 0x4a, 0xc0, 0x30,\n\t0x14, 0x46, 0x1b, 0xf1, 0x8f, 0xa8, 0x4b, 0x70, 0xd0, 0x25, 0x48, 0x75, 0x70, 0x31, 0xa1, 0xb8,\n\t0x3a, 0x39, 0x39, 0x4a, 0x47, 0x17, 0x49, 0xca, 0x25, 0x16, 0x35, 0x37, 0x26, 0xb7, 0x62, 0xdf,\n\t0xc2, 0xc7, 0x72, 0xec, 0xe8, 0x28, 0xed, 0x8b, 0x48, 0x93, 0x6e, 0xc9, 0xc7, 0x39, 0x70, 0x0f,\n\t0xbf, 0xec, 0x46, 0x0b, 0x51, 0x47, 0xe3, 0x5f, 0xf5, 0x67, 0x63, 0x81, 0x4c, 0xa3, 0x83, 0x71,\n\t0xbd, 0x37, 0xd4, 0xa3, 0x57, 0x21, 0x22, 0xa1, 0x10, 0x19, 0x52, 0x2b, 0xa4, 0x36, 0xa8, 0xbe,\n\t0xe3, 0x47, 0x8f, 0xc6, 0x41, 0x0b, 0x1f, 0x03, 0x24, 0x12, 0x82, 0xef, 0x06, 0xe3, 0xe0, 0x8c,\n\t0x5d, 0xb0, 0xeb, 0x93, 0x36, 0xbf, 0xc5, 0x39, 0x3f, 0x0c, 0x10, 0x9f, 0xf3, 0xbe, 0x93, 0xf7,\n\t0x83, 0x00, 0x71, 0xb5, 0xea, 0x2b, 0x7e, 0x5c, 0xec, 0x14, 0xd0, 0x27, 0x10, 0xa7, 0x7c, 0x8f,\n\t0x90, 0xcc, 0xdb, 0xe6, 0x97, 0xcf, 0xfd, 0xc3, 0xcf, 0x2c, 0xd9, 0x34, 0x4b, 0xf6, 0x37, 0x4b,\n\t0xf6, 0xbd, 0xc8, 0x6a, 0x5a, 0x64, 0xf5, 0xbb, 0xc8, 0xea, 0x49, 0xb9, 0x9e, 0x5e, 0x06, 0xab,\n\t0x3a, 0x7c, 0xd7, 0xf9, 0xb8, 0x0e, 0xbd, 0x8b, 0x90, 0x92, 0x76, 0x78, 0x53, 0x92, 0xbe, 0x4a,\n\t0x14, 0x8d, 0x01, 0x92, 0xdd, 0xcf, 0x21, 0xb7, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x15, 0x7d,\n\t0x86, 0xe3, 0xef, 0x00, 0x00, 0x00,\n}\n\nfunc (m *PageRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *PageRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *PageRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.PerPage != 0 {\n\t\ti = encodeVarintPagination(dAtA, i, uint64(m.PerPage))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif m.Page != 0 {\n\t\ti = encodeVarintPagination(dAtA, i, uint64(m.Page))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *PageResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *PageResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *PageResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Total != 0 {\n\t\ti = encodeVarintPagination(dAtA, i, uint64(m.Total))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintPagination(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovPagination(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *PageRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.Page != 0 {\n\t\tn += 1 + sovPagination(uint64(m.Page))\n\t}\n\tif m.PerPage != 0 {\n\t\tn += 1 + sovPagination(uint64(m.PerPage))\n\t}\n\treturn n\n}\n\nfunc (m *PageResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.Total != 0 {\n\t\tn += 1 + sovPagination(uint64(m.Total))\n\t}\n\treturn n\n}\n\nfunc sovPagination(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozPagination(x uint64) (n int) {\n\treturn sovPagination(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *PageRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowPagination\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: PageRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: PageRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Page\", wireType)\n\t\t\t}\n\t\t\tm.Page = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowPagination\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Page |= uint32(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field PerPage\", wireType)\n\t\t\t}\n\t\t\tm.PerPage = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowPagination\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.PerPage |= uint32(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipPagination(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthPagination\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *PageResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowPagination\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: PageResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: PageResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Total\", wireType)\n\t\t\t}\n\t\t\tm.Total = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowPagination\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Total |= uint32(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipPagination(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthPagination\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipPagination(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowPagination\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowPagination\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowPagination\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthPagination\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupPagination\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthPagination\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthPagination        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowPagination          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupPagination = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/rank/types/params.go",
    "content": "package types\n\nimport (\n\t\"fmt\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\nfunc DefaultParams() Params {\n\treturn Params{\n\t\tCalculationPeriod: int64(5),\n\t\tDampingFactor:     sdk.NewDecWithPrec(85, 2),\n\t\tTolerance:         sdk.NewDecWithPrec(1, 3),\n\t}\n}\n\nfunc (p Params) Validate() error {\n\tif err := validateCalculationPeriod(p.CalculationPeriod); err != nil {\n\t\treturn err\n\t}\n\tif err := validateDampingFactor(p.DampingFactor); err != nil {\n\t\treturn err\n\t}\n\tif err := validateTolerance(p.Tolerance); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc validateCalculationPeriod(i interface{}) error {\n\tv, ok := i.(int64)\n\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v < int64(5) {\n\t\treturn fmt.Errorf(\"calculation period should be equal or more than 5 blocks: %d\", v)\n\t}\n\n\treturn nil\n}\n\nfunc validateDampingFactor(i interface{}) error {\n\tv, ok := i.(sdk.Dec)\n\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v.LTE(sdk.NewDecWithPrec(7, 1)) {\n\t\treturn fmt.Errorf(\"damping factor should be equal or more than 0.7: %s\", v)\n\t}\n\n\tif v.GTE(sdk.NewDecWithPrec(9, 1)) {\n\t\treturn fmt.Errorf(\"damping factor should be equal or less than 0.9: %s\", v)\n\t}\n\n\treturn nil\n}\n\nfunc validateTolerance(i interface{}) error {\n\tv, ok := i.(sdk.Dec)\n\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v.GT(sdk.NewDecWithPrec(1, 3)) {\n\t\treturn fmt.Errorf(\"tolerance is too low: %s\", v)\n\t}\n\n\tif v.LT(sdk.NewDecWithPrec(1, 5)) {\n\t\treturn fmt.Errorf(\"tolerance is too big: %s\", v)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/rank/types/params_legacy.go",
    "content": "package types\n\nimport paramstypes \"github.com/cosmos/cosmos-sdk/x/params/types\"\n\nvar (\n\tKeyCalculationPeriod = []byte(\"CalculationPeriod\")\n\tKeyDampingFactor     = []byte(\"DampingFactor\")\n\tKeyTolerance         = []byte(\"Tolerance\")\n)\n\n// Deprecated: Type declaration for parameters\nfunc ParamKeyTable() paramstypes.KeyTable {\n\treturn paramstypes.NewKeyTable().RegisterParamSet(&Params{})\n}\n\nfunc (p *Params) ParamSetPairs() paramstypes.ParamSetPairs {\n\treturn paramstypes.ParamSetPairs{\n\t\tparamstypes.NewParamSetPair(KeyCalculationPeriod, &p.CalculationPeriod, validateCalculationPeriod),\n\t\tparamstypes.NewParamSetPair(KeyDampingFactor, &p.DampingFactor, validateDampingFactor),\n\t\tparamstypes.NewParamSetPair(KeyTolerance, &p.Tolerance, validateTolerance),\n\t}\n}\n"
  },
  {
    "path": "x/rank/types/querier.go",
    "content": "package types\n\nimport sdk \"github.com/cosmos/cosmos-sdk/types\"\n\nconst (\n\tQueryParameters     = \"params\"\n\tQueryRank           = \"rank\"\n\tQuerySearch         = \"search\"\n\tQueryBacklinks      = \"backlinks\"\n\tQueryTop            = \"top\"\n\tQueryIsLinkExist    = \"is_link_exist\"\n\tQueryIsAnyLinkExist = \"is_any_link_exist\"\n)\n\ntype QueryRankParams struct {\n\tCid string\n}\n\nfunc NewQueryRankParams(cid string) QueryRankParams {\n\treturn QueryRankParams{cid}\n}\n\ntype QuerySearchParams struct {\n\tCid           string\n\tPage, PerPage uint32\n}\n\nfunc NewQuerySearchParams(cid string, page, perPage uint32) QuerySearchParams {\n\treturn QuerySearchParams{cid, page, perPage}\n}\n\ntype QueryTopParams struct {\n\tPage, PerPage uint32\n}\n\nfunc NewQueryTopParams(page, perPage uint32) QueryTopParams {\n\treturn QueryTopParams{page, perPage}\n}\n\ntype QueryIsLinkExistParams struct {\n\tFrom, To string\n\tAddress  sdk.AccAddress\n}\n\nfunc NewQueryIsLinkExistParams(from, to string, account sdk.AccAddress) QueryIsLinkExistParams {\n\treturn QueryIsLinkExistParams{from, to, account}\n}\n\ntype QueryIsAnyLinkExistParams struct {\n\tFrom, To string\n}\n\nfunc NewQueryIsAnyLinkExistParams(from, to string) QueryIsAnyLinkExistParams {\n\treturn QueryIsAnyLinkExistParams{from, to}\n}\n\n"
  },
  {
    "path": "x/rank/types/query.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/rank/v1beta1/query.proto\n\npackage types\n\nimport (\n\tcontext \"context\"\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tgrpc1 \"github.com/cosmos/gogoproto/grpc\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype QueryParamsRequest struct{}\n\nfunc (m *QueryParamsRequest) Reset()         { *m = QueryParamsRequest{} }\nfunc (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryParamsRequest) ProtoMessage()    {}\nfunc (*QueryParamsRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f72c23904714eae6, []int{0}\n}\n\nfunc (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryParamsRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryParamsRequest.Merge(m, src)\n}\n\nfunc (m *QueryParamsRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryParamsRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryParamsRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo\n\ntype QueryParamsResponse struct {\n\tParams Params `protobuf:\"bytes,1,opt,name=params,proto3\" json:\"params\"`\n}\n\nfunc (m *QueryParamsResponse) Reset()         { *m = QueryParamsResponse{} }\nfunc (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryParamsResponse) ProtoMessage()    {}\nfunc (*QueryParamsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f72c23904714eae6, []int{1}\n}\n\nfunc (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryParamsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryParamsResponse.Merge(m, src)\n}\n\nfunc (m *QueryParamsResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryParamsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryParamsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo\n\nfunc (m *QueryParamsResponse) GetParams() Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn Params{}\n}\n\ntype QueryRankRequest struct {\n\tParticle string `protobuf:\"bytes,1,opt,name=particle,proto3\" json:\"particle,omitempty\"`\n}\n\nfunc (m *QueryRankRequest) Reset()         { *m = QueryRankRequest{} }\nfunc (m *QueryRankRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryRankRequest) ProtoMessage()    {}\nfunc (*QueryRankRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f72c23904714eae6, []int{2}\n}\n\nfunc (m *QueryRankRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryRankRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryRankRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryRankRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryRankRequest.Merge(m, src)\n}\n\nfunc (m *QueryRankRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryRankRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryRankRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryRankRequest proto.InternalMessageInfo\n\nfunc (m *QueryRankRequest) GetParticle() string {\n\tif m != nil {\n\t\treturn m.Particle\n\t}\n\treturn \"\"\n}\n\ntype QueryRankResponse struct {\n\tRank uint64 `protobuf:\"varint,1,opt,name=rank,proto3\" json:\"rank,omitempty\"`\n}\n\nfunc (m *QueryRankResponse) Reset()         { *m = QueryRankResponse{} }\nfunc (m *QueryRankResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryRankResponse) ProtoMessage()    {}\nfunc (*QueryRankResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f72c23904714eae6, []int{3}\n}\n\nfunc (m *QueryRankResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryRankResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryRankResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryRankResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryRankResponse.Merge(m, src)\n}\n\nfunc (m *QueryRankResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryRankResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryRankResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryRankResponse proto.InternalMessageInfo\n\nfunc (m *QueryRankResponse) GetRank() uint64 {\n\tif m != nil {\n\t\treturn m.Rank\n\t}\n\treturn 0\n}\n\ntype QuerySearchRequest struct {\n\tParticle   string       `protobuf:\"bytes,1,opt,name=particle,proto3\" json:\"particle,omitempty\"`\n\tPagination *PageRequest `protobuf:\"bytes,2,opt,name=pagination,proto3\" json:\"pagination,omitempty\"`\n}\n\nfunc (m *QuerySearchRequest) Reset()         { *m = QuerySearchRequest{} }\nfunc (m *QuerySearchRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QuerySearchRequest) ProtoMessage()    {}\nfunc (*QuerySearchRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f72c23904714eae6, []int{4}\n}\n\nfunc (m *QuerySearchRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QuerySearchRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QuerySearchRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QuerySearchRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QuerySearchRequest.Merge(m, src)\n}\n\nfunc (m *QuerySearchRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QuerySearchRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QuerySearchRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QuerySearchRequest proto.InternalMessageInfo\n\nfunc (m *QuerySearchRequest) GetParticle() string {\n\tif m != nil {\n\t\treturn m.Particle\n\t}\n\treturn \"\"\n}\n\nfunc (m *QuerySearchRequest) GetPagination() *PageRequest {\n\tif m != nil {\n\t\treturn m.Pagination\n\t}\n\treturn nil\n}\n\ntype QuerySearchResponse struct {\n\tResult     []RankedParticle `protobuf:\"bytes,1,rep,name=result,proto3\" json:\"result\"`\n\tPagination *PageResponse    `protobuf:\"bytes,2,opt,name=pagination,proto3\" json:\"pagination,omitempty\"`\n}\n\nfunc (m *QuerySearchResponse) Reset()         { *m = QuerySearchResponse{} }\nfunc (m *QuerySearchResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QuerySearchResponse) ProtoMessage()    {}\nfunc (*QuerySearchResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f72c23904714eae6, []int{5}\n}\n\nfunc (m *QuerySearchResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QuerySearchResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QuerySearchResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QuerySearchResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QuerySearchResponse.Merge(m, src)\n}\n\nfunc (m *QuerySearchResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QuerySearchResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QuerySearchResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QuerySearchResponse proto.InternalMessageInfo\n\nfunc (m *QuerySearchResponse) GetResult() []RankedParticle {\n\tif m != nil {\n\t\treturn m.Result\n\t}\n\treturn nil\n}\n\nfunc (m *QuerySearchResponse) GetPagination() *PageResponse {\n\tif m != nil {\n\t\treturn m.Pagination\n\t}\n\treturn nil\n}\n\ntype QueryTopRequest struct {\n\tPagination *PageRequest `protobuf:\"bytes,1,opt,name=pagination,proto3\" json:\"pagination,omitempty\"`\n}\n\nfunc (m *QueryTopRequest) Reset()         { *m = QueryTopRequest{} }\nfunc (m *QueryTopRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryTopRequest) ProtoMessage()    {}\nfunc (*QueryTopRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f72c23904714eae6, []int{6}\n}\n\nfunc (m *QueryTopRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryTopRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryTopRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryTopRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryTopRequest.Merge(m, src)\n}\n\nfunc (m *QueryTopRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryTopRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryTopRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryTopRequest proto.InternalMessageInfo\n\nfunc (m *QueryTopRequest) GetPagination() *PageRequest {\n\tif m != nil {\n\t\treturn m.Pagination\n\t}\n\treturn nil\n}\n\ntype QueryIsLinkExistRequest struct {\n\tFrom    string `protobuf:\"bytes,1,opt,name=from,proto3\" json:\"from,omitempty\"`\n\tTo      string `protobuf:\"bytes,2,opt,name=to,proto3\" json:\"to,omitempty\"`\n\tAddress string `protobuf:\"bytes,3,opt,name=address,proto3\" json:\"address,omitempty\"`\n}\n\nfunc (m *QueryIsLinkExistRequest) Reset()         { *m = QueryIsLinkExistRequest{} }\nfunc (m *QueryIsLinkExistRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryIsLinkExistRequest) ProtoMessage()    {}\nfunc (*QueryIsLinkExistRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f72c23904714eae6, []int{7}\n}\n\nfunc (m *QueryIsLinkExistRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryIsLinkExistRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryIsLinkExistRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryIsLinkExistRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryIsLinkExistRequest.Merge(m, src)\n}\n\nfunc (m *QueryIsLinkExistRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryIsLinkExistRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryIsLinkExistRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryIsLinkExistRequest proto.InternalMessageInfo\n\nfunc (m *QueryIsLinkExistRequest) GetFrom() string {\n\tif m != nil {\n\t\treturn m.From\n\t}\n\treturn \"\"\n}\n\nfunc (m *QueryIsLinkExistRequest) GetTo() string {\n\tif m != nil {\n\t\treturn m.To\n\t}\n\treturn \"\"\n}\n\nfunc (m *QueryIsLinkExistRequest) GetAddress() string {\n\tif m != nil {\n\t\treturn m.Address\n\t}\n\treturn \"\"\n}\n\ntype QueryIsAnyLinkExistRequest struct {\n\tFrom string `protobuf:\"bytes,1,opt,name=from,proto3\" json:\"from,omitempty\"`\n\tTo   string `protobuf:\"bytes,2,opt,name=to,proto3\" json:\"to,omitempty\"`\n}\n\nfunc (m *QueryIsAnyLinkExistRequest) Reset()         { *m = QueryIsAnyLinkExistRequest{} }\nfunc (m *QueryIsAnyLinkExistRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryIsAnyLinkExistRequest) ProtoMessage()    {}\nfunc (*QueryIsAnyLinkExistRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f72c23904714eae6, []int{8}\n}\n\nfunc (m *QueryIsAnyLinkExistRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryIsAnyLinkExistRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryIsAnyLinkExistRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryIsAnyLinkExistRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryIsAnyLinkExistRequest.Merge(m, src)\n}\n\nfunc (m *QueryIsAnyLinkExistRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryIsAnyLinkExistRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryIsAnyLinkExistRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryIsAnyLinkExistRequest proto.InternalMessageInfo\n\nfunc (m *QueryIsAnyLinkExistRequest) GetFrom() string {\n\tif m != nil {\n\t\treturn m.From\n\t}\n\treturn \"\"\n}\n\nfunc (m *QueryIsAnyLinkExistRequest) GetTo() string {\n\tif m != nil {\n\t\treturn m.To\n\t}\n\treturn \"\"\n}\n\ntype QueryLinkExistResponse struct {\n\tExist bool `protobuf:\"varint,1,opt,name=exist,proto3\" json:\"exist,omitempty\"`\n}\n\nfunc (m *QueryLinkExistResponse) Reset()         { *m = QueryLinkExistResponse{} }\nfunc (m *QueryLinkExistResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryLinkExistResponse) ProtoMessage()    {}\nfunc (*QueryLinkExistResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f72c23904714eae6, []int{9}\n}\n\nfunc (m *QueryLinkExistResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryLinkExistResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryLinkExistResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryLinkExistResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryLinkExistResponse.Merge(m, src)\n}\n\nfunc (m *QueryLinkExistResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryLinkExistResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryLinkExistResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryLinkExistResponse proto.InternalMessageInfo\n\nfunc (m *QueryLinkExistResponse) GetExist() bool {\n\tif m != nil {\n\t\treturn m.Exist\n\t}\n\treturn false\n}\n\ntype QueryNegentropyPartilceRequest struct {\n\tParticle string `protobuf:\"bytes,1,opt,name=particle,proto3\" json:\"particle,omitempty\"`\n}\n\nfunc (m *QueryNegentropyPartilceRequest) Reset()         { *m = QueryNegentropyPartilceRequest{} }\nfunc (m *QueryNegentropyPartilceRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryNegentropyPartilceRequest) ProtoMessage()    {}\nfunc (*QueryNegentropyPartilceRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f72c23904714eae6, []int{10}\n}\n\nfunc (m *QueryNegentropyPartilceRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryNegentropyPartilceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryNegentropyPartilceRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryNegentropyPartilceRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryNegentropyPartilceRequest.Merge(m, src)\n}\n\nfunc (m *QueryNegentropyPartilceRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryNegentropyPartilceRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryNegentropyPartilceRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryNegentropyPartilceRequest proto.InternalMessageInfo\n\nfunc (m *QueryNegentropyPartilceRequest) GetParticle() string {\n\tif m != nil {\n\t\treturn m.Particle\n\t}\n\treturn \"\"\n}\n\ntype QueryNegentropyParticleResponse struct {\n\tEntropy uint64 `protobuf:\"varint,1,opt,name=entropy,proto3\" json:\"entropy,omitempty\"`\n}\n\nfunc (m *QueryNegentropyParticleResponse) Reset()         { *m = QueryNegentropyParticleResponse{} }\nfunc (m *QueryNegentropyParticleResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryNegentropyParticleResponse) ProtoMessage()    {}\nfunc (*QueryNegentropyParticleResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f72c23904714eae6, []int{11}\n}\n\nfunc (m *QueryNegentropyParticleResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryNegentropyParticleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryNegentropyParticleResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryNegentropyParticleResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryNegentropyParticleResponse.Merge(m, src)\n}\n\nfunc (m *QueryNegentropyParticleResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryNegentropyParticleResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryNegentropyParticleResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryNegentropyParticleResponse proto.InternalMessageInfo\n\nfunc (m *QueryNegentropyParticleResponse) GetEntropy() uint64 {\n\tif m != nil {\n\t\treturn m.Entropy\n\t}\n\treturn 0\n}\n\ntype QueryNegentropyRequest struct{}\n\nfunc (m *QueryNegentropyRequest) Reset()         { *m = QueryNegentropyRequest{} }\nfunc (m *QueryNegentropyRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryNegentropyRequest) ProtoMessage()    {}\nfunc (*QueryNegentropyRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f72c23904714eae6, []int{12}\n}\n\nfunc (m *QueryNegentropyRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryNegentropyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryNegentropyRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryNegentropyRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryNegentropyRequest.Merge(m, src)\n}\n\nfunc (m *QueryNegentropyRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryNegentropyRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryNegentropyRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryNegentropyRequest proto.InternalMessageInfo\n\ntype QueryNegentropyResponse struct {\n\tNegentropy uint64 `protobuf:\"varint,1,opt,name=negentropy,proto3\" json:\"negentropy,omitempty\"`\n}\n\nfunc (m *QueryNegentropyResponse) Reset()         { *m = QueryNegentropyResponse{} }\nfunc (m *QueryNegentropyResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryNegentropyResponse) ProtoMessage()    {}\nfunc (*QueryNegentropyResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f72c23904714eae6, []int{13}\n}\n\nfunc (m *QueryNegentropyResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryNegentropyResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryNegentropyResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryNegentropyResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryNegentropyResponse.Merge(m, src)\n}\n\nfunc (m *QueryNegentropyResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryNegentropyResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryNegentropyResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryNegentropyResponse proto.InternalMessageInfo\n\nfunc (m *QueryNegentropyResponse) GetNegentropy() uint64 {\n\tif m != nil {\n\t\treturn m.Negentropy\n\t}\n\treturn 0\n}\n\ntype QueryKarmaRequest struct {\n\tNeuron string `protobuf:\"bytes,1,opt,name=neuron,proto3\" json:\"neuron,omitempty\"`\n}\n\nfunc (m *QueryKarmaRequest) Reset()         { *m = QueryKarmaRequest{} }\nfunc (m *QueryKarmaRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryKarmaRequest) ProtoMessage()    {}\nfunc (*QueryKarmaRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f72c23904714eae6, []int{14}\n}\n\nfunc (m *QueryKarmaRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryKarmaRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryKarmaRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryKarmaRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryKarmaRequest.Merge(m, src)\n}\n\nfunc (m *QueryKarmaRequest) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryKarmaRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryKarmaRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryKarmaRequest proto.InternalMessageInfo\n\nfunc (m *QueryKarmaRequest) GetNeuron() string {\n\tif m != nil {\n\t\treturn m.Neuron\n\t}\n\treturn \"\"\n}\n\ntype QueryKarmaResponse struct {\n\tKarma uint64 `protobuf:\"varint,1,opt,name=karma,proto3\" json:\"karma,omitempty\"`\n}\n\nfunc (m *QueryKarmaResponse) Reset()         { *m = QueryKarmaResponse{} }\nfunc (m *QueryKarmaResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryKarmaResponse) ProtoMessage()    {}\nfunc (*QueryKarmaResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_f72c23904714eae6, []int{15}\n}\n\nfunc (m *QueryKarmaResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *QueryKarmaResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryKarmaResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *QueryKarmaResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryKarmaResponse.Merge(m, src)\n}\n\nfunc (m *QueryKarmaResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *QueryKarmaResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryKarmaResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryKarmaResponse proto.InternalMessageInfo\n\nfunc (m *QueryKarmaResponse) GetKarma() uint64 {\n\tif m != nil {\n\t\treturn m.Karma\n\t}\n\treturn 0\n}\n\nfunc init() {\n\tproto.RegisterType((*QueryParamsRequest)(nil), \"cyber.rank.v1beta1.QueryParamsRequest\")\n\tproto.RegisterType((*QueryParamsResponse)(nil), \"cyber.rank.v1beta1.QueryParamsResponse\")\n\tproto.RegisterType((*QueryRankRequest)(nil), \"cyber.rank.v1beta1.QueryRankRequest\")\n\tproto.RegisterType((*QueryRankResponse)(nil), \"cyber.rank.v1beta1.QueryRankResponse\")\n\tproto.RegisterType((*QuerySearchRequest)(nil), \"cyber.rank.v1beta1.QuerySearchRequest\")\n\tproto.RegisterType((*QuerySearchResponse)(nil), \"cyber.rank.v1beta1.QuerySearchResponse\")\n\tproto.RegisterType((*QueryTopRequest)(nil), \"cyber.rank.v1beta1.QueryTopRequest\")\n\tproto.RegisterType((*QueryIsLinkExistRequest)(nil), \"cyber.rank.v1beta1.QueryIsLinkExistRequest\")\n\tproto.RegisterType((*QueryIsAnyLinkExistRequest)(nil), \"cyber.rank.v1beta1.QueryIsAnyLinkExistRequest\")\n\tproto.RegisterType((*QueryLinkExistResponse)(nil), \"cyber.rank.v1beta1.QueryLinkExistResponse\")\n\tproto.RegisterType((*QueryNegentropyPartilceRequest)(nil), \"cyber.rank.v1beta1.QueryNegentropyPartilceRequest\")\n\tproto.RegisterType((*QueryNegentropyParticleResponse)(nil), \"cyber.rank.v1beta1.QueryNegentropyParticleResponse\")\n\tproto.RegisterType((*QueryNegentropyRequest)(nil), \"cyber.rank.v1beta1.QueryNegentropyRequest\")\n\tproto.RegisterType((*QueryNegentropyResponse)(nil), \"cyber.rank.v1beta1.QueryNegentropyResponse\")\n\tproto.RegisterType((*QueryKarmaRequest)(nil), \"cyber.rank.v1beta1.QueryKarmaRequest\")\n\tproto.RegisterType((*QueryKarmaResponse)(nil), \"cyber.rank.v1beta1.QueryKarmaResponse\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/rank/v1beta1/query.proto\", fileDescriptor_f72c23904714eae6) }\n\nvar fileDescriptor_f72c23904714eae6 = []byte{\n\t// 890 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0x51, 0x8b, 0xe3, 0x54,\n\t0x14, 0xc7, 0x9b, 0x4e, 0xa7, 0x6e, 0x4f, 0x61, 0xd5, 0xe3, 0xb0, 0x96, 0xb0, 0xa4, 0xdd, 0x3b,\n\t0xb3, 0xd3, 0xd9, 0xd6, 0x49, 0x9c, 0x2e, 0x82, 0xa2, 0xe0, 0x38, 0x20, 0x28, 0x8a, 0xae, 0x71,\n\t0x41, 0xf0, 0x65, 0xb9, 0xcd, 0x5c, 0xb3, 0xa1, 0x6d, 0x6e, 0x26, 0x49, 0x65, 0xcb, 0xb2, 0x2f,\n\t0x0b, 0x3e, 0x0a, 0xca, 0x3e, 0x89, 0x1f, 0x42, 0x3f, 0xc6, 0x3c, 0x0e, 0xf8, 0xe2, 0x93, 0xc8,\n\t0x8c, 0x1f, 0x44, 0x72, 0x72, 0x33, 0x4d, 0x6d, 0xd2, 0xe9, 0xc8, 0xbe, 0x0c, 0xb9, 0xf7, 0x9c,\n\t0xf3, 0x3f, 0xbf, 0x7b, 0x92, 0xfb, 0x9f, 0x82, 0xe1, 0xcc, 0x86, 0x22, 0xb4, 0x42, 0xee, 0x8f,\n\t0xac, 0xef, 0x0f, 0x86, 0x22, 0xe6, 0x07, 0xd6, 0xc9, 0x54, 0x84, 0x33, 0x33, 0x08, 0x65, 0x2c,\n\t0x11, 0x29, 0x6e, 0x26, 0x71, 0x53, 0xc5, 0xf5, 0x2d, 0x57, 0xba, 0x92, 0xc2, 0x56, 0xf2, 0x94,\n\t0x66, 0xea, 0xb7, 0x5d, 0x29, 0xdd, 0xb1, 0xb0, 0x78, 0xe0, 0x59, 0xdc, 0xf7, 0x65, 0xcc, 0x63,\n\t0x4f, 0xfa, 0x91, 0x8a, 0x16, 0xf5, 0x89, 0x67, 0x81, 0xc8, 0xe2, 0xdb, 0x05, 0xf1, 0x80, 0xbb,\n\t0x9e, 0x4f, 0x2a, 0x69, 0x12, 0xdb, 0x02, 0xfc, 0x2a, 0x61, 0x7b, 0xc0, 0x43, 0x3e, 0x89, 0x6c,\n\t0x71, 0x32, 0x15, 0x51, 0xcc, 0xbe, 0x84, 0x37, 0x16, 0x76, 0xa3, 0x40, 0xfa, 0x91, 0xc0, 0x77,\n\t0xa1, 0x1e, 0xd0, 0x4e, 0x4b, 0xeb, 0x68, 0x7b, 0xcd, 0x81, 0x6e, 0x2e, 0x1f, 0xc5, 0x4c, 0x6b,\n\t0x8e, 0x6a, 0xa7, 0x7f, 0xb5, 0x2b, 0xb6, 0xca, 0x67, 0x26, 0xbc, 0x46, 0x82, 0x36, 0xf7, 0x47,\n\t0xaa, 0x09, 0xea, 0x70, 0x23, 0xe0, 0x61, 0xec, 0x39, 0x63, 0x41, 0x7a, 0x0d, 0xfb, 0x72, 0xcd,\n\t0xba, 0xf0, 0x7a, 0x2e, 0x5f, 0xb5, 0x47, 0xa8, 0x25, 0x9d, 0x28, 0xb9, 0x66, 0xd3, 0x33, 0x3b,\n\t0x51, 0xfc, 0x5f, 0x0b, 0x1e, 0x3a, 0x8f, 0xd7, 0x90, 0xc6, 0x0f, 0x01, 0xe6, 0x53, 0x68, 0x55,\n\t0xe9, 0x20, 0xed, 0xe2, 0x83, 0xb8, 0x42, 0x09, 0xda, 0xb9, 0x12, 0xf6, 0x8b, 0xa6, 0xa6, 0x93,\n\t0xf5, 0x54, 0x78, 0x87, 0x50, 0x0f, 0x45, 0x34, 0x1d, 0xc7, 0x2d, 0xad, 0xb3, 0xb1, 0xd7, 0x1c,\n\t0xb0, 0x22, 0xd1, 0xe4, 0x40, 0xe2, 0xf8, 0x81, 0x82, 0xc9, 0xa6, 0x94, 0xd6, 0xe1, 0x61, 0x01,\n\t0x5a, 0xa7, 0x1c, 0x2d, 0xed, 0xbb, 0xc0, 0x66, 0xc3, 0xab, 0x84, 0xf6, 0x50, 0x06, 0xd9, 0x2c,\n\t0x16, 0xcf, 0xab, 0x5d, 0xff, 0xbc, 0xdf, 0xc0, 0x9b, 0xa4, 0xf9, 0x69, 0xf4, 0xb9, 0xe7, 0x8f,\n\t0x3e, 0x7e, 0xe2, 0x45, 0x71, 0xa6, 0x8d, 0x50, 0xfb, 0x2e, 0x94, 0x13, 0x35, 0x63, 0x7a, 0xc6,\n\t0x9b, 0x50, 0x8d, 0x25, 0xc1, 0x37, 0xec, 0x6a, 0x2c, 0xb1, 0x05, 0xaf, 0xf0, 0xe3, 0xe3, 0x50,\n\t0x44, 0x51, 0x6b, 0x83, 0x36, 0xb3, 0x25, 0x3b, 0x04, 0x5d, 0x09, 0x7f, 0xe4, 0xcf, 0xfe, 0x8f,\n\t0x36, 0x33, 0xe1, 0x16, 0x29, 0xe4, 0x8a, 0xd5, 0xcb, 0xd8, 0x82, 0x4d, 0x91, 0x6c, 0x50, 0xf9,\n\t0x0d, 0x3b, 0x5d, 0xb0, 0x0f, 0xc0, 0xa0, 0xfc, 0x2f, 0x84, 0x2b, 0xfc, 0x38, 0x94, 0xc1, 0x8c,\n\t0xde, 0xc4, 0xd8, 0x11, 0xeb, 0x7c, 0x94, 0xef, 0x43, 0xbb, 0xa8, 0xda, 0x19, 0x5f, 0xbe, 0x8b,\n\t0xe4, 0xb0, 0x2a, 0xa4, 0xbe, 0xd2, 0x6c, 0xc9, 0x5a, 0x0a, 0x75, 0x5e, 0x9c, 0x5d, 0xb6, 0xf7,\n\t0xd4, 0x7c, 0xf3, 0x11, 0x25, 0x67, 0x00, 0xf8, 0x97, 0xbb, 0x4a, 0x31, 0xb7, 0xc3, 0xfa, 0xea,\n\t0x9a, 0x7c, 0xc6, 0xc3, 0x09, 0xcf, 0x8e, 0x70, 0x0b, 0xea, 0xbe, 0x98, 0x86, 0xea, 0x65, 0x37,\n\t0x6c, 0xb5, 0x62, 0x3d, 0x75, 0x55, 0x54, 0xf2, 0x7c, 0x50, 0xa3, 0x64, 0x43, 0xa9, 0xa7, 0x8b,\n\t0xc1, 0x6f, 0x4d, 0xd8, 0xa4, 0x64, 0x7c, 0xae, 0x41, 0x3d, 0xbd, 0xd2, 0xb8, 0x5b, 0xf4, 0xd5,\n\t0x2c, 0xbb, 0x87, 0xde, 0xbd, 0x32, 0x2f, 0xed, 0xcd, 0xba, 0xcf, 0xff, 0xf8, 0xe7, 0x45, 0xf5,\n\t0x0e, 0xb6, 0xad, 0x02, 0xab, 0xa2, 0x45, 0x6a, 0x1f, 0xf8, 0x83, 0x06, 0xb5, 0xe4, 0xe6, 0xe0,\n\t0x4e, 0xa9, 0x74, 0xce, 0x59, 0xf4, 0xbb, 0x57, 0x64, 0xa9, 0xf6, 0x6f, 0x53, 0xfb, 0x1e, 0xee,\n\t0x95, 0xb6, 0xa7, 0x3f, 0x4f, 0xb3, 0x0f, 0xe0, 0x19, 0xfe, 0xa8, 0x41, 0x3d, 0xbd, 0xf5, 0x2b,\n\t0x86, 0xb1, 0x60, 0x45, 0x2b, 0x86, 0xb1, 0x68, 0x1f, 0x6c, 0x40, 0x34, 0x6f, 0x61, 0xaf, 0x94,\n\t0x26, 0xa2, 0x82, 0x3c, 0xcf, 0x0b, 0x0d, 0x1a, 0x47, 0xdc, 0x19, 0x8d, 0x3d, 0x7f, 0x14, 0xbd,\n\t0x7c, 0xa4, 0x77, 0x08, 0xc9, 0xc2, 0xfd, 0x52, 0xa4, 0x61, 0xd6, 0x3c, 0x4f, 0x35, 0x83, 0x8d,\n\t0x87, 0x32, 0xc0, 0xed, 0xd2, 0x36, 0x73, 0x77, 0x5a, 0x9f, 0x65, 0x87, 0x58, 0x0c, 0xbc, 0x5d,\n\t0xca, 0x12, 0xcb, 0x00, 0x7f, 0xd6, 0xa0, 0x99, 0xf3, 0x29, 0xec, 0x97, 0xca, 0x2f, 0xbb, 0x99,\n\t0xde, 0x2b, 0x4d, 0x5e, 0xf2, 0x17, 0x76, 0x8f, 0x70, 0xb6, 0xf1, 0x4e, 0x11, 0x8e, 0x17, 0x3d,\n\t0x4a, 0x86, 0xf2, 0x88, 0x4c, 0x07, 0x7f, 0xd5, 0xe0, 0xe6, 0xa2, 0xc5, 0xa1, 0xb9, 0x02, 0xab,\n\t0xc0, 0x0b, 0xaf, 0x45, 0xb6, 0x4f, 0x64, 0x5d, 0xbc, 0x5b, 0x42, 0xc6, 0xfd, 0x59, 0x9e, 0xee,\n\t0x77, 0x0d, 0x30, 0xb3, 0xb1, 0xb9, 0x03, 0xe1, 0xa0, 0xb4, 0x63, 0xa9, 0x77, 0xea, 0xf7, 0xd7,\n\t0xad, 0xc9, 0x39, 0x26, 0x3b, 0x20, 0xdc, 0x3e, 0xde, 0x2b, 0xc2, 0x9d, 0x5b, 0xdd, 0x7f, 0x6e,\n\t0x21, 0xe4, 0x50, 0x7b, 0x6b, 0xb4, 0xcd, 0x10, 0xfb, 0x6b, 0xe5, 0x2a, 0xb4, 0x5d, 0x42, 0xeb,\n\t0xa0, 0xb1, 0x1a, 0x2d, 0xb1, 0xc8, 0x4d, 0x32, 0x55, 0x2c, 0x37, 0x9e, 0xbc, 0x43, 0xeb, 0xbb,\n\t0x57, 0xa5, 0x29, 0x80, 0x1e, 0x01, 0xec, 0x20, 0x2b, 0x02, 0x20, 0xa3, 0xb6, 0x9e, 0xa6, 0xe6,\n\t0xfe, 0xec, 0xe8, 0x93, 0xd3, 0x73, 0x43, 0x3b, 0x3b, 0x37, 0xb4, 0xbf, 0xcf, 0x0d, 0xed, 0xa7,\n\t0x0b, 0xa3, 0x72, 0x76, 0x61, 0x54, 0xfe, 0xbc, 0x30, 0x2a, 0xdf, 0x9a, 0xae, 0x17, 0x3f, 0x9e,\n\t0x0e, 0x4d, 0x47, 0x4e, 0x52, 0x1d, 0x47, 0xfa, 0x6e, 0xf2, 0x0f, 0xd8, 0x72, 0xe5, 0x7e, 0x2a,\n\t0xfc, 0x44, 0xdd, 0xa0, 0xe4, 0xd7, 0xe3, 0xb0, 0x4e, 0xbf, 0x0c, 0xef, 0xff, 0x1b, 0x00, 0x00,\n\t0xff, 0xff, 0x7b, 0x7c, 0x05, 0xe7, 0xc8, 0x0a, 0x00, 0x00,\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ context.Context\n\t_ grpc.ClientConn\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// QueryClient is the client API for Query service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype QueryClient interface {\n\tParams(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error)\n\tRank(ctx context.Context, in *QueryRankRequest, opts ...grpc.CallOption) (*QueryRankResponse, error)\n\tSearch(ctx context.Context, in *QuerySearchRequest, opts ...grpc.CallOption) (*QuerySearchResponse, error)\n\tBacklinks(ctx context.Context, in *QuerySearchRequest, opts ...grpc.CallOption) (*QuerySearchResponse, error)\n\tTop(ctx context.Context, in *QueryTopRequest, opts ...grpc.CallOption) (*QuerySearchResponse, error)\n\tIsLinkExist(ctx context.Context, in *QueryIsLinkExistRequest, opts ...grpc.CallOption) (*QueryLinkExistResponse, error)\n\tIsAnyLinkExist(ctx context.Context, in *QueryIsAnyLinkExistRequest, opts ...grpc.CallOption) (*QueryLinkExistResponse, error)\n\tParticleNegentropy(ctx context.Context, in *QueryNegentropyPartilceRequest, opts ...grpc.CallOption) (*QueryNegentropyParticleResponse, error)\n\tNegentropy(ctx context.Context, in *QueryNegentropyRequest, opts ...grpc.CallOption) (*QueryNegentropyResponse, error)\n\tKarma(ctx context.Context, in *QueryKarmaRequest, opts ...grpc.CallOption) (*QueryKarmaResponse, error)\n}\n\ntype queryClient struct {\n\tcc grpc1.ClientConn\n}\n\nfunc NewQueryClient(cc grpc1.ClientConn) QueryClient {\n\treturn &queryClient{cc}\n}\n\nfunc (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) {\n\tout := new(QueryParamsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.rank.v1beta1.Query/Params\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) Rank(ctx context.Context, in *QueryRankRequest, opts ...grpc.CallOption) (*QueryRankResponse, error) {\n\tout := new(QueryRankResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.rank.v1beta1.Query/Rank\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) Search(ctx context.Context, in *QuerySearchRequest, opts ...grpc.CallOption) (*QuerySearchResponse, error) {\n\tout := new(QuerySearchResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.rank.v1beta1.Query/Search\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) Backlinks(ctx context.Context, in *QuerySearchRequest, opts ...grpc.CallOption) (*QuerySearchResponse, error) {\n\tout := new(QuerySearchResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.rank.v1beta1.Query/Backlinks\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) Top(ctx context.Context, in *QueryTopRequest, opts ...grpc.CallOption) (*QuerySearchResponse, error) {\n\tout := new(QuerySearchResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.rank.v1beta1.Query/Top\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) IsLinkExist(ctx context.Context, in *QueryIsLinkExistRequest, opts ...grpc.CallOption) (*QueryLinkExistResponse, error) {\n\tout := new(QueryLinkExistResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.rank.v1beta1.Query/IsLinkExist\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) IsAnyLinkExist(ctx context.Context, in *QueryIsAnyLinkExistRequest, opts ...grpc.CallOption) (*QueryLinkExistResponse, error) {\n\tout := new(QueryLinkExistResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.rank.v1beta1.Query/IsAnyLinkExist\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) ParticleNegentropy(ctx context.Context, in *QueryNegentropyPartilceRequest, opts ...grpc.CallOption) (*QueryNegentropyParticleResponse, error) {\n\tout := new(QueryNegentropyParticleResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.rank.v1beta1.Query/ParticleNegentropy\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) Negentropy(ctx context.Context, in *QueryNegentropyRequest, opts ...grpc.CallOption) (*QueryNegentropyResponse, error) {\n\tout := new(QueryNegentropyResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.rank.v1beta1.Query/Negentropy\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) Karma(ctx context.Context, in *QueryKarmaRequest, opts ...grpc.CallOption) (*QueryKarmaResponse, error) {\n\tout := new(QueryKarmaResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.rank.v1beta1.Query/Karma\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// QueryServer is the server API for Query service.\ntype QueryServer interface {\n\tParams(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error)\n\tRank(context.Context, *QueryRankRequest) (*QueryRankResponse, error)\n\tSearch(context.Context, *QuerySearchRequest) (*QuerySearchResponse, error)\n\tBacklinks(context.Context, *QuerySearchRequest) (*QuerySearchResponse, error)\n\tTop(context.Context, *QueryTopRequest) (*QuerySearchResponse, error)\n\tIsLinkExist(context.Context, *QueryIsLinkExistRequest) (*QueryLinkExistResponse, error)\n\tIsAnyLinkExist(context.Context, *QueryIsAnyLinkExistRequest) (*QueryLinkExistResponse, error)\n\tParticleNegentropy(context.Context, *QueryNegentropyPartilceRequest) (*QueryNegentropyParticleResponse, error)\n\tNegentropy(context.Context, *QueryNegentropyRequest) (*QueryNegentropyResponse, error)\n\tKarma(context.Context, *QueryKarmaRequest) (*QueryKarmaResponse, error)\n}\n\n// UnimplementedQueryServer can be embedded to have forward compatible implementations.\ntype UnimplementedQueryServer struct{}\n\nfunc (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Params not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) Rank(ctx context.Context, req *QueryRankRequest) (*QueryRankResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Rank not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) Search(ctx context.Context, req *QuerySearchRequest) (*QuerySearchResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Search not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) Backlinks(ctx context.Context, req *QuerySearchRequest) (*QuerySearchResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Backlinks not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) Top(ctx context.Context, req *QueryTopRequest) (*QuerySearchResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Top not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) IsLinkExist(ctx context.Context, req *QueryIsLinkExistRequest) (*QueryLinkExistResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method IsLinkExist not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) IsAnyLinkExist(ctx context.Context, req *QueryIsAnyLinkExistRequest) (*QueryLinkExistResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method IsAnyLinkExist not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) ParticleNegentropy(ctx context.Context, req *QueryNegentropyPartilceRequest) (*QueryNegentropyParticleResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method ParticleNegentropy not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) Negentropy(ctx context.Context, req *QueryNegentropyRequest) (*QueryNegentropyResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Negentropy not implemented\")\n}\n\nfunc (*UnimplementedQueryServer) Karma(ctx context.Context, req *QueryKarmaRequest) (*QueryKarmaResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Karma not implemented\")\n}\n\nfunc RegisterQueryServer(s grpc1.Server, srv QueryServer) {\n\ts.RegisterService(&_Query_serviceDesc, srv)\n}\n\nfunc _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryParamsRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).Params(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.rank.v1beta1.Query/Params\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_Rank_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryRankRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).Rank(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.rank.v1beta1.Query/Rank\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).Rank(ctx, req.(*QueryRankRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_Search_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QuerySearchRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).Search(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.rank.v1beta1.Query/Search\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).Search(ctx, req.(*QuerySearchRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_Backlinks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QuerySearchRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).Backlinks(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.rank.v1beta1.Query/Backlinks\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).Backlinks(ctx, req.(*QuerySearchRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_Top_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryTopRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).Top(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.rank.v1beta1.Query/Top\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).Top(ctx, req.(*QueryTopRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_IsLinkExist_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryIsLinkExistRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).IsLinkExist(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.rank.v1beta1.Query/IsLinkExist\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).IsLinkExist(ctx, req.(*QueryIsLinkExistRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_IsAnyLinkExist_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryIsAnyLinkExistRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).IsAnyLinkExist(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.rank.v1beta1.Query/IsAnyLinkExist\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).IsAnyLinkExist(ctx, req.(*QueryIsAnyLinkExistRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_ParticleNegentropy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryNegentropyPartilceRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).ParticleNegentropy(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.rank.v1beta1.Query/ParticleNegentropy\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).ParticleNegentropy(ctx, req.(*QueryNegentropyPartilceRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_Negentropy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryNegentropyRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).Negentropy(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.rank.v1beta1.Query/Negentropy\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).Negentropy(ctx, req.(*QueryNegentropyRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_Karma_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryKarmaRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).Karma(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.rank.v1beta1.Query/Karma\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).Karma(ctx, req.(*QueryKarmaRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _Query_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"cyber.rank.v1beta1.Query\",\n\tHandlerType: (*QueryServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Params\",\n\t\t\tHandler:    _Query_Params_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Rank\",\n\t\t\tHandler:    _Query_Rank_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Search\",\n\t\t\tHandler:    _Query_Search_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Backlinks\",\n\t\t\tHandler:    _Query_Backlinks_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Top\",\n\t\t\tHandler:    _Query_Top_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"IsLinkExist\",\n\t\t\tHandler:    _Query_IsLinkExist_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"IsAnyLinkExist\",\n\t\t\tHandler:    _Query_IsAnyLinkExist_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ParticleNegentropy\",\n\t\t\tHandler:    _Query_ParticleNegentropy_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Negentropy\",\n\t\t\tHandler:    _Query_Negentropy_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Karma\",\n\t\t\tHandler:    _Query_Karma_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"cyber/rank/v1beta1/query.proto\",\n}\n\nfunc (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryRankRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryRankRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryRankRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Particle) > 0 {\n\t\ti -= len(m.Particle)\n\t\tcopy(dAtA[i:], m.Particle)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.Particle)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryRankResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryRankResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryRankResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Rank != 0 {\n\t\ti = encodeVarintQuery(dAtA, i, uint64(m.Rank))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QuerySearchRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QuerySearchRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QuerySearchRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Pagination != nil {\n\t\t{\n\t\t\tsize, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\ti -= size\n\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Particle) > 0 {\n\t\ti -= len(m.Particle)\n\t\tcopy(dAtA[i:], m.Particle)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.Particle)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QuerySearchResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QuerySearchResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QuerySearchResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Pagination != nil {\n\t\t{\n\t\t\tsize, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\ti -= size\n\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Result) > 0 {\n\t\tfor iNdEx := len(m.Result) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.Result[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0xa\n\t\t}\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryTopRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryTopRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryTopRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Pagination != nil {\n\t\t{\n\t\t\tsize, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\ti -= size\n\t\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryIsLinkExistRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryIsLinkExistRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryIsLinkExistRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Address) > 0 {\n\t\ti -= len(m.Address)\n\t\tcopy(dAtA[i:], m.Address)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.Address)))\n\t\ti--\n\t\tdAtA[i] = 0x1a\n\t}\n\tif len(m.To) > 0 {\n\t\ti -= len(m.To)\n\t\tcopy(dAtA[i:], m.To)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.To)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.From) > 0 {\n\t\ti -= len(m.From)\n\t\tcopy(dAtA[i:], m.From)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.From)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryIsAnyLinkExistRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryIsAnyLinkExistRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryIsAnyLinkExistRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.To) > 0 {\n\t\ti -= len(m.To)\n\t\tcopy(dAtA[i:], m.To)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.To)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.From) > 0 {\n\t\ti -= len(m.From)\n\t\tcopy(dAtA[i:], m.From)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.From)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryLinkExistResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryLinkExistResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryLinkExistResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Exist {\n\t\ti--\n\t\tif m.Exist {\n\t\t\tdAtA[i] = 1\n\t\t} else {\n\t\t\tdAtA[i] = 0\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryNegentropyPartilceRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryNegentropyPartilceRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryNegentropyPartilceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Particle) > 0 {\n\t\ti -= len(m.Particle)\n\t\tcopy(dAtA[i:], m.Particle)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.Particle)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryNegentropyParticleResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryNegentropyParticleResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryNegentropyParticleResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Entropy != 0 {\n\t\ti = encodeVarintQuery(dAtA, i, uint64(m.Entropy))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryNegentropyRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryNegentropyRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryNegentropyRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryNegentropyResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryNegentropyResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryNegentropyResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Negentropy != 0 {\n\t\ti = encodeVarintQuery(dAtA, i, uint64(m.Negentropy))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryKarmaRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryKarmaRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryKarmaRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Neuron) > 0 {\n\t\ti -= len(m.Neuron)\n\t\tcopy(dAtA[i:], m.Neuron)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.Neuron)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryKarmaResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryKarmaResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryKarmaResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Karma != 0 {\n\t\ti = encodeVarintQuery(dAtA, i, uint64(m.Karma))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintQuery(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovQuery(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *QueryParamsRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *QueryParamsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Params.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc (m *QueryRankRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Particle)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryRankResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.Rank != 0 {\n\t\tn += 1 + sovQuery(uint64(m.Rank))\n\t}\n\treturn n\n}\n\nfunc (m *QuerySearchRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Particle)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\tif m.Pagination != nil {\n\t\tl = m.Pagination.Size()\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QuerySearchResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif len(m.Result) > 0 {\n\t\tfor _, e := range m.Result {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovQuery(uint64(l))\n\t\t}\n\t}\n\tif m.Pagination != nil {\n\t\tl = m.Pagination.Size()\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryTopRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.Pagination != nil {\n\t\tl = m.Pagination.Size()\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryIsLinkExistRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.From)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\tl = len(m.To)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\tl = len(m.Address)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryIsAnyLinkExistRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.From)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\tl = len(m.To)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryLinkExistResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.Exist {\n\t\tn += 2\n\t}\n\treturn n\n}\n\nfunc (m *QueryNegentropyPartilceRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Particle)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryNegentropyParticleResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.Entropy != 0 {\n\t\tn += 1 + sovQuery(uint64(m.Entropy))\n\t}\n\treturn n\n}\n\nfunc (m *QueryNegentropyRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *QueryNegentropyResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.Negentropy != 0 {\n\t\tn += 1 + sovQuery(uint64(m.Negentropy))\n\t}\n\treturn n\n}\n\nfunc (m *QueryKarmaRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Neuron)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryKarmaResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.Karma != 0 {\n\t\tn += 1 + sovQuery(uint64(m.Karma))\n\t}\n\treturn n\n}\n\nfunc sovQuery(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozQuery(x uint64) (n int) {\n\treturn sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *QueryParamsRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryParamsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryRankRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryRankRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryRankRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Particle\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Particle = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryRankResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryRankResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryRankResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Rank\", wireType)\n\t\t\t}\n\t\t\tm.Rank = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Rank |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QuerySearchRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QuerySearchRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QuerySearchRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Particle\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Particle = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Pagination\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif m.Pagination == nil {\n\t\t\t\tm.Pagination = &PageRequest{}\n\t\t\t}\n\t\t\tif err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QuerySearchResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QuerySearchResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QuerySearchResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Result\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Result = append(m.Result, RankedParticle{})\n\t\t\tif err := m.Result[len(m.Result)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Pagination\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif m.Pagination == nil {\n\t\t\t\tm.Pagination = &PageResponse{}\n\t\t\t}\n\t\t\tif err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryTopRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryTopRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryTopRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Pagination\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif m.Pagination == nil {\n\t\t\t\tm.Pagination = &PageRequest{}\n\t\t\t}\n\t\t\tif err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryIsLinkExistRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryIsLinkExistRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryIsLinkExistRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field From\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.From = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field To\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.To = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Address\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Address = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryIsAnyLinkExistRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryIsAnyLinkExistRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryIsAnyLinkExistRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field From\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.From = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field To\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.To = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryLinkExistResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLinkExistResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryLinkExistResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Exist\", wireType)\n\t\t\t}\n\t\t\tvar v int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tv |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tm.Exist = bool(v != 0)\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryNegentropyPartilceRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryNegentropyPartilceRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryNegentropyPartilceRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Particle\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Particle = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryNegentropyParticleResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryNegentropyParticleResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryNegentropyParticleResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Entropy\", wireType)\n\t\t\t}\n\t\t\tm.Entropy = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Entropy |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryNegentropyRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryNegentropyRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryNegentropyRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryNegentropyResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryNegentropyResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryNegentropyResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Negentropy\", wireType)\n\t\t\t}\n\t\t\tm.Negentropy = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Negentropy |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryKarmaRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryKarmaRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryKarmaRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Neuron\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Neuron = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *QueryKarmaResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryKarmaResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryKarmaResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Karma\", wireType)\n\t\t\t}\n\t\t\tm.Karma = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Karma |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipQuery(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupQuery\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthQuery\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthQuery        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowQuery          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupQuery = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/rank/types/query.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: cyber/rank/v1beta1/query.proto\n\n/*\nPackage types is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage types\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/golang/protobuf/descriptor\"\n\t\"github.com/golang/protobuf/proto\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// Suppress \"imported and not used\" errors\nvar (\n\t_ codes.Code\n\t_ io.Reader\n\t_ status.Status\n\t_ = runtime.String\n\t_ = utilities.NewDoubleArray\n\t_ = descriptor.ForMessage\n\t_ = metadata.Join\n)\n\nfunc request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryParamsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryParamsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := server.Params(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_Query_Rank_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryRankRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"particle\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"particle\")\n\t}\n\n\tprotoReq.Particle, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"particle\", err)\n\t}\n\n\tmsg, err := client.Rank(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_Rank_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryRankRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"particle\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"particle\")\n\t}\n\n\tprotoReq.Particle, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"particle\", err)\n\t}\n\n\tmsg, err := server.Rank(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Query_Search_0 = &utilities.DoubleArray{Encoding: map[string]int{\"particle\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_Query_Search_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QuerySearchRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"particle\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"particle\")\n\t}\n\n\tprotoReq.Particle, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"particle\", err)\n\t}\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Search_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.Search(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_Search_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QuerySearchRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"particle\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"particle\")\n\t}\n\n\tprotoReq.Particle, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"particle\", err)\n\t}\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Search_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.Search(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Query_Backlinks_0 = &utilities.DoubleArray{Encoding: map[string]int{\"particle\": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}\n\nfunc request_Query_Backlinks_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QuerySearchRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"particle\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"particle\")\n\t}\n\n\tprotoReq.Particle, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"particle\", err)\n\t}\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Backlinks_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.Backlinks(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_Backlinks_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QuerySearchRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"particle\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"particle\")\n\t}\n\n\tprotoReq.Particle, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"particle\", err)\n\t}\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Backlinks_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.Backlinks(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Query_Top_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_Query_Top_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryTopRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Top_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.Top(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_Top_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryTopRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Top_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.Top(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Query_IsLinkExist_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_Query_IsLinkExist_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryIsLinkExistRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_IsLinkExist_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.IsLinkExist(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_IsLinkExist_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryIsLinkExistRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_IsLinkExist_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.IsLinkExist(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nvar filter_Query_IsAnyLinkExist_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n\nfunc request_Query_IsAnyLinkExist_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryIsAnyLinkExistRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_IsAnyLinkExist_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.IsAnyLinkExist(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_IsAnyLinkExist_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryIsAnyLinkExistRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_IsAnyLinkExist_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.IsAnyLinkExist(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_Query_ParticleNegentropy_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryNegentropyPartilceRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"particle\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"particle\")\n\t}\n\n\tprotoReq.Particle, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"particle\", err)\n\t}\n\n\tmsg, err := client.ParticleNegentropy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_ParticleNegentropy_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryNegentropyPartilceRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"particle\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"particle\")\n\t}\n\n\tprotoReq.Particle, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"particle\", err)\n\t}\n\n\tmsg, err := server.ParticleNegentropy(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_Query_Negentropy_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryNegentropyRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := client.Negentropy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_Negentropy_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryNegentropyRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := server.Negentropy(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\nfunc request_Query_Karma_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryKarmaRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"neuron\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"neuron\")\n\t}\n\n\tprotoReq.Neuron, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"neuron\", err)\n\t}\n\n\tmsg, err := client.Karma(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n}\n\nfunc local_request_Query_Karma_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryKarmaRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"neuron\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"neuron\")\n\t}\n\n\tprotoReq.Neuron, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"neuron\", err)\n\t}\n\n\tmsg, err := server.Karma(ctx, &protoReq)\n\treturn msg, metadata, err\n}\n\n// RegisterQueryHandlerServer registers the http handlers for service Query to \"mux\".\n// UnaryRPC     :call QueryServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead.\nfunc RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error {\n\tmux.Handle(\"GET\", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Rank_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_Rank_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Rank_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Search_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_Search_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Search_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Backlinks_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_Backlinks_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Backlinks_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Top_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_Top_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Top_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_IsLinkExist_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_IsLinkExist_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_IsLinkExist_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_IsAnyLinkExist_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_IsAnyLinkExist_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_IsAnyLinkExist_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_ParticleNegentropy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_ParticleNegentropy_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_ParticleNegentropy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Negentropy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_Negentropy_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Negentropy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Karma_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_Karma_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Karma_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\n// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.Dial(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Infof(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Infof(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\n\treturn RegisterQueryHandler(ctx, mux, conn)\n}\n\n// RegisterQueryHandler registers the http handlers for service Query to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn))\n}\n\n// RegisterQueryHandlerClient registers the http handlers for service Query\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"QueryClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"QueryClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"QueryClient\" to call the correct interceptors.\nfunc RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error {\n\tmux.Handle(\"GET\", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Rank_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_Rank_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Rank_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Search_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_Search_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Search_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Backlinks_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_Backlinks_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Backlinks_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Top_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_Top_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Top_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_IsLinkExist_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_IsLinkExist_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_IsLinkExist_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_IsAnyLinkExist_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_IsAnyLinkExist_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_IsAnyLinkExist_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_ParticleNegentropy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_ParticleNegentropy_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_ParticleNegentropy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Negentropy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_Negentropy_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Negentropy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Karma_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_Karma_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Karma_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\t})\n\n\treturn nil\n}\n\nvar (\n\tpattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"rank\", \"v1beta1\", \"params\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_Rank_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 1, 1, 0, 4, 1, 5, 3}, []string{\"cyber\", \"rank\", \"v1beta1\", \"particle\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_Search_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3, 1, 0, 4, 1, 5, 4}, []string{\"cyber\", \"rank\", \"v1beta1\", \"search\", \"particle\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_Backlinks_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3, 1, 0, 4, 1, 5, 4}, []string{\"cyber\", \"rank\", \"v1beta1\", \"backlinks\", \"particle\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_Top_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"rank\", \"v1beta1\", \"top\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_IsLinkExist_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"cyber\", \"rank\", \"v1beta1\", \"is_link_exist\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_IsAnyLinkExist_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"cyber\", \"rank\", \"v1beta1\", \"is_any_link_exist\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_ParticleNegentropy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{\"cyber\", \"rank\", \"v1beta1\", \"negentropy\", \"particle\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_Negentropy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"cyber\", \"rank\", \"v1beta1\", \"negentropy\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_Karma_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{\"cyber\", \"rank\", \"v1beta1\", \"karma\", \"neuron\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n)\n\nvar (\n\tforward_Query_Params_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_Rank_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_Search_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_Backlinks_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_Top_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_IsLinkExist_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_IsAnyLinkExist_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_ParticleNegentropy_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_Negentropy_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_Karma_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "x/rank/types/rank.go",
    "content": "package types\n\nimport (\n\t\"crypto/sha256\"\n\t\"sort\"\n\t\"time\"\n\n\t\"github.com/cybercongress/go-cyber/v7/merkle\"\n\tgraphtypes \"github.com/cybercongress/go-cyber/v7/x/graph/types\"\n\n\t\"github.com/cometbft/cometbft/libs/log\"\n)\n\ntype EMState struct {\n\tRankValues []float64\n}\n\ntype Rank struct {\n\tRankValues []uint64\n\tMerkleTree *merkle.Tree // ranks merkle\n\tCidCount   uint64\n\tTopCIDs    []RankedCidNumber\n}\n\nfunc NewRank(state EMState, logger log.Logger, fullTree bool) Rank {\n\tstart := time.Now()\n\tparticlesCount := uint64(len(state.RankValues))\n\n\trankValues := make([]uint64, particlesCount)\n\tfor i, f64 := range state.RankValues {\n\t\trankValues[i] = uint64(f64 * 1e15)\n\t}\n\tstate.RankValues = nil\n\n\tlogger.Info(\"State processing to integers\", \"duration\", time.Since(start).String())\n\n\tstart = time.Now()\n\tmerkleTree := merkle.NewTree(sha256.New(), fullTree)\n\tzeroRankBytes := make([]byte, 8)\n\tfor range rankValues {\n\t\tmerkleTree.Push(zeroRankBytes)\n\t}\n\tlogger.Info(\"Rank constructing tree\", \"duration\", time.Since(start).String())\n\n\t// NOTE fulltree true if search index enabled\n\tstart = time.Now()\n\tvar newSortedCIDs []RankedCidNumber\n\tif fullTree {\n\t\tnewSortedCIDs = BuildTop(rankValues, 1000)\n\t\tlogger.Info(\"Build top\", \"duration\", time.Since(start).String())\n\t}\n\n\treturn Rank{\n\t\tRankValues: rankValues,\n\t\tMerkleTree: merkleTree,\n\t\tCidCount:   particlesCount,\n\t\tTopCIDs:    newSortedCIDs,\n\t}\n}\n\nfunc NewFromMerkle(cidCount uint64, treeBytes []byte) Rank {\n\trank := Rank{\n\t\tRankValues: nil,\n\t\tMerkleTree: merkle.NewTree(sha256.New(), false),\n\t\tCidCount:   cidCount,\n\t\tTopCIDs:    nil,\n\t}\n\n\trank.MerkleTree.ImportSubtreesRoots(treeBytes)\n\n\tif cidCount > 0 {\n\t\trank.RankValues = make([]uint64, cidCount)\n\t}\n\n\treturn rank\n}\n\nfunc (r Rank) IsEmpty() bool {\n\treturn (r.RankValues == nil || len(r.RankValues) == 0) && r.MerkleTree == nil\n}\n\nfunc (r *Rank) Clear() {\n\tr.RankValues = nil\n\tr.MerkleTree = nil\n\tr.CidCount = 0\n\tr.TopCIDs = nil\n}\n\nfunc (r *Rank) CopyWithoutTree() Rank {\n\tif r.RankValues == nil {\n\t\treturn Rank{\n\t\t\tRankValues: nil,\n\t\t\tMerkleTree: nil,\n\t\t\tCidCount:   0,\n\t\t\tTopCIDs:    nil,\n\t\t}\n\t}\n\n\tcopiedRankValues := make([]uint64, r.CidCount)\n\tn := copy(copiedRankValues, r.RankValues)\n\t// SHOULD NOT HAPPEN\n\tif n != len(r.RankValues) {\n\t\tpanic(\"Not all rank values have been copied\")\n\t}\n\n\tcopiedTopCIDs := make([]RankedCidNumber, len(r.TopCIDs))\n\tn = copy(copiedTopCIDs, r.TopCIDs)\n\tif n != len(r.TopCIDs) {\n\t\tpanic(\"Not all sorted particles have been copied\")\n\t}\n\n\treturn Rank{\n\t\tRankValues: copiedRankValues,\n\t\tMerkleTree: nil,\n\t\tCidCount:   r.CidCount,\n\t\tTopCIDs:    copiedTopCIDs,\n\t}\n}\n\n// TODO: optimize. Possible solution: adjust capacity of rank values slice after rank calculation\nfunc (r *Rank) AddNewCids(currentCidCount uint64) {\n\tnewCidsCount := currentCidCount - r.CidCount\n\n\t// add new cids with rank = 0\n\tif r.RankValues != nil {\n\t\tr.RankValues = append(r.RankValues, make([]uint64, newCidsCount)...)\n\t}\n\n\t// extend merkle tree\n\tzeroRankBytes := make([]byte, 8)\n\tfor i := uint64(0); i < newCidsCount; i++ {\n\t\tr.MerkleTree.Push(zeroRankBytes)\n\t}\n\n\tr.CidCount = currentCidCount\n}\n\nfunc BuildTop(values []uint64, size int) []RankedCidNumber {\n\tnewSortedCIDs := make(sortableCidNumbers, 0, len(values))\n\tfor cid, rank := range values {\n\t\tif rank == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tnewRankedCid := RankedCidNumber{graphtypes.CidNumber(cid), rank}\n\t\tnewSortedCIDs = append(newSortedCIDs, newRankedCid)\n\t}\n\tsort.Stable(sort.Reverse(newSortedCIDs))\n\tif len(values) > size {\n\t\tnewSortedCIDs = newSortedCIDs[0:(size - 1)]\n\t}\n\treturn newSortedCIDs\n}\n"
  },
  {
    "path": "x/rank/types/tx.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/rank/v1beta1/tx.proto\n\npackage types\n\nimport (\n\tcontext \"context\"\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\t_ \"github.com/cosmos/cosmos-proto\"\n\t_ \"github.com/cosmos/cosmos-sdk/types/msgservice\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tgrpc1 \"github.com/cosmos/gogoproto/grpc\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype MsgUpdateParams struct {\n\tAuthority string `protobuf:\"bytes,1,opt,name=authority,proto3\" json:\"authority,omitempty\"`\n\tParams    Params `protobuf:\"bytes,2,opt,name=params,proto3\" json:\"params\"`\n}\n\nfunc (m *MsgUpdateParams) Reset()         { *m = MsgUpdateParams{} }\nfunc (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) }\nfunc (*MsgUpdateParams) ProtoMessage()    {}\nfunc (*MsgUpdateParams) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_77ab52c5f2c8eb9f, []int{0}\n}\n\nfunc (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgUpdateParams.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgUpdateParams) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgUpdateParams.Merge(m, src)\n}\n\nfunc (m *MsgUpdateParams) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgUpdateParams) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgUpdateParams.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo\n\nfunc (m *MsgUpdateParams) GetAuthority() string {\n\tif m != nil {\n\t\treturn m.Authority\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgUpdateParams) GetParams() Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn Params{}\n}\n\ntype MsgUpdateParamsResponse struct{}\n\nfunc (m *MsgUpdateParamsResponse) Reset()         { *m = MsgUpdateParamsResponse{} }\nfunc (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgUpdateParamsResponse) ProtoMessage()    {}\nfunc (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_77ab52c5f2c8eb9f, []int{1}\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgUpdateParamsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src)\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo\n\nfunc init() {\n\tproto.RegisterType((*MsgUpdateParams)(nil), \"cyber.rank.v1beta1.MsgUpdateParams\")\n\tproto.RegisterType((*MsgUpdateParamsResponse)(nil), \"cyber.rank.v1beta1.MsgUpdateParamsResponse\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/rank/v1beta1/tx.proto\", fileDescriptor_77ab52c5f2c8eb9f) }\n\nvar fileDescriptor_77ab52c5f2c8eb9f = []byte{\n\t// 321 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4e, 0xae, 0x4c, 0x4a,\n\t0x2d, 0xd2, 0x2f, 0x4a, 0xcc, 0xcb, 0xd6, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x2f,\n\t0xa9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x02, 0x4b, 0xea, 0x81, 0x24, 0xf5, 0xa0,\n\t0x92, 0x52, 0x22, 0xe9, 0xf9, 0xe9, 0xf9, 0x60, 0x69, 0x7d, 0x10, 0x0b, 0xa2, 0x52, 0x4a, 0x3c,\n\t0x39, 0xbf, 0x38, 0x37, 0xbf, 0x58, 0x3f, 0xb7, 0x38, 0x5d, 0xbf, 0xcc, 0x10, 0x44, 0x41, 0x25,\n\t0x24, 0x21, 0x12, 0xf1, 0x10, 0x1d, 0x10, 0x0e, 0x54, 0x4a, 0x0e, 0x9b, 0xd5, 0x95, 0x05, 0xa9,\n\t0x50, 0x79, 0xa5, 0xc9, 0x8c, 0x5c, 0xfc, 0xbe, 0xc5, 0xe9, 0xa1, 0x05, 0x29, 0x89, 0x25, 0xa9,\n\t0x01, 0x89, 0x45, 0x89, 0xb9, 0xc5, 0x42, 0x66, 0x5c, 0x9c, 0x89, 0xa5, 0x25, 0x19, 0xf9, 0x45,\n\t0x99, 0x25, 0x95, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x4e, 0x12, 0x97, 0xb6, 0xe8, 0x8a, 0x40,\n\t0x0d, 0x76, 0x4c, 0x49, 0x29, 0x4a, 0x2d, 0x2e, 0x0e, 0x2e, 0x29, 0xca, 0xcc, 0x4b, 0x0f, 0x42,\n\t0x28, 0x15, 0xb2, 0xe0, 0x62, 0x2b, 0x00, 0x9b, 0x20, 0xc1, 0xa4, 0xc0, 0xa8, 0xc1, 0x6d, 0x24,\n\t0xa5, 0x87, 0xe9, 0x35, 0x3d, 0x88, 0x1d, 0x4e, 0x2c, 0x27, 0xee, 0xc9, 0x33, 0x04, 0x41, 0xd5,\n\t0x5b, 0xf1, 0x35, 0x3d, 0xdf, 0xa0, 0x85, 0x30, 0x49, 0x49, 0x92, 0x4b, 0x1c, 0xcd, 0x51, 0x41,\n\t0xa9, 0xc5, 0x05, 0xf9, 0x79, 0xc5, 0xa9, 0x46, 0xe9, 0x5c, 0xcc, 0xbe, 0xc5, 0xe9, 0x42, 0x09,\n\t0x5c, 0x3c, 0x28, 0x6e, 0x56, 0xc6, 0x66, 0x17, 0x9a, 0x19, 0x52, 0xda, 0x44, 0x28, 0x82, 0x59,\n\t0xe4, 0xe4, 0x71, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, 0x31, 0x4e,\n\t0x78, 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, 0x7a, 0xe9, 0x99,\n\t0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0x60, 0x03, 0x93, 0xf3, 0xf3, 0xd2, 0x41,\n\t0x41, 0xa2, 0x9f, 0x9e, 0xaf, 0x0b, 0x09, 0xef, 0x0a, 0x48, 0x88, 0x83, 0x43, 0x3a, 0x89, 0x0d,\n\t0x1c, 0xd4, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x32, 0x67, 0xef, 0xc9, 0x07, 0x02, 0x00,\n\t0x00,\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ context.Context\n\t_ grpc.ClientConn\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// MsgClient is the client API for Msg service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype MsgClient interface {\n\tUpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error)\n}\n\ntype msgClient struct {\n\tcc grpc1.ClientConn\n}\n\nfunc NewMsgClient(cc grpc1.ClientConn) MsgClient {\n\treturn &msgClient{cc}\n}\n\nfunc (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) {\n\tout := new(MsgUpdateParamsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.rank.v1beta1.Msg/UpdateParams\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// MsgServer is the server API for Msg service.\ntype MsgServer interface {\n\tUpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error)\n}\n\n// UnimplementedMsgServer can be embedded to have forward compatible implementations.\ntype UnimplementedMsgServer struct{}\n\nfunc (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method UpdateParams not implemented\")\n}\n\nfunc RegisterMsgServer(s grpc1.Server, srv MsgServer) {\n\ts.RegisterService(&_Msg_serviceDesc, srv)\n}\n\nfunc _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgUpdateParams)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).UpdateParams(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.rank.v1beta1.Msg/UpdateParams\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _Msg_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"cyber.rank.v1beta1.Msg\",\n\tHandlerType: (*MsgServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"UpdateParams\",\n\t\t\tHandler:    _Msg_UpdateParams_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"cyber/rank/v1beta1/tx.proto\",\n}\n\nfunc (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x12\n\tif len(m.Authority) > 0 {\n\t\ti -= len(m.Authority)\n\t\tcopy(dAtA[i:], m.Authority)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Authority)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintTx(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovTx(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *MsgUpdateParams) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Authority)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = m.Params.Size()\n\tn += 1 + l + sovTx(uint64(l))\n\treturn n\n}\n\nfunc (m *MsgUpdateParamsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc sovTx(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozTx(x uint64) (n int) {\n\treturn sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *MsgUpdateParams) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParams: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParams: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Authority\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Authority = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParamsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipTx(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthTx\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupTx\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthTx\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthTx        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowTx          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupTx = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/rank/types/types.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/rank/v1beta1/types.proto\n\npackage types\n\nimport (\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\tgithub_com_cosmos_cosmos_sdk_types \"github.com/cosmos/cosmos-sdk/types\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype Params struct {\n\tCalculationPeriod int64                                  `protobuf:\"varint,1,opt,name=calculation_period,json=calculationPeriod,proto3\" json:\"calculation_period,omitempty\"`\n\tDampingFactor     github_com_cosmos_cosmos_sdk_types.Dec `protobuf:\"bytes,2,opt,name=damping_factor,json=dampingFactor,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec\" json:\"damping_factor\"`\n\tTolerance         github_com_cosmos_cosmos_sdk_types.Dec `protobuf:\"bytes,3,opt,name=tolerance,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec\" json:\"tolerance\"`\n}\n\nfunc (m *Params) Reset()         { *m = Params{} }\nfunc (m *Params) String() string { return proto.CompactTextString(m) }\nfunc (*Params) ProtoMessage()    {}\nfunc (*Params) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_5e38a68eff7d025f, []int{0}\n}\n\nfunc (m *Params) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_Params.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *Params) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Params.Merge(m, src)\n}\n\nfunc (m *Params) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *Params) XXX_DiscardUnknown() {\n\txxx_messageInfo_Params.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Params proto.InternalMessageInfo\n\nfunc (m *Params) GetCalculationPeriod() int64 {\n\tif m != nil {\n\t\treturn m.CalculationPeriod\n\t}\n\treturn 0\n}\n\ntype RankedParticle struct {\n\tParticle string `protobuf:\"bytes,1,opt,name=particle,proto3\" json:\"particle,omitempty\"`\n\tRank     uint64 `protobuf:\"varint,2,opt,name=rank,proto3\" json:\"rank,omitempty\"`\n}\n\nfunc (m *RankedParticle) Reset()         { *m = RankedParticle{} }\nfunc (m *RankedParticle) String() string { return proto.CompactTextString(m) }\nfunc (*RankedParticle) ProtoMessage()    {}\nfunc (*RankedParticle) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_5e38a68eff7d025f, []int{1}\n}\n\nfunc (m *RankedParticle) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *RankedParticle) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_RankedParticle.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *RankedParticle) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_RankedParticle.Merge(m, src)\n}\n\nfunc (m *RankedParticle) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *RankedParticle) XXX_DiscardUnknown() {\n\txxx_messageInfo_RankedParticle.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_RankedParticle proto.InternalMessageInfo\n\nfunc (m *RankedParticle) GetParticle() string {\n\tif m != nil {\n\t\treturn m.Particle\n\t}\n\treturn \"\"\n}\n\nfunc (m *RankedParticle) GetRank() uint64 {\n\tif m != nil {\n\t\treturn m.Rank\n\t}\n\treturn 0\n}\n\nfunc init() {\n\tproto.RegisterType((*Params)(nil), \"cyber.rank.v1beta1.Params\")\n\tproto.RegisterType((*RankedParticle)(nil), \"cyber.rank.v1beta1.RankedParticle\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/rank/v1beta1/types.proto\", fileDescriptor_5e38a68eff7d025f) }\n\nvar fileDescriptor_5e38a68eff7d025f = []byte{\n\t// 309 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x91, 0xc1, 0x4a, 0x33, 0x31,\n\t0x14, 0x85, 0x27, 0x7f, 0x4b, 0xf9, 0x1b, 0xb0, 0x60, 0x70, 0x51, 0xba, 0x48, 0x4b, 0x17, 0xd2,\n\t0x4d, 0x13, 0x8a, 0x2f, 0x20, 0x45, 0xc4, 0x85, 0x8b, 0x32, 0xe0, 0xc6, 0x4d, 0xc9, 0x64, 0x62,\n\t0x1c, 0x3a, 0x93, 0x3b, 0x24, 0xa9, 0xd8, 0xb7, 0xf0, 0xb1, 0xba, 0xec, 0x52, 0x44, 0x8a, 0xb4,\n\t0x2f, 0x22, 0x93, 0x19, 0xb4, 0x6b, 0x57, 0x39, 0xe1, 0xbb, 0x1c, 0xce, 0x3d, 0x17, 0x53, 0xb9,\n\t0x49, 0x94, 0xe5, 0x56, 0x98, 0x15, 0x7f, 0x99, 0x25, 0xca, 0x8b, 0x19, 0xf7, 0x9b, 0x52, 0x39,\n\t0x56, 0x5a, 0xf0, 0x40, 0x48, 0xe0, 0xac, 0xe2, 0xac, 0xe1, 0x83, 0x0b, 0x0d, 0x1a, 0x02, 0xe6,\n\t0x95, 0xaa, 0x27, 0xc7, 0x9f, 0x08, 0x77, 0x16, 0xc2, 0x8a, 0xc2, 0x91, 0x29, 0x26, 0x52, 0xe4,\n\t0x72, 0x9d, 0x0b, 0x9f, 0x81, 0x59, 0x96, 0xca, 0x66, 0x90, 0xf6, 0xd1, 0x08, 0x4d, 0x5a, 0xf1,\n\t0xf9, 0x09, 0x59, 0x04, 0x40, 0x1e, 0x70, 0x2f, 0x15, 0x45, 0x99, 0x19, 0xbd, 0x7c, 0x12, 0xd2,\n\t0x83, 0xed, 0xff, 0x1b, 0xa1, 0x49, 0x77, 0xce, 0xb6, 0xfb, 0x61, 0xf4, 0xb1, 0x1f, 0x5e, 0xea,\n\t0xcc, 0x3f, 0xaf, 0x13, 0x26, 0xa1, 0xe0, 0x12, 0x5c, 0x01, 0xae, 0x79, 0xa6, 0x2e, 0x5d, 0x35,\n\t0x69, 0x6f, 0x94, 0x8c, 0xcf, 0x1a, 0x97, 0xdb, 0x60, 0x42, 0xee, 0x71, 0xd7, 0x43, 0xae, 0xac,\n\t0x30, 0x52, 0xf5, 0x5b, 0x7f, 0x72, 0xfc, 0x35, 0x18, 0x5f, 0xe3, 0x5e, 0x2c, 0xcc, 0x4a, 0xa5,\n\t0x0b, 0x61, 0x7d, 0x26, 0x73, 0x45, 0x06, 0xf8, 0x7f, 0xd9, 0xe8, 0xb0, 0x5b, 0x37, 0xfe, 0xf9,\n\t0x13, 0x82, 0xdb, 0x55, 0x65, 0x61, 0x91, 0x76, 0x1c, 0xf4, 0xfc, 0x6e, 0x7b, 0xa0, 0x68, 0x77,\n\t0xa0, 0xe8, 0xeb, 0x40, 0xd1, 0xdb, 0x91, 0x46, 0xbb, 0x23, 0x8d, 0xde, 0x8f, 0x34, 0x7a, 0x64,\n\t0xa7, 0x71, 0xaa, 0xbe, 0x25, 0x18, 0x6d, 0x95, 0x73, 0x5c, 0xc3, 0xb4, 0x3e, 0xd0, 0x6b, 0x7d,\n\t0xa2, 0x10, 0x2d, 0xe9, 0x84, 0xc6, 0xaf, 0xbe, 0x03, 0x00, 0x00, 0xff, 0xff, 0xdd, 0xa7, 0x39,\n\t0x44, 0xbd, 0x01, 0x00, 0x00,\n}\n\nfunc (m *Params) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *Params) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize := m.Tolerance.Size()\n\t\ti -= size\n\t\tif _, err := m.Tolerance.MarshalTo(dAtA[i:]); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti = encodeVarintTypes(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x1a\n\t{\n\t\tsize := m.DampingFactor.Size()\n\t\ti -= size\n\t\tif _, err := m.DampingFactor.MarshalTo(dAtA[i:]); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti = encodeVarintTypes(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x12\n\tif m.CalculationPeriod != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.CalculationPeriod))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *RankedParticle) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *RankedParticle) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *RankedParticle) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Rank != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.Rank))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif len(m.Particle) > 0 {\n\t\ti -= len(m.Particle)\n\t\tcopy(dAtA[i:], m.Particle)\n\t\ti = encodeVarintTypes(dAtA, i, uint64(len(m.Particle)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintTypes(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovTypes(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *Params) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.CalculationPeriod != 0 {\n\t\tn += 1 + sovTypes(uint64(m.CalculationPeriod))\n\t}\n\tl = m.DampingFactor.Size()\n\tn += 1 + l + sovTypes(uint64(l))\n\tl = m.Tolerance.Size()\n\tn += 1 + l + sovTypes(uint64(l))\n\treturn n\n}\n\nfunc (m *RankedParticle) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Particle)\n\tif l > 0 {\n\t\tn += 1 + l + sovTypes(uint64(l))\n\t}\n\tif m.Rank != 0 {\n\t\tn += 1 + sovTypes(uint64(m.Rank))\n\t}\n\treturn n\n}\n\nfunc sovTypes(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozTypes(x uint64) (n int) {\n\treturn sovTypes(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *Params) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: Params: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: Params: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field CalculationPeriod\", wireType)\n\t\t\t}\n\t\t\tm.CalculationPeriod = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.CalculationPeriod |= int64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field DampingFactor\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.DampingFactor.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Tolerance\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Tolerance.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTypes(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *RankedParticle) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: RankedParticle: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: RankedParticle: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Particle\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Particle = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Rank\", wireType)\n\t\t\t}\n\t\t\tm.Rank = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Rank |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTypes(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipTypes(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowTypes\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupTypes\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthTypes\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthTypes        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowTypes          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupTypes = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/rank/wasm/interface.go",
    "content": "package wasm\n\nimport (\n\t\"encoding/json\"\n\n\terrorsmod \"cosmossdk.io/errors\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/rank/keeper\"\n\n\tpluginstypes \"github.com/cybercongress/go-cyber/v7/plugins/types\"\n)\n\ntype Querier struct {\n\tkeeper *keeper.StateKeeper\n}\n\nfunc NewWasmQuerier(keeper *keeper.StateKeeper) *Querier {\n\treturn &Querier{keeper}\n}\n\nfunc (querier *Querier) HandleQuery(ctx sdk.Context, query pluginstypes.CyberQuery) ([]byte, error) {\n\tswitch {\n\tcase query.ParticleRank != nil:\n\t\tres, err := querier.keeper.Rank(ctx, query.ParticleRank)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to get particle rank\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(res)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to serialize particle rank response\")\n\t\t}\n\t\treturn responseBytes, nil\n\tdefault:\n\t\treturn nil, pluginstypes.ErrHandleQuery\n\t}\n}\n"
  },
  {
    "path": "x/resources/client/cli/query.go",
    "content": "package cli\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strconv\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/cosmos/cosmos-sdk/client/flags\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/spf13/cobra\"\n\n\tctypes \"github.com/cybercongress/go-cyber/v7/types\"\n\t\"github.com/cybercongress/go-cyber/v7/x/resources/types\"\n)\n\nfunc GetQueryCmd() *cobra.Command {\n\tqueryCmd := &cobra.Command{\n\t\tUse:                        types.ModuleName,\n\t\tShort:                      fmt.Sprintf(\"Querying commands for the %s module\", types.ModuleName),\n\t\tDisableFlagParsing:         true,\n\t\tSuggestionsMinimumDistance: 2,\n\t\tRunE:                       client.ValidateCmd,\n\t}\n\n\tqueryCmd.AddCommand(\n\t\tGetCmdQueryParams(),\n\t\tGetCmdQueryInvestmintAmount(),\n\t)\n\n\treturn queryCmd\n}\n\nfunc GetCmdQueryParams() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"params\",\n\t\tShort: \"Query the current resources module parameters information\",\n\t\tArgs:  cobra.NoArgs,\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tres, err := queryClient.Params(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryParamsRequest{},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\nfunc GetCmdQueryInvestmintAmount() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"investmint [amount] [resource] [length]\",\n\t\tShort: \"Query resources return on investmint\",\n\t\tArgs:  cobra.ExactArgs(3),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tamount, err := sdk.ParseCoinNormalized(args[0])\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"coin %s not a valid coin, please input a valid coin\", args[0])\n\t\t\t}\n\n\t\t\tif amount.Denom != ctypes.SCYB {\n\t\t\t\treturn fmt.Errorf(\"coin %s not a valid coin, please input a valid coin\", args[0])\n\t\t\t}\n\n\t\t\tif args[1] != ctypes.VOLT && args[1] != ctypes.AMPERE {\n\t\t\t\treturn fmt.Errorf(\"resource %s not a valid resource, please input a valid resource\", args[1])\n\t\t\t}\n\n\t\t\tlength, err := strconv.ParseUint(args[2], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"block period %s not a valid uint, please input a valid block period\", args[1])\n\t\t\t}\n\n\t\t\tres, err := queryClient.Investmint(\n\t\t\t\tcontext.Background(),\n\t\t\t\t&types.QueryInvestmintRequest{\n\t\t\t\t\tAmount:   amount,\n\t\t\t\t\tResource: args[1],\n\t\t\t\t\tLength:   length,\n\t\t\t\t},\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n"
  },
  {
    "path": "x/resources/client/cli/tx.go",
    "content": "package cli\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/cosmos/cosmos-sdk/client/flags\"\n\t\"github.com/cosmos/cosmos-sdk/client/tx\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/version\"\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\n\tctypes \"github.com/cybercongress/go-cyber/v7/types\"\n\t\"github.com/cybercongress/go-cyber/v7/x/resources/types\"\n)\n\nfunc NewTxCmd() *cobra.Command {\n\ttxCmd := &cobra.Command{\n\t\tUse:                        types.ModuleName,\n\t\tShort:                      fmt.Sprintf(\"%s transactions subcommands\", types.ModuleName),\n\t\tDisableFlagParsing:         true,\n\t\tSuggestionsMinimumDistance: 2,\n\t\tRunE:                       client.ValidateCmd,\n\t}\n\n\ttxCmd.AddCommand(\n\t\tGetCmdInvestmint(),\n\t)\n\n\treturn txCmd\n}\n\nfunc GetCmdInvestmint() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"investmint [amount] [resource] [length]\",\n\t\tArgs:  cobra.ExactArgs(3),\n\t\tShort: \"Investmint basic resource with the return of advanced system resource\",\n\t\tLong: strings.TrimSpace(\n\t\t\tfmt.Sprintf(`Long.\n\nExample:\n$ %s tx resources investmint 1000000000hydrogen millivolt 2500000 --from <key>\n`,\n\t\t\t\tversion.Version,\n\t\t\t),\n\t\t),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tagent := clientCtx.GetFromAddress()\n\n\t\t\tamount, err := sdk.ParseCoinNormalized(args[0])\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"coin %s not a valid coin, please input a valid coin\", args[0])\n\t\t\t}\n\n\t\t\tif amount.Denom != ctypes.SCYB {\n\t\t\t\treturn fmt.Errorf(\"coin %s not a valid coin, please input a valid coin\", args[0])\n\t\t\t}\n\n\t\t\tif args[1] != ctypes.VOLT && args[1] != ctypes.AMPERE {\n\t\t\t\treturn fmt.Errorf(\"resource %s not a valid resource, please input a valid resource\", args[1])\n\t\t\t}\n\n\t\t\tlength, err := strconv.ParseUint(args[2], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"block period %s not a valid uint, please input a valid block period\", args[1])\n\t\t\t}\n\n\t\t\tmsg := types.NewMsgInvestmint(agent, amount, args[1], length)\n\n\t\t\tif err := msg.ValidateBasic(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)\n\t\t},\n\t}\n\n\tflags.AddTxFlagsToCmd(cmd)\n\n\treturn cmd\n}\n"
  },
  {
    "path": "x/resources/exported/exported.go",
    "content": "package exported\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tparamtypes \"github.com/cosmos/cosmos-sdk/x/params/types\"\n)\n\ntype (\n\tParamSet = paramtypes.ParamSet\n\n\t// Subspace defines an interface that implements the legacy x/params Subspace\n\t// type.\n\t//\n\t// NOTE: This is used solely for migration of x/params managed parameters.\n\tSubspace interface {\n\t\tGetParamSet(ctx sdk.Context, ps ParamSet)\n\t}\n)\n\ntype GraphKeeper interface {\n\tGetBurnedVolts(ctx sdk.Context) uint64\n\tGetBurnedAmperes(ctx sdk.Context) uint64\n}\n"
  },
  {
    "path": "x/resources/keeper/genesis.go",
    "content": "package keeper\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/resources/types\"\n)\n\nfunc InitGenesis(ctx sdk.Context, k Keeper, data types.GenesisState) {\n\tif err := k.SetParams(ctx, data.Params); err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc ExportGenesis(ctx sdk.Context, k Keeper) *types.GenesisState {\n\tparams := k.GetParams(ctx)\n\n\treturn types.NewGenesisState(params)\n}\n"
  },
  {
    "path": "x/resources/keeper/grpc_query.go",
    "content": "package keeper\n\nimport (\n\t\"context\"\n\n\terrorsmod \"cosmossdk.io/errors\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/status\"\n\n\tctypes \"github.com/cybercongress/go-cyber/v7/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/resources/types\"\n)\n\nvar _ types.QueryServer = Keeper{}\n\nfunc (k Keeper) Params(goCtx context.Context, request *types.QueryParamsRequest) (*types.QueryParamsResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\tparams := k.GetParams(ctx)\n\n\treturn &types.QueryParamsResponse{Params: params}, nil\n}\n\nfunc (k Keeper) Investmint(goCtx context.Context, request *types.QueryInvestmintRequest) (*types.QueryInvestmintResponse, error) {\n\tif request == nil {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tif request.Amount.Denom != ctypes.SCYB {\n\t\treturn nil, errorsmod.Wrap(types.ErrInvalidBaseResource, request.Amount.String())\n\t}\n\n\tif request.Resource != ctypes.VOLT && request.Resource != ctypes.AMPERE {\n\t\treturn nil, errorsmod.Wrap(types.ErrResourceNotExist, request.Resource)\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tmaxPeriod := k.GetMaxPeriod(ctx, request.Resource)\n\n\tamount := k.CalculateInvestmint(ctx, request.Amount, request.Resource, maxPeriod)\n\n\tamount = k.applySupplyExponentialAdjustment(ctx, request.Resource, amount)\n\n\treturn &types.QueryInvestmintResponse{Amount: amount}, nil\n}\n\nfunc (k Keeper) AdjustedPrice(goCtx context.Context, request *types.QueryAdjustedPriceRequest) (*types.QueryAdjustedPriceResponse, error) {\n\tif request == nil {\n\t\treturn nil, status.Errorf(codes.InvalidArgument, \"empty request\")\n\t}\n\n\tif request.Resource != ctypes.VOLT && request.Resource != ctypes.AMPERE {\n\t\treturn nil, errorsmod.Wrap(types.ErrResourceNotExist, request.Resource)\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tamount := k.applySupplyExponentialAdjustment(ctx, request.Resource, request.Base)\n\n\treturn &types.QueryAdjustedPriceResponse{Adjusted: amount}, nil\n}\n"
  },
  {
    "path": "x/resources/keeper/keeper.go",
    "content": "package keeper\n\nimport (\n\t\"fmt\"\n\t\"github.com/cybercongress/go-cyber/v7/x/resources/exported\"\n\t\"math\"\n\n\terrorsmod \"cosmossdk.io/errors\"\n\n\tstoretypes \"github.com/cosmos/cosmos-sdk/store/types\"\n\n\t\"github.com/cometbft/cometbft/libs/log\"\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tsdkerrors \"github.com/cosmos/cosmos-sdk/types/errors\"\n\tauthtypes \"github.com/cosmos/cosmos-sdk/x/auth/types\"\n\tvestingtypes \"github.com/cosmos/cosmos-sdk/x/auth/vesting/types\"\n\n\tctypes \"github.com/cybercongress/go-cyber/v7/types\"\n\tbandwithkeeper \"github.com/cybercongress/go-cyber/v7/x/bandwidth/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/resources/types\"\n)\n\ntype Keeper struct {\n\tcdc            codec.BinaryCodec\n\tstoreKey       storetypes.StoreKey\n\taccountKeeper  types.AccountKeeper\n\tgraphKeeper    exported.GraphKeeper\n\tbankKeeper     types.BankKeeper\n\tbandwidthMeter *bandwithkeeper.BandwidthMeter\n\n\tauthority string\n}\n\n// Exponential supply half-life controls: mint factor = 0.5^(supply / halfLife)\n// Larger halfLife -> slower decay (more mint per same supply)\nvar (\n\texpHalfLifeVolt = sdk.NewInt(4000000000)  // 4*1e9\n\texpHalfLifeAmp  = sdk.NewInt(32000000000) // 3.2*1e10\n)\n\nfunc NewKeeper(\n\tcdc codec.BinaryCodec,\n\tkey storetypes.StoreKey,\n\tak types.AccountKeeper,\n\tbk types.BankKeeper,\n\tbm *bandwithkeeper.BandwidthMeter,\n\tgk exported.GraphKeeper,\n\tauthority string,\n) Keeper {\n\tif addr := ak.GetModuleAddress(types.ResourcesName); addr == nil {\n\t\tpanic(fmt.Sprintf(\"%s module account has not been set\", types.ResourcesName))\n\t}\n\n\tkeeper := Keeper{\n\t\tcdc:            cdc,\n\t\tstoreKey:       key,\n\t\taccountKeeper:  ak,\n\t\tbankKeeper:     bk,\n\t\tbandwidthMeter: bm,\n\t\tgraphKeeper:    gk,\n\t\tauthority:      authority,\n\t}\n\treturn keeper\n}\n\nfunc (k Keeper) GetAuthority() string { return k.authority }\n\nfunc (k Keeper) Logger(ctx sdk.Context) log.Logger {\n\treturn ctx.Logger().With(\"module\", fmt.Sprintf(\"x/%s\", types.ModuleName))\n}\n\nfunc (k Keeper) SetParams(ctx sdk.Context, p types.Params) error {\n\tif err := p.Validate(); err != nil {\n\t\treturn err\n\t}\n\n\tstore := ctx.KVStore(k.storeKey)\n\tbz := k.cdc.MustMarshal(&p)\n\tstore.Set(types.ParamsKey, bz)\n\n\treturn nil\n}\n\nfunc (k Keeper) GetParams(ctx sdk.Context) (p types.Params) {\n\tstore := ctx.KVStore(k.storeKey)\n\tbz := store.Get(types.ParamsKey)\n\tif bz == nil {\n\t\treturn p\n\t}\n\n\tk.cdc.MustUnmarshal(bz, &p)\n\treturn p\n}\n\nfunc (k Keeper) ConvertResource(\n\tctx sdk.Context,\n\tneuron sdk.AccAddress,\n\tamount sdk.Coin,\n\tresource string,\n\t_ uint64,\n) (sdk.Coin, error) {\n\t// mint volts or amperes based on current max period and rate\n\t// burn hydrogen (not vesting)\n\t// put newly minted volts/amperes to vesting schedule with minimal period (1 second) for backward compatibility\n\n\tmaxPeriod := k.GetMaxPeriod(ctx, resource)\n\n\tif k.bankKeeper.SpendableCoins(ctx, neuron).AmountOf(ctypes.SCYB).LT(amount.Amount) {\n\t\treturn sdk.Coin{}, sdkerrors.ErrInsufficientFunds\n\t}\n\n\terr := k.bankKeeper.SendCoinsFromAccountToModule(ctx, neuron, types.ResourcesName, sdk.NewCoins(amount))\n\tif err != nil {\n\t\treturn sdk.Coin{}, errorsmod.Wrapf(types.ErrTimeLockCoins, err.Error())\n\t}\n\terr = k.bankKeeper.BurnCoins(ctx, types.ResourcesName, sdk.NewCoins(amount))\n\tif err != nil {\n\t\treturn sdk.Coin{}, errorsmod.Wrapf(types.ErrBurnCoins, err.Error())\n\t}\n\n\tminted, err := k.Mint(ctx, neuron, amount, resource, maxPeriod)\n\tif err != nil {\n\t\treturn sdk.Coin{}, errorsmod.Wrapf(types.ErrIssueCoins, err.Error())\n\t}\n\n\treturn minted, err\n}\n\nfunc (k Keeper) AddTimeLockedCoinsToAccount(ctx sdk.Context, recipientAddr sdk.AccAddress, amt sdk.Coins, length int64) error {\n\tacc := k.accountKeeper.GetAccount(ctx, recipientAddr)\n\tif acc == nil {\n\t\treturn errorsmod.Wrapf(types.ErrAccountNotFound, recipientAddr.String())\n\t}\n\n\tswitch acc.(type) {\n\tcase *vestingtypes.PeriodicVestingAccount:\n\t\treturn k.AddTimeLockedCoinsToPeriodicVestingAccount(ctx, recipientAddr, amt, length, false)\n\tcase *authtypes.BaseAccount:\n\t\treturn k.AddTimeLockedCoinsToBaseAccount(ctx, recipientAddr, amt, length)\n\tdefault:\n\t\treturn errorsmod.Wrapf(types.ErrInvalidAccountType, \"%T\", acc)\n\t}\n}\n\nfunc (k Keeper) AddTimeLockedCoinsToPeriodicVestingAccount(ctx sdk.Context, recipientAddr sdk.AccAddress, amt sdk.Coins, length int64, mergeSlot bool) error {\n\terr := k.addCoinsToVestingSchedule(ctx, recipientAddr, amt, length, mergeSlot)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (k Keeper) AddTimeLockedCoinsToBaseAccount(ctx sdk.Context, recipientAddr sdk.AccAddress, amt sdk.Coins, length int64) error {\n\tacc := k.accountKeeper.GetAccount(ctx, recipientAddr)\n\tbacc := authtypes.NewBaseAccount(acc.GetAddress(), acc.GetPubKey(), acc.GetAccountNumber(), acc.GetSequence())\n\tnewPeriods := vestingtypes.Periods{types.NewPeriod(amt, length)}\n\tbva := vestingtypes.NewBaseVestingAccount(bacc, amt, ctx.BlockTime().Unix()+length)\n\tpva := vestingtypes.NewPeriodicVestingAccountRaw(bva, ctx.BlockTime().Unix(), newPeriods)\n\tk.accountKeeper.SetAccount(ctx, pva)\n\treturn nil\n}\n\nfunc (k Keeper) addCoinsToVestingSchedule(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins, length int64, mergeSlot bool) error {\n\tacc := k.accountKeeper.GetAccount(ctx, addr)\n\tvacc := acc.(*vestingtypes.PeriodicVestingAccount)\n\n\t// just mock short vesting period for backward compatibility with ui\n\n\tnewPeriod := types.NewPeriod(amt, length)\n\tvacc.VestingPeriods = append(vestingtypes.Periods{}, newPeriod)\n\tvacc.StartTime = ctx.BlockTime().Unix()\n\tvacc.EndTime = ctx.BlockTime().Unix() + length\n\tvacc.OriginalVesting = newPeriod.Amount\n\tk.accountKeeper.SetAccount(ctx, vacc)\n\treturn nil\n}\n\nfunc (k Keeper) Mint(ctx sdk.Context, recipientAddr sdk.AccAddress, amt sdk.Coin, resource string, length uint64) (sdk.Coin, error) {\n\tacc := k.accountKeeper.GetAccount(ctx, recipientAddr)\n\tif acc == nil {\n\t\treturn sdk.Coin{}, errorsmod.Wrapf(types.ErrAccountNotFound, recipientAddr.String())\n\t}\n\n\ttoMint := k.CalculateInvestmint(ctx, amt, resource, length)\n\n\t// Apply exponential supply-based decreasing adjustment so each next minter mints less\n\ttoMint = k.applySupplyExponentialAdjustment(ctx, resource, toMint)\n\n\tif toMint.Amount.LT(sdk.NewInt(1000)) {\n\t\treturn sdk.Coin{}, errorsmod.Wrapf(types.ErrSmallReturn, recipientAddr.String())\n\t}\n\n\terr := k.bankKeeper.MintCoins(ctx, types.ResourcesName, sdk.NewCoins(toMint))\n\tif err != nil {\n\t\treturn sdk.Coin{}, errorsmod.Wrapf(types.ErrMintCoins, recipientAddr.String())\n\t}\n\terr = k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ResourcesName, recipientAddr, sdk.NewCoins(toMint))\n\tif err != nil {\n\t\treturn sdk.Coin{}, errorsmod.Wrapf(types.ErrSendMintedCoins, recipientAddr.String())\n\t}\n\t// adding converted resources to vesting schedule\n\terr = k.AddTimeLockedCoinsToAccount(ctx, recipientAddr, sdk.NewCoins(toMint), int64(1))\n\tif err != nil {\n\t\treturn sdk.Coin{}, errorsmod.Wrapf(types.ErrTimeLockCoins, err.Error())\n\t}\n\n\tif resource == ctypes.VOLT {\n\t\tk.bandwidthMeter.AddToDesirableBandwidth(ctx, toMint.Amount.Uint64())\n\t}\n\n\treturn toMint, nil\n}\n\nfunc (k Keeper) CalculateInvestmint(ctx sdk.Context, amt sdk.Coin, resource string, length uint64) sdk.Coin {\n\tvar toMint sdk.Coin\n\tvar halving sdk.Dec\n\tparams := k.GetParams(ctx)\n\n\tswitch resource {\n\tcase ctypes.VOLT:\n\t\tcycles := sdk.NewDec(int64(length)).QuoInt64(int64(params.BaseInvestmintPeriodVolt))\n\t\tbase := sdk.NewDec(amt.Amount.Int64()).QuoInt64(params.BaseInvestmintAmountVolt.Amount.Int64())\n\n\t\t// NOTE out of parametrization, custom code is applied here in order to shift the HALVINGS START 6M BLOCKS LATER but keep base halving parameter same\n\t\tif ctx.BlockHeight() > 15000000 {\n\t\t\thalving = sdk.NewDecWithPrec(int64(math.Pow(0.5, float64((ctx.BlockHeight()-6000000)/int64(params.HalvingPeriodVoltBlocks)))*10000), 4)\n\t\t} else {\n\t\t\thalving = sdk.OneDec()\n\t\t}\n\n\t\tif halving.LT(sdk.NewDecWithPrec(1, 2)) {\n\t\t\thalving = sdk.NewDecWithPrec(1, 2)\n\t\t}\n\n\t\ttoMint = ctypes.NewVoltCoin(base.Mul(cycles).Mul(halving).Mul(sdk.NewDec(1000)).TruncateInt64())\n\n\t\tk.Logger(ctx).Info(\"Investmint\", \"cycles\", cycles.String(), \"base\", base.String(), \"halving\", halving.String(), \"mint\", toMint.String())\n\tcase ctypes.AMPERE:\n\t\tcycles := sdk.NewDec(int64(length)).QuoInt64(int64(params.BaseInvestmintPeriodAmpere))\n\t\tbase := sdk.NewDec(amt.Amount.Int64()).QuoInt64(params.BaseInvestmintAmountAmpere.Amount.Int64())\n\n\t\t// NOTE out of parametrization, custom code is applied here in order to shift the HALVINGS START 6M BLOCKS LATER but keep base halving parameter same\n\t\tif ctx.BlockHeight() > 15000000 {\n\t\t\thalving = sdk.NewDecWithPrec(int64(math.Pow(0.5, float64((ctx.BlockHeight()-6000000)/int64(params.HalvingPeriodAmpereBlocks)))*10000), 4)\n\t\t} else {\n\t\t\thalving = sdk.OneDec()\n\t\t}\n\n\t\tif halving.LT(sdk.NewDecWithPrec(1, 2)) {\n\t\t\thalving = sdk.NewDecWithPrec(1, 2)\n\t\t}\n\n\t\ttoMint = ctypes.NewAmpereCoin(base.Mul(cycles).Mul(halving).Mul(sdk.NewDec(1000)).TruncateInt64())\n\n\t\tk.Logger(ctx).Info(\"Investmint\", \"cycles\", cycles.String(), \"base\", base.String(), \"halving\", halving.String(), \"mint\", toMint.String())\n\t}\n\treturn toMint\n}\n\n// applySupplyExponentialAdjustment reduces base mint using f = 0.5^(supply / halfLife)\n// where halfLife is resource-specific. Returns a coin with the same denom adjusted by f.\nfunc (k Keeper) applySupplyExponentialAdjustment(ctx sdk.Context, resource string, base sdk.Coin) sdk.Coin {\n\tif !base.Amount.IsPositive() {\n\t\treturn base\n\t}\n\n\ttotalSupply := k.bankKeeper.GetSupply(ctx, resource).Amount\n\tif resource == ctypes.VOLT {\n\t\ttotalSupply = totalSupply.Add(sdk.NewInt(int64(k.graphKeeper.GetBurnedVolts(ctx))))\n\t}\n\tif resource == ctypes.AMPERE {\n\t\ttotalSupply = totalSupply.Add(sdk.NewInt(int64(k.graphKeeper.GetBurnedAmperes(ctx))))\n\t}\n\n\tvar halfLife sdk.Int\n\tswitch resource {\n\tcase ctypes.VOLT:\n\t\thalfLife = expHalfLifeVolt\n\tcase ctypes.AMPERE:\n\t\thalfLife = expHalfLifeAmp\n\tdefault:\n\t\treturn base\n\t}\n\n\tif !halfLife.IsPositive() {\n\t\treturn base\n\t}\n\n\t// factor = 0.5 ^ (supply / halfLife)\n\t// compute using high-precision decimals\n\tsupplyDec := sdk.NewDecFromInt(totalSupply)\n\thalfLifeDec := sdk.NewDecFromInt(halfLife)\n\tratio := supplyDec.Quo(halfLifeDec)\n\n\t// Convert to float64 for exponent; bounded to avoid NaN/Inf\n\tr64 := ratio.MustFloat64()\n\tif math.IsNaN(r64) || math.IsInf(r64, 0) || r64 < 0 {\n\t\treturn base\n\t}\n\tfactor := math.Pow(0.5, r64)\n\tif factor < 0 {\n\t\tfactor = 0\n\t}\n\tif factor > 1 {\n\t\tfactor = 1\n\t}\n\n\t// Apply factor on base.Amount\n\tbaseDec := sdk.NewDecFromInt(base.Amount)\n\t// Use big.Rat via String to minimize precision drift when multiplying\n\tfactorDec, err := sdk.NewDecFromStr(fmt.Sprintf(\"%.18f\", factor))\n\tif err != nil {\n\t\treturn base\n\t}\n\tadjustedDec := baseDec.Mul(factorDec)\n\tadjusted := base\n\tadjusted.Amount = adjustedDec.TruncateInt()\n\n\t// Ensure we don't drop to zero unexpectedly if base was small but positive\n\tif base.Amount.IsPositive() && adjusted.Amount.IsZero() {\n\t\tadjusted.Amount = sdk.OneInt()\n\t}\n\n\tk.Logger(ctx).Info(\"Supply exponential adjust\", \"resource\", resource, \"supply\", totalSupply.String(), \"halfLife\", halfLife.String(), \"factor\", fmt.Sprintf(\"%.10f\", factor), \"base\", base.Amount.String(), \"adjusted\", adjusted.Amount.String())\n\n\treturn adjusted\n}\n\nfunc (k Keeper) GetMaxPeriod(ctx sdk.Context, resource string) uint64 {\n\tvar availableLength uint64\n\tpassed := ctx.BlockHeight()\n\tparams := k.GetParams(ctx)\n\n\tswitch resource {\n\tcase ctypes.VOLT:\n\t\thalvingVolt := params.HalvingPeriodVoltBlocks\n\t\tdoubling := uint32(math.Pow(2, float64(passed/int64(halvingVolt))))\n\t\tavailableLength = uint64(doubling * halvingVolt * 6)\n\n\tcase ctypes.AMPERE:\n\t\thalvingAmpere := params.HalvingPeriodAmpereBlocks\n\t\tdoubling := uint32(math.Pow(2, float64(passed/int64(halvingAmpere))))\n\t\tavailableLength = uint64(doubling * halvingAmpere * 6)\n\t}\n\n\treturn availableLength\n}\n"
  },
  {
    "path": "x/resources/keeper/migrator.go",
    "content": "package keeper\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/resources/exported\"\n\tv2 \"github.com/cybercongress/go-cyber/v7/x/resources/migrations/v2\"\n)\n\n// Migrator is a struct for handling in-place state migrations.\ntype Migrator struct {\n\tkeeper         Keeper\n\tlegacySubspace exported.Subspace\n}\n\nfunc NewMigrator(k Keeper, ss exported.Subspace) Migrator {\n\treturn Migrator{\n\t\tkeeper:         k,\n\t\tlegacySubspace: ss,\n\t}\n}\n\nfunc (m Migrator) Migrate1to2(ctx sdk.Context) error {\n\treturn v2.Migrate(ctx, ctx.KVStore(m.keeper.storeKey), m.legacySubspace, m.keeper.cdc)\n}\n"
  },
  {
    "path": "x/resources/keeper/msg_server.go",
    "content": "package keeper\n\nimport (\n\t\"context\"\n\t\"strconv\"\n\n\tgovtypes \"github.com/cosmos/cosmos-sdk/x/gov/types\"\n\n\t\"cosmossdk.io/errors\"\n\t\"github.com/armon/go-metrics\"\n\t\"github.com/cosmos/cosmos-sdk/telemetry\"\n\n\tctypes \"github.com/cybercongress/go-cyber/v7/types\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/resources/types\"\n)\n\ntype msgServer struct {\n\tKeeper\n}\n\nfunc NewMsgServerImpl(keeper Keeper) types.MsgServer {\n\treturn &msgServer{keeper}\n}\n\nvar _ types.MsgServer = msgServer{}\n\nfunc (server msgServer) Investmint(goCtx context.Context, msg *types.MsgInvestmint) (*types.MsgInvestmintResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tneuron, err := sdk.AccAddressFromBech32(msg.Neuron)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tswitch msg.Resource {\n\tcase ctypes.VOLT:\n\t\tif msg.Amount.Denom != server.GetParams(ctx).BaseInvestmintAmountVolt.Denom {\n\t\t\treturn nil, errors.Wrap(types.ErrInvalidBaseResource, msg.Amount.Denom)\n\t\t}\n\tcase ctypes.AMPERE:\n\t\tif msg.Amount.Denom != server.GetParams(ctx).BaseInvestmintAmountAmpere.Denom {\n\t\t\treturn nil, errors.Wrap(types.ErrInvalidBaseResource, msg.Amount.Denom)\n\t\t}\n\t}\n\n\tminted, err := server.ConvertResource(ctx, neuron, msg.Amount, msg.Resource, msg.Length)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tdefer telemetry.IncrCounterWithLabels(\n\t\t[]string{types.ModuleName, \"investmint\"},\n\t\t1,\n\t\t[]metrics.Label{\n\t\t\ttelemetry.NewLabel(\"resource\", msg.Resource),\n\t\t},\n\t)\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\tsdk.EventTypeMessage,\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),\n\t\t\tsdk.NewAttribute(sdk.AttributeKeySender, msg.Neuron),\n\t\t),\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeInvestmint,\n\t\t\tsdk.NewAttribute(types.AttributeKeyNeuron, msg.Neuron),\n\t\t\tsdk.NewAttribute(types.AttributeKeyAmount, msg.Amount.String()),\n\t\t\tsdk.NewAttribute(types.AttributeKeyResource, msg.Resource),\n\t\t\tsdk.NewAttribute(types.AttributeKeyLength, strconv.FormatUint(msg.Length, 10)),\n\t\t\tsdk.NewAttribute(types.AttributeKeyMinted, minted.Amount.String()),\n\t\t),\n\t})\n\n\treturn &types.MsgInvestmintResponse{}, nil\n}\n\nfunc (server msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) {\n\tif server.authority != req.Authority {\n\t\treturn nil, errors.Wrapf(govtypes.ErrInvalidSigner, \"invalid authority; expected %s, got %s\", server.authority, req.Authority)\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\tif err := server.SetParams(ctx, req.Params); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &types.MsgUpdateParamsResponse{}, nil\n}\n"
  },
  {
    "path": "x/resources/migrations/v2/migrate.go",
    "content": "package v2\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/resources/exported\"\n\t\"github.com/cybercongress/go-cyber/v7/x/resources/types\"\n)\n\nfunc Migrate(\n\tctx sdk.Context,\n\tstore sdk.KVStore,\n\tlegacySubspace exported.Subspace,\n\tcdc codec.BinaryCodec,\n) error {\n\tvar currParams types.Params\n\tlegacySubspace.GetParamSet(ctx, &currParams)\n\n\tif err := currParams.Validate(); err != nil {\n\t\treturn err\n\t}\n\n\tbz := cdc.MustMarshal(&currParams)\n\tstore.Set(types.ParamsKey, bz)\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/resources/module.go",
    "content": "package resources\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\tcodectypes \"github.com/cosmos/cosmos-sdk/codec/types\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/runtime\"\n\n\tabci \"github.com/cometbft/cometbft/abci/types\"\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/module\"\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/resources/client/cli\"\n\t\"github.com/cybercongress/go-cyber/v7/x/resources/exported\"\n\t\"github.com/cybercongress/go-cyber/v7/x/resources/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/resources/types\"\n)\n\nvar (\n\t_ module.AppModule      = AppModule{}\n\t_ module.AppModuleBasic = AppModuleBasic{}\n)\n\ntype AppModuleBasic struct {\n\tcdc codec.Codec\n}\n\nfunc (AppModuleBasic) Name() string {\n\treturn types.ModuleName\n}\n\nfunc (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {\n\ttypes.RegisterLegacyAminoCodec(cdc)\n}\n\nfunc (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage {\n\treturn cdc.MustMarshalJSON(types.DefaultGenesisState())\n}\n\nfunc (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, _ client.TxEncodingConfig, bz json.RawMessage) error {\n\tvar data types.GenesisState\n\terr := cdc.UnmarshalJSON(bz, &data)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to unmarshal %s genesis state: %w\", types.ModuleName, err)\n\t}\n\treturn types.ValidateGenesis(data)\n}\n\nfunc (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) {\n\tif err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc (AppModuleBasic) GetTxCmd() *cobra.Command {\n\treturn cli.NewTxCmd()\n}\n\nfunc (AppModuleBasic) GetQueryCmd() *cobra.Command {\n\treturn cli.GetQueryCmd()\n}\n\nfunc (AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) {\n\ttypes.RegisterInterfaces(registry)\n}\n\ntype AppModule struct {\n\tAppModuleBasic\n\n\tcdc            codec.Codec\n\tkeeper         keeper.Keeper\n\tlegacySubspace exported.Subspace\n}\n\nfunc NewAppModule(\n\tcdc codec.Codec,\n\tk keeper.Keeper,\n\tss exported.Subspace,\n) AppModule {\n\treturn AppModule{\n\t\tAppModuleBasic: AppModuleBasic{cdc: cdc},\n\t\tcdc:            cdc,\n\t\tkeeper:         k,\n\t\tlegacySubspace: ss,\n\t}\n}\n\nfunc (AppModule) Name() string { return types.ModuleName }\n\nfunc (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {}\n\nfunc (am AppModule) RegisterServices(cfg module.Configurator) {\n\ttypes.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper))\n\ttypes.RegisterQueryServer(cfg.QueryServer(), am.keeper)\n\n\tm := keeper.NewMigrator(am.keeper, am.legacySubspace)\n\tif err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil {\n\t\tpanic(fmt.Sprintf(\"failed to migrate x/%s from version 1 to 2: %v\", types.ModuleName, err))\n\t}\n}\n\nfunc (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate {\n\tvar genesisState types.GenesisState\n\tcdc.MustUnmarshalJSON(data, &genesisState)\n\tkeeper.InitGenesis(ctx, am.keeper, genesisState)\n\treturn []abci.ValidatorUpdate{}\n}\n\nfunc (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage {\n\tgs := keeper.ExportGenesis(ctx, am.keeper)\n\treturn cdc.MustMarshalJSON(gs)\n}\n\nfunc (am AppModule) ConsensusVersion() uint64 {\n\treturn 2\n}\n\nfunc (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {}\n\nfunc (AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate {\n\treturn []abci.ValidatorUpdate{}\n}\n"
  },
  {
    "path": "x/resources/spec/00_concepts.md",
    "content": "# Concepts\n\n## Vesting\n\n## Investmint\n\n## Resource Slots\n\n## Resources Economy\n\n"
  },
  {
    "path": "x/resources/spec/01_api.md",
    "content": "# API\n\n# REST\n\n| Path                                  | Parameters                    | Description                    |\n| --------------------------------------| ----------------------------- | ------------------------------ |\n| /resources/parameters                 |                               | get module params              |\n| /resources/investmint_amount          | amount, resource and length   | get potential return amount    |\n\n# GRPC\n\n| Path                                                  | Parameters                  | Description                 |\n| ------------------------------------------------------| --------------------------- | --------------------------- |\n| /cyber/resources/v1beta1/resources/params             |                             | get module params           |\n| /cyber/resources/v1beta1/resources/investmint_amount  | amount, resource and length | get potential return amount | "
  },
  {
    "path": "x/resources/spec/02_state.md",
    "content": "# State\n\n## Periodic Vesting Account (auth)\n\nA vesting account implementation that vests coins according to a custom vesting schedule.\n\n```\ntype PeriodicVestingAccount struct {\n  base_vesting_account BaseVestingAccount \n  start_time           uint64\n  vesting_periods      []Period\n}\n```\n\n## Period (auth)\n\n```\ntype Period struct {\n\tlength int64                                   \n\tamount []sdk.Coin\n}\n```\n\n## Keys\n\n- ModuleName, RouterKey: `energy`"
  },
  {
    "path": "x/resources/spec/03_state_transitions.md",
    "content": "# State Transitions\n\nThese messages (Msg) in the resources module trigger state transitions.\n\n## Investmint\n1. Check that the desirable period of lock is less than the currently available maximum period of lock\n2. Check that the spendable balance is more than or equal to the desired amount to lock\n3. Check that the desirable period of lock is more than the current minimum period of lock\n4. Initialize periodic vesting account on the first investmint\n6. Put provided neuron's basis resources (BOOT) into vesting schedule to desirable period to empty slot\n    - add vesting period and update periodic vesting account (auth module)\n7. Calculate the amount of resources to mint (VOLT/AMPERE/...)\n8. Check that calculated amount more than 1000 units (1000 milliampere or 1000 millivolt for example)\n9. Mint calculated amount of given resource to neuron and lock that resource to same lock period to the same slot\n    - mint tokens to module `resources` account (bank module)\n    - transfer from module account `resource` to neuron's account (bank module)\n    - add and save vesting period to same slot and update periodic vesting account (auth module)\n10. Check if it's first neuron's investmint operation and if so then charge personal neuron's bandwidth with 1000 bandwidth units (bandwidth module)\n11. Increase desirable bandwidth if there was investmint operation to VOLT resource (bandwidth module)\n\nNote: neuron will be initially charged only if it will be first investmint operation to VOLT resource. This removes the gap to start neuron activity as soon as possible.\n\nNote: total supply of VOLT resource is desirable bandwidth of the network.\n\n## Slots logic (simplified)\n1. Basic resource (BOOT) and desirable resource (VOLT/AMPERE/...) goes to the same vesting slot\n2. If there are empty slots and all current slots are active then add a new one as active and reorder slots\n3. If there are some expired slots then clean them and reorder currently active slots and add a new one as an active slot\n4. If there are all slots active (amount of active slots is equal to max_slots parameter) then return an error\n5. If all slots are passed then clean all of them and put new as active slot\n\nNote: active slot => unlock time at future, expired slot => unlock time in past\n\nNote: for fully understanding of slots logic do research of `addCoinsToVestingSchedule` function\n\n## Investmints calculation\n\n```\ncycle = neuron's desirable period of lock / base period for given resource\nbase = neurons's desirable amount to lock / base amount for given resource\nhalving = 2^(current block height / halving period)  \n\n=>\n\nmint and lock (cycles * base * halving) VOLT or AMPERES to given neuron \n```\n\nNote: VOLT and AMPERE as basic native computer's resources have separated base period/amount/halving parameters  that\nadjustable with governance and dynamic cybernetic feedback loops (in a future release)\n\nNote: for fully understanding of resources economy do research of `Mint` function\n\n\n\n\n"
  },
  {
    "path": "x/resources/spec/04_messages.md",
    "content": "# Messages\n\nMessages (Msg) are objects that trigger state transitions. \nMsgs are wrapped in transactions (Txs) that clients submit to the network. \nThe Cosmos SDK wraps and unwraps resources module messages from transactions.\n\n## MsgInvestmint\n\nNeuron make investmint operation and lock base resource amount to given length with return of desired advanced resource locked to same length.\n\n```go\ntype MsgInvestmint struct {\n    agent    string    // agent's address\n    amount   sdk.Coin  // amount of basic resource to invesmint \n\tresource string    // desirable resource\n\tlength   uint32    // desirable lock period in seconds\n}\n```\n\nThe message will fail under the following conditions:\n\n- Stateless\n    - if msg.Agent is not valid address\n    - if msg.Amount is invalid (not positive or wrong denom)\n    - if msg.Resource is invalid (resource not exist)\n    - if msg.Length is equal to 0\n- Stateful \n    - if Msg.Length is more than available maximum lock period\n    - if Msg.Length is less than available minimum lock period\n    - if account have less spendable balance that Msg.Amount\n    - if there are no empty or expired slots\n    - if amount of resource in return less than 1000 milli{volt,amper}"
  },
  {
    "path": "x/resources/spec/05_events.md",
    "content": "# Events\n\nThe resources module emits the following events:\n\n## Msg's\n\n### MsgInvestmint\n| Type             | Attribute Key | Attribute Value        |\n| ---------------- | ------------- | ---------------------- |\n| message          | module        | energy                 |\n| message          | action        | investmint             | \n| investmint       | agent         | {agentAddress}         |\n| investmint       | amount        | {baseResourceAmount}   |\n| investmint       | resource      | {resourceDenom}        |\n| investmint       | length        | {seconds}              |\n| investmint       | minted        | {mintedResourceAmount} |"
  },
  {
    "path": "x/resources/spec/06_params.md",
    "content": "# Parameters\n\nThe resources module contains the following parameters:\n\n| Key                         | Type           | Example                |\n| --------------------------- | -------------- | ---------------------- |\n| MaxSlots                    | uint32         | 8                      | \n| BaseHalvingPeriodVolt       | uint32         | 12000000 (blocks)      |\n| BaseHalvingPeriodAmpere     | uint32         | 12000000 (blocks)      |\n| BaseInvestmintPeriodVolt    | uint32         | 3000000  (seconds)     |\n| BaseInvestmintPeriodAmpere  | uint32         | 3000000  (seconds)     |\n| BaseInvestmintAmountVolt    | sdk.Coin       | 1000000000 BOOT        |\n| BaseInvestmintAmountAmpere  | sdk.Coin       | 1000000000 BOOT        |\n| MinInvestmintPeriodSec      | uint32         | 86400 (seconds)        |\n\n\n## Max Slots\nMaximum amount of active slots at same amount of time\n\n## Base Halving Period Volt\nPeriod of blocks to mint rate' halving for VOLT resource\n\n## Base Halving Period Ampere\nPeriod of blocks to mint rate' halving for AMPERE resource\n\n## Base Investmint Period Volt\nBase amount of basic resource (BOOT) to invesmint  to get VOLT resource\n\n## Base Investmint Period Ampere\nBase amount of basic resource (BOOT) to invesmint  to get AMPERE resource\n\n## Base Investmint Amount Volt\nBase length of lock period in seconds of basic resource (BOOT) to get VOLT resource\n\n## Base Investmint Amount Ampere\nBase length of lock period in seconds of basic resource (BOOT) to get AMPERE resource\n\n## Min Investmint Period Sec\nMinimum length of lock period for all investmint operations"
  },
  {
    "path": "x/resources/spec/07_wasm.md",
    "content": "# WASM LINE\n\nIn addition to the core CosmWasm functionality, the resources module bindings include\n\n## Messages Encoding\n- MsgInvestmint\n\n--------\n\nHack with [cw-cyber](https://github.com/cybercongress/cw-cyber) library\n"
  },
  {
    "path": "x/resources/spec/08_errors.md",
    "content": "# Errors\n\nThe resources module may return the following errors:\n\n| Type                     | Code  | Description                         |\n| ------------------------ | ------| ----------------------------------- |\n| ErrTimeLockCoins         | 2     | error time lock coins               |  \n| ErrIssueCoins            | 3     | error issue coins                   |\n| ErrMintCoins             | 4     | error mint coins                    |\n| ErrBurnCoins             | 5     | error burn coins                    |\n| ErrSendMintedCoins       | 6     | error send minted coins             |    \n| ErrNotAvailablePeriod    | 7     | not available period                |    \n| ErrInvalidAccountType    | 8     | receiver account type not supported |    \n| ErrAccountNotFound       | 9     | account not found                   |    \n| ErrResourceNotExist      | 10    | resource not exist                  |    \n| ErrFullSlots             | 11    | all slots are full                  |\n| ErrSmallReturn           | 12    | small resource's return amount      |\n| ErrInvalidBaseResource   | 13    | invalid base resource               |\n "
  },
  {
    "path": "x/resources/spec/09_cli.md",
    "content": "# CLI\n\n## Queries\n\nQuery the current resources module parameters information:\n```bash\ncyber query resources params\n```\n\nQuery potential resources return on investmint with current rates:\n```bash\ncyber query resources investmint [amount] [resource] [length]\n```\n\n## Transactions\n\nInvestmint basic resource with the return of advanced system' resource: \n```bash\ncyber tx resources investmint [amount] [resource] [length]\n```"
  },
  {
    "path": "x/resources/spec/README.md",
    "content": "# `Resources`\n\n## Abstract\n\nThe resources module allows neurons to invest into computer's resources.\n\n### Examples:\nI would like to `investmint` 1000000000 BOOT (1 GBOOT) to VOLT resource with lock for 30 DAYS (no spendable) and I will get\nnewly minted 1 VOLT to my account locked for 30 DAYS (no spendable).\n```\n(1 GBOOT | 30 DAYS | VOLT) ---investmint---> locked (1 GBOOT | 30 DAYS) + minted and locked (1 VOLT | 30 DAYS)\n```\n\nI would like to `investmint` 4000000000 BOOT (4 GBOOT) to AMPERE resource with lock for 7 DAYS (no spendable) and I will get\nnewly minted 1 AMPERE to my account locked for 7 DAYS (no spendable).\n```\n(4.2 GBOOT | 7 DAYS | AMPERE) ---investmint---> locked (4.2 GBOOT | 7 DAYS) + minted and locked (1 AMPERE | 7 DAYS)\n```\n\n## Contents\n\n1. **[Concepts](00_concepts.md)**\n2. **[API](01_api.md)**\n3. **[State](02_state.md)**\n4. **[State Transitions](03_state_transitions.md)**\n5. **[Messages](04_messages.md)**\n6. **[Events](05_events.md)**\n7. **[Parameters](06_params.md)**\n8. **[WASM](07_wasm.md)**\n9. **[Errors](08_errors.md)**\n10. **[CLI](09_cli.md)**"
  },
  {
    "path": "x/resources/types/account.go",
    "content": "package types\n\nimport (\n\tvestingtypes \"github.com/cosmos/cosmos-sdk/x/auth/vesting/types\"\n)\n\n// GetTotalVestingPeriodLength returns the summed length of all vesting periods\nfunc GetTotalVestingPeriodLength(periods vestingtypes.Periods) int64 {\n\tlength := int64(0)\n\tfor _, period := range periods {\n\t\tlength += period.Length\n\t}\n\treturn length\n}\n"
  },
  {
    "path": "x/resources/types/codec.go",
    "content": "package types\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\t\"github.com/cosmos/cosmos-sdk/codec/legacy\"\n\t\"github.com/cosmos/cosmos-sdk/codec/types\"\n\tcryptocodec \"github.com/cosmos/cosmos-sdk/crypto/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/msgservice\"\n\tauthzcodec \"github.com/cosmos/cosmos-sdk/x/authz/codec\"\n\tgovcodec \"github.com/cosmos/cosmos-sdk/x/gov/codec\"\n)\n\nfunc RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {\n\tlegacy.RegisterAminoMsg(cdc, &MsgInvestmint{}, \"cyber/resources/MsgInvestmint\")\n\n\tcdc.RegisterConcrete(Params{}, \"cyber/resources/Params\", nil)\n}\n\nfunc RegisterInterfaces(registry types.InterfaceRegistry) {\n\tregistry.RegisterImplementations((*sdk.Msg)(nil),\n\t\t&MsgInvestmint{},\n\t\t&MsgUpdateParams{},\n\t)\n\n\tmsgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc)\n}\n\nvar (\n\tamino     = codec.NewLegacyAmino()\n\tModuleCdc = codec.NewAminoCodec(amino)\n)\n\nfunc init() {\n\tRegisterLegacyAminoCodec(amino)\n\tcryptocodec.RegisterCrypto(amino)\n\tsdk.RegisterLegacyAminoCodec(amino)\n\n\tRegisterLegacyAminoCodec(authzcodec.Amino)\n\tRegisterLegacyAminoCodec(govcodec.Amino)\n}\n"
  },
  {
    "path": "x/resources/types/errors.go",
    "content": "package types\n\nimport (\n\terrorsmod \"cosmossdk.io/errors\"\n)\n\nvar (\n\tErrTimeLockCoins       = errorsmod.Register(ModuleName, 2, \"error timelock coins\")\n\tErrIssueCoins          = errorsmod.Register(ModuleName, 3, \"error issue coins\")\n\tErrMintCoins           = errorsmod.Register(ModuleName, 4, \"error mint coins\")\n\tErrBurnCoins           = errorsmod.Register(ModuleName, 5, \"error burn coins\")\n\tErrSendMintedCoins     = errorsmod.Register(ModuleName, 6, \"error send minted coins\")\n\tErrNotAvailablePeriod  = errorsmod.Register(ModuleName, 7, \"period not available\")\n\tErrInvalidAccountType  = errorsmod.Register(ModuleName, 8, \"receiver account type not supported\")\n\tErrAccountNotFound     = errorsmod.Register(ModuleName, 9, \"account not found\")\n\tErrResourceNotExist    = errorsmod.Register(ModuleName, 10, \"resource does not exist\")\n\tErrFullSlots           = errorsmod.Register(ModuleName, 11, \"all slots are full\")\n\tErrSmallReturn         = errorsmod.Register(ModuleName, 12, \"insufficient resources return amount\")\n\tErrInvalidBaseResource = errorsmod.Register(ModuleName, 13, \"invalid base resource\")\n)\n"
  },
  {
    "path": "x/resources/types/events.go",
    "content": "package types\n\nconst (\n\tEventTypeInvestmint = \"investmint\"\n\n\tAttributeKeyNeuron   = \"neuron\"\n\tAttributeKeyAmount   = \"amount\"\n\tAttributeKeyResource = \"resource\"\n\tAttributeKeyLength   = \"length\"\n\tAttributeKeyMinted   = \"minted\"\n\n\tAttributeValueCategory = ModuleName\n)\n"
  },
  {
    "path": "x/resources/types/expected_keepers.go",
    "content": "package types\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tauthtypes \"github.com/cosmos/cosmos-sdk/x/auth/types\"\n)\n\ntype AccountKeeper interface {\n\tGetAccount(ctx sdk.Context, addr sdk.AccAddress) authtypes.AccountI\n\tSetAccount(ctx sdk.Context, acc authtypes.AccountI)\n\tGetModuleAddress(name string) sdk.AccAddress\n}\n\ntype BankKeeper interface {\n\tSendCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error\n\tSendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error\n\tMintCoins(ctx sdk.Context, name string, amt sdk.Coins) error\n\tSpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins\n\tBurnCoins(ctx sdk.Context, name string, amt sdk.Coins) error\n\tGetSupply(ctx sdk.Context, denom string) sdk.Coin\n}\n"
  },
  {
    "path": "x/resources/types/genesis.go",
    "content": "package types\n\nfunc NewGenesisState(params Params) *GenesisState {\n\treturn &GenesisState{\n\t\tParams: params,\n\t}\n}\n\nfunc DefaultGenesisState() *GenesisState {\n\treturn &GenesisState{\n\t\tParams: DefaultParams(),\n\t}\n}\n\nfunc ValidateGenesis(state GenesisState) error {\n\treturn state.Params.Validate()\n}\n"
  },
  {
    "path": "x/resources/types/genesis.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/resources/v1beta1/genesis.proto\n\npackage types\n\nimport (\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype GenesisState struct {\n\tParams Params `protobuf:\"bytes,1,opt,name=params,proto3\" json:\"params\"`\n}\n\nfunc (m *GenesisState) Reset()         { *m = GenesisState{} }\nfunc (m *GenesisState) String() string { return proto.CompactTextString(m) }\nfunc (*GenesisState) ProtoMessage()    {}\nfunc (*GenesisState) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_72c3da48739423c6, []int{0}\n}\n\nfunc (m *GenesisState) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_GenesisState.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *GenesisState) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GenesisState.Merge(m, src)\n}\n\nfunc (m *GenesisState) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *GenesisState) XXX_DiscardUnknown() {\n\txxx_messageInfo_GenesisState.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GenesisState proto.InternalMessageInfo\n\nfunc (m *GenesisState) GetParams() Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn Params{}\n}\n\nfunc init() {\n\tproto.RegisterType((*GenesisState)(nil), \"cyber.resources.v1beta1.GenesisState\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"cyber/resources/v1beta1/genesis.proto\", fileDescriptor_72c3da48739423c6)\n}\n\nvar fileDescriptor_72c3da48739423c6 = []byte{\n\t// 211 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4d, 0xae, 0x4c, 0x4a,\n\t0x2d, 0xd2, 0x2f, 0x4a, 0x2d, 0xce, 0x2f, 0x2d, 0x4a, 0x4e, 0x2d, 0xd6, 0x2f, 0x33, 0x4c, 0x4a,\n\t0x2d, 0x49, 0x34, 0xd4, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f,\n\t0xc9, 0x17, 0x12, 0x07, 0x2b, 0xd3, 0x83, 0x2b, 0xd3, 0x83, 0x2a, 0x93, 0x12, 0x49, 0xcf, 0x4f,\n\t0xcf, 0x07, 0xab, 0xd1, 0x07, 0xb1, 0x20, 0xca, 0xa5, 0x94, 0x71, 0x99, 0x5a, 0x52, 0x59, 0x90,\n\t0x0a, 0x35, 0x53, 0xc9, 0x97, 0x8b, 0xc7, 0x1d, 0x62, 0x49, 0x70, 0x49, 0x62, 0x49, 0xaa, 0x90,\n\t0x2d, 0x17, 0x5b, 0x41, 0x62, 0x51, 0x62, 0x6e, 0xb1, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0xb7, 0x91,\n\t0xbc, 0x1e, 0x0e, 0x4b, 0xf5, 0x02, 0xc0, 0xca, 0x9c, 0x58, 0x4e, 0xdc, 0x93, 0x67, 0x08, 0x82,\n\t0x6a, 0x72, 0xf2, 0x3d, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18,\n\t0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xe3, 0xf4,\n\t0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0x7d, 0xb0, 0x91, 0xc9, 0xf9, 0x79, 0xe9,\n\t0x45, 0xa9, 0xc5, 0xc5, 0xfa, 0xe9, 0xf9, 0xba, 0x10, 0x97, 0x56, 0x20, 0xb9, 0x15, 0xec, 0xc6,\n\t0x24, 0x36, 0xb0, 0x23, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xa8, 0xf5, 0x8f, 0xfc, 0x21,\n\t0x01, 0x00, 0x00,\n}\n\nfunc (m *GenesisState) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *GenesisState) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintGenesis(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintGenesis(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovGenesis(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *GenesisState) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Params.Size()\n\tn += 1 + l + sovGenesis(uint64(l))\n\treturn n\n}\n\nfunc sovGenesis(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozGenesis(x uint64) (n int) {\n\treturn sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *GenesisState) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: GenesisState: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: GenesisState: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipGenesis(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipGenesis(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupGenesis\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthGenesis\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthGenesis        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowGenesis          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupGenesis = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/resources/types/keys.go",
    "content": "package types\n\nconst (\n\tModuleName = \"resources\"\n\tStoreKey   = ModuleName\n\tRouterKey  = ModuleName\n\n\tResourcesName = \"resources\"\n)\n\nvar ParamsKey = []byte{0x00}\n"
  },
  {
    "path": "x/resources/types/msgs.go",
    "content": "package types\n\nimport (\n\terrorsmod \"cosmossdk.io/errors\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tsdkerrors \"github.com/cosmos/cosmos-sdk/types/errors\"\n\n\tctypes \"github.com/cybercongress/go-cyber/v7/types\"\n)\n\nconst (\n\tTypeMsgInvestmint = \"investmint\"\n)\n\nvar (\n\t_ sdk.Msg = &MsgInvestmint{}\n\t_ sdk.Msg = &MsgUpdateParams{}\n)\n\nfunc NewMsgInvestmint(\n\tneuron sdk.AccAddress,\n\tamount sdk.Coin,\n\tresource string,\n\tlength uint64,\n) *MsgInvestmint {\n\treturn &MsgInvestmint{\n\t\tNeuron:   neuron.String(),\n\t\tAmount:   amount,\n\t\tResource: resource,\n\t\tLength:   length,\n\t}\n}\n\nfunc (msg MsgInvestmint) Route() string { return RouterKey }\n\nfunc (msg MsgInvestmint) Type() string { return TypeMsgInvestmint }\n\nfunc (msg MsgInvestmint) ValidateBasic() error {\n\t_, err := sdk.AccAddressFromBech32(msg.Neuron)\n\tif err != nil {\n\t\treturn errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, \"invalid neuron address: %s\", err)\n\t}\n\n\tif !msg.Amount.IsValid() || !msg.Amount.IsPositive() {\n\t\treturn errorsmod.Wrap(sdkerrors.ErrInvalidCoins, msg.Amount.String())\n\t}\n\n\tif msg.Resource != ctypes.VOLT && msg.Resource != ctypes.AMPERE {\n\t\treturn errorsmod.Wrap(ErrResourceNotExist, msg.Resource)\n\t}\n\n\tif msg.Length == 0 {\n\t\treturn ErrNotAvailablePeriod\n\t}\n\n\treturn nil\n}\n\nfunc (msg MsgInvestmint) GetSignBytes() []byte {\n\tbz := ModuleCdc.MustMarshalJSON(&msg)\n\treturn sdk.MustSortJSON(bz)\n}\n\nfunc (msg MsgInvestmint) GetSigners() []sdk.AccAddress {\n\taddr, err := sdk.AccAddressFromBech32(msg.Neuron)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn []sdk.AccAddress{addr}\n}\n\n// GetSignBytes implements the LegacyMsg interface.\nfunc (m MsgUpdateParams) GetSignBytes() []byte {\n\treturn sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))\n}\n\n// GetSigners returns the expected signers for a MsgUpdateParams message.\nfunc (m *MsgUpdateParams) GetSigners() []sdk.AccAddress {\n\taddr, _ := sdk.AccAddressFromBech32(m.Authority)\n\treturn []sdk.AccAddress{addr}\n}\n\n// ValidateBasic does a sanity check on the provided data.\nfunc (m *MsgUpdateParams) ValidateBasic() error {\n\tif _, err := sdk.AccAddressFromBech32(m.Authority); err != nil {\n\t\treturn errorsmod.Wrap(err, \"invalid authority address\")\n\t}\n\n\treturn m.Params.Validate()\n}\n"
  },
  {
    "path": "x/resources/types/params.go",
    "content": "package types\n\nimport (\n\t\"fmt\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\tctypes \"github.com/cybercongress/go-cyber/v7/types\"\n)\n\nconst (\n\tDefaultMaxSlots               = uint32(8)\n\tDefaultHalvingPeriodVolt      = uint32(9000000)\n\tDefaultHalvingPeriodAmpere    = uint32(9000000)\n\tDefaultInvestmintPeriodVolt   = uint32(2592000)\n\tDefaultInvestmintPeriodAmpere = uint32(2592000)\n\tDefaultMinInvestmintPeriod    = uint32(86400)\n)\n\nfunc DefaultParams() Params {\n\treturn Params{\n\t\tMaxSlots:                   DefaultMaxSlots,\n\t\tHalvingPeriodVoltBlocks:    DefaultHalvingPeriodVolt,\n\t\tHalvingPeriodAmpereBlocks:  DefaultHalvingPeriodAmpere,\n\t\tBaseInvestmintPeriodVolt:   DefaultInvestmintPeriodVolt,\n\t\tBaseInvestmintPeriodAmpere: DefaultInvestmintPeriodAmpere,\n\t\tBaseInvestmintAmountVolt:   ctypes.NewSCybCoin(ctypes.Mega * 1000),\n\t\tBaseInvestmintAmountAmpere: ctypes.NewSCybCoin(ctypes.Mega * 100),\n\t\tMinInvestmintPeriod:        DefaultMinInvestmintPeriod,\n\t}\n}\n\nfunc (p Params) Validate() error {\n\tif err := validateMaxSlots(p.MaxSlots); err != nil {\n\t\treturn err\n\t}\n\tif err := validateHalvingPeriodVoltBlocks(p.HalvingPeriodVoltBlocks); err != nil {\n\t\treturn err\n\t}\n\tif err := validateHalvingPeriodAmpereBlocks(p.HalvingPeriodAmpereBlocks); err != nil {\n\t\treturn err\n\t}\n\tif err := validateBaseInvestmintPeriodVolt(p.BaseInvestmintPeriodVolt); err != nil {\n\t\treturn err\n\t}\n\tif err := validateBaseInvestmintPeriodAmpere(p.BaseInvestmintPeriodAmpere); err != nil {\n\t\treturn err\n\t}\n\tif err := validateBaseInvestmintAmountVolt(p.BaseInvestmintAmountVolt); err != nil {\n\t\treturn err\n\t}\n\tif err := validateBaseInvestmintAmountAmpere(p.BaseInvestmintAmountAmpere); err != nil {\n\t\treturn err\n\t}\n\tif err := validateMinInvestmintPeriod(p.MinInvestmintPeriod); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc validateMaxSlots(i interface{}) error {\n\tv, ok := i.(uint32)\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v == 0 {\n\t\treturn fmt.Errorf(\"max entries must be positive: %d\", v)\n\t}\n\n\tif v > 16 {\n\t\treturn fmt.Errorf(\"max resources slots must be less or equal to 16: %d\", v)\n\t}\n\n\treturn nil\n}\n\nfunc validateHalvingPeriodVoltBlocks(i interface{}) error {\n\tv, ok := i.(uint32)\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v < 6000000 {\n\t\treturn fmt.Errorf(\"base halving period for Volt must be more than 6000000 blocks: %d\", v)\n\t}\n\n\treturn nil\n}\n\nfunc validateHalvingPeriodAmpereBlocks(i interface{}) error {\n\tv, ok := i.(uint32)\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v < 6000000 {\n\t\treturn fmt.Errorf(\"base halving period for Ampere must be more than 6000000 blocks: %d\", v)\n\t}\n\n\treturn nil\n}\n\nfunc validateBaseInvestmintPeriodVolt(i interface{}) error {\n\tv, ok := i.(uint32)\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v < 604800 {\n\t\treturn fmt.Errorf(\"base investmint period for Volt must be more than 604800 seconds: %d\", v)\n\t}\n\n\treturn nil\n}\n\nfunc validateBaseInvestmintPeriodAmpere(i interface{}) error {\n\tv, ok := i.(uint32)\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v < 604800 {\n\t\treturn fmt.Errorf(\"base investmint period for Ampere must be more than 604800 seconds: %d\", v)\n\t}\n\n\treturn nil\n}\n\nfunc validateBaseInvestmintAmountVolt(i interface{}) error {\n\tv, ok := i.(sdk.Coin)\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v.IsLT(ctypes.NewSCybCoin(ctypes.Mega * 10)) {\n\t\treturn fmt.Errorf(\"base investmint amount for Volt must be more than 10000000: %d\", v.Amount.Int64())\n\t}\n\n\treturn nil\n}\n\nfunc validateBaseInvestmintAmountAmpere(i interface{}) error {\n\tv, ok := i.(sdk.Coin)\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v.IsLT(ctypes.NewSCybCoin(ctypes.Mega * 10)) {\n\t\treturn fmt.Errorf(\"base investmint amount for Ampere must be more than 10000000: %d\", v.Amount.Int64())\n\t}\n\n\treturn nil\n}\n\nfunc validateMinInvestmintPeriod(i interface{}) error {\n\tv, ok := i.(uint32)\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v < 86400 {\n\t\treturn fmt.Errorf(\"min investmint period must be more than 86400 seconds: %d\", v)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/resources/types/params_legacy.go",
    "content": "package types\n\nimport paramstypes \"github.com/cosmos/cosmos-sdk/x/params/types\"\n\nvar (\n\tKeyMaxSlots                   = []byte(\"MaxSlots\")\n\tKeyHalvingPeriodVoltBlocks    = []byte(\"HalvingPeriodVoltBlocks\")\n\tKeyHalvingPeriodAmpereBlocks  = []byte(\"HalvingPeriodAmpereBlocks\")\n\tKeyBaseInvestmintPeriodVolt   = []byte(\"BaseInvestmintPeriodVolt\")\n\tKeyBaseInvestmintPeriodAmpere = []byte(\"BaseInvestmintPeriodAmpere\")\n\tKeyBaseInvestmintAmountVolt   = []byte(\"BaseInvestmintAmountVolt\")\n\tKeyBaseInvestmintAmountAmpere = []byte(\"BaseInvestmintAmountAmpere\")\n\tKeyMinInvestmintPeriod        = []byte(\"MinInvestmintPeriod\")\n)\n\n// Deprecated: Type declaration for parameters\nfunc ParamKeyTable() paramstypes.KeyTable {\n\treturn paramstypes.NewKeyTable().RegisterParamSet(&Params{})\n}\n\nfunc (p *Params) ParamSetPairs() paramstypes.ParamSetPairs {\n\treturn paramstypes.ParamSetPairs{\n\t\tparamstypes.NewParamSetPair(KeyMaxSlots, &p.MaxSlots, validateMaxSlots),\n\t\tparamstypes.NewParamSetPair(KeyHalvingPeriodVoltBlocks, &p.HalvingPeriodVoltBlocks, validateHalvingPeriodVoltBlocks),\n\t\tparamstypes.NewParamSetPair(KeyHalvingPeriodAmpereBlocks, &p.HalvingPeriodAmpereBlocks, validateHalvingPeriodAmpereBlocks),\n\t\tparamstypes.NewParamSetPair(KeyBaseInvestmintPeriodVolt, &p.BaseInvestmintPeriodVolt, validateBaseInvestmintPeriodVolt),\n\t\tparamstypes.NewParamSetPair(KeyBaseInvestmintPeriodAmpere, &p.BaseInvestmintPeriodAmpere, validateBaseInvestmintPeriodAmpere),\n\t\tparamstypes.NewParamSetPair(KeyBaseInvestmintAmountVolt, &p.BaseInvestmintAmountVolt, validateBaseInvestmintAmountVolt),\n\t\tparamstypes.NewParamSetPair(KeyBaseInvestmintAmountAmpere, &p.BaseInvestmintAmountAmpere, validateBaseInvestmintAmountAmpere),\n\t\tparamstypes.NewParamSetPair(KeyMinInvestmintPeriod, &p.MinInvestmintPeriod, validateMinInvestmintPeriod),\n\t}\n}\n"
  },
  {
    "path": "x/resources/types/period.go",
    "content": "package types\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tvestingtypes \"github.com/cosmos/cosmos-sdk/x/auth/vesting/types\"\n)\n\nfunc NewPeriod(amount sdk.Coins, length int64) vestingtypes.Period {\n\treturn vestingtypes.Period{Amount: amount, Length: length}\n}\n"
  },
  {
    "path": "x/resources/types/query.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/resources/v1beta1/query.proto\n\npackage types\n\nimport (\n\tcontext \"context\"\n\tfmt \"fmt\"\n\ttypes \"github.com/cosmos/cosmos-sdk/types\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tgrpc1 \"github.com/cosmos/gogoproto/grpc\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype QueryParamsRequest struct {\n}\n\nfunc (m *QueryParamsRequest) Reset()         { *m = QueryParamsRequest{} }\nfunc (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryParamsRequest) ProtoMessage()    {}\nfunc (*QueryParamsRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4135536742b8fe64, []int{0}\n}\nfunc (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryParamsRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryParamsRequest.Merge(m, src)\n}\nfunc (m *QueryParamsRequest) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryParamsRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryParamsRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo\n\ntype QueryParamsResponse struct {\n\tParams Params `protobuf:\"bytes,1,opt,name=params,proto3\" json:\"params\"`\n}\n\nfunc (m *QueryParamsResponse) Reset()         { *m = QueryParamsResponse{} }\nfunc (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryParamsResponse) ProtoMessage()    {}\nfunc (*QueryParamsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4135536742b8fe64, []int{1}\n}\nfunc (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryParamsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryParamsResponse.Merge(m, src)\n}\nfunc (m *QueryParamsResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryParamsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryParamsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo\n\nfunc (m *QueryParamsResponse) GetParams() Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn Params{}\n}\n\ntype QueryInvestmintRequest struct {\n\tAmount   types.Coin `protobuf:\"bytes,1,opt,name=amount,proto3\" json:\"amount\"`\n\tResource string     `protobuf:\"bytes,2,opt,name=resource,proto3\" json:\"resource,omitempty\"`\n\tLength   uint64     `protobuf:\"varint,3,opt,name=length,proto3\" json:\"length,omitempty\"`\n}\n\nfunc (m *QueryInvestmintRequest) Reset()         { *m = QueryInvestmintRequest{} }\nfunc (m *QueryInvestmintRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryInvestmintRequest) ProtoMessage()    {}\nfunc (*QueryInvestmintRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4135536742b8fe64, []int{2}\n}\nfunc (m *QueryInvestmintRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryInvestmintRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryInvestmintRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryInvestmintRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryInvestmintRequest.Merge(m, src)\n}\nfunc (m *QueryInvestmintRequest) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryInvestmintRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryInvestmintRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryInvestmintRequest proto.InternalMessageInfo\n\nfunc (m *QueryInvestmintRequest) GetAmount() types.Coin {\n\tif m != nil {\n\t\treturn m.Amount\n\t}\n\treturn types.Coin{}\n}\n\nfunc (m *QueryInvestmintRequest) GetResource() string {\n\tif m != nil {\n\t\treturn m.Resource\n\t}\n\treturn \"\"\n}\n\nfunc (m *QueryInvestmintRequest) GetLength() uint64 {\n\tif m != nil {\n\t\treturn m.Length\n\t}\n\treturn 0\n}\n\ntype QueryInvestmintResponse struct {\n\tAmount types.Coin `protobuf:\"bytes,1,opt,name=amount,proto3\" json:\"amount\"`\n}\n\nfunc (m *QueryInvestmintResponse) Reset()         { *m = QueryInvestmintResponse{} }\nfunc (m *QueryInvestmintResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryInvestmintResponse) ProtoMessage()    {}\nfunc (*QueryInvestmintResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4135536742b8fe64, []int{3}\n}\nfunc (m *QueryInvestmintResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryInvestmintResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryInvestmintResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryInvestmintResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryInvestmintResponse.Merge(m, src)\n}\nfunc (m *QueryInvestmintResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryInvestmintResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryInvestmintResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryInvestmintResponse proto.InternalMessageInfo\n\nfunc (m *QueryInvestmintResponse) GetAmount() types.Coin {\n\tif m != nil {\n\t\treturn m.Amount\n\t}\n\treturn types.Coin{}\n}\n\ntype QueryAdjustedPriceRequest struct {\n\tBase     types.Coin `protobuf:\"bytes,1,opt,name=base,proto3\" json:\"base\"`\n\tResource string     `protobuf:\"bytes,2,opt,name=resource,proto3\" json:\"resource,omitempty\"`\n}\n\nfunc (m *QueryAdjustedPriceRequest) Reset()         { *m = QueryAdjustedPriceRequest{} }\nfunc (m *QueryAdjustedPriceRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryAdjustedPriceRequest) ProtoMessage()    {}\nfunc (*QueryAdjustedPriceRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4135536742b8fe64, []int{4}\n}\nfunc (m *QueryAdjustedPriceRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryAdjustedPriceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryAdjustedPriceRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryAdjustedPriceRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryAdjustedPriceRequest.Merge(m, src)\n}\nfunc (m *QueryAdjustedPriceRequest) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryAdjustedPriceRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryAdjustedPriceRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryAdjustedPriceRequest proto.InternalMessageInfo\n\nfunc (m *QueryAdjustedPriceRequest) GetBase() types.Coin {\n\tif m != nil {\n\t\treturn m.Base\n\t}\n\treturn types.Coin{}\n}\n\nfunc (m *QueryAdjustedPriceRequest) GetResource() string {\n\tif m != nil {\n\t\treturn m.Resource\n\t}\n\treturn \"\"\n}\n\ntype QueryAdjustedPriceResponse struct {\n\tAdjusted types.Coin `protobuf:\"bytes,1,opt,name=adjusted,proto3\" json:\"adjusted\"`\n}\n\nfunc (m *QueryAdjustedPriceResponse) Reset()         { *m = QueryAdjustedPriceResponse{} }\nfunc (m *QueryAdjustedPriceResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryAdjustedPriceResponse) ProtoMessage()    {}\nfunc (*QueryAdjustedPriceResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_4135536742b8fe64, []int{5}\n}\nfunc (m *QueryAdjustedPriceResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryAdjustedPriceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryAdjustedPriceResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryAdjustedPriceResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryAdjustedPriceResponse.Merge(m, src)\n}\nfunc (m *QueryAdjustedPriceResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryAdjustedPriceResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryAdjustedPriceResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryAdjustedPriceResponse proto.InternalMessageInfo\n\nfunc (m *QueryAdjustedPriceResponse) GetAdjusted() types.Coin {\n\tif m != nil {\n\t\treturn m.Adjusted\n\t}\n\treturn types.Coin{}\n}\n\nfunc init() {\n\tproto.RegisterType((*QueryParamsRequest)(nil), \"cyber.resources.v1beta1.QueryParamsRequest\")\n\tproto.RegisterType((*QueryParamsResponse)(nil), \"cyber.resources.v1beta1.QueryParamsResponse\")\n\tproto.RegisterType((*QueryInvestmintRequest)(nil), \"cyber.resources.v1beta1.QueryInvestmintRequest\")\n\tproto.RegisterType((*QueryInvestmintResponse)(nil), \"cyber.resources.v1beta1.QueryInvestmintResponse\")\n\tproto.RegisterType((*QueryAdjustedPriceRequest)(nil), \"cyber.resources.v1beta1.QueryAdjustedPriceRequest\")\n\tproto.RegisterType((*QueryAdjustedPriceResponse)(nil), \"cyber.resources.v1beta1.QueryAdjustedPriceResponse\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"cyber/resources/v1beta1/query.proto\", fileDescriptor_4135536742b8fe64)\n}\n\nvar fileDescriptor_4135536742b8fe64 = []byte{\n\t// 511 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0x41, 0x6b, 0xd4, 0x40,\n\t0x14, 0xc7, 0x77, 0xda, 0x35, 0xd4, 0x11, 0x2f, 0x63, 0x69, 0xb7, 0x41, 0xd2, 0x25, 0x5e, 0x56,\n\t0x6a, 0x33, 0xee, 0x06, 0x11, 0x11, 0x0f, 0xd6, 0x93, 0x07, 0xa1, 0x06, 0x2f, 0x7a, 0x91, 0x24,\n\t0x1d, 0xd2, 0xc8, 0x66, 0x5e, 0x9a, 0x99, 0x14, 0xf7, 0x2a, 0x78, 0x17, 0x04, 0x3f, 0x82, 0x5f,\n\t0xc0, 0x2f, 0xd1, 0x63, 0xc1, 0x8b, 0x27, 0x91, 0x5d, 0xbf, 0x87, 0x92, 0x99, 0x49, 0xd6, 0xb2,\n\t0xdd, 0x25, 0xf6, 0x96, 0xcc, 0xfc, 0xdf, 0xff, 0xff, 0x7b, 0xbc, 0xc7, 0xe0, 0x3b, 0xf1, 0x24,\n\t0x62, 0x05, 0x2d, 0x98, 0x80, 0xb2, 0x88, 0x99, 0xa0, 0xa7, 0xc3, 0x88, 0xc9, 0x70, 0x48, 0x4f,\n\t0x4a, 0x56, 0x4c, 0xbc, 0xbc, 0x00, 0x09, 0x64, 0x5b, 0x89, 0xbc, 0x46, 0xe4, 0x19, 0x91, 0xbd,\n\t0x99, 0x40, 0x02, 0x4a, 0x43, 0xab, 0x2f, 0x2d, 0xb7, 0x6f, 0x27, 0x00, 0xc9, 0x98, 0xd1, 0x30,\n\t0x4f, 0x69, 0xc8, 0x39, 0xc8, 0x50, 0xa6, 0xc0, 0x85, 0xb9, 0x5d, 0x9a, 0x28, 0x27, 0x39, 0xab,\n\t0x45, 0x4e, 0x0c, 0x22, 0x03, 0x41, 0xa3, 0x50, 0xb0, 0x46, 0x10, 0x43, 0xca, 0xf5, 0xbd, 0xbb,\n\t0x89, 0xc9, 0xcb, 0x0a, 0xf0, 0x30, 0x2c, 0xc2, 0x4c, 0x04, 0xec, 0xa4, 0x64, 0x42, 0xba, 0xaf,\n\t0xf0, 0xad, 0x0b, 0xa7, 0x22, 0x07, 0x2e, 0x18, 0x79, 0x82, 0xad, 0x5c, 0x9d, 0xf4, 0x50, 0x1f,\n\t0x0d, 0x6e, 0x8c, 0x76, 0xbd, 0x25, 0xfd, 0x78, 0xba, 0xf0, 0xa0, 0x7b, 0xf6, 0x73, 0xb7, 0x13,\n\t0x98, 0x22, 0xf7, 0x23, 0xc2, 0x5b, 0xca, 0xf6, 0x39, 0x3f, 0x65, 0x42, 0x66, 0x29, 0x97, 0x26,\n\t0x90, 0x3c, 0xc4, 0x56, 0x98, 0x41, 0xc9, 0xa5, 0x71, 0xde, 0xf1, 0x34, 0xb7, 0x57, 0x71, 0x37,\n\t0xae, 0xcf, 0x20, 0xe5, 0xb5, 0xa7, 0x96, 0x13, 0x1b, 0x6f, 0xd4, 0xe9, 0xbd, 0xb5, 0x3e, 0x1a,\n\t0x5c, 0x0f, 0x9a, 0x7f, 0xb2, 0x85, 0xad, 0x31, 0xe3, 0x89, 0x3c, 0xee, 0xad, 0xf7, 0xd1, 0xa0,\n\t0x1b, 0x98, 0x3f, 0x37, 0xc0, 0xdb, 0x0b, 0x18, 0xa6, 0xc3, 0xab, 0x72, 0xb8, 0x63, 0xbc, 0xa3,\n\t0x3c, 0x9f, 0x1e, 0xbd, 0x2b, 0x85, 0x64, 0x47, 0x87, 0x45, 0x1a, 0xb3, 0xba, 0x3b, 0x1f, 0x77,\n\t0xab, 0xfa, 0xb6, 0x9e, 0x4a, 0xbc, 0xaa, 0x33, 0xf7, 0x35, 0xb6, 0x2f, 0x4b, 0x33, 0x4d, 0x3c,\n\t0xc6, 0x1b, 0xa1, 0xb9, 0x68, 0x1b, 0xd9, 0x14, 0x8c, 0xfe, 0xac, 0xe3, 0x6b, 0xca, 0x9b, 0x7c,\n\t0x41, 0xd8, 0xd2, 0x73, 0x24, 0x7b, 0x4b, 0x07, 0xbd, 0xb8, 0x3c, 0xf6, 0xbd, 0x76, 0x62, 0x0d,\n\t0xeb, 0x0e, 0x3f, 0x7c, 0xff, 0xfd, 0x79, 0x6d, 0x8f, 0xdc, 0xa5, 0xcb, 0xd6, 0x79, 0x7e, 0xa2,\n\t0xf7, 0x88, 0x7c, 0x45, 0x18, 0xcf, 0x67, 0x47, 0xe8, 0xea, 0xbc, 0x85, 0x65, 0xb3, 0xef, 0xb7,\n\t0x2f, 0x30, 0x90, 0x0f, 0x14, 0x24, 0x25, 0xfb, 0x2d, 0x20, 0xd3, 0x39, 0xd9, 0x37, 0x84, 0x6f,\n\t0x5e, 0x18, 0x11, 0x19, 0xad, 0x8e, 0xbe, 0x6c, 0x7b, 0x6c, 0xff, 0xbf, 0x6a, 0x0c, 0xf1, 0x23,\n\t0x45, 0xec, 0x93, 0x61, 0x0b, 0xe2, 0x7a, 0xf6, 0x6f, 0xf3, 0xca, 0xe2, 0xe0, 0xc5, 0xd9, 0xd4,\n\t0x41, 0xe7, 0x53, 0x07, 0xfd, 0x9a, 0x3a, 0xe8, 0xd3, 0xcc, 0xe9, 0x9c, 0xcf, 0x9c, 0xce, 0x8f,\n\t0x99, 0xd3, 0x79, 0xe3, 0x27, 0xa9, 0x3c, 0x2e, 0x23, 0x2f, 0x86, 0x4c, 0xdb, 0xc6, 0xc0, 0x93,\n\t0x82, 0x09, 0x41, 0x13, 0xd8, 0xd7, 0x39, 0xef, 0xff, 0xf1, 0x55, 0xef, 0x50, 0x64, 0xa9, 0x87,\n\t0xc6, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x41, 0xf7, 0xc8, 0xa5, 0x21, 0x05, 0x00, 0x00,\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ context.Context\nvar _ grpc.ClientConn\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// QueryClient is the client API for Query service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype QueryClient interface {\n\tParams(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error)\n\tInvestmint(ctx context.Context, in *QueryInvestmintRequest, opts ...grpc.CallOption) (*QueryInvestmintResponse, error)\n\tAdjustedPrice(ctx context.Context, in *QueryAdjustedPriceRequest, opts ...grpc.CallOption) (*QueryAdjustedPriceResponse, error)\n}\n\ntype queryClient struct {\n\tcc grpc1.ClientConn\n}\n\nfunc NewQueryClient(cc grpc1.ClientConn) QueryClient {\n\treturn &queryClient{cc}\n}\n\nfunc (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) {\n\tout := new(QueryParamsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.resources.v1beta1.Query/Params\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) Investmint(ctx context.Context, in *QueryInvestmintRequest, opts ...grpc.CallOption) (*QueryInvestmintResponse, error) {\n\tout := new(QueryInvestmintResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.resources.v1beta1.Query/Investmint\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) AdjustedPrice(ctx context.Context, in *QueryAdjustedPriceRequest, opts ...grpc.CallOption) (*QueryAdjustedPriceResponse, error) {\n\tout := new(QueryAdjustedPriceResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.resources.v1beta1.Query/AdjustedPrice\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// QueryServer is the server API for Query service.\ntype QueryServer interface {\n\tParams(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error)\n\tInvestmint(context.Context, *QueryInvestmintRequest) (*QueryInvestmintResponse, error)\n\tAdjustedPrice(context.Context, *QueryAdjustedPriceRequest) (*QueryAdjustedPriceResponse, error)\n}\n\n// UnimplementedQueryServer can be embedded to have forward compatible implementations.\ntype UnimplementedQueryServer struct {\n}\n\nfunc (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Params not implemented\")\n}\nfunc (*UnimplementedQueryServer) Investmint(ctx context.Context, req *QueryInvestmintRequest) (*QueryInvestmintResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Investmint not implemented\")\n}\nfunc (*UnimplementedQueryServer) AdjustedPrice(ctx context.Context, req *QueryAdjustedPriceRequest) (*QueryAdjustedPriceResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method AdjustedPrice not implemented\")\n}\n\nfunc RegisterQueryServer(s grpc1.Server, srv QueryServer) {\n\ts.RegisterService(&_Query_serviceDesc, srv)\n}\n\nfunc _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryParamsRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).Params(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.resources.v1beta1.Query/Params\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_Investmint_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryInvestmintRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).Investmint(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.resources.v1beta1.Query/Investmint\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).Investmint(ctx, req.(*QueryInvestmintRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_AdjustedPrice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryAdjustedPriceRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).AdjustedPrice(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.resources.v1beta1.Query/AdjustedPrice\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).AdjustedPrice(ctx, req.(*QueryAdjustedPriceRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _Query_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"cyber.resources.v1beta1.Query\",\n\tHandlerType: (*QueryServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Params\",\n\t\t\tHandler:    _Query_Params_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Investmint\",\n\t\t\tHandler:    _Query_Investmint_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"AdjustedPrice\",\n\t\t\tHandler:    _Query_AdjustedPrice_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"cyber/resources/v1beta1/query.proto\",\n}\n\nfunc (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryInvestmintRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryInvestmintRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryInvestmintRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Length != 0 {\n\t\ti = encodeVarintQuery(dAtA, i, uint64(m.Length))\n\t\ti--\n\t\tdAtA[i] = 0x18\n\t}\n\tif len(m.Resource) > 0 {\n\t\ti -= len(m.Resource)\n\t\tcopy(dAtA[i:], m.Resource)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.Resource)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\t{\n\t\tsize, err := m.Amount.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryInvestmintResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryInvestmintResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryInvestmintResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Amount.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryAdjustedPriceRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryAdjustedPriceRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryAdjustedPriceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Resource) > 0 {\n\t\ti -= len(m.Resource)\n\t\tcopy(dAtA[i:], m.Resource)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.Resource)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\t{\n\t\tsize, err := m.Base.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryAdjustedPriceResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryAdjustedPriceResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryAdjustedPriceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Adjusted.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintQuery(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovQuery(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\nfunc (m *QueryParamsRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *QueryParamsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Params.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc (m *QueryInvestmintRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Amount.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\tl = len(m.Resource)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\tif m.Length != 0 {\n\t\tn += 1 + sovQuery(uint64(m.Length))\n\t}\n\treturn n\n}\n\nfunc (m *QueryInvestmintResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Amount.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc (m *QueryAdjustedPriceRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Base.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\tl = len(m.Resource)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryAdjustedPriceResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Adjusted.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc sovQuery(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\nfunc sozQuery(x uint64) (n int) {\n\treturn sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\nfunc (m *QueryParamsRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *QueryParamsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *QueryInvestmintRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryInvestmintRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryInvestmintRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Amount\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Resource\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Resource = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Length\", wireType)\n\t\t\t}\n\t\t\tm.Length = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Length |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *QueryInvestmintResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryInvestmintResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryInvestmintResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Amount\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *QueryAdjustedPriceRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryAdjustedPriceRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryAdjustedPriceRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Base\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Base.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Resource\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Resource = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *QueryAdjustedPriceResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryAdjustedPriceResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryAdjustedPriceResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Adjusted\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Adjusted.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc skipQuery(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupQuery\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthQuery\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthQuery        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowQuery          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupQuery = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/resources/types/query.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: cyber/resources/v1beta1/query.proto\n\n/*\nPackage types is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage types\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/golang/protobuf/descriptor\"\n\t\"github.com/golang/protobuf/proto\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// Suppress \"imported and not used\" errors\nvar _ codes.Code\nvar _ io.Reader\nvar _ status.Status\nvar _ = runtime.String\nvar _ = utilities.NewDoubleArray\nvar _ = descriptor.ForMessage\nvar _ = metadata.Join\n\nfunc request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryParamsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n\n}\n\nfunc local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryParamsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := server.Params(ctx, &protoReq)\n\treturn msg, metadata, err\n\n}\n\nvar (\n\tfilter_Query_Investmint_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n)\n\nfunc request_Query_Investmint_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryInvestmintRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Investmint_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.Investmint(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n\n}\n\nfunc local_request_Query_Investmint_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryInvestmintRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Investmint_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.Investmint(ctx, &protoReq)\n\treturn msg, metadata, err\n\n}\n\nvar (\n\tfilter_Query_AdjustedPrice_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}\n)\n\nfunc request_Query_AdjustedPrice_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryAdjustedPriceRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AdjustedPrice_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := client.AdjustedPrice(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n\n}\n\nfunc local_request_Query_AdjustedPrice_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryAdjustedPriceRequest\n\tvar metadata runtime.ServerMetadata\n\n\tif err := req.ParseForm(); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\tif err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AdjustedPrice_0); err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"%v\", err)\n\t}\n\n\tmsg, err := server.AdjustedPrice(ctx, &protoReq)\n\treturn msg, metadata, err\n\n}\n\n// RegisterQueryHandlerServer registers the http handlers for service Query to \"mux\".\n// UnaryRPC     :call QueryServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead.\nfunc RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error {\n\n\tmux.Handle(\"GET\", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Investmint_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_Investmint_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Investmint_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_AdjustedPrice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_AdjustedPrice_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_AdjustedPrice_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\treturn nil\n}\n\n// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.Dial(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Infof(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Infof(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\n\treturn RegisterQueryHandler(ctx, mux, conn)\n}\n\n// RegisterQueryHandler registers the http handlers for service Query to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn))\n}\n\n// RegisterQueryHandlerClient registers the http handlers for service Query\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"QueryClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"QueryClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"QueryClient\" to call the correct interceptors.\nfunc RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error {\n\n\tmux.Handle(\"GET\", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_Investmint_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_Investmint_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Investmint_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_AdjustedPrice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_AdjustedPrice_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_AdjustedPrice_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\treturn nil\n}\n\nvar (\n\tpattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"resources\", \"v1beta1\", \"params\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_Investmint_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"resources\", \"v1beta1\", \"investmint\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_AdjustedPrice_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 1, 2, 3}, []string{\"cyber\", \"resources\", \"v1beta1\", \"adjusted_price\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n)\n\nvar (\n\tforward_Query_Params_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_Investmint_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_AdjustedPrice_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "x/resources/types/tx.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/resources/v1beta1/tx.proto\n\npackage types\n\nimport (\n\tcontext \"context\"\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\t_ \"github.com/cosmos/cosmos-proto\"\n\t_ \"github.com/cosmos/cosmos-sdk/types\"\n\tgithub_com_cosmos_cosmos_sdk_types \"github.com/cosmos/cosmos-sdk/types\"\n\t_ \"github.com/cosmos/cosmos-sdk/types/msgservice\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tgrpc1 \"github.com/cosmos/gogoproto/grpc\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype MsgInvestmint struct {\n\tNeuron   string                                  `protobuf:\"bytes,1,opt,name=neuron,proto3\" json:\"neuron,omitempty\"`\n\tAmount   github_com_cosmos_cosmos_sdk_types.Coin `protobuf:\"bytes,2,opt,name=amount,proto3,casttype=github.com/cosmos/cosmos-sdk/types.Coin\" json:\"amount\"`\n\tResource string                                  `protobuf:\"bytes,3,opt,name=resource,proto3\" json:\"resource,omitempty\"`\n\tLength   uint64                                  `protobuf:\"varint,4,opt,name=length,proto3\" json:\"length,omitempty\"`\n}\n\nfunc (m *MsgInvestmint) Reset()         { *m = MsgInvestmint{} }\nfunc (m *MsgInvestmint) String() string { return proto.CompactTextString(m) }\nfunc (*MsgInvestmint) ProtoMessage()    {}\nfunc (*MsgInvestmint) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_94512119bd1d1c33, []int{0}\n}\n\nfunc (m *MsgInvestmint) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgInvestmint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgInvestmint.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgInvestmint) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgInvestmint.Merge(m, src)\n}\n\nfunc (m *MsgInvestmint) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgInvestmint) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgInvestmint.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgInvestmint proto.InternalMessageInfo\n\ntype MsgUpdateParams struct {\n\tAuthority string `protobuf:\"bytes,1,opt,name=authority,proto3\" json:\"authority,omitempty\"`\n\tParams    Params `protobuf:\"bytes,2,opt,name=params,proto3\" json:\"params\"`\n}\n\nfunc (m *MsgUpdateParams) Reset()         { *m = MsgUpdateParams{} }\nfunc (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) }\nfunc (*MsgUpdateParams) ProtoMessage()    {}\nfunc (*MsgUpdateParams) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_94512119bd1d1c33, []int{1}\n}\n\nfunc (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgUpdateParams.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgUpdateParams) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgUpdateParams.Merge(m, src)\n}\n\nfunc (m *MsgUpdateParams) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgUpdateParams) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgUpdateParams.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo\n\nfunc (m *MsgUpdateParams) GetAuthority() string {\n\tif m != nil {\n\t\treturn m.Authority\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgUpdateParams) GetParams() Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn Params{}\n}\n\ntype MsgInvestmintResponse struct{}\n\nfunc (m *MsgInvestmintResponse) Reset()         { *m = MsgInvestmintResponse{} }\nfunc (m *MsgInvestmintResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgInvestmintResponse) ProtoMessage()    {}\nfunc (*MsgInvestmintResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_94512119bd1d1c33, []int{2}\n}\n\nfunc (m *MsgInvestmintResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgInvestmintResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgInvestmintResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgInvestmintResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgInvestmintResponse.Merge(m, src)\n}\n\nfunc (m *MsgInvestmintResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgInvestmintResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgInvestmintResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgInvestmintResponse proto.InternalMessageInfo\n\ntype MsgUpdateParamsResponse struct{}\n\nfunc (m *MsgUpdateParamsResponse) Reset()         { *m = MsgUpdateParamsResponse{} }\nfunc (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgUpdateParamsResponse) ProtoMessage()    {}\nfunc (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_94512119bd1d1c33, []int{3}\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgUpdateParamsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src)\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo\n\nfunc init() {\n\tproto.RegisterType((*MsgInvestmint)(nil), \"cyber.resources.v1beta1.MsgInvestmint\")\n\tproto.RegisterType((*MsgUpdateParams)(nil), \"cyber.resources.v1beta1.MsgUpdateParams\")\n\tproto.RegisterType((*MsgInvestmintResponse)(nil), \"cyber.resources.v1beta1.MsgInvestmintResponse\")\n\tproto.RegisterType((*MsgUpdateParamsResponse)(nil), \"cyber.resources.v1beta1.MsgUpdateParamsResponse\")\n}\n\nfunc init() { proto.RegisterFile(\"cyber/resources/v1beta1/tx.proto\", fileDescriptor_94512119bd1d1c33) }\n\nvar fileDescriptor_94512119bd1d1c33 = []byte{\n\t// 484 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xbd, 0x8e, 0xd3, 0x40,\n\t0x10, 0xc7, 0xbd, 0x5c, 0x14, 0xdd, 0x2d, 0x5f, 0x92, 0x75, 0x10, 0xc7, 0x85, 0x1d, 0x05, 0x09,\n\t0x22, 0xa4, 0xac, 0xc9, 0x9d, 0x44, 0x71, 0x12, 0x05, 0xa1, 0xa2, 0x88, 0x84, 0x8c, 0x68, 0x68,\n\t0x90, 0x3f, 0x56, 0x1b, 0x03, 0xde, 0xb5, 0x76, 0xd6, 0xd1, 0xa5, 0xa5, 0xa2, 0xa4, 0xa4, 0xbc,\n\t0x47, 0xa0, 0xe0, 0x21, 0x8e, 0xee, 0x44, 0x03, 0xd5, 0x09, 0x25, 0x05, 0x3c, 0x03, 0x15, 0xb2,\n\t0x77, 0x9d, 0x4b, 0x90, 0x72, 0xba, 0xca, 0x1e, 0xcd, 0x6f, 0xfe, 0xf3, 0x9f, 0x9d, 0xc1, 0xbd,\n\t0x64, 0x1e, 0x53, 0x19, 0x48, 0x0a, 0xa2, 0x94, 0x09, 0x85, 0x60, 0x36, 0x8a, 0xa9, 0x8a, 0x46,\n\t0x81, 0x3a, 0x26, 0x85, 0x14, 0x4a, 0xd8, 0x9d, 0x9a, 0x20, 0x2b, 0x82, 0x18, 0xc2, 0xdd, 0x67,\n\t0x82, 0x89, 0x9a, 0x09, 0xaa, 0x3f, 0x8d, 0xbb, 0x9d, 0x44, 0x40, 0x2e, 0x20, 0xc8, 0x81, 0x05,\n\t0xb3, 0x51, 0xf5, 0x31, 0x89, 0xae, 0x4e, 0xbc, 0xd1, 0x15, 0x3a, 0x30, 0xa9, 0x7b, 0x5b, 0x4d,\n\t0xcc, 0x0b, 0xda, 0x40, 0x9e, 0x11, 0x8e, 0x23, 0xa0, 0x2b, 0x20, 0x11, 0x19, 0xd7, 0xf9, 0xfe,\n\t0x37, 0x84, 0x6f, 0x4e, 0x80, 0x3d, 0xe7, 0x33, 0x0a, 0x2a, 0xcf, 0xb8, 0xb2, 0xef, 0xe2, 0x36,\n\t0xa7, 0xa5, 0x14, 0xdc, 0x41, 0x3d, 0x34, 0xd8, 0x0b, 0x4d, 0x64, 0xc7, 0xb8, 0x1d, 0xe5, 0xa2,\n\t0xe4, 0xca, 0xb9, 0xd6, 0x43, 0x83, 0xeb, 0x07, 0x5d, 0x62, 0xdc, 0x54, 0xd2, 0xcd, 0x78, 0xe4,\n\t0x99, 0xc8, 0xf8, 0x38, 0x38, 0x3d, 0xf7, 0xad, 0xbf, 0xe7, 0xfe, 0x03, 0x96, 0xa9, 0x69, 0x19,\n\t0x93, 0x44, 0xe4, 0xc6, 0xba, 0xf9, 0x0c, 0x21, 0x7d, 0x67, 0x6c, 0x56, 0x05, 0xa1, 0x51, 0xb6,\n\t0x5d, 0xbc, 0xdb, 0x8c, 0xe3, 0xec, 0xd4, 0xdd, 0x57, 0x71, 0xe5, 0xeb, 0x3d, 0xe5, 0x4c, 0x4d,\n\t0x9d, 0x56, 0x0f, 0x0d, 0x5a, 0xa1, 0x89, 0x8e, 0x76, 0x3f, 0x9e, 0xf8, 0xd6, 0x9f, 0x13, 0xdf,\n\t0xea, 0x7f, 0x46, 0xf8, 0xf6, 0x04, 0xd8, 0xab, 0x22, 0x8d, 0x14, 0x7d, 0x11, 0xc9, 0x28, 0x07,\n\t0xfb, 0x31, 0xde, 0x8b, 0x4a, 0x35, 0x15, 0x32, 0x53, 0x73, 0x3d, 0xd0, 0xd8, 0xf9, 0xfe, 0x75,\n\t0xb8, 0x6f, 0xbc, 0x3f, 0x4d, 0x53, 0x49, 0x01, 0x5e, 0x2a, 0x99, 0x71, 0x16, 0x5e, 0xa0, 0xf6,\n\t0x13, 0xdc, 0x2e, 0x6a, 0x05, 0x33, 0xad, 0x4f, 0xb6, 0x2c, 0x94, 0xe8, 0x46, 0xe3, 0x56, 0x35,\n\t0x73, 0x68, 0x8a, 0x8e, 0x6e, 0x7d, 0xf8, 0xfd, 0xe5, 0xe1, 0x85, 0x5c, 0xbf, 0x83, 0xef, 0x6c,\n\t0xbc, 0x72, 0x48, 0xa1, 0x10, 0x1c, 0x68, 0xbf, 0x8b, 0x3b, 0xff, 0x59, 0x6e, 0x52, 0x07, 0x3f,\n\t0x10, 0xde, 0x99, 0x00, 0xb3, 0x53, 0x8c, 0xd7, 0xd6, 0x73, 0x7f, 0xab, 0x91, 0x8d, 0x06, 0x2e,\n\t0xb9, 0x1a, 0xd7, 0x74, 0xb3, 0xdf, 0xe2, 0x1b, 0x1b, 0x0f, 0x37, 0xb8, 0xac, 0x7e, 0x9d, 0x74,\n\t0x1f, 0x5d, 0x95, 0x6c, 0x7a, 0x8d, 0x27, 0xa7, 0x0b, 0x0f, 0x9d, 0x2d, 0x3c, 0xf4, 0x6b, 0xe1,\n\t0xa1, 0x4f, 0x4b, 0xcf, 0x3a, 0x5b, 0x7a, 0xd6, 0xcf, 0xa5, 0x67, 0xbd, 0x3e, 0x5c, 0xbf, 0x98,\n\t0x4a, 0x35, 0x11, 0x9c, 0x55, 0x1b, 0x0a, 0x98, 0x18, 0xea, 0x7b, 0x3f, 0x5e, 0xbb, 0xf8, 0xfa,\n\t0x84, 0xe2, 0x76, 0x7d, 0xca, 0x87, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x44, 0x47, 0xf3, 0x97,\n\t0x96, 0x03, 0x00, 0x00,\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ context.Context\n\t_ grpc.ClientConn\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// MsgClient is the client API for Msg service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype MsgClient interface {\n\tInvestmint(ctx context.Context, in *MsgInvestmint, opts ...grpc.CallOption) (*MsgInvestmintResponse, error)\n\tUpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error)\n}\n\ntype msgClient struct {\n\tcc grpc1.ClientConn\n}\n\nfunc NewMsgClient(cc grpc1.ClientConn) MsgClient {\n\treturn &msgClient{cc}\n}\n\nfunc (c *msgClient) Investmint(ctx context.Context, in *MsgInvestmint, opts ...grpc.CallOption) (*MsgInvestmintResponse, error) {\n\tout := new(MsgInvestmintResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.resources.v1beta1.Msg/Investmint\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) {\n\tout := new(MsgUpdateParamsResponse)\n\terr := c.cc.Invoke(ctx, \"/cyber.resources.v1beta1.Msg/UpdateParams\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// MsgServer is the server API for Msg service.\ntype MsgServer interface {\n\tInvestmint(context.Context, *MsgInvestmint) (*MsgInvestmintResponse, error)\n\tUpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error)\n}\n\n// UnimplementedMsgServer can be embedded to have forward compatible implementations.\ntype UnimplementedMsgServer struct{}\n\nfunc (*UnimplementedMsgServer) Investmint(ctx context.Context, req *MsgInvestmint) (*MsgInvestmintResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Investmint not implemented\")\n}\n\nfunc (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method UpdateParams not implemented\")\n}\n\nfunc RegisterMsgServer(s grpc1.Server, srv MsgServer) {\n\ts.RegisterService(&_Msg_serviceDesc, srv)\n}\n\nfunc _Msg_Investmint_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgInvestmint)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).Investmint(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.resources.v1beta1.Msg/Investmint\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).Investmint(ctx, req.(*MsgInvestmint))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgUpdateParams)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).UpdateParams(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/cyber.resources.v1beta1.Msg/UpdateParams\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _Msg_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"cyber.resources.v1beta1.Msg\",\n\tHandlerType: (*MsgServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Investmint\",\n\t\t\tHandler:    _Msg_Investmint_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"UpdateParams\",\n\t\t\tHandler:    _Msg_UpdateParams_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"cyber/resources/v1beta1/tx.proto\",\n}\n\nfunc (m *MsgInvestmint) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgInvestmint) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgInvestmint) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.Length != 0 {\n\t\ti = encodeVarintTx(dAtA, i, uint64(m.Length))\n\t\ti--\n\t\tdAtA[i] = 0x20\n\t}\n\tif len(m.Resource) > 0 {\n\t\ti -= len(m.Resource)\n\t\tcopy(dAtA[i:], m.Resource)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Resource)))\n\t\ti--\n\t\tdAtA[i] = 0x1a\n\t}\n\t{\n\t\tsize, err := m.Amount.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x12\n\tif len(m.Neuron) > 0 {\n\t\ti -= len(m.Neuron)\n\t\tcopy(dAtA[i:], m.Neuron)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Neuron)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x12\n\tif len(m.Authority) > 0 {\n\t\ti -= len(m.Authority)\n\t\tcopy(dAtA[i:], m.Authority)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Authority)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgInvestmintResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgInvestmintResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgInvestmintResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintTx(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovTx(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *MsgInvestmint) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Neuron)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = m.Amount.Size()\n\tn += 1 + l + sovTx(uint64(l))\n\tl = len(m.Resource)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tif m.Length != 0 {\n\t\tn += 1 + sovTx(uint64(m.Length))\n\t}\n\treturn n\n}\n\nfunc (m *MsgUpdateParams) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Authority)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = m.Params.Size()\n\tn += 1 + l + sovTx(uint64(l))\n\treturn n\n}\n\nfunc (m *MsgInvestmintResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgUpdateParamsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc sovTx(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozTx(x uint64) (n int) {\n\treturn sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *MsgInvestmint) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgInvestmint: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgInvestmint: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Neuron\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Neuron = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Amount\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Resource\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Resource = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 4:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Length\", wireType)\n\t\t\t}\n\t\t\tm.Length = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.Length |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgUpdateParams) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParams: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParams: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Authority\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Authority = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgInvestmintResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgInvestmintResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgInvestmintResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParamsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipTx(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthTx\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupTx\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthTx\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthTx        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowTx          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupTx = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/resources/types/types.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: cyber/resources/v1beta1/types.proto\n\npackage types\n\nimport (\n\tfmt \"fmt\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n\n\t_ \"github.com/cosmos/cosmos-sdk/types\"\n\tgithub_com_cosmos_cosmos_sdk_types \"github.com/cosmos/cosmos-sdk/types\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar (\n\t_ = proto.Marshal\n\t_ = fmt.Errorf\n\t_ = math.Inf\n)\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\ntype Params struct {\n\tMaxSlots                   uint32                                  `protobuf:\"varint,1,opt,name=max_slots,json=maxSlots,proto3\" json:\"max_slots,omitempty\"`\n\tHalvingPeriodVoltBlocks    uint32                                  `protobuf:\"varint,2,opt,name=halving_period_volt_blocks,json=halvingPeriodVoltBlocks,proto3\" json:\"halving_period_volt_blocks,omitempty\"`\n\tHalvingPeriodAmpereBlocks  uint32                                  `protobuf:\"varint,3,opt,name=halving_period_ampere_blocks,json=halvingPeriodAmpereBlocks,proto3\" json:\"halving_period_ampere_blocks,omitempty\"`\n\tBaseInvestmintPeriodVolt   uint32                                  `protobuf:\"varint,4,opt,name=base_investmint_period_volt,json=baseInvestmintPeriodVolt,proto3\" json:\"base_investmint_period_volt,omitempty\"`\n\tBaseInvestmintPeriodAmpere uint32                                  `protobuf:\"varint,5,opt,name=base_investmint_period_ampere,json=baseInvestmintPeriodAmpere,proto3\" json:\"base_investmint_period_ampere,omitempty\"`\n\tMinInvestmintPeriod        uint32                                  `protobuf:\"varint,6,opt,name=min_investmint_period,json=minInvestmintPeriod,proto3\" json:\"min_investmint_period,omitempty\"`\n\tBaseInvestmintAmountVolt   github_com_cosmos_cosmos_sdk_types.Coin `protobuf:\"bytes,7,opt,name=base_investmint_amount_volt,json=baseInvestmintAmountVolt,proto3,casttype=github.com/cosmos/cosmos-sdk/types.Coin\" json:\"base_investmint_amount_volt\"`\n\tBaseInvestmintAmountAmpere github_com_cosmos_cosmos_sdk_types.Coin `protobuf:\"bytes,8,opt,name=base_investmint_amount_ampere,json=baseInvestmintAmountAmpere,proto3,casttype=github.com/cosmos/cosmos-sdk/types.Coin\" json:\"base_investmint_amount_ampere\"`\n}\n\nfunc (m *Params) Reset()         { *m = Params{} }\nfunc (m *Params) String() string { return proto.CompactTextString(m) }\nfunc (*Params) ProtoMessage()    {}\nfunc (*Params) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_3be852646b47c447, []int{0}\n}\n\nfunc (m *Params) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\n\nfunc (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_Params.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\n\nfunc (m *Params) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Params.Merge(m, src)\n}\n\nfunc (m *Params) XXX_Size() int {\n\treturn m.Size()\n}\n\nfunc (m *Params) XXX_DiscardUnknown() {\n\txxx_messageInfo_Params.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Params proto.InternalMessageInfo\n\nfunc (m *Params) GetMaxSlots() uint32 {\n\tif m != nil {\n\t\treturn m.MaxSlots\n\t}\n\treturn 0\n}\n\nfunc (m *Params) GetHalvingPeriodVoltBlocks() uint32 {\n\tif m != nil {\n\t\treturn m.HalvingPeriodVoltBlocks\n\t}\n\treturn 0\n}\n\nfunc (m *Params) GetHalvingPeriodAmpereBlocks() uint32 {\n\tif m != nil {\n\t\treturn m.HalvingPeriodAmpereBlocks\n\t}\n\treturn 0\n}\n\nfunc (m *Params) GetBaseInvestmintPeriodVolt() uint32 {\n\tif m != nil {\n\t\treturn m.BaseInvestmintPeriodVolt\n\t}\n\treturn 0\n}\n\nfunc (m *Params) GetBaseInvestmintPeriodAmpere() uint32 {\n\tif m != nil {\n\t\treturn m.BaseInvestmintPeriodAmpere\n\t}\n\treturn 0\n}\n\nfunc (m *Params) GetMinInvestmintPeriod() uint32 {\n\tif m != nil {\n\t\treturn m.MinInvestmintPeriod\n\t}\n\treturn 0\n}\n\nfunc (m *Params) GetBaseInvestmintAmountVolt() github_com_cosmos_cosmos_sdk_types.Coin {\n\tif m != nil {\n\t\treturn m.BaseInvestmintAmountVolt\n\t}\n\treturn github_com_cosmos_cosmos_sdk_types.Coin{}\n}\n\nfunc (m *Params) GetBaseInvestmintAmountAmpere() github_com_cosmos_cosmos_sdk_types.Coin {\n\tif m != nil {\n\t\treturn m.BaseInvestmintAmountAmpere\n\t}\n\treturn github_com_cosmos_cosmos_sdk_types.Coin{}\n}\n\nfunc init() {\n\tproto.RegisterType((*Params)(nil), \"cyber.resources.v1beta1.Params\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"cyber/resources/v1beta1/types.proto\", fileDescriptor_3be852646b47c447)\n}\n\nvar fileDescriptor_3be852646b47c447 = []byte{\n\t// 425 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x93, 0x3f, 0x8f, 0xd3, 0x30,\n\t0x18, 0xc6, 0x63, 0x38, 0xca, 0x61, 0xc4, 0x12, 0x40, 0x97, 0xcb, 0x41, 0xee, 0x04, 0x03, 0xb7,\n\t0x5c, 0xac, 0xbb, 0x1b, 0x11, 0x42, 0x3d, 0x26, 0x06, 0xa4, 0x0a, 0x24, 0x06, 0x96, 0xc8, 0x49,\n\t0xad, 0xd4, 0x6a, 0xec, 0x37, 0xb2, 0xdd, 0xa8, 0xfd, 0x08, 0x0c, 0x48, 0x7c, 0xac, 0x8e, 0x1d,\n\t0x99, 0x2a, 0xd4, 0x7e, 0x06, 0x16, 0x26, 0x14, 0xdb, 0x2d, 0xa5, 0x2d, 0xdb, 0x4d, 0x49, 0xe4,\n\t0xdf, 0xf3, 0xf8, 0xc9, 0xfb, 0x07, 0xbf, 0x2c, 0x26, 0x39, 0x53, 0x44, 0x31, 0x0d, 0x23, 0x55,\n\t0x30, 0x4d, 0x9a, 0xcb, 0x9c, 0x19, 0x7a, 0x49, 0xcc, 0xa4, 0x66, 0x3a, 0xad, 0x15, 0x18, 0x08,\n\t0x8f, 0x2c, 0x94, 0xae, 0xa1, 0xd4, 0x43, 0xf1, 0x93, 0x12, 0x4a, 0xb0, 0x0c, 0x69, 0xdf, 0x1c,\n\t0x1e, 0x27, 0x05, 0x68, 0x01, 0x9a, 0xe4, 0x54, 0xb3, 0xb5, 0x5f, 0x01, 0x5c, 0xba, 0xf3, 0x17,\n\t0xbf, 0x0e, 0x70, 0xa7, 0x47, 0x15, 0x15, 0x3a, 0x3c, 0xc1, 0x0f, 0x04, 0x1d, 0x67, 0xba, 0x02,\n\t0xa3, 0x23, 0x74, 0x86, 0xce, 0x1f, 0x7d, 0x3c, 0x14, 0x74, 0xfc, 0xa9, 0xfd, 0x0e, 0x5f, 0xe3,\n\t0x78, 0x40, 0xab, 0x86, 0xcb, 0x32, 0xab, 0x99, 0xe2, 0xd0, 0xcf, 0x1a, 0xa8, 0x4c, 0x96, 0x57,\n\t0x50, 0x0c, 0x75, 0x74, 0xc7, 0xd2, 0x47, 0x9e, 0xe8, 0x59, 0xe0, 0x33, 0x54, 0xe6, 0xc6, 0x1e,\n\t0x87, 0x6f, 0xf1, 0xb3, 0x2d, 0x31, 0x15, 0x35, 0x53, 0x6c, 0x25, 0xbf, 0x6b, 0xe5, 0xc7, 0xff,\n\t0xc8, 0xbb, 0x96, 0xf0, 0x06, 0x6f, 0xf0, 0x49, 0xfb, 0x03, 0x19, 0x97, 0x0d, 0xd3, 0x46, 0x70,\n\t0x69, 0x36, 0x53, 0x44, 0x07, 0x56, 0x1f, 0xb5, 0xc8, 0xfb, 0x35, 0xf1, 0x37, 0x45, 0xd8, 0xc5,\n\t0xcf, 0xff, 0x23, 0x77, 0x39, 0xa2, 0x7b, 0xd6, 0x20, 0xde, 0x67, 0xe0, 0x72, 0x84, 0x57, 0xf8,\n\t0xa9, 0xe0, 0x72, 0xd7, 0x21, 0xea, 0x58, 0xe9, 0x63, 0xc1, 0xe5, 0xb6, 0x32, 0xfc, 0x8a, 0x76,\n\t0x63, 0x53, 0x01, 0x23, 0x69, 0x5c, 0xec, 0xfb, 0x67, 0xe8, 0xfc, 0xe1, 0xd5, 0x71, 0xea, 0x5a,\n\t0x94, 0xb6, 0xe8, 0xaa, 0x9b, 0xe9, 0x3b, 0xe0, 0xf2, 0x86, 0x4c, 0xe7, 0xa7, 0xc1, 0xef, 0xf9,\n\t0xe9, 0xab, 0x92, 0x9b, 0xc1, 0x28, 0x4f, 0x0b, 0x10, 0xc4, 0xf7, 0xd3, 0x3d, 0x2e, 0x74, 0x7f,\n\t0xe8, 0xa7, 0xa3, 0x15, 0x6c, 0x97, 0xa0, 0x6b, 0x2f, 0xb3, 0x25, 0xf8, 0x86, 0x76, 0x6b, 0xe0,\n\t0xb3, 0xf8, 0x1a, 0x1c, 0xde, 0x7a, 0x9a, 0x78, 0x5f, 0x1a, 0xdf, 0xd7, 0x0f, 0xd3, 0x45, 0x82,\n\t0x66, 0x8b, 0x04, 0xfd, 0x5c, 0x24, 0xe8, 0xfb, 0x32, 0x09, 0x66, 0xcb, 0x24, 0xf8, 0xb1, 0x4c,\n\t0x82, 0x2f, 0xd7, 0x9b, 0xf6, 0xed, 0xac, 0x17, 0x20, 0x4b, 0xc5, 0xb4, 0x26, 0x25, 0x5c, 0xb8,\n\t0x0d, 0x19, 0x6f, 0xec, 0x88, 0xbd, 0x2f, 0xef, 0xd8, 0x69, 0xbe, 0xfe, 0x13, 0x00, 0x00, 0xff,\n\t0xff, 0x42, 0x8b, 0x46, 0xd6, 0x43, 0x03, 0x00, 0x00,\n}\n\nfunc (m *Params) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *Params) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.BaseInvestmintAmountAmpere.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTypes(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x42\n\t{\n\t\tsize, err := m.BaseInvestmintAmountVolt.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTypes(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x3a\n\tif m.MinInvestmintPeriod != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.MinInvestmintPeriod))\n\t\ti--\n\t\tdAtA[i] = 0x30\n\t}\n\tif m.BaseInvestmintPeriodAmpere != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.BaseInvestmintPeriodAmpere))\n\t\ti--\n\t\tdAtA[i] = 0x28\n\t}\n\tif m.BaseInvestmintPeriodVolt != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.BaseInvestmintPeriodVolt))\n\t\ti--\n\t\tdAtA[i] = 0x20\n\t}\n\tif m.HalvingPeriodAmpereBlocks != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.HalvingPeriodAmpereBlocks))\n\t\ti--\n\t\tdAtA[i] = 0x18\n\t}\n\tif m.HalvingPeriodVoltBlocks != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.HalvingPeriodVoltBlocks))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif m.MaxSlots != 0 {\n\t\ti = encodeVarintTypes(dAtA, i, uint64(m.MaxSlots))\n\t\ti--\n\t\tdAtA[i] = 0x8\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintTypes(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovTypes(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\n\nfunc (m *Params) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif m.MaxSlots != 0 {\n\t\tn += 1 + sovTypes(uint64(m.MaxSlots))\n\t}\n\tif m.HalvingPeriodVoltBlocks != 0 {\n\t\tn += 1 + sovTypes(uint64(m.HalvingPeriodVoltBlocks))\n\t}\n\tif m.HalvingPeriodAmpereBlocks != 0 {\n\t\tn += 1 + sovTypes(uint64(m.HalvingPeriodAmpereBlocks))\n\t}\n\tif m.BaseInvestmintPeriodVolt != 0 {\n\t\tn += 1 + sovTypes(uint64(m.BaseInvestmintPeriodVolt))\n\t}\n\tif m.BaseInvestmintPeriodAmpere != 0 {\n\t\tn += 1 + sovTypes(uint64(m.BaseInvestmintPeriodAmpere))\n\t}\n\tif m.MinInvestmintPeriod != 0 {\n\t\tn += 1 + sovTypes(uint64(m.MinInvestmintPeriod))\n\t}\n\tl = m.BaseInvestmintAmountVolt.Size()\n\tn += 1 + l + sovTypes(uint64(l))\n\tl = m.BaseInvestmintAmountAmpere.Size()\n\tn += 1 + l + sovTypes(uint64(l))\n\treturn n\n}\n\nfunc sovTypes(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\n\nfunc sozTypes(x uint64) (n int) {\n\treturn sovTypes(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\nfunc (m *Params) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: Params: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: Params: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MaxSlots\", wireType)\n\t\t\t}\n\t\t\tm.MaxSlots = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.MaxSlots |= uint32(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field HalvingPeriodVoltBlocks\", wireType)\n\t\t\t}\n\t\t\tm.HalvingPeriodVoltBlocks = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.HalvingPeriodVoltBlocks |= uint32(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 3:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field HalvingPeriodAmpereBlocks\", wireType)\n\t\t\t}\n\t\t\tm.HalvingPeriodAmpereBlocks = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.HalvingPeriodAmpereBlocks |= uint32(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 4:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field BaseInvestmintPeriodVolt\", wireType)\n\t\t\t}\n\t\t\tm.BaseInvestmintPeriodVolt = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.BaseInvestmintPeriodVolt |= uint32(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 5:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field BaseInvestmintPeriodAmpere\", wireType)\n\t\t\t}\n\t\t\tm.BaseInvestmintPeriodAmpere = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.BaseInvestmintPeriodAmpere |= uint32(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 6:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MinInvestmintPeriod\", wireType)\n\t\t\t}\n\t\t\tm.MinInvestmintPeriod = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.MinInvestmintPeriod |= uint32(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 7:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field BaseInvestmintAmountVolt\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.BaseInvestmintAmountVolt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 8:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field BaseInvestmintAmountAmpere\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.BaseInvestmintAmountAmpere.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTypes(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc skipTypes(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowTypes\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTypes\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthTypes\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupTypes\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthTypes\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthTypes        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowTypes          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupTypes = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/resources/wasm/interface.go",
    "content": "package wasm\n\nimport (\n\t\"encoding/json\"\n\n\terrorsmod \"cosmossdk.io/errors\"\n\n\twasmvmtypes \"github.com/CosmWasm/wasmvm/types\"\n\n\tpluginstypes \"github.com/cybercongress/go-cyber/v7/plugins/types\"\n\t\"github.com/cybercongress/go-cyber/v7/x/resources/keeper\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\ntype Messenger struct {\n\tkeeper *keeper.Keeper\n}\n\nfunc NewMessenger(\n\tkeeper *keeper.Keeper,\n) *Messenger {\n\treturn &Messenger{\n\t\tkeeper: keeper,\n\t}\n}\n\nfunc (m *Messenger) HandleMsg(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg pluginstypes.CyberMsg) ([]sdk.Event, [][]byte, error) {\n\tswitch {\n\tcase msg.Investmint != nil:\n\t\tif msg.Investmint.Neuron != contractAddr.String() {\n\t\t\treturn nil, nil, wasmvmtypes.InvalidRequest{Err: \"investmint wrong neuron\"}\n\t\t}\n\n\t\tmsgServer := keeper.NewMsgServerImpl(*m.keeper)\n\n\t\tif err := msg.Investmint.ValidateBasic(); err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed validating msg\")\n\t\t}\n\n\t\tres, err := msgServer.Investmint(\n\t\t\tsdk.WrapSDKContext(ctx),\n\t\t\tmsg.Investmint,\n\t\t)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"investmint msg\")\n\t\t}\n\n\t\tresponseBytes, err := json.Marshal(*res)\n\t\tif err != nil {\n\t\t\treturn nil, nil, errorsmod.Wrap(err, \"failed to serialize investmint response\")\n\t\t}\n\n\t\tresp := [][]byte{responseBytes}\n\n\t\treturn nil, resp, nil\n\tdefault:\n\t\treturn nil, nil, pluginstypes.ErrHandleMsg\n\t}\n}\n"
  },
  {
    "path": "x/staking/module.go",
    "content": "package staking\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\t\"github.com/cosmos/cosmos-sdk/types/module\"\n\tauthkeeper \"github.com/cosmos/cosmos-sdk/x/auth/keeper\"\n\tbankkeeper \"github.com/cosmos/cosmos-sdk/x/bank/keeper\"\n\t\"github.com/cosmos/cosmos-sdk/x/staking\"\n\t\"github.com/cosmos/cosmos-sdk/x/staking/exported\"\n\t\"github.com/cosmos/cosmos-sdk/x/staking/keeper\"\n\t\"github.com/cosmos/cosmos-sdk/x/staking/types\"\n)\n\nvar _ module.AppModule = AppModule{}\n\ntype AppModule struct {\n\tstaking.AppModule\n\tsk *keeper.Keeper\n\tbk bankkeeper.Keeper\n\tak authkeeper.AccountKeeper\n\n\t// legacySubspace is used solely for migration of x/params managed parameters\n\tlegacySubspace exported.Subspace\n}\n\nfunc NewAppModule(\n\tcdc codec.Codec,\n\tstakingKeeper *keeper.Keeper,\n\taccountKeeper authkeeper.AccountKeeper,\n\tbankKeeper bankkeeper.Keeper,\n\tls exported.Subspace,\n) AppModule {\n\treturn AppModule{\n\t\tAppModule:      staking.NewAppModule(cdc, stakingKeeper, accountKeeper, bankKeeper, ls),\n\t\tsk:             stakingKeeper,\n\t\tbk:             bankKeeper,\n\t\tak:             accountKeeper,\n\t\tlegacySubspace: ls,\n\t}\n}\n\nfunc (am AppModule) RegisterServices(cfg module.Configurator) {\n\ttypes.RegisterMsgServer(cfg.MsgServer(), NewMsgServerImpl(am.sk, am.bk))\n\tquerier := keeper.Querier{Keeper: am.sk}\n\ttypes.RegisterQueryServer(cfg.QueryServer(), querier)\n\n\tm := keeper.NewMigrator(am.sk, am.legacySubspace)\n\tif err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil {\n\t\tpanic(fmt.Sprintf(\"failed to migrate x/%s from version 1 to 2: %v\", types.ModuleName, err))\n\t}\n\tif err := cfg.RegisterMigration(types.ModuleName, 2, m.Migrate2to3); err != nil {\n\t\tpanic(fmt.Sprintf(\"failed to migrate x/%s from version 2 to 3: %v\", types.ModuleName, err))\n\t}\n\tif err := cfg.RegisterMigration(types.ModuleName, 3, m.Migrate3to4); err != nil {\n\t\tpanic(fmt.Sprintf(\"failed to migrate x/%s from version 3 to 4: %v\", types.ModuleName, err))\n\t}\n}\n"
  },
  {
    "path": "x/staking/msg_server.go",
    "content": "package staking\n\nimport (\n\t\"context\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/armon/go-metrics\"\n\tgovtypes \"github.com/cosmos/cosmos-sdk/x/gov/types\"\n\t\"google.golang.org/grpc/codes\"\n\n\tcryptotypes \"github.com/cosmos/cosmos-sdk/crypto/types\"\n\t\"github.com/cosmos/cosmos-sdk/telemetry\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tsdkerrors \"github.com/cosmos/cosmos-sdk/types/errors\"\n\tbankkeeper \"github.com/cosmos/cosmos-sdk/x/bank/keeper\"\n\t\"github.com/cosmos/cosmos-sdk/x/staking/keeper\"\n\t\"github.com/cosmos/cosmos-sdk/x/staking/types\"\n\t\"google.golang.org/grpc/status\"\n\n\tctypes \"github.com/cybercongress/go-cyber/v7/types\"\n\tresourcestypes \"github.com/cybercongress/go-cyber/v7/x/resources/types\"\n)\n\ntype msgServer struct {\n\t*keeper.Keeper\n\tbk bankkeeper.Keeper\n}\n\n// NewMsgServerImpl returns an implementation of the bank MsgServer interface\n// for the provided Keeper.\nfunc NewMsgServerImpl(keeper *keeper.Keeper, bk bankkeeper.Keeper) types.MsgServer {\n\treturn &msgServer{\n\t\tKeeper: keeper,\n\t\tbk:     bk,\n\t}\n}\n\nvar _ types.MsgServer = msgServer{}\n\n// CreateValidator defines a method for creating a new validator\nfunc (k msgServer) CreateValidator(goCtx context.Context, msg *types.MsgCreateValidator) (*types.MsgCreateValidatorResponse, error) {\n\tresult, err := WrapCreateValidator(goCtx, k.bk, msg)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif !result {\n\t\treturn nil, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, \"unauthorized message: %T\", msg)\n\t}\n\n\t// ---------------------\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tvalAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif msg.Commission.Rate.LT(k.MinCommissionRate(ctx)) {\n\t\treturn nil, sdkerrors.Wrapf(types.ErrCommissionLTMinRate, \"cannot set validator commission to less than minimum rate of %s\", k.MinCommissionRate(ctx))\n\t}\n\n\t// check to see if the pubkey or sender has been registered before\n\tif _, found := k.GetValidator(ctx, valAddr); found {\n\t\treturn nil, types.ErrValidatorOwnerExists\n\t}\n\n\tpk, ok := msg.Pubkey.GetCachedValue().(cryptotypes.PubKey)\n\tif !ok {\n\t\treturn nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidType, \"Expecting cryptotypes.PubKey, got %T\", pk)\n\t}\n\n\tif _, found := k.GetValidatorByConsAddr(ctx, sdk.GetConsAddress(pk)); found {\n\t\treturn nil, types.ErrValidatorPubKeyExists\n\t}\n\n\tbondDenom := k.BondDenom(ctx)\n\tif msg.Value.Denom != bondDenom {\n\t\treturn nil, sdkerrors.Wrapf(\n\t\t\tsdkerrors.ErrInvalidRequest, \"invalid coin denomination: got %s, expected %s\", msg.Value.Denom, bondDenom,\n\t\t)\n\t}\n\n\tif _, err := msg.Description.EnsureLength(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tcp := ctx.ConsensusParams()\n\tif cp != nil && cp.Validator != nil {\n\t\tpkType := pk.Type()\n\t\thasKeyType := false\n\t\tfor _, keyType := range cp.Validator.PubKeyTypes {\n\t\t\tif pkType == keyType {\n\t\t\t\thasKeyType = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !hasKeyType {\n\t\t\treturn nil, sdkerrors.Wrapf(\n\t\t\t\ttypes.ErrValidatorPubKeyTypeNotSupported,\n\t\t\t\t\"got: %s, expected: %s\", pk.Type(), cp.Validator.PubKeyTypes,\n\t\t\t)\n\t\t}\n\t}\n\n\tvalidator, err := types.NewValidator(valAddr, pk, msg.Description)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tcommission := types.NewCommissionWithTime(\n\t\tmsg.Commission.Rate, msg.Commission.MaxRate,\n\t\tmsg.Commission.MaxChangeRate, ctx.BlockHeader().Time,\n\t)\n\n\tvalidator, err = validator.SetInitialCommission(commission)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tdelegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvalidator.MinSelfDelegation = msg.MinSelfDelegation\n\n\tk.SetValidator(ctx, validator)\n\tk.SetValidatorByConsAddr(ctx, validator)\n\tk.SetNewValidatorByPowerIndex(ctx, validator)\n\n\t// call the after-creation hook\n\tif err := k.Hooks().AfterValidatorCreated(ctx, validator.GetOperator()); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// move coins from the msg.Address account to a (self-delegation) delegator account\n\t// the validator account and global shares are updated within here\n\t// NOTE source will always be from a wallet which are unbonded\n\t_, err = k.Keeper.Delegate(ctx, delegatorAddress, msg.Value.Amount, types.Unbonded, validator, true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeCreateValidator,\n\t\t\tsdk.NewAttribute(types.AttributeKeyValidator, msg.ValidatorAddress),\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyAmount, msg.Value.String()),\n\t\t),\n\t})\n\n\treturn &types.MsgCreateValidatorResponse{}, nil\n}\n\n// EditValidator defines a method for editing an existing validator\nfunc (k msgServer) EditValidator(goCtx context.Context, msg *types.MsgEditValidator) (*types.MsgEditValidatorResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\tvalAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t// validator must already be registered\n\tvalidator, found := k.GetValidator(ctx, valAddr)\n\tif !found {\n\t\treturn nil, types.ErrNoValidatorFound\n\t}\n\n\t// replace all editable fields (clients should autofill existing values)\n\tdescription, err := validator.Description.UpdateDescription(msg.Description)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvalidator.Description = description\n\n\tif msg.CommissionRate != nil {\n\t\tcommission, err := k.UpdateValidatorCommission(ctx, validator, *msg.CommissionRate)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// call the before-modification hook since we're about to update the commission\n\t\tif err := k.Hooks().BeforeValidatorModified(ctx, valAddr); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tvalidator.Commission = commission\n\t}\n\n\tif msg.MinSelfDelegation != nil {\n\t\tif !msg.MinSelfDelegation.GT(validator.MinSelfDelegation) {\n\t\t\treturn nil, types.ErrMinSelfDelegationDecreased\n\t\t}\n\n\t\tif msg.MinSelfDelegation.GT(validator.Tokens) {\n\t\t\treturn nil, types.ErrSelfDelegationBelowMinimum\n\t\t}\n\n\t\tvalidator.MinSelfDelegation = *msg.MinSelfDelegation\n\t}\n\n\tk.SetValidator(ctx, validator)\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeEditValidator,\n\t\t\tsdk.NewAttribute(types.AttributeKeyCommissionRate, validator.Commission.String()),\n\t\t\tsdk.NewAttribute(types.AttributeKeyMinSelfDelegation, validator.MinSelfDelegation.String()),\n\t\t),\n\t})\n\n\treturn &types.MsgEditValidatorResponse{}, nil\n}\n\n// Delegate defines a method for performing a delegation of coins from a delegator to a validator\nfunc (k msgServer) Delegate(goCtx context.Context, msg *types.MsgDelegate) (*types.MsgDelegateResponse, error) {\n\tresult, err := WrapDelegate(goCtx, k.bk, msg)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif !result {\n\t\treturn nil, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, \"unauthorized message: %T\", msg)\n\t}\n\n\t// ---------------------\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\tvalAddr, valErr := sdk.ValAddressFromBech32(msg.ValidatorAddress)\n\tif valErr != nil {\n\t\treturn nil, valErr\n\t}\n\n\tvalidator, found := k.GetValidator(ctx, valAddr)\n\tif !found {\n\t\treturn nil, types.ErrNoValidatorFound\n\t}\n\n\tdelegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tbondDenom := k.BondDenom(ctx)\n\tif msg.Amount.Denom != bondDenom {\n\t\treturn nil, sdkerrors.Wrapf(\n\t\t\tsdkerrors.ErrInvalidRequest, \"invalid coin denomination: got %s, expected %s\", msg.Amount.Denom, bondDenom,\n\t\t)\n\t}\n\n\t// NOTE: source funds are always unbonded\n\tnewShares, err := k.Keeper.Delegate(ctx, delegatorAddress, msg.Amount.Amount, types.Unbonded, validator, true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif msg.Amount.Amount.IsInt64() {\n\t\tdefer func() {\n\t\t\ttelemetry.IncrCounter(1, types.ModuleName, \"delegate\")\n\t\t\ttelemetry.SetGaugeWithLabels(\n\t\t\t\t[]string{\"tx\", \"msg\", msg.Type()},\n\t\t\t\tfloat32(msg.Amount.Amount.Int64()),\n\t\t\t\t[]metrics.Label{telemetry.NewLabel(\"denom\", msg.Amount.Denom)},\n\t\t\t)\n\t\t}()\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeDelegate,\n\t\t\tsdk.NewAttribute(types.AttributeKeyValidator, msg.ValidatorAddress),\n\t\t\tsdk.NewAttribute(types.AttributeKeyDelegator, msg.DelegatorAddress),\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyAmount, msg.Amount.String()),\n\t\t\tsdk.NewAttribute(types.AttributeKeyNewShares, newShares.String()),\n\t\t),\n\t})\n\n\treturn &types.MsgDelegateResponse{}, nil\n}\n\n// BeginRedelegate defines a method for performing a redelegation of coins from a delegator and source validator to a destination validator\nfunc (k msgServer) BeginRedelegate(goCtx context.Context, msg *types.MsgBeginRedelegate) (*types.MsgBeginRedelegateResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\tvalSrcAddr, err := sdk.ValAddressFromBech32(msg.ValidatorSrcAddress)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdelegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tshares, err := k.ValidateUnbondAmount(\n\t\tctx, delegatorAddress, valSrcAddr, msg.Amount.Amount,\n\t)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tbondDenom := k.BondDenom(ctx)\n\tif msg.Amount.Denom != bondDenom {\n\t\treturn nil, sdkerrors.Wrapf(\n\t\t\tsdkerrors.ErrInvalidRequest, \"invalid coin denomination: got %s, expected %s\", msg.Amount.Denom, bondDenom,\n\t\t)\n\t}\n\n\tvalDstAddr, err := sdk.ValAddressFromBech32(msg.ValidatorDstAddress)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tcompletionTime, err := k.BeginRedelegation(\n\t\tctx, delegatorAddress, valSrcAddr, valDstAddr, shares,\n\t)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif msg.Amount.Amount.IsInt64() {\n\t\tdefer func() {\n\t\t\ttelemetry.IncrCounter(1, types.ModuleName, \"redelegate\")\n\t\t\ttelemetry.SetGaugeWithLabels(\n\t\t\t\t[]string{\"tx\", \"msg\", msg.Type()},\n\t\t\t\tfloat32(msg.Amount.Amount.Int64()),\n\t\t\t\t[]metrics.Label{telemetry.NewLabel(\"denom\", msg.Amount.Denom)},\n\t\t\t)\n\t\t}()\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeRedelegate,\n\t\t\tsdk.NewAttribute(types.AttributeKeySrcValidator, msg.ValidatorSrcAddress),\n\t\t\tsdk.NewAttribute(types.AttributeKeyDstValidator, msg.ValidatorDstAddress),\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyAmount, msg.Amount.String()),\n\t\t\tsdk.NewAttribute(types.AttributeKeyCompletionTime, completionTime.Format(time.RFC3339)),\n\t\t),\n\t})\n\n\treturn &types.MsgBeginRedelegateResponse{\n\t\tCompletionTime: completionTime,\n\t}, nil\n}\n\n// Undelegate defines a method for performing an undelegation from a delegate and a validator\nfunc (k msgServer) Undelegate(goCtx context.Context, msg *types.MsgUndelegate) (*types.MsgUndelegateResponse, error) {\n\tresult, err := WrapUndelegate(goCtx, k.bk, msg)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif !result {\n\t\treturn nil, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, \"unauthorized message: %T\", msg)\n\t}\n\n\t// ---------------------\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\taddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdelegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tshares, err := k.ValidateUnbondAmount(\n\t\tctx, delegatorAddress, addr, msg.Amount.Amount,\n\t)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tbondDenom := k.BondDenom(ctx)\n\tif msg.Amount.Denom != bondDenom {\n\t\treturn nil, sdkerrors.Wrapf(\n\t\t\tsdkerrors.ErrInvalidRequest, \"invalid coin denomination: got %s, expected %s\", msg.Amount.Denom, bondDenom,\n\t\t)\n\t}\n\n\tcompletionTime, err := k.Keeper.Undelegate(ctx, delegatorAddress, addr, shares)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif msg.Amount.Amount.IsInt64() {\n\t\tdefer func() {\n\t\t\ttelemetry.IncrCounter(1, types.ModuleName, \"undelegate\")\n\t\t\ttelemetry.SetGaugeWithLabels(\n\t\t\t\t[]string{\"tx\", \"msg\", msg.Type()},\n\t\t\t\tfloat32(msg.Amount.Amount.Int64()),\n\t\t\t\t[]metrics.Label{telemetry.NewLabel(\"denom\", msg.Amount.Denom)},\n\t\t\t)\n\t\t}()\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeUnbond,\n\t\t\tsdk.NewAttribute(types.AttributeKeyValidator, msg.ValidatorAddress),\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyAmount, msg.Amount.String()),\n\t\t\tsdk.NewAttribute(types.AttributeKeyDelegator, msg.DelegatorAddress),\n\t\t\tsdk.NewAttribute(types.AttributeKeyCompletionTime, completionTime.Format(time.RFC3339)),\n\t\t),\n\t})\n\n\treturn &types.MsgUndelegateResponse{\n\t\tCompletionTime: completionTime,\n\t}, nil\n}\n\nfunc (k msgServer) CancelUnbondingDelegation(goCtx context.Context, msg *types.MsgCancelUnbondingDelegation) (*types.MsgCancelUnbondingDelegationResponse, error) {\n\tresult, err := WrapCancelUnbondingDelegation(goCtx, k.bk, msg)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif !result {\n\t\treturn nil, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, \"unauthorized message: %T\", msg)\n\t}\n\n\t// ---------------------\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tvalAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tdelegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tbondDenom := k.BondDenom(ctx)\n\tif msg.Amount.Denom != bondDenom {\n\t\treturn nil, sdkerrors.Wrapf(\n\t\t\tsdkerrors.ErrInvalidRequest, \"invalid coin denomination: got %s, expected %s\", msg.Amount.Denom, bondDenom,\n\t\t)\n\t}\n\n\tvalidator, found := k.GetValidator(ctx, valAddr)\n\tif !found {\n\t\treturn nil, types.ErrNoValidatorFound\n\t}\n\n\t// In some situations, the exchange rate becomes invalid, e.g. if\n\t// Validator loses all tokens due to slashing. In this case,\n\t// make all future delegations invalid.\n\tif validator.InvalidExRate() {\n\t\treturn nil, types.ErrDelegatorShareExRateInvalid\n\t}\n\n\tif validator.IsJailed() {\n\t\treturn nil, types.ErrValidatorJailed\n\t}\n\n\tubd, found := k.GetUnbondingDelegation(ctx, delegatorAddress, valAddr)\n\tif !found {\n\t\treturn nil, status.Errorf(\n\t\t\tcodes.NotFound,\n\t\t\t\"unbonding delegation with delegator %s not found for validator %s\",\n\t\t\tmsg.DelegatorAddress, msg.ValidatorAddress,\n\t\t)\n\t}\n\n\tvar (\n\t\tunbondEntry      types.UnbondingDelegationEntry\n\t\tunbondEntryIndex int64 = -1\n\t)\n\n\tfor i, entry := range ubd.Entries {\n\t\tif entry.CreationHeight == msg.CreationHeight {\n\t\t\tunbondEntry = entry\n\t\t\tunbondEntryIndex = int64(i)\n\t\t\tbreak\n\t\t}\n\t}\n\tif unbondEntryIndex == -1 {\n\t\treturn nil, sdkerrors.ErrNotFound.Wrapf(\"unbonding delegation entry is not found at block height %d\", msg.CreationHeight)\n\t}\n\n\tif unbondEntry.Balance.LT(msg.Amount.Amount) {\n\t\treturn nil, sdkerrors.ErrInvalidRequest.Wrap(\"amount is greater than the unbonding delegation entry balance\")\n\t}\n\n\tif unbondEntry.CompletionTime.Before(ctx.BlockTime()) {\n\t\treturn nil, sdkerrors.ErrInvalidRequest.Wrap(\"unbonding delegation is already processed\")\n\t}\n\n\t// delegate back the unbonding delegation amount to the validator\n\t_, err = k.Keeper.Delegate(ctx, delegatorAddress, msg.Amount.Amount, types.Unbonding, validator, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tamount := unbondEntry.Balance.Sub(msg.Amount.Amount)\n\tif amount.IsZero() {\n\t\tubd.RemoveEntry(unbondEntryIndex)\n\t} else {\n\t\t// update the unbondingDelegationEntryBalance and InitialBalance for ubd entry\n\t\tunbondEntry.Balance = amount\n\t\tunbondEntry.InitialBalance = unbondEntry.InitialBalance.Sub(msg.Amount.Amount)\n\t\tubd.Entries[unbondEntryIndex] = unbondEntry\n\t}\n\n\t// set the unbonding delegation or remove it if there are no more entries\n\tif len(ubd.Entries) == 0 {\n\t\tk.RemoveUnbondingDelegation(ctx, ubd)\n\t} else {\n\t\tk.SetUnbondingDelegation(ctx, ubd)\n\t}\n\n\tctx.EventManager().EmitEvent(\n\t\tsdk.NewEvent(\n\t\t\ttypes.EventTypeCancelUnbondingDelegation,\n\t\t\tsdk.NewAttribute(sdk.AttributeKeyAmount, msg.Amount.String()),\n\t\t\tsdk.NewAttribute(types.AttributeKeyValidator, msg.ValidatorAddress),\n\t\t\tsdk.NewAttribute(types.AttributeKeyDelegator, msg.DelegatorAddress),\n\t\t\tsdk.NewAttribute(types.AttributeKeyCreationHeight, strconv.FormatInt(msg.CreationHeight, 10)),\n\t\t),\n\t)\n\n\treturn &types.MsgCancelUnbondingDelegationResponse{}, nil\n}\n\nfunc (ms msgServer) UpdateParams(goCtx context.Context, msg *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tif ms.GetAuthority() != msg.Authority {\n\t\treturn nil, sdkerrors.Wrapf(govtypes.ErrInvalidSigner, \"invalid authority; expected %s, got %s\", ms.GetAuthority(), msg.Authority)\n\t}\n\n\t// store params\n\tif err := ms.SetParams(ctx, msg.Params); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &types.MsgUpdateParamsResponse{}, nil\n}\n\n// -------------\n\nfunc WrapDelegate(\n\tgoCtx context.Context,\n\tbk bankkeeper.Keeper,\n\tmsg *types.MsgDelegate,\n) (bool, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tdelegator, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\ttoMint := sdk.NewCoin(ctypes.SCYB, msg.Amount.Amount)\n\terr = bk.MintCoins(ctx, resourcestypes.ResourcesName, sdk.NewCoins(toMint))\n\tif err != nil {\n\t\treturn false, err\n\t}\n\terr = bk.SendCoinsFromModuleToAccount(ctx, resourcestypes.ResourcesName, delegator, sdk.NewCoins(toMint))\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\treturn true, nil\n}\n\nfunc WrapUndelegate(\n\tgoCtx context.Context,\n\tbk bankkeeper.Keeper,\n\tmsg *types.MsgUndelegate,\n) (bool, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tdelegator, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\ttoBurn := sdk.NewCoin(ctypes.SCYB, msg.Amount.Amount)\n\terr = bk.SendCoinsFromAccountToModule(ctx, delegator, resourcestypes.ResourcesName, sdk.NewCoins(toBurn))\n\tif err != nil {\n\t\treturn false, err\n\t}\n\terr = bk.BurnCoins(ctx, resourcestypes.ResourcesName, sdk.NewCoins(toBurn))\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\treturn true, nil\n}\n\nfunc WrapCreateValidator(\n\tgoCtx context.Context,\n\tbk bankkeeper.Keeper,\n\tmsg *types.MsgCreateValidator,\n) (bool, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tdelegator, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\ttoMint := sdk.NewCoin(ctypes.SCYB, msg.Value.Amount)\n\terr = bk.MintCoins(ctx, resourcestypes.ResourcesName, sdk.NewCoins(toMint))\n\tif err != nil {\n\t\treturn false, err\n\t}\n\terr = bk.SendCoinsFromModuleToAccount(ctx, resourcestypes.ResourcesName, delegator, sdk.NewCoins(toMint))\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\treturn true, nil\n}\n\nfunc WrapCancelUnbondingDelegation(\n\tgoCtx context.Context,\n\tbk bankkeeper.Keeper,\n\tmsg *types.MsgCancelUnbondingDelegation,\n) (bool, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tdelegator, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\ttoMint := sdk.NewCoin(ctypes.SCYB, msg.Amount.Amount)\n\terr = bk.MintCoins(ctx, resourcestypes.ResourcesName, sdk.NewCoins(toMint))\n\tif err != nil {\n\t\treturn false, err\n\t}\n\terr = bk.SendCoinsFromModuleToAccount(ctx, resourcestypes.ResourcesName, delegator, sdk.NewCoins(toMint))\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\treturn true, nil\n}\n"
  },
  {
    "path": "x/tokenfactory/README.md",
    "content": "# Token Factory\n\nThe tokenfactory module allows any account to create a new token with\nthe name `factory/{creator address}/{subdenom}`. Because tokens are\nnamespaced by creator address, this allows token minting to be\npermissionless, due to not needing to resolve name collisions. A single\naccount can create multiple denoms, by providing a unique subdenom for each\ncreated denom. Once a denom is created, the original creator is given\n\"admin\" privileges over the asset. This allows them to:\n\n- Mint their denom to any account\n- Burn their denom from any account\n- Create a transfer of their denom between any two accounts\n- Change the admin. In the future, more admin capabilities may be added. Admins\n  can choose to share admin privileges with other accounts using the authz\n  module. The `ChangeAdmin` functionality, allows changing the master admin\n  account, or even setting it to `\"\"`, meaning no account has admin privileges\n  of the asset.\n\n## Messages\n\n### CreateDenom\n\nCreates a denom of `factory/{creator address}/{subdenom}` given the denom creator\naddress and the subdenom. Subdenoms can contain `[a-zA-Z0-9./]`.\n\n```go\nmessage MsgCreateDenom {\n  string sender = 1 [ (gogoproto.moretags) = \"yaml:\\\"sender\\\"\" ];\n  string subdenom = 2 [ (gogoproto.moretags) = \"yaml:\\\"subdenom\\\"\" ];\n}\n```\n\n**State Modifications:**\n\n- Fund community pool with the denom creation fee from the creator address, set\n  in `Params`.\n- Set `DenomMetaData` via bank keeper.\n- Set `AuthorityMetadata` for the given denom to store the admin for the created\n  denom `factory/{creator address}/{subdenom}`. Admin is automatically set as the\n  Msg sender.\n- Add denom to the `CreatorPrefixStore`, where a state of denoms created per\n  creator is kept.\n\n### Mint\n\nMinting of a specific denom is only allowed for the current admin.\nNote, the current admin is defaulted to the creator of the denom.\n\n```go\nmessage MsgMint {\n  string sender = 1 [ (gogoproto.moretags) = \"yaml:\\\"sender\\\"\" ];\n  cosmos.base.v1beta1.Coin amount = 2 [\n    (gogoproto.moretags) = \"yaml:\\\"amount\\\"\",\n    (gogoproto.nullable) = false\n  ];\n}\n```\n\n**State Modifications:**\n\n- Safety check the following\n  - Check that the denom minting is created via `tokenfactory` module\n  - Check that the sender of the message is the admin of the denom\n- Mint designated amount of tokens for the denom via `bank` module\n\n### Burn\n\nBurning of a specific denom is only allowed for the current admin.\nNote, the current admin is defaulted to the creator of the denom.\n\n```go\nmessage MsgBurn {\n  string sender = 1 [ (gogoproto.moretags) = \"yaml:\\\"sender\\\"\" ];\n  cosmos.base.v1beta1.Coin amount = 2 [\n    (gogoproto.moretags) = \"yaml:\\\"amount\\\"\",\n    (gogoproto.nullable) = false\n  ];\n}\n```\n\n**State Modifications:**\n\n- Safety check the following\n  - Check that the denom minting is created via `tokenfactory` module\n  - Check that the sender of the message is the admin of the denom\n- Burn designated amount of tokens for the denom via `bank` module\n\n### ChangeAdmin\n\nChange the admin of a denom. Note, this is only allowed to be called by the current admin of the denom.\n\n```go\nmessage MsgChangeAdmin {\n  string sender = 1 [ (gogoproto.moretags) = \"yaml:\\\"sender\\\"\" ];\n  string denom = 2 [ (gogoproto.moretags) = \"yaml:\\\"denom\\\"\" ];\n  string newAdmin = 3 [ (gogoproto.moretags) = \"yaml:\\\"new_admin\\\"\" ];\n}\n```\n\n### SetDenomMetadata\n\nSetting of metadata for a specific denom is only allowed for the admin of the denom.\nIt allows the overwriting of the denom metadata in the bank module.\n\n```go\nmessage MsgChangeAdmin {\n  string sender = 1 [ (gogoproto.moretags) = \"yaml:\\\"sender\\\"\" ];\n  cosmos.bank.v1beta1.Metadata metadata = 2 [ (gogoproto.moretags) = \"yaml:\\\"metadata\\\"\", (gogoproto.nullable)   = false ];\n}\n```\n\n**State Modifications:**\n\n- Check that sender of the message is the admin of denom\n- Modify `AuthorityMetadata` state entry to change the admin of the denom\n\n## Expectations from the chain\n\nThe chain's bech32 prefix for addresses can be at most 16 characters long.\n\nThis comes from denoms having a 128 byte maximum length, enforced from the SDK,\nand us setting longest_subdenom to be 44 bytes.\n\nA token factory token's denom is: `factory/{creator address}/{subdenom}`\n\nSplitting up into sub-components, this has:\n\n- `len(factory) = 7`\n- `2 * len(\"/\") = 2`\n- `len(longest_subdenom)`\n- `len(creator_address) = len(bech32(longest_addr_length, chain_addr_prefix))`.\n\nLongest addr length at the moment is `32 bytes`. Due to SDK error correction\nsettings, this means `len(bech32(32, chain_addr_prefix)) = len(chain_addr_prefix) + 1 + 58`.\nAdding this all, we have a total length constraint of `128 = 7 + 2 + len(longest_subdenom) + len(longest_chain_addr_prefix) + 1 + 58`.\nTherefore `len(longest_subdenom) + len(longest_chain_addr_prefix) = 128 - (7 + 2 + 1 + 58) = 60`.\n\nThe choice between how we standardized the split these 60 bytes between maxes\nfrom longest_subdenom and longest_chain_addr_prefix is somewhat arbitrary.\nConsiderations going into this:\n\n- Per [BIP-0173](https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki#bech32)\n  the technically longest HRP for a 32 byte address ('data field') is 31 bytes.\n  (Comes from encode(data) = 59 bytes, and max length = 90 bytes)\n- subdenom should be at least 32 bytes so hashes can go into it\n- longer subdenoms are very helpful for creating human readable denoms\n- chain addresses should prefer being smaller. The longest HRP in cosmos to date is 11 bytes. (`persistence`)\n\nFor explicitness, its currently set to `len(longest_subdenom) = 44` and `len(longest_chain_addr_prefix) = 16`.\n\nPlease note, if the SDK increases the maximum length of a denom from 128 bytes,\nthese caps should increase.\n\nSo please don't make code rely on these max lengths for parsing.\n"
  },
  {
    "path": "x/tokenfactory/client/cli/query.go",
    "content": "package cli\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/cosmos/cosmos-sdk/client/flags\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\n// GetQueryCmd returns the cli query commands for this module\nfunc GetQueryCmd() *cobra.Command {\n\t// Group tokenfactory queries under a subcommand\n\tcmd := &cobra.Command{\n\t\tUse:                        types.ModuleName,\n\t\tShort:                      fmt.Sprintf(\"Querying commands for the %s module\", types.ModuleName),\n\t\tDisableFlagParsing:         true,\n\t\tSuggestionsMinimumDistance: 2,\n\t\tRunE:                       client.ValidateCmd,\n\t}\n\n\tcmd.AddCommand(\n\t\tGetParams(),\n\t\tGetCmdDenomAuthorityMetadata(),\n\t\tGetCmdDenomsFromCreator(),\n\t)\n\n\treturn cmd\n}\n\n// GetParams returns the params for the module\nfunc GetParams() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"params [flags]\",\n\t\tShort: \"Get the params for the x/tokenfactory module\",\n\t\tArgs:  cobra.ExactArgs(0),\n\t\tRunE: func(cmd *cobra.Command, _ []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tres, err := queryClient.Params(cmd.Context(), &types.QueryParamsRequest{})\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\n// GetCmdDenomAuthorityMetadata returns the authority metadata for a queried denom\nfunc GetCmdDenomAuthorityMetadata() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"denom-authority-metadata [denom] [flags]\",\n\t\tShort: \"Get the authority metadata for a specific denom\",\n\t\tArgs:  cobra.ExactArgs(1),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tres, err := queryClient.DenomAuthorityMetadata(cmd.Context(), &types.QueryDenomAuthorityMetadataRequest{\n\t\t\t\tDenom: args[0],\n\t\t\t})\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n\n// GetCmdDenomsFromCreator a command to get a list of all tokens created by a specific creator address\nfunc GetCmdDenomsFromCreator() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"denoms-from-creator [creator address] [flags]\",\n\t\tShort: \"Returns a list of all tokens created by a specific creator address\",\n\t\tArgs:  cobra.ExactArgs(1),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientQueryContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqueryClient := types.NewQueryClient(clientCtx)\n\n\t\t\tres, err := queryClient.DenomsFromCreator(cmd.Context(), &types.QueryDenomsFromCreatorRequest{\n\t\t\t\tCreator: args[0],\n\t\t\t})\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn clientCtx.PrintProto(res)\n\t\t},\n\t}\n\n\tflags.AddQueryFlagsToCmd(cmd)\n\n\treturn cmd\n}\n"
  },
  {
    "path": "x/tokenfactory/client/cli/tx.go",
    "content": "package cli\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/cosmos/cosmos-sdk/client/flags\"\n\t\"github.com/cosmos/cosmos-sdk/client/tx\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\n// GetTxCmd returns the transaction commands for this module\nfunc GetTxCmd() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:                        types.ModuleName,\n\t\tShort:                      fmt.Sprintf(\"%s transactions subcommands\", types.ModuleName),\n\t\tDisableFlagParsing:         true,\n\t\tSuggestionsMinimumDistance: 2,\n\t\tRunE:                       client.ValidateCmd,\n\t}\n\n\tcmd.AddCommand(\n\t\tNewCreateDenomCmd(),\n\t\tNewMintCmd(),\n\t\tNewMintToCmd(),\n\t\tNewBurnCmd(),\n\t\tNewBurnFromCmd(),\n\t\tNewForceTransferCmd(),\n\t\tNewChangeAdminCmd(),\n\t\tNewModifyDenomMetadataCmd(),\n\t)\n\n\treturn cmd\n}\n\n// NewCreateDenomCmd broadcast MsgCreateDenom\nfunc NewCreateDenomCmd() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"create-denom [subdenom] [flags]\",\n\t\tShort: \"create a new denom from an account\",\n\t\tArgs:  cobra.ExactArgs(1),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\ttxf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\ttxf = txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever)\n\n\t\t\tmsg := types.NewMsgCreateDenom(\n\t\t\t\tclientCtx.GetFromAddress().String(),\n\t\t\t\targs[0],\n\t\t\t)\n\n\t\t\treturn tx.GenerateOrBroadcastTxWithFactory(clientCtx, txf, msg)\n\t\t},\n\t}\n\n\tflags.AddTxFlagsToCmd(cmd)\n\treturn cmd\n}\n\n// NewMintCmd broadcast MsgMint\nfunc NewMintCmd() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"mint [amount] [flags]\",\n\t\tShort: \"Mint a denom to your address. Must have admin authority to do so.\",\n\t\tArgs:  cobra.ExactArgs(1),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\ttxf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\ttxf = txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever)\n\n\t\t\tamount, err := sdk.ParseCoinNormalized(args[0])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tmsg := types.NewMsgMint(\n\t\t\t\tclientCtx.GetFromAddress().String(),\n\t\t\t\tamount,\n\t\t\t)\n\n\t\t\treturn tx.GenerateOrBroadcastTxWithFactory(clientCtx, txf, msg)\n\t\t},\n\t}\n\n\tflags.AddTxFlagsToCmd(cmd)\n\treturn cmd\n}\n\n// NewMintToCmd broadcast MsgMintTo\nfunc NewMintToCmd() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"mint-to [address] [amount] [flags]\",\n\t\tShort: \"Mint a denom to an address. Must have admin authority to do so.\",\n\t\tArgs:  cobra.ExactArgs(2),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\ttxf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\ttxf = txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever)\n\n\t\t\ttoAddr, err := sdk.AccAddressFromBech32(args[0])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tamount, err := sdk.ParseCoinNormalized(args[1])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tmsg := types.NewMsgMintTo(\n\t\t\t\tclientCtx.GetFromAddress().String(),\n\t\t\t\tamount,\n\t\t\t\ttoAddr.String(),\n\t\t\t)\n\n\t\t\treturn tx.GenerateOrBroadcastTxWithFactory(clientCtx, txf, msg)\n\t\t},\n\t}\n\n\tflags.AddTxFlagsToCmd(cmd)\n\treturn cmd\n}\n\n// NewBurnCmd broadcast MsgBurn\nfunc NewBurnCmd() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"burn [amount] [flags]\",\n\t\tShort: \"Burn tokens from an address. Must have admin authority to do so.\",\n\t\tArgs:  cobra.ExactArgs(1),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\ttxf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\ttxf = txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever)\n\n\t\t\tamount, err := sdk.ParseCoinNormalized(args[0])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tmsg := types.NewMsgBurn(\n\t\t\t\tclientCtx.GetFromAddress().String(),\n\t\t\t\tamount,\n\t\t\t)\n\n\t\t\treturn tx.GenerateOrBroadcastTxWithFactory(clientCtx, txf, msg)\n\t\t},\n\t}\n\n\tflags.AddTxFlagsToCmd(cmd)\n\treturn cmd\n}\n\n// NewBurnFromCmd broadcast MsgBurnFrom\nfunc NewBurnFromCmd() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"burn-from [address] [amount] [flags]\",\n\t\tShort: \"Burn tokens from an address. Must have admin authority to do so.\",\n\t\tArgs:  cobra.ExactArgs(2),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\ttxf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\ttxf = txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever)\n\n\t\t\tfromAddr, err := sdk.AccAddressFromBech32(args[0])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tamount, err := sdk.ParseCoinNormalized(args[1])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tmsg := types.NewMsgBurnFrom(\n\t\t\t\tclientCtx.GetFromAddress().String(),\n\t\t\t\tamount,\n\t\t\t\tfromAddr.String(),\n\t\t\t)\n\n\t\t\treturn tx.GenerateOrBroadcastTxWithFactory(clientCtx, txf, msg)\n\t\t},\n\t}\n\n\tflags.AddTxFlagsToCmd(cmd)\n\treturn cmd\n}\n\n// NewForceTransferCmd broadcast MsgForceTransfer\nfunc NewForceTransferCmd() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"force-transfer [amount] [transfer-from-address] [transfer-to-address] [flags]\",\n\t\tShort: \"Force transfer tokens from one address to another address. Must have admin authority to do so.\",\n\t\tArgs:  cobra.ExactArgs(3),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\ttxf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\ttxf = txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever)\n\n\t\t\tamount, err := sdk.ParseCoinNormalized(args[0])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tmsg := types.NewMsgForceTransfer(\n\t\t\t\tclientCtx.GetFromAddress().String(),\n\t\t\t\tamount,\n\t\t\t\targs[1],\n\t\t\t\targs[2],\n\t\t\t)\n\n\t\t\treturn tx.GenerateOrBroadcastTxWithFactory(clientCtx, txf, msg)\n\t\t},\n\t}\n\n\tflags.AddTxFlagsToCmd(cmd)\n\treturn cmd\n}\n\n// NewChangeAdminCmd broadcast MsgChangeAdmin\nfunc NewChangeAdminCmd() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"change-admin [denom] [new-admin-address] [flags]\",\n\t\tShort: \"Changes the admin address for a factory-created denom. Must have admin authority to do so.\",\n\t\tArgs:  cobra.ExactArgs(2),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\ttxf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\ttxf = txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever)\n\n\t\t\tmsg := types.NewMsgChangeAdmin(\n\t\t\t\tclientCtx.GetFromAddress().String(),\n\t\t\t\targs[0],\n\t\t\t\targs[1],\n\t\t\t)\n\n\t\t\treturn tx.GenerateOrBroadcastTxWithFactory(clientCtx, txf, msg)\n\t\t},\n\t}\n\n\tflags.AddTxFlagsToCmd(cmd)\n\treturn cmd\n}\n\n// NewModifyDenomMetadataCmd broadcast a Bank Metadata modification transaction\nfunc NewModifyDenomMetadataCmd() *cobra.Command {\n\tcmd := &cobra.Command{\n\t\tUse:   \"modify-metadata [denom] [ticker-symbol] [description] [exponent] [flags]\",\n\t\tShort: \"Changes the base data for frontends to query the data of.\",\n\t\tArgs:  cobra.ExactArgs(4),\n\t\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\t\tclientCtx, err := client.GetClientTxContext(cmd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\ttxf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\ttxf = txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever)\n\n\t\t\tfullDenom, ticker, desc := args[0], strings.ToUpper(args[1]), args[2]\n\n\t\t\tif !strings.HasPrefix(fullDenom, \"factory/\") {\n\t\t\t\treturn fmt.Errorf(\"denom must start with factory/\")\n\t\t\t}\n\n\t\t\tif len(ticker) == 0 {\n\t\t\t\treturn fmt.Errorf(\"ticker cannot be empty\")\n\t\t\t}\n\n\t\t\t// Exponent Checks\n\t\t\texponent, err := strconv.ParseUint(args[3], 10, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tbankMetadata := banktypes.Metadata{\n\t\t\t\tDescription: desc,\n\t\t\t\tDisplay:     ticker,\n\t\t\t\tSymbol:      ticker,\n\t\t\t\tName:        fullDenom,\n\t\t\t\tDenomUnits: []*banktypes.DenomUnit{\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom:    fullDenom,\n\t\t\t\t\t\tExponent: 0, // must be 0 for the base denom\n\t\t\t\t\t\tAliases:  []string{ticker},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom:    ticker,\n\t\t\t\t\t\tExponent: uint32(exponent),\n\t\t\t\t\t\tAliases:  []string{fullDenom},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tBase: fullDenom,\n\t\t\t}\n\n\t\t\tmsg := types.NewMsgSetDenomMetadata(\n\t\t\t\tclientCtx.GetFromAddress().String(),\n\t\t\t\tbankMetadata,\n\t\t\t)\n\n\t\t\treturn tx.GenerateOrBroadcastTxWithFactory(clientCtx, txf, msg)\n\t\t},\n\t}\n\n\tflags.AddTxFlagsToCmd(cmd)\n\treturn cmd\n}\n"
  },
  {
    "path": "x/tokenfactory/exported/exported.go",
    "content": "package exported\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tparamtypes \"github.com/cosmos/cosmos-sdk/x/params/types\"\n)\n\ntype (\n\tParamSet = paramtypes.ParamSet\n\n\t// Subspace defines an interface that implements the legacy x/params Subspace\n\t// type.\n\t//\n\t// NOTE: This is used solely for migration of x/params managed parameters.\n\tSubspace interface {\n\t\tGetParamSet(ctx sdk.Context, ps ParamSet)\n\t}\n)\n"
  },
  {
    "path": "x/tokenfactory/keeper/admins.go",
    "content": "package keeper\n\nimport (\n\t\"github.com/cosmos/gogoproto/proto\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\n// GetAuthorityMetadata returns the authority metadata for a specific denom\nfunc (k Keeper) GetAuthorityMetadata(ctx sdk.Context, denom string) (types.DenomAuthorityMetadata, error) {\n\tbz := k.GetDenomPrefixStore(ctx, denom).Get([]byte(types.DenomAuthorityMetadataKey))\n\n\tmetadata := types.DenomAuthorityMetadata{}\n\terr := proto.Unmarshal(bz, &metadata)\n\tif err != nil {\n\t\treturn types.DenomAuthorityMetadata{}, err\n\t}\n\treturn metadata, nil\n}\n\n// setAuthorityMetadata stores authority metadata for a specific denom\nfunc (k Keeper) setAuthorityMetadata(ctx sdk.Context, denom string, metadata types.DenomAuthorityMetadata) error {\n\terr := metadata.Validate()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tstore := k.GetDenomPrefixStore(ctx, denom)\n\n\tbz, err := proto.Marshal(&metadata)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tstore.Set([]byte(types.DenomAuthorityMetadataKey), bz)\n\treturn nil\n}\n\nfunc (k Keeper) setAdmin(ctx sdk.Context, denom string, admin string) error {\n\tmetadata, err := k.GetAuthorityMetadata(ctx, denom)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tmetadata.Admin = admin\n\n\treturn k.setAuthorityMetadata(ctx, denom, metadata)\n}\n"
  },
  {
    "path": "x/tokenfactory/keeper/admins_test.go",
    "content": "package keeper_test\n\nimport (\n\t\"fmt\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\nfunc (suite *KeeperTestSuite) TestAdminMsgs() {\n\taddr0bal := int64(0)\n\taddr1bal := int64(0)\n\n\tbankKeeper := suite.App.AppKeepers.BankKeeper\n\n\tsuite.CreateDefaultDenom()\n\t// Make sure that the admin is set correctly\n\tqueryRes, err := suite.queryClient.DenomAuthorityMetadata(suite.Ctx.Context(), &types.QueryDenomAuthorityMetadataRequest{\n\t\tDenom: suite.defaultDenom,\n\t})\n\tsuite.Require().NoError(err)\n\tsuite.Require().Equal(suite.TestAccs[0].String(), queryRes.AuthorityMetadata.Admin)\n\n\t// Test minting to admins own account\n\t_, err = suite.msgServer.Mint(sdk.WrapSDKContext(suite.Ctx), types.NewMsgMint(suite.TestAccs[0].String(), sdk.NewInt64Coin(suite.defaultDenom, 10)))\n\taddr0bal += 10\n\tsuite.Require().NoError(err)\n\tsuite.Require().True(bankKeeper.GetBalance(suite.Ctx, suite.TestAccs[0], suite.defaultDenom).Amount.Int64() == addr0bal, bankKeeper.GetBalance(suite.Ctx, suite.TestAccs[0], suite.defaultDenom))\n\n\t// Test minting to a different account\n\t_, err = suite.msgServer.Mint(sdk.WrapSDKContext(suite.Ctx), types.NewMsgMintTo(suite.TestAccs[0].String(), sdk.NewInt64Coin(suite.defaultDenom, 10), suite.TestAccs[1].String()))\n\taddr1bal += 10\n\tsuite.Require().NoError(err)\n\tsuite.Require().True(suite.App.AppKeepers.BankKeeper.GetBalance(suite.Ctx, suite.TestAccs[1], suite.defaultDenom).Amount.Int64() == addr1bal, suite.App.AppKeepers.BankKeeper.GetBalance(suite.Ctx, suite.TestAccs[1], suite.defaultDenom))\n\n\t// Test force transferring\n\t_, err = suite.msgServer.ForceTransfer(sdk.WrapSDKContext(suite.Ctx), types.NewMsgForceTransfer(suite.TestAccs[0].String(), sdk.NewInt64Coin(suite.defaultDenom, 5), suite.TestAccs[1].String(), suite.TestAccs[0].String()))\n\taddr1bal -= 5\n\taddr0bal += 5\n\tsuite.Require().NoError(err)\n\tsuite.Require().True(suite.App.AppKeepers.BankKeeper.GetBalance(suite.Ctx, suite.TestAccs[0], suite.defaultDenom).Amount.Int64() == addr0bal, suite.App.AppKeepers.BankKeeper.GetBalance(suite.Ctx, suite.TestAccs[0], suite.defaultDenom))\n\tsuite.Require().True(suite.App.AppKeepers.BankKeeper.GetBalance(suite.Ctx, suite.TestAccs[1], suite.defaultDenom).Amount.Int64() == addr1bal, suite.App.AppKeepers.BankKeeper.GetBalance(suite.Ctx, suite.TestAccs[1], suite.defaultDenom))\n\n\t// Test burning from own account\n\t_, err = suite.msgServer.Burn(sdk.WrapSDKContext(suite.Ctx), types.NewMsgBurn(suite.TestAccs[0].String(), sdk.NewInt64Coin(suite.defaultDenom, 5)))\n\tsuite.Require().NoError(err)\n\tsuite.Require().True(bankKeeper.GetBalance(suite.Ctx, suite.TestAccs[1], suite.defaultDenom).Amount.Int64() == addr1bal)\n\n\t// Test Change Admin\n\t_, err = suite.msgServer.ChangeAdmin(sdk.WrapSDKContext(suite.Ctx), types.NewMsgChangeAdmin(suite.TestAccs[0].String(), suite.defaultDenom, suite.TestAccs[1].String()))\n\tsuite.Require().NoError(err)\n\tqueryRes, err = suite.queryClient.DenomAuthorityMetadata(suite.Ctx.Context(), &types.QueryDenomAuthorityMetadataRequest{\n\t\tDenom: suite.defaultDenom,\n\t})\n\tsuite.Require().NoError(err)\n\tsuite.Require().Equal(suite.TestAccs[1].String(), queryRes.AuthorityMetadata.Admin)\n\n\t// Make sure old admin can no longer do actions\n\t_, err = suite.msgServer.Burn(sdk.WrapSDKContext(suite.Ctx), types.NewMsgBurn(suite.TestAccs[0].String(), sdk.NewInt64Coin(suite.defaultDenom, 5)))\n\tsuite.Require().Error(err)\n\n\t// Make sure the new admin works\n\t_, err = suite.msgServer.Mint(sdk.WrapSDKContext(suite.Ctx), types.NewMsgMint(suite.TestAccs[1].String(), sdk.NewInt64Coin(suite.defaultDenom, 5)))\n\taddr1bal += 5\n\tsuite.Require().NoError(err)\n\tsuite.Require().True(bankKeeper.GetBalance(suite.Ctx, suite.TestAccs[1], suite.defaultDenom).Amount.Int64() == addr1bal)\n\n\t// Try setting admin to empty\n\t_, err = suite.msgServer.ChangeAdmin(sdk.WrapSDKContext(suite.Ctx), types.NewMsgChangeAdmin(suite.TestAccs[1].String(), suite.defaultDenom, \"\"))\n\tsuite.Require().NoError(err)\n\tqueryRes, err = suite.queryClient.DenomAuthorityMetadata(suite.Ctx.Context(), &types.QueryDenomAuthorityMetadataRequest{\n\t\tDenom: suite.defaultDenom,\n\t})\n\tsuite.Require().NoError(err)\n\tsuite.Require().Equal(\"\", queryRes.AuthorityMetadata.Admin)\n}\n\n// TestMintDenom ensures the following properties of the MintMessage:\n// * No one can mint tokens for a denom that doesn't exist\n// * Only the admin of a denom can mint tokens for it\n// * The admin of a denom can mint tokens for it\nfunc (suite *KeeperTestSuite) TestMintDenom() {\n\tbalances := make(map[string]int64)\n\tfor _, acc := range suite.TestAccs {\n\t\tbalances[acc.String()] = 0\n\t}\n\n\t// Create a denom\n\tsuite.CreateDefaultDenom()\n\n\tfor _, tc := range []struct {\n\t\tdesc       string\n\t\tmintMsg    types.MsgMint\n\t\texpectPass bool\n\t}{\n\t\t{\n\t\t\tdesc: \"denom does not exist\",\n\t\t\tmintMsg: *types.NewMsgMint(\n\t\t\t\tsuite.TestAccs[0].String(),\n\t\t\t\tsdk.NewInt64Coin(\"factory/osmo1t7egva48prqmzl59x5ngv4zx0dtrwewc9m7z44/evmos\", 10),\n\t\t\t),\n\t\t\texpectPass: false,\n\t\t},\n\t\t{\n\t\t\tdesc: \"mint is not by the admin\",\n\t\t\tmintMsg: *types.NewMsgMintTo(\n\t\t\t\tsuite.TestAccs[1].String(),\n\t\t\t\tsdk.NewInt64Coin(suite.defaultDenom, 10),\n\t\t\t\tsuite.TestAccs[0].String(),\n\t\t\t),\n\t\t\texpectPass: false,\n\t\t},\n\t\t{\n\t\t\tdesc: \"success case - mint to self\",\n\t\t\tmintMsg: *types.NewMsgMint(\n\t\t\t\tsuite.TestAccs[0].String(),\n\t\t\t\tsdk.NewInt64Coin(suite.defaultDenom, 10),\n\t\t\t),\n\t\t\texpectPass: true,\n\t\t},\n\t\t{\n\t\t\tdesc: \"success case - mint to another address\",\n\t\t\tmintMsg: *types.NewMsgMintTo(\n\t\t\t\tsuite.TestAccs[0].String(),\n\t\t\t\tsdk.NewInt64Coin(suite.defaultDenom, 10),\n\t\t\t\tsuite.TestAccs[1].String(),\n\t\t\t),\n\t\t\texpectPass: true,\n\t\t},\n\t} {\n\t\tsuite.Run(fmt.Sprintf(\"Case %s\", tc.desc), func() {\n\t\t\ttc := tc\n\t\t\t_, err := suite.msgServer.Mint(sdk.WrapSDKContext(suite.Ctx), &tc.mintMsg)\n\t\t\tif tc.expectPass {\n\t\t\t\tsuite.Require().NoError(err)\n\t\t\t\tbalances[tc.mintMsg.MintToAddress] += tc.mintMsg.Amount.Amount.Int64()\n\t\t\t} else {\n\t\t\t\tsuite.Require().Error(err)\n\t\t\t}\n\n\t\t\tmintToAddr, _ := sdk.AccAddressFromBech32(tc.mintMsg.MintToAddress)\n\t\t\tbal := suite.App.AppKeepers.BankKeeper.GetBalance(suite.Ctx, mintToAddr, suite.defaultDenom).Amount\n\t\t\tsuite.Require().Equal(bal.Int64(), balances[tc.mintMsg.MintToAddress])\n\t\t})\n\t}\n}\n\nfunc (suite *KeeperTestSuite) TestBurnDenom() {\n\t// Create a denom.\n\tsuite.CreateDefaultDenom()\n\n\t// mint 1000 default token for all testAccs\n\tbalances := make(map[string]int64)\n\tfor _, acc := range suite.TestAccs {\n\t\t_, err := suite.msgServer.Mint(sdk.WrapSDKContext(suite.Ctx), types.NewMsgMintTo(suite.TestAccs[0].String(), sdk.NewInt64Coin(suite.defaultDenom, 1000), acc.String()))\n\t\tsuite.Require().NoError(err)\n\t\tbalances[acc.String()] = 1000\n\t}\n\n\tfor _, tc := range []struct {\n\t\tdesc       string\n\t\tburnMsg    types.MsgBurn\n\t\texpectPass bool\n\t}{\n\t\t{\n\t\t\tdesc: \"denom does not exist\",\n\t\t\tburnMsg: *types.NewMsgBurn(\n\t\t\t\tsuite.TestAccs[0].String(),\n\t\t\t\tsdk.NewInt64Coin(\"factory/osmo1t7egva48prqmzl59x5ngv4zx0dtrwewc9m7z44/evmos\", 10),\n\t\t\t),\n\t\t\texpectPass: false,\n\t\t},\n\t\t{\n\t\t\tdesc: \"burn is not by the admin\",\n\t\t\tburnMsg: *types.NewMsgBurnFrom(\n\t\t\t\tsuite.TestAccs[1].String(),\n\t\t\t\tsdk.NewInt64Coin(suite.defaultDenom, 10),\n\t\t\t\tsuite.TestAccs[0].String(),\n\t\t\t),\n\t\t\texpectPass: false,\n\t\t},\n\t\t{\n\t\t\tdesc: \"burn more than balance\",\n\t\t\tburnMsg: *types.NewMsgBurn(\n\t\t\t\tsuite.TestAccs[0].String(),\n\t\t\t\tsdk.NewInt64Coin(suite.defaultDenom, 10000),\n\t\t\t),\n\t\t\texpectPass: false,\n\t\t},\n\t\t{\n\t\t\tdesc: \"success case - burn from self\",\n\t\t\tburnMsg: *types.NewMsgBurn(\n\t\t\t\tsuite.TestAccs[0].String(),\n\t\t\t\tsdk.NewInt64Coin(suite.defaultDenom, 10),\n\t\t\t),\n\t\t\texpectPass: true,\n\t\t},\n\t\t{\n\t\t\tdesc: \"success case - burn from another address\",\n\t\t\tburnMsg: *types.NewMsgBurnFrom(\n\t\t\t\tsuite.TestAccs[0].String(),\n\t\t\t\tsdk.NewInt64Coin(suite.defaultDenom, 10),\n\t\t\t\tsuite.TestAccs[1].String(),\n\t\t\t),\n\t\t\texpectPass: true,\n\t\t},\n\t} {\n\t\tsuite.Run(fmt.Sprintf(\"Case %s\", tc.desc), func() {\n\t\t\ttc := tc\n\t\t\t_, err := suite.msgServer.Burn(sdk.WrapSDKContext(suite.Ctx), &tc.burnMsg)\n\t\t\tif tc.expectPass {\n\t\t\t\tsuite.Require().NoError(err)\n\t\t\t\tbalances[tc.burnMsg.BurnFromAddress] -= tc.burnMsg.Amount.Amount.Int64()\n\t\t\t} else {\n\t\t\t\tsuite.Require().Error(err)\n\t\t\t}\n\n\t\t\tburnFromAddr, _ := sdk.AccAddressFromBech32(tc.burnMsg.BurnFromAddress)\n\t\t\tbal := suite.App.AppKeepers.BankKeeper.GetBalance(suite.Ctx, burnFromAddr, suite.defaultDenom).Amount\n\t\t\tsuite.Require().Equal(bal.Int64(), balances[tc.burnMsg.BurnFromAddress])\n\t\t})\n\t}\n}\n\nfunc (suite *KeeperTestSuite) TestForceTransferDenom() {\n\t// Create a denom.\n\tsuite.CreateDefaultDenom()\n\n\t// mint 1000 default token for all testAccs\n\tbalances := make(map[string]int64)\n\tfor _, acc := range suite.TestAccs {\n\t\t_, err := suite.msgServer.Mint(sdk.WrapSDKContext(suite.Ctx), types.NewMsgMintTo(suite.TestAccs[0].String(), sdk.NewInt64Coin(suite.defaultDenom, 1000), acc.String()))\n\t\tsuite.Require().NoError(err)\n\t\tbalances[acc.String()] = 1000\n\t}\n\n\tfor _, tc := range []struct {\n\t\tdesc             string\n\t\tforceTransferMsg types.MsgForceTransfer\n\t\texpectPass       bool\n\t}{\n\t\t{\n\t\t\tdesc: \"valid force transfer\",\n\t\t\tforceTransferMsg: *types.NewMsgForceTransfer(\n\t\t\t\tsuite.TestAccs[0].String(),\n\t\t\t\tsdk.NewInt64Coin(suite.defaultDenom, 10),\n\t\t\t\tsuite.TestAccs[1].String(),\n\t\t\t\tsuite.TestAccs[2].String(),\n\t\t\t),\n\t\t\texpectPass: true,\n\t\t},\n\t\t{\n\t\t\tdesc: \"denom does not exist\",\n\t\t\tforceTransferMsg: *types.NewMsgForceTransfer(\n\t\t\t\tsuite.TestAccs[0].String(),\n\t\t\t\tsdk.NewInt64Coin(\"factory/osmo1t7egva48prqmzl59x5ngv4zx0dtrwewc9m7z44/evmos\", 10),\n\t\t\t\tsuite.TestAccs[1].String(),\n\t\t\t\tsuite.TestAccs[2].String(),\n\t\t\t),\n\t\t\texpectPass: false,\n\t\t},\n\t\t{\n\t\t\tdesc: \"forceTransfer is not by the admin\",\n\t\t\tforceTransferMsg: *types.NewMsgForceTransfer(\n\t\t\t\tsuite.TestAccs[1].String(),\n\t\t\t\tsdk.NewInt64Coin(suite.defaultDenom, 10),\n\t\t\t\tsuite.TestAccs[1].String(),\n\t\t\t\tsuite.TestAccs[2].String(),\n\t\t\t),\n\t\t\texpectPass: false,\n\t\t},\n\t\t{\n\t\t\tdesc: \"forceTransfer is greater than the balance of\",\n\t\t\tforceTransferMsg: *types.NewMsgForceTransfer(\n\t\t\t\tsuite.TestAccs[0].String(),\n\t\t\t\tsdk.NewInt64Coin(suite.defaultDenom, 10000),\n\t\t\t\tsuite.TestAccs[1].String(),\n\t\t\t\tsuite.TestAccs[2].String(),\n\t\t\t),\n\t\t\texpectPass: false,\n\t\t},\n\t} {\n\t\tsuite.Run(fmt.Sprintf(\"Case %s\", tc.desc), func() {\n\t\t\ttc := tc\n\t\t\t_, err := suite.msgServer.ForceTransfer(sdk.WrapSDKContext(suite.Ctx), &tc.forceTransferMsg)\n\t\t\tif tc.expectPass {\n\t\t\t\tsuite.Require().NoError(err)\n\n\t\t\t\tbalances[tc.forceTransferMsg.TransferFromAddress] -= tc.forceTransferMsg.Amount.Amount.Int64()\n\t\t\t\tbalances[tc.forceTransferMsg.TransferToAddress] += tc.forceTransferMsg.Amount.Amount.Int64()\n\t\t\t} else {\n\t\t\t\tsuite.Require().Error(err)\n\t\t\t}\n\n\t\t\tfromAddr, err := sdk.AccAddressFromBech32(tc.forceTransferMsg.TransferFromAddress)\n\t\t\tsuite.Require().NoError(err)\n\t\t\tfromBal := suite.App.AppKeepers.BankKeeper.GetBalance(suite.Ctx, fromAddr, suite.defaultDenom).Amount\n\t\t\tsuite.Require().True(fromBal.Int64() == balances[tc.forceTransferMsg.TransferFromAddress])\n\n\t\t\ttoAddr, err := sdk.AccAddressFromBech32(tc.forceTransferMsg.TransferToAddress)\n\t\t\tsuite.Require().NoError(err)\n\t\t\ttoBal := suite.App.AppKeepers.BankKeeper.GetBalance(suite.Ctx, toAddr, suite.defaultDenom).Amount\n\t\t\tsuite.Require().True(toBal.Int64() == balances[tc.forceTransferMsg.TransferToAddress])\n\t\t})\n\t}\n}\n\nfunc (suite *KeeperTestSuite) TestChangeAdminDenom() {\n\tfor _, tc := range []struct {\n\t\tdesc                    string\n\t\tmsgChangeAdmin          func(denom string) *types.MsgChangeAdmin\n\t\texpectedChangeAdminPass bool\n\t\texpectedAdminIndex      int\n\t\tmsgMint                 func(denom string) *types.MsgMint\n\t\texpectedMintPass        bool\n\t}{\n\t\t{\n\t\t\tdesc: \"creator admin can't mint after setting to '' \",\n\t\t\tmsgChangeAdmin: func(denom string) *types.MsgChangeAdmin {\n\t\t\t\treturn types.NewMsgChangeAdmin(suite.TestAccs[0].String(), denom, \"\")\n\t\t\t},\n\t\t\texpectedChangeAdminPass: true,\n\t\t\texpectedAdminIndex:      -1,\n\t\t\tmsgMint: func(denom string) *types.MsgMint {\n\t\t\t\treturn types.NewMsgMint(suite.TestAccs[0].String(), sdk.NewInt64Coin(denom, 5))\n\t\t\t},\n\t\t\texpectedMintPass: false,\n\t\t},\n\t\t{\n\t\t\tdesc: \"non-admins can't change the existing admin\",\n\t\t\tmsgChangeAdmin: func(denom string) *types.MsgChangeAdmin {\n\t\t\t\treturn types.NewMsgChangeAdmin(suite.TestAccs[1].String(), denom, suite.TestAccs[2].String())\n\t\t\t},\n\t\t\texpectedChangeAdminPass: false,\n\t\t\texpectedAdminIndex:      0,\n\t\t},\n\t\t{\n\t\t\tdesc: \"success change admin\",\n\t\t\tmsgChangeAdmin: func(denom string) *types.MsgChangeAdmin {\n\t\t\t\treturn types.NewMsgChangeAdmin(suite.TestAccs[0].String(), denom, suite.TestAccs[1].String())\n\t\t\t},\n\t\t\texpectedAdminIndex:      1,\n\t\t\texpectedChangeAdminPass: true,\n\t\t\tmsgMint: func(denom string) *types.MsgMint {\n\t\t\t\treturn types.NewMsgMint(suite.TestAccs[1].String(), sdk.NewInt64Coin(denom, 5))\n\t\t\t},\n\t\t\texpectedMintPass: true,\n\t\t},\n\t} {\n\t\tsuite.Run(fmt.Sprintf(\"Case %s\", tc.desc), func() {\n\t\t\t// setup test\n\t\t\tsuite.SetupTest()\n\n\t\t\t// Create a denom and mint\n\t\t\tres, err := suite.msgServer.CreateDenom(sdk.WrapSDKContext(suite.Ctx), types.NewMsgCreateDenom(suite.TestAccs[0].String(), \"bitcoin\"))\n\t\t\tsuite.Require().NoError(err)\n\n\t\t\ttestDenom := res.GetNewTokenDenom()\n\n\t\t\t_, err = suite.msgServer.Mint(sdk.WrapSDKContext(suite.Ctx), types.NewMsgMint(suite.TestAccs[0].String(), sdk.NewInt64Coin(testDenom, 10)))\n\t\t\tsuite.Require().NoError(err)\n\n\t\t\t_, err = suite.msgServer.ChangeAdmin(sdk.WrapSDKContext(suite.Ctx), tc.msgChangeAdmin(testDenom))\n\t\t\tif tc.expectedChangeAdminPass {\n\t\t\t\tsuite.Require().NoError(err)\n\t\t\t} else {\n\t\t\t\tsuite.Require().Error(err)\n\t\t\t}\n\n\t\t\tqueryRes, err := suite.queryClient.DenomAuthorityMetadata(suite.Ctx.Context(), &types.QueryDenomAuthorityMetadataRequest{\n\t\t\t\tDenom: testDenom,\n\t\t\t})\n\t\t\tsuite.Require().NoError(err)\n\n\t\t\t// expectedAdminIndex with negative value is assumed as admin with value of \"\"\n\t\t\tconst emptyStringAdminIndexFlag = -1\n\t\t\tif tc.expectedAdminIndex == emptyStringAdminIndexFlag {\n\t\t\t\tsuite.Require().Equal(\"\", queryRes.AuthorityMetadata.Admin)\n\t\t\t} else {\n\t\t\t\tsuite.Require().Equal(suite.TestAccs[tc.expectedAdminIndex].String(), queryRes.AuthorityMetadata.Admin)\n\t\t\t}\n\n\t\t\t// we test mint to test if admin authority is performed properly after admin change.\n\t\t\tif tc.msgMint != nil {\n\t\t\t\t_, err := suite.msgServer.Mint(sdk.WrapSDKContext(suite.Ctx), tc.msgMint(testDenom))\n\t\t\t\tif tc.expectedMintPass {\n\t\t\t\t\tsuite.Require().NoError(err)\n\t\t\t\t} else {\n\t\t\t\t\tsuite.Require().Error(err)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc (suite *KeeperTestSuite) TestSetDenomMetaData() {\n\t// setup test\n\tsuite.SetupTest()\n\tsuite.CreateDefaultDenom()\n\n\tfor _, tc := range []struct {\n\t\tdesc                string\n\t\tmsgSetDenomMetadata types.MsgSetDenomMetadata\n\t\texpectedPass        bool\n\t}{\n\t\t{\n\t\t\tdesc: \"successful set denom metadata\",\n\t\t\tmsgSetDenomMetadata: *types.NewMsgSetDenomMetadata(suite.TestAccs[0].String(), banktypes.Metadata{\n\t\t\t\tDescription: \"yeehaw\",\n\t\t\t\tDenomUnits: []*banktypes.DenomUnit{\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom:    suite.defaultDenom,\n\t\t\t\t\t\tExponent: 0,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom:    \"uosmo\",\n\t\t\t\t\t\tExponent: 6,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tBase:    suite.defaultDenom,\n\t\t\t\tDisplay: \"uosmo\",\n\t\t\t\tName:    \"OSMO\",\n\t\t\t\tSymbol:  \"OSMO\",\n\t\t\t}),\n\t\t\texpectedPass: true,\n\t\t},\n\t\t{\n\t\t\tdesc: \"non existent factory denom name\",\n\t\t\tmsgSetDenomMetadata: *types.NewMsgSetDenomMetadata(suite.TestAccs[0].String(), banktypes.Metadata{\n\t\t\t\tDescription: \"yeehaw\",\n\t\t\t\tDenomUnits: []*banktypes.DenomUnit{\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom:    fmt.Sprintf(\"factory/%s/litecoin\", suite.TestAccs[0].String()),\n\t\t\t\t\t\tExponent: 0,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom:    \"uosmo\",\n\t\t\t\t\t\tExponent: 6,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tBase:    fmt.Sprintf(\"factory/%s/litecoin\", suite.TestAccs[0].String()),\n\t\t\t\tDisplay: \"uosmo\",\n\t\t\t\tName:    \"OSMO\",\n\t\t\t\tSymbol:  \"OSMO\",\n\t\t\t}),\n\t\t\texpectedPass: false,\n\t\t},\n\t\t{\n\t\t\tdesc: \"non-factory denom\",\n\t\t\tmsgSetDenomMetadata: *types.NewMsgSetDenomMetadata(suite.TestAccs[0].String(), banktypes.Metadata{\n\t\t\t\tDescription: \"yeehaw\",\n\t\t\t\tDenomUnits: []*banktypes.DenomUnit{\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom:    \"uosmo\",\n\t\t\t\t\t\tExponent: 0,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom:    \"uosmoo\",\n\t\t\t\t\t\tExponent: 6,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tBase:    \"uosmo\",\n\t\t\t\tDisplay: \"uosmoo\",\n\t\t\t\tName:    \"OSMO\",\n\t\t\t\tSymbol:  \"OSMO\",\n\t\t\t}),\n\t\t\texpectedPass: false,\n\t\t},\n\t\t{\n\t\t\tdesc: \"wrong admin\",\n\t\t\tmsgSetDenomMetadata: *types.NewMsgSetDenomMetadata(suite.TestAccs[1].String(), banktypes.Metadata{\n\t\t\t\tDescription: \"yeehaw\",\n\t\t\t\tDenomUnits: []*banktypes.DenomUnit{\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom:    suite.defaultDenom,\n\t\t\t\t\t\tExponent: 0,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom:    \"uosmo\",\n\t\t\t\t\t\tExponent: 6,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tBase:    suite.defaultDenom,\n\t\t\t\tDisplay: \"uosmo\",\n\t\t\t\tName:    \"OSMO\",\n\t\t\t\tSymbol:  \"OSMO\",\n\t\t\t}),\n\t\t\texpectedPass: false,\n\t\t},\n\t\t{\n\t\t\tdesc: \"invalid metadata (missing display denom unit)\",\n\t\t\tmsgSetDenomMetadata: *types.NewMsgSetDenomMetadata(suite.TestAccs[0].String(), banktypes.Metadata{\n\t\t\t\tDescription: \"yeehaw\",\n\t\t\t\tDenomUnits: []*banktypes.DenomUnit{\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom:    suite.defaultDenom,\n\t\t\t\t\t\tExponent: 0,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tBase:    suite.defaultDenom,\n\t\t\t\tDisplay: \"uosmo\",\n\t\t\t\tName:    \"OSMO\",\n\t\t\t\tSymbol:  \"OSMO\",\n\t\t\t}),\n\t\t\texpectedPass: false,\n\t\t},\n\t} {\n\t\tsuite.Run(fmt.Sprintf(\"Case %s\", tc.desc), func() {\n\t\t\ttc := tc\n\t\t\tbankKeeper := suite.App.AppKeepers.BankKeeper\n\t\t\tres, err := suite.msgServer.SetDenomMetadata(sdk.WrapSDKContext(suite.Ctx), &tc.msgSetDenomMetadata)\n\t\t\tif tc.expectedPass {\n\t\t\t\tsuite.Require().NoError(err)\n\t\t\t\tsuite.Require().NotNil(res)\n\n\t\t\t\tmd, found := bankKeeper.GetDenomMetaData(suite.Ctx, suite.defaultDenom)\n\t\t\t\tsuite.Require().True(found)\n\t\t\t\tsuite.Require().Equal(tc.msgSetDenomMetadata.Metadata.Name, md.Name)\n\t\t\t} else {\n\t\t\t\tsuite.Require().Error(err)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "x/tokenfactory/keeper/bankactions.go",
    "content": "package keeper\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/status\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\nfunc (k Keeper) mintTo(ctx sdk.Context, amount sdk.Coin, mintTo string) error {\n\t// verify that denom is an x/tokenfactory denom\n\t_, _, err := types.DeconstructDenom(amount.Denom)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = k.bankKeeper.MintCoins(ctx, types.ModuleName, sdk.NewCoins(amount))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\taddr, err := sdk.AccAddressFromBech32(mintTo)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif k.bankKeeper.BlockedAddr(addr) {\n\t\treturn fmt.Errorf(\"failed to mint to blocked address: %s\", addr)\n\t}\n\n\treturn k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName,\n\t\taddr,\n\t\tsdk.NewCoins(amount))\n}\n\nfunc (k Keeper) burnFrom(ctx sdk.Context, amount sdk.Coin, burnFrom string) error {\n\t// verify that denom is an x/tokenfactory denom\n\t_, _, err := types.DeconstructDenom(amount.Denom)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\taddr, err := sdk.AccAddressFromBech32(burnFrom)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif k.bankKeeper.BlockedAddr(addr) {\n\t\treturn fmt.Errorf(\"failed to burn from blocked address: %s\", addr)\n\t}\n\n\terr = k.bankKeeper.SendCoinsFromAccountToModule(ctx,\n\t\taddr,\n\t\ttypes.ModuleName,\n\t\tsdk.NewCoins(amount))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn k.bankKeeper.BurnCoins(ctx, types.ModuleName, sdk.NewCoins(amount))\n}\n\nfunc (k Keeper) forceTransfer(ctx sdk.Context, amount sdk.Coin, fromAddr string, toAddr string) error {\n\t// verify that denom is an x/tokenfactory denom\n\t_, _, err := types.DeconstructDenom(amount.Denom)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfromAcc, err := sdk.AccAddressFromBech32(fromAddr)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tsortedPermAddrs := make([]string, 0, len(k.permAddrs))\n\tfor moduleName := range k.permAddrs {\n\t\tsortedPermAddrs = append(sortedPermAddrs, moduleName)\n\t}\n\tsort.Strings(sortedPermAddrs)\n\n\tfor _, moduleName := range sortedPermAddrs {\n\t\taccount := k.accountKeeper.GetModuleAccount(ctx, moduleName)\n\t\tif account == nil {\n\t\t\treturn status.Errorf(codes.NotFound, \"account %s not found\", moduleName)\n\t\t}\n\n\t\tif account.GetAddress().Equals(fromAcc) {\n\t\t\treturn status.Errorf(codes.Internal, \"send from module acc not available\")\n\t\t}\n\t}\n\n\tfromSdkAddr, err := sdk.AccAddressFromBech32(fromAddr)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\ttoSdkAddr, err := sdk.AccAddressFromBech32(toAddr)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif k.bankKeeper.BlockedAddr(toSdkAddr) {\n\t\treturn fmt.Errorf(\"failed to force transfer to blocked address: %s\", toSdkAddr)\n\t}\n\n\treturn k.bankKeeper.SendCoins(ctx, fromSdkAddr, toSdkAddr, sdk.NewCoins(amount))\n}\n"
  },
  {
    "path": "x/tokenfactory/keeper/createdenom.go",
    "content": "package keeper\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\n// ConvertToBaseToken converts a fee amount in a whitelisted fee token to the base fee token amount\nfunc (k Keeper) CreateDenom(ctx sdk.Context, creatorAddr string, subdenom string) (newTokenDenom string, err error) {\n\tdenom, err := k.validateCreateDenom(ctx, creatorAddr, subdenom)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\terr = k.chargeForCreateDenom(ctx, creatorAddr, subdenom)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\terr = k.createDenomAfterValidation(ctx, creatorAddr, denom)\n\treturn denom, err\n}\n\n// Runs CreateDenom logic after the charge and all denom validation has been handled.\n// Made into a second function for genesis initialization.\nfunc (k Keeper) createDenomAfterValidation(ctx sdk.Context, creatorAddr string, denom string) (err error) {\n\tdenomMetaData := banktypes.Metadata{\n\t\tDenomUnits: []*banktypes.DenomUnit{{\n\t\t\tDenom:    denom,\n\t\t\tExponent: 0,\n\t\t}},\n\t\tBase: denom,\n\t\t// The following is necessary for x/bank denom validation\n\t\tDisplay: denom,\n\t\tName:    denom,\n\t\tSymbol:  denom,\n\t}\n\n\tk.bankKeeper.SetDenomMetaData(ctx, denomMetaData)\n\n\tauthorityMetadata := types.DenomAuthorityMetadata{\n\t\tAdmin: creatorAddr,\n\t}\n\terr = k.setAuthorityMetadata(ctx, denom, authorityMetadata)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tk.addDenomFromCreator(ctx, creatorAddr, denom)\n\treturn nil\n}\n\nfunc (k Keeper) validateCreateDenom(ctx sdk.Context, creatorAddr string, subdenom string) (newTokenDenom string, err error) {\n\t// TODO: This was a nil key on Store issue. Removed as we are upgrading IBC versions now\n\t// Temporary check until IBC bug is sorted out\n\t// if k.bankKeeper.HasSupply(ctx, subdenom) {\n\t// \treturn \"\", fmt.Errorf(\"temporary error until IBC bug is sorted out, \" +\n\t// \t\t\"can't create subdenoms that are the same as a native denom\")\n\t// }\n\n\tdenom, err := types.GetTokenDenom(creatorAddr, subdenom)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t_, found := k.bankKeeper.GetDenomMetaData(ctx, denom)\n\tif found {\n\t\treturn \"\", types.ErrDenomExists\n\t}\n\n\treturn denom, nil\n}\n\nfunc (k Keeper) chargeForCreateDenom(ctx sdk.Context, creatorAddr string, _ string) (err error) {\n\tparams := k.GetParams(ctx)\n\n\taccAddr, err := sdk.AccAddressFromBech32(creatorAddr)\n\tif err != nil {\n\t\treturn err\n\t}\n\t// if DenomCreationFee is non-zero, transfer the tokens from the creator\n\t// account to community pool, excluding contracts\n\tif params.DenomCreationFee != nil && len(accAddr.Bytes()) != 32 {\n\n\t\tif err := k.communityPoolKeeper.FundCommunityPool(ctx, params.DenomCreationFee, accAddr); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// if DenomCreationGasConsume is non-zero, consume the gas\n\t// if creatorAddr is contract then consume gas\n\tif params.DenomCreationGasConsume != 0 {\n\t\tctx.GasMeter().ConsumeGas(params.DenomCreationGasConsume, \"consume denom creation gas\")\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/tokenfactory/keeper/createdenom_test.go",
    "content": "package keeper_test\n\nimport (\n\t\"fmt\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n\t\"github.com/cybercongress/go-cyber/v7/app/apptesting\"\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\nfunc (suite *KeeperTestSuite) TestMsgCreateDenom() {\n\tvar (\n\t\ttokenFactoryKeeper = suite.App.AppKeepers.TokenFactoryKeeper\n\t\tbankKeeper         = suite.App.AppKeepers.BankKeeper\n\t\tdenomCreationFee   = tokenFactoryKeeper.GetParams(suite.Ctx).DenomCreationFee\n\t)\n\n\t// Get balance of acc 0 before creating a denom\n\tpreCreateBalance := bankKeeper.GetBalance(suite.Ctx, suite.TestAccs[0], denomCreationFee[0].Denom)\n\n\t// Creating a denom should work\n\tres, err := suite.msgServer.CreateDenom(sdk.WrapSDKContext(suite.Ctx), types.NewMsgCreateDenom(suite.TestAccs[0].String(), \"bitcoin\"))\n\tsuite.Require().NoError(err)\n\tsuite.Require().NotEmpty(res.GetNewTokenDenom())\n\n\t// Make sure that the admin is set correctly\n\tqueryRes, err := suite.queryClient.DenomAuthorityMetadata(suite.Ctx.Context(), &types.QueryDenomAuthorityMetadataRequest{\n\t\tDenom: res.GetNewTokenDenom(),\n\t})\n\tsuite.Require().NoError(err)\n\tsuite.Require().Equal(suite.TestAccs[0].String(), queryRes.AuthorityMetadata.Admin)\n\n\t// Make sure that the denom is valid from the perspective of x/bank\n\tbankQueryRes, err := suite.bankQueryClient.DenomMetadata(suite.Ctx.Context(), &banktypes.QueryDenomMetadataRequest{\n\t\tDenom: res.GetNewTokenDenom(),\n\t})\n\tsuite.Require().NoError(err)\n\tsuite.Require().NoError(bankQueryRes.Metadata.Validate())\n\n\t// Make sure that creation fee was deducted\n\tpostCreateBalance := bankKeeper.GetBalance(suite.Ctx, suite.TestAccs[0], tokenFactoryKeeper.GetParams(suite.Ctx).DenomCreationFee[0].Denom)\n\tsuite.Require().True(preCreateBalance.Sub(postCreateBalance).IsEqual(denomCreationFee[0]))\n\n\t// Make sure that a second version of the same denom can't be recreated\n\t_, err = suite.msgServer.CreateDenom(sdk.WrapSDKContext(suite.Ctx), types.NewMsgCreateDenom(suite.TestAccs[0].String(), \"bitcoin\"))\n\tsuite.Require().Error(err)\n\n\t// Creating a second denom should work\n\tres, err = suite.msgServer.CreateDenom(sdk.WrapSDKContext(suite.Ctx), types.NewMsgCreateDenom(suite.TestAccs[0].String(), \"litecoin\"))\n\tsuite.Require().NoError(err)\n\tsuite.Require().NotEmpty(res.GetNewTokenDenom())\n\n\t// Try querying all the denoms created by suite.TestAccs[0]\n\tqueryRes2, err := suite.queryClient.DenomsFromCreator(suite.Ctx.Context(), &types.QueryDenomsFromCreatorRequest{\n\t\tCreator: suite.TestAccs[0].String(),\n\t})\n\tsuite.Require().NoError(err)\n\tsuite.Require().Len(queryRes2.Denoms, 2)\n\n\t// Make sure that a second account can create a denom with the same subdenom\n\tres, err = suite.msgServer.CreateDenom(sdk.WrapSDKContext(suite.Ctx), types.NewMsgCreateDenom(suite.TestAccs[1].String(), \"bitcoin\"))\n\tsuite.Require().NoError(err)\n\tsuite.Require().NotEmpty(res.GetNewTokenDenom())\n\n\t// Make sure that an address with a \"/\" in it can't create denoms\n\t_, err = suite.msgServer.CreateDenom(sdk.WrapSDKContext(suite.Ctx), types.NewMsgCreateDenom(\"osmosis.eth/creator\", \"bitcoin\"))\n\tsuite.Require().Error(err)\n}\n\nfunc (suite *KeeperTestSuite) TestCreateDenom() {\n\tvar (\n\t\tprimaryDenom            = types.DefaultParams().DenomCreationFee[0].Denom\n\t\tsecondaryDenom          = apptesting.SecondaryDenom\n\t\tdefaultDenomCreationFee = types.Params{DenomCreationFee: sdk.NewCoins(sdk.NewCoin(primaryDenom, sdk.NewInt(50000000)))}\n\t\ttwoDenomCreationFee     = types.Params{DenomCreationFee: sdk.NewCoins(sdk.NewCoin(primaryDenom, sdk.NewInt(50000000)), sdk.NewCoin(secondaryDenom, sdk.NewInt(50000000)))}\n\t\tnilCreationFee          = types.Params{DenomCreationFee: nil}\n\t\tlargeCreationFee        = types.Params{DenomCreationFee: sdk.NewCoins(sdk.NewCoin(primaryDenom, sdk.NewInt(5000000000)))}\n\t)\n\n\tfor _, tc := range []struct {\n\t\tdesc             string\n\t\tdenomCreationFee types.Params\n\t\tsetup            func()\n\t\tsubdenom         string\n\t\tvalid            bool\n\t}{\n\t\t{\n\t\t\tdesc:             \"subdenom too long\",\n\t\t\tdenomCreationFee: defaultDenomCreationFee,\n\t\t\tsubdenom:         \"assadsadsadasdasdsadsadsadsadsadsadsklkadaskkkdasdasedskhanhassyeunganassfnlksdflksafjlkasd\",\n\t\t\tvalid:            false,\n\t\t},\n\t\t{\n\t\t\tdesc:             \"subdenom and creator pair already exists\",\n\t\t\tdenomCreationFee: defaultDenomCreationFee,\n\t\t\tsetup: func() {\n\t\t\t\t_, err := suite.msgServer.CreateDenom(sdk.WrapSDKContext(suite.Ctx), types.NewMsgCreateDenom(suite.TestAccs[0].String(), \"bitcoin\"))\n\t\t\t\tsuite.Require().NoError(err)\n\t\t\t},\n\t\t\tsubdenom: \"bitcoin\",\n\t\t\tvalid:    false,\n\t\t},\n\t\t{\n\t\t\tdesc:             \"success case: defaultDenomCreationFee\",\n\t\t\tdenomCreationFee: defaultDenomCreationFee,\n\t\t\tsubdenom:         \"evmos\",\n\t\t\tvalid:            true,\n\t\t},\n\t\t{\n\t\t\tdesc:             \"success case: twoDenomCreationFee\",\n\t\t\tdenomCreationFee: twoDenomCreationFee,\n\t\t\tsubdenom:         \"catcoin\",\n\t\t\tvalid:            true,\n\t\t},\n\t\t{\n\t\t\tdesc:             \"success case: nilCreationFee\",\n\t\t\tdenomCreationFee: nilCreationFee,\n\t\t\tsubdenom:         \"czcoin\",\n\t\t\tvalid:            true,\n\t\t},\n\t\t{\n\t\t\tdesc:             \"account doesn't have enough to pay for denom creation fee\",\n\t\t\tdenomCreationFee: largeCreationFee,\n\t\t\tsubdenom:         \"tooexpensive\",\n\t\t\tvalid:            false,\n\t\t},\n\t\t{\n\t\t\tdesc:             \"subdenom having invalid characters\",\n\t\t\tdenomCreationFee: defaultDenomCreationFee,\n\t\t\tsubdenom:         \"bit/***///&&&/coin\",\n\t\t\tvalid:            false,\n\t\t},\n\t} {\n\t\tsuite.SetupTest()\n\t\tsuite.Run(fmt.Sprintf(\"Case %s\", tc.desc), func() {\n\t\t\tif tc.setup != nil {\n\t\t\t\ttc.setup()\n\t\t\t}\n\t\t\ttokenFactoryKeeper := suite.App.AppKeepers.TokenFactoryKeeper\n\t\t\tbankKeeper := suite.App.AppKeepers.BankKeeper\n\t\t\t// Set denom creation fee in params\n\t\t\tif err := tokenFactoryKeeper.SetParams(suite.Ctx, tc.denomCreationFee); err != nil {\n\t\t\t\tsuite.Require().NoError(err)\n\t\t\t}\n\t\t\tdenomCreationFee := tokenFactoryKeeper.GetParams(suite.Ctx).DenomCreationFee\n\t\t\tsuite.Require().Equal(tc.denomCreationFee.DenomCreationFee, denomCreationFee)\n\n\t\t\t// note balance, create a tokenfactory denom, then note balance again\n\t\t\t// preCreateBalance := bankKeeper.GetAllBalances(suite.Ctx, suite.TestAccs[0])\n\t\t\tpreCreateBalance := bankKeeper.GetBalance(suite.Ctx, suite.TestAccs[0], \"stake\")\n\t\t\tres, err := suite.msgServer.CreateDenom(sdk.WrapSDKContext(suite.Ctx), types.NewMsgCreateDenom(suite.TestAccs[0].String(), tc.subdenom))\n\t\t\t// postCreateBalance := bankKeeper.GetAllBalances(suite.Ctx, suite.TestAccs[0])\n\t\t\tpostCreateBalance := bankKeeper.GetBalance(suite.Ctx, suite.TestAccs[0], \"stake\")\n\t\t\tif tc.valid {\n\t\t\t\tsuite.Require().NoError(err)\n\t\t\t\tif denomCreationFee != nil {\n\t\t\t\t\tsuite.Require().True(preCreateBalance.Sub(postCreateBalance).IsEqual(denomCreationFee[0]))\n\t\t\t\t}\n\n\t\t\t\t// Make sure that the admin is set correctly\n\t\t\t\tqueryRes, err := suite.queryClient.DenomAuthorityMetadata(suite.Ctx.Context(), &types.QueryDenomAuthorityMetadataRequest{\n\t\t\t\t\tDenom: res.GetNewTokenDenom(),\n\t\t\t\t})\n\n\t\t\t\tsuite.Require().NoError(err)\n\t\t\t\tsuite.Require().Equal(suite.TestAccs[0].String(), queryRes.AuthorityMetadata.Admin)\n\n\t\t\t} else {\n\t\t\t\tsuite.Require().Error(err)\n\t\t\t\t// Ensure we don't charge if we expect an error\n\t\t\t\tsuite.Require().True(preCreateBalance.IsEqual(postCreateBalance))\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "x/tokenfactory/keeper/creators.go",
    "content": "package keeper\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\nfunc (k Keeper) addDenomFromCreator(ctx sdk.Context, creator, denom string) {\n\tstore := k.GetCreatorPrefixStore(ctx, creator)\n\tstore.Set([]byte(denom), []byte(denom))\n}\n\nfunc (k Keeper) GetDenomsFromCreator(ctx sdk.Context, creator string) []string {\n\tstore := k.GetCreatorPrefixStore(ctx, creator)\n\n\titerator := store.Iterator(nil, nil)\n\tdefer iterator.Close()\n\n\tdenoms := []string{}\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tdenoms = append(denoms, string(iterator.Key()))\n\t}\n\treturn denoms\n}\n\nfunc (k Keeper) GetAllDenomsIterator(ctx sdk.Context) sdk.Iterator {\n\treturn k.GetCreatorsPrefixStore(ctx).Iterator(nil, nil)\n}\n\n// TODO: Get all denoms a user is the admin of currently\n"
  },
  {
    "path": "x/tokenfactory/keeper/genesis.go",
    "content": "package keeper\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\n// InitGenesis initializes the tokenfactory module's state from a provided genesis\n// state.\nfunc (k Keeper) InitGenesis(ctx sdk.Context, genState types.GenesisState) {\n\tk.CreateModuleAccount(ctx)\n\n\tif genState.Params.DenomCreationFee == nil {\n\t\tgenState.Params.DenomCreationFee = sdk.NewCoins()\n\t}\n\tif err := k.SetParams(ctx, genState.Params); err != nil {\n\t\tpanic(err)\n\t}\n\n\tfor _, genDenom := range genState.GetFactoryDenoms() {\n\t\tcreator, _, err := types.DeconstructDenom(genDenom.GetDenom())\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\terr = k.createDenomAfterValidation(ctx, creator, genDenom.GetDenom())\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\terr = k.setAuthorityMetadata(ctx, genDenom.GetDenom(), genDenom.GetAuthorityMetadata())\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t}\n}\n\n// ExportGenesis returns the tokenfactory module's exported genesis.\nfunc (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState {\n\tgenDenoms := []types.GenesisDenom{}\n\titerator := k.GetAllDenomsIterator(ctx)\n\tdefer iterator.Close()\n\tfor ; iterator.Valid(); iterator.Next() {\n\t\tdenom := string(iterator.Value())\n\n\t\tauthorityMetadata, err := k.GetAuthorityMetadata(ctx, denom)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\n\t\tgenDenoms = append(genDenoms, types.GenesisDenom{\n\t\t\tDenom:             denom,\n\t\t\tAuthorityMetadata: authorityMetadata,\n\t\t})\n\t}\n\n\treturn &types.GenesisState{\n\t\tFactoryDenoms: genDenoms,\n\t\tParams:        k.GetParams(ctx),\n\t}\n}\n"
  },
  {
    "path": "x/tokenfactory/keeper/genesis_test.go",
    "content": "package keeper_test\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\nfunc (suite *KeeperTestSuite) TestGenesis() {\n\tgenesisState := types.GenesisState{\n\t\tFactoryDenoms: []types.GenesisDenom{\n\t\t\t{\n\t\t\t\tDenom: \"factory/juno1t7egva48prqmzl59x5ngv4zx0dtrwewcmjwfym/bitcoin\",\n\t\t\t\tAuthorityMetadata: types.DenomAuthorityMetadata{\n\t\t\t\t\tAdmin: \"juno1t7egva48prqmzl59x5ngv4zx0dtrwewcmjwfym\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tDenom: \"factory/juno1t7egva48prqmzl59x5ngv4zx0dtrwewcmjwfym/diff-admin\",\n\t\t\t\tAuthorityMetadata: types.DenomAuthorityMetadata{\n\t\t\t\t\tAdmin: \"juno15czt5nhlnvayqq37xun9s9yus0d6y26dsvkcna\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tDenom: \"factory/juno1t7egva48prqmzl59x5ngv4zx0dtrwewcmjwfym/litecoin\",\n\t\t\t\tAuthorityMetadata: types.DenomAuthorityMetadata{\n\t\t\t\t\tAdmin: \"juno1t7egva48prqmzl59x5ngv4zx0dtrwewcmjwfym\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tsuite.SetupTestForInitGenesis()\n\tapp := suite.App\n\n\t// Test both with bank denom metadata set, and not set.\n\tfor i, denom := range genesisState.FactoryDenoms {\n\t\t// hacky, sets bank metadata to exist if i != 0, to cover both cases.\n\t\tif i != 0 {\n\t\t\tapp.AppKeepers.BankKeeper.SetDenomMetaData(suite.Ctx, banktypes.Metadata{Base: denom.GetDenom()})\n\t\t}\n\t}\n\n\tif err := app.AppKeepers.TokenFactoryKeeper.SetParams(suite.Ctx, types.Params{DenomCreationFee: sdk.Coins{sdk.NewInt64Coin(\"stake\", 100)}}); err != nil {\n\t\tpanic(err)\n\t}\n\tapp.AppKeepers.TokenFactoryKeeper.InitGenesis(suite.Ctx, genesisState)\n\n\t// check that the module account is now initialized\n\ttokenfactoryModuleAccount := app.AppKeepers.AccountKeeper.GetAccount(suite.Ctx, app.AppKeepers.AccountKeeper.GetModuleAddress(types.ModuleName))\n\tsuite.Require().NotNil(tokenfactoryModuleAccount)\n\n\texportedGenesis := app.AppKeepers.TokenFactoryKeeper.ExportGenesis(suite.Ctx)\n\tsuite.Require().NotNil(exportedGenesis)\n\tsuite.Require().Equal(genesisState, *exportedGenesis)\n}\n"
  },
  {
    "path": "x/tokenfactory/keeper/grpc_query.go",
    "content": "package keeper\n\nimport (\n\t\"context\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\nvar _ types.QueryServer = Keeper{}\n\nfunc (k Keeper) Params(ctx context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) {\n\tsdkCtx := sdk.UnwrapSDKContext(ctx)\n\tparams := k.GetParams(sdkCtx)\n\n\treturn &types.QueryParamsResponse{Params: params}, nil\n}\n\nfunc (k Keeper) DenomAuthorityMetadata(ctx context.Context, req *types.QueryDenomAuthorityMetadataRequest) (*types.QueryDenomAuthorityMetadataResponse, error) {\n\tsdkCtx := sdk.UnwrapSDKContext(ctx)\n\n\tauthorityMetadata, err := k.GetAuthorityMetadata(sdkCtx, req.GetDenom())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &types.QueryDenomAuthorityMetadataResponse{AuthorityMetadata: authorityMetadata}, nil\n}\n\nfunc (k Keeper) DenomsFromCreator(ctx context.Context, req *types.QueryDenomsFromCreatorRequest) (*types.QueryDenomsFromCreatorResponse, error) {\n\tsdkCtx := sdk.UnwrapSDKContext(ctx)\n\tdenoms := k.GetDenomsFromCreator(sdkCtx, req.GetCreator())\n\treturn &types.QueryDenomsFromCreatorResponse{Denoms: denoms}, nil\n}\n"
  },
  {
    "path": "x/tokenfactory/keeper/keeper.go",
    "content": "package keeper\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cometbft/cometbft/libs/log\"\n\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\t\"github.com/cosmos/cosmos-sdk/store/prefix\"\n\tstoretypes \"github.com/cosmos/cosmos-sdk/store/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tauthtypes \"github.com/cosmos/cosmos-sdk/x/auth/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\ntype (\n\tKeeper struct {\n\t\tcdc       codec.BinaryCodec\n\t\tstoreKey  storetypes.StoreKey\n\t\tpermAddrs map[string]authtypes.PermissionsForAddress\n\n\t\taccountKeeper       types.AccountKeeper\n\t\tbankKeeper          types.BankKeeper\n\t\tcommunityPoolKeeper types.CommunityPoolKeeper\n\n\t\tenabledCapabilities []string\n\n\t\t// the address capable of executing a MsgUpdateParams message. Typically, this\n\t\t// should be the x/gov module account.\n\t\tauthority string\n\t}\n)\n\n// NewKeeper returns a new instance of the x/tokenfactory keeper\nfunc NewKeeper(\n\tcdc codec.BinaryCodec,\n\tstoreKey storetypes.StoreKey,\n\tmaccPerms map[string][]string,\n\taccountKeeper types.AccountKeeper,\n\tbankKeeper types.BankKeeper,\n\tcommunityPoolKeeper types.CommunityPoolKeeper,\n\tenabledCapabilities []string,\n\tauthority string,\n) Keeper {\n\tpermAddrs := make(map[string]authtypes.PermissionsForAddress)\n\tfor name, perms := range maccPerms {\n\t\tpermAddrs[name] = authtypes.NewPermissionsForAddress(name, perms)\n\t}\n\n\treturn Keeper{\n\t\tcdc:      cdc,\n\t\tstoreKey: storeKey,\n\n\t\tpermAddrs:           permAddrs,\n\t\taccountKeeper:       accountKeeper,\n\t\tbankKeeper:          bankKeeper,\n\t\tcommunityPoolKeeper: communityPoolKeeper,\n\n\t\tenabledCapabilities: enabledCapabilities,\n\n\t\tauthority: authority,\n\t}\n}\n\n// GetAuthority returns the x/mint module's authority.\nfunc (k Keeper) GetAuthority() string {\n\treturn k.authority\n}\n\n// Logger returns a logger for the x/tokenfactory module\nfunc (k Keeper) Logger(ctx sdk.Context) log.Logger {\n\treturn ctx.Logger().With(\"module\", fmt.Sprintf(\"x/%s\", types.ModuleName))\n}\n\n// GetDenomPrefixStore returns the substore for a specific denom\nfunc (k Keeper) GetDenomPrefixStore(ctx sdk.Context, denom string) sdk.KVStore {\n\tstore := ctx.KVStore(k.storeKey)\n\treturn prefix.NewStore(store, types.GetDenomPrefixStore(denom))\n}\n\n// GetCreatorPrefixStore returns the substore for a specific creator address\nfunc (k Keeper) GetCreatorPrefixStore(ctx sdk.Context, creator string) sdk.KVStore {\n\tstore := ctx.KVStore(k.storeKey)\n\treturn prefix.NewStore(store, types.GetCreatorPrefix(creator))\n}\n\n// GetCreatorsPrefixStore returns the substore that contains a list of creators\nfunc (k Keeper) GetCreatorsPrefixStore(ctx sdk.Context) sdk.KVStore {\n\tstore := ctx.KVStore(k.storeKey)\n\treturn prefix.NewStore(store, types.GetCreatorsPrefix())\n}\n\n// CreateModuleAccount creates a module account with minting and burning capabilities\n// This account isn't intended to store any coins,\n// it purely mints and burns them on behalf of the admin of respective denoms,\n// and sends to the relevant address.\nfunc (k Keeper) CreateModuleAccount(ctx sdk.Context) {\n\t// NOTE this was wrong original code witch set tokenfactory account number to 0\n\t//moduleAcc := authtypes.NewEmptyModuleAccount(types.ModuleName, authtypes.Minter, authtypes.Burner)\n\t//k.accountKeeper.SetModuleAccount(ctx, moduleAcc)\n\tk.accountKeeper.GetModuleAccount(ctx, types.ModuleName)\n}\n"
  },
  {
    "path": "x/tokenfactory/keeper/keeper_test.go",
    "content": "package keeper_test\n\nimport (\n\ttmproto \"github.com/cometbft/cometbft/proto/tendermint/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n\t\"github.com/cybercongress/go-cyber/v7/app/apptesting\"\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n\t\"github.com/stretchr/testify/suite\"\n)\n\ntype KeeperTestSuite struct {\n\tapptesting.KeeperTestHelper\n\n\tqueryClient     types.QueryClient\n\tbankQueryClient banktypes.QueryClient\n\tmsgServer       types.MsgServer\n\t// defaultDenom is on the suite, as it depends on the creator test address.\n\tdefaultDenom string\n}\n\nfunc TestKeeperTestSuite(t *testing.T) {\n\tsuite.Run(t, new(KeeperTestSuite))\n}\n\nfunc (suite *KeeperTestSuite) SetupTest() {\n\tsuite.Setup()\n\n\t// Fund every TestAcc with two denoms, one of which is the denom creation fee\n\tfundAccsAmount := sdk.NewCoins(sdk.NewCoin(types.DefaultParams().DenomCreationFee[0].Denom, types.DefaultParams().DenomCreationFee[0].Amount.MulRaw(100)), sdk.NewCoin(apptesting.SecondaryDenom, apptesting.SecondaryAmount))\n\tfor _, acc := range suite.TestAccs {\n\t\tsuite.FundAcc(acc, fundAccsAmount)\n\t}\n\n\tsuite.queryClient = types.NewQueryClient(suite.QueryHelper)\n\tsuite.bankQueryClient = banktypes.NewQueryClient(suite.QueryHelper)\n\tsuite.msgServer = keeper.NewMsgServerImpl(suite.App.AppKeepers.TokenFactoryKeeper)\n}\n\nfunc (suite *KeeperTestSuite) CreateDefaultDenom() {\n\tres, _ := suite.msgServer.CreateDenom(sdk.WrapSDKContext(suite.Ctx), types.NewMsgCreateDenom(suite.TestAccs[0].String(), \"bitcoin\"))\n\tsuite.defaultDenom = res.GetNewTokenDenom()\n}\n\nfunc (suite *KeeperTestSuite) TestCreateModuleAccount() {\n\tapp := suite.App\n\n\t// remove module account\n\ttokenfactoryModuleAccount := app.AppKeepers.AccountKeeper.GetAccount(suite.Ctx, app.AppKeepers.AccountKeeper.GetModuleAddress(types.ModuleName))\n\tapp.AppKeepers.AccountKeeper.RemoveAccount(suite.Ctx, tokenfactoryModuleAccount)\n\n\t// ensure module account was removed\n\tsuite.Ctx = app.BaseApp.NewContext(false, tmproto.Header{ChainID: \"testing\"})\n\ttokenfactoryModuleAccount = app.AppKeepers.AccountKeeper.GetAccount(suite.Ctx, app.AppKeepers.AccountKeeper.GetModuleAddress(types.ModuleName))\n\tsuite.Require().Nil(tokenfactoryModuleAccount)\n\n\t// create module account\n\tapp.AppKeepers.TokenFactoryKeeper.CreateModuleAccount(suite.Ctx)\n\n\t// check that the module account is now initialized\n\ttokenfactoryModuleAccount = app.AppKeepers.AccountKeeper.GetAccount(suite.Ctx, app.AppKeepers.AccountKeeper.GetModuleAddress(types.ModuleName))\n\tsuite.Require().NotNil(tokenfactoryModuleAccount)\n}\n"
  },
  {
    "path": "x/tokenfactory/keeper/migrator.go",
    "content": "package keeper\n\nimport (\n\t\"fmt\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/exported\"\n\tv2 \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/migrations/v2\"\n)\n\n// Migrator is a struct for handling in-place state migrations.\ntype Migrator struct {\n\tkeeper         Keeper\n\tlegacySubspace exported.Subspace\n}\n\nfunc NewMigrator(k Keeper, ss exported.Subspace) Migrator {\n\treturn Migrator{\n\t\tkeeper:         k,\n\t\tlegacySubspace: ss,\n\t}\n}\n\n// Migrate1to2 migrates the x/tokenfactory module state from the consensus version 1 to\n// version 2. Specifically, it takes the parameters that are currently stored\n// and managed by the x/params modules and stores them directly into the x/tokenfactory\n// module state.\nfunc (m Migrator) Migrate1to2(ctx sdk.Context) error {\n\t// Fixes hard forking genesis being invalid.\n\t// https://github.com/sei-protocol/sei-chain/pull/861\n\titer := m.keeper.GetAllDenomsIterator(ctx)\n\tdefer iter.Close()\n\tfor ; iter.Valid(); iter.Next() {\n\t\tdenom := string(iter.Value())\n\t\tdenomMetadata, err := m.keeper.bankKeeper.GetDenomMetaData(ctx, denom)\n\t\tif err {\n\t\t\tpanic(fmt.Errorf(\"denom %s does not exist\", denom))\n\t\t}\n\n\t\tfmt.Printf(\"Migrating denom: %s\\n\", denom)\n\t\tm.SetMetadata(&denomMetadata)\n\t\tm.keeper.bankKeeper.SetDenomMetaData(ctx, denomMetadata)\n\n\t}\n\n\treturn v2.Migrate(ctx, ctx.KVStore(m.keeper.storeKey), m.legacySubspace, m.keeper.cdc)\n}\n\nfunc (m Migrator) SetMetadata(denomMetadata *banktypes.Metadata) {\n\tif len(denomMetadata.Base) == 0 {\n\t\tpanic(fmt.Errorf(\"no base exists for denom %v\", denomMetadata))\n\t}\n\tif len(denomMetadata.Display) == 0 {\n\t\tdenomMetadata.Display = denomMetadata.Base\n\t\tdenomMetadata.Name = denomMetadata.Base\n\t\tdenomMetadata.Symbol = denomMetadata.Base\n\t} else {\n\t\tfmt.Printf(\"Denom %s already has denom set\", denomMetadata.Base)\n\t}\n}\n"
  },
  {
    "path": "x/tokenfactory/keeper/msg_server.go",
    "content": "package keeper\n\nimport (\n\t\"context\"\n\n\t\"cosmossdk.io/errors\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tgovtypes \"github.com/cosmos/cosmos-sdk/x/gov/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\ntype msgServer struct {\n\tKeeper\n}\n\n// NewMsgServerImpl returns an implementation of the MsgServer interface\n// for the provided Keeper.\nfunc NewMsgServerImpl(keeper Keeper) types.MsgServer {\n\treturn &msgServer{Keeper: keeper}\n}\n\nvar _ types.MsgServer = msgServer{}\n\nfunc (server msgServer) CreateDenom(goCtx context.Context, msg *types.MsgCreateDenom) (*types.MsgCreateDenomResponse, error) {\n\tif err := msg.ValidateBasic(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tdenom, err := server.Keeper.CreateDenom(ctx, msg.Sender, msg.Subdenom)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\ttypes.TypeMsgCreateDenom,\n\t\t\tsdk.NewAttribute(types.AttributeCreator, msg.Sender),\n\t\t\tsdk.NewAttribute(types.AttributeNewTokenDenom, denom),\n\t\t),\n\t})\n\n\treturn &types.MsgCreateDenomResponse{\n\t\tNewTokenDenom: denom,\n\t}, nil\n}\n\nfunc (server msgServer) Mint(goCtx context.Context, msg *types.MsgMint) (*types.MsgMintResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\t// pay some extra gas cost to give a better error here.\n\t_, denomExists := server.bankKeeper.GetDenomMetaData(ctx, msg.Amount.Denom)\n\tif !denomExists {\n\t\treturn nil, types.ErrDenomDoesNotExist.Wrapf(\"denom: %s\", msg.Amount.Denom)\n\t}\n\n\tauthorityMetadata, err := server.Keeper.GetAuthorityMetadata(ctx, msg.Amount.GetDenom())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif msg.Sender != authorityMetadata.GetAdmin() {\n\t\treturn nil, types.ErrUnauthorized\n\t}\n\n\tif msg.MintToAddress == \"\" {\n\t\tmsg.MintToAddress = msg.Sender\n\t}\n\n\terr = server.Keeper.mintTo(ctx, msg.Amount, msg.MintToAddress)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\ttypes.TypeMsgMint,\n\t\t\tsdk.NewAttribute(types.AttributeMintToAddress, msg.Sender),\n\t\t\tsdk.NewAttribute(types.AttributeAmount, msg.Amount.String()),\n\t\t),\n\t})\n\n\treturn &types.MsgMintResponse{}, nil\n}\n\nfunc (server msgServer) Burn(goCtx context.Context, msg *types.MsgBurn) (*types.MsgBurnResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tauthorityMetadata, err := server.Keeper.GetAuthorityMetadata(ctx, msg.Amount.GetDenom())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif msg.Sender != authorityMetadata.GetAdmin() {\n\t\treturn nil, types.ErrUnauthorized\n\t}\n\n\tif msg.BurnFromAddress == \"\" {\n\t\tmsg.BurnFromAddress = msg.Sender\n\t} else if !types.IsCapabilityEnabled(server.Keeper.enabledCapabilities, types.EnableBurnFrom) {\n\t\treturn nil, types.ErrCapabilityNotEnabled\n\t}\n\n\terr = server.Keeper.burnFrom(ctx, msg.Amount, msg.BurnFromAddress)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\ttypes.TypeMsgBurn,\n\t\t\tsdk.NewAttribute(types.AttributeBurnFromAddress, msg.Sender),\n\t\t\tsdk.NewAttribute(types.AttributeAmount, msg.Amount.String()),\n\t\t),\n\t})\n\n\treturn &types.MsgBurnResponse{}, nil\n}\n\nfunc (server msgServer) ForceTransfer(goCtx context.Context, msg *types.MsgForceTransfer) (*types.MsgForceTransferResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tif !types.IsCapabilityEnabled(server.Keeper.enabledCapabilities, types.EnableForceTransfer) {\n\t\treturn nil, types.ErrCapabilityNotEnabled\n\t}\n\n\tauthorityMetadata, err := server.Keeper.GetAuthorityMetadata(ctx, msg.Amount.GetDenom())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif msg.Sender != authorityMetadata.GetAdmin() {\n\t\treturn nil, types.ErrUnauthorized\n\t}\n\n\terr = server.Keeper.forceTransfer(ctx, msg.Amount, msg.TransferFromAddress, msg.TransferToAddress)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\ttypes.TypeMsgForceTransfer,\n\t\t\tsdk.NewAttribute(types.AttributeTransferFromAddress, msg.TransferFromAddress),\n\t\t\tsdk.NewAttribute(types.AttributeTransferToAddress, msg.TransferToAddress),\n\t\t\tsdk.NewAttribute(types.AttributeAmount, msg.Amount.String()),\n\t\t),\n\t})\n\n\treturn &types.MsgForceTransferResponse{}, nil\n}\n\nfunc (server msgServer) ChangeAdmin(goCtx context.Context, msg *types.MsgChangeAdmin) (*types.MsgChangeAdminResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tauthorityMetadata, err := server.Keeper.GetAuthorityMetadata(ctx, msg.Denom)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif msg.Sender != authorityMetadata.GetAdmin() {\n\t\treturn nil, types.ErrUnauthorized\n\t}\n\n\terr = server.Keeper.setAdmin(ctx, msg.Denom, msg.NewAdmin)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\ttypes.TypeMsgChangeAdmin,\n\t\t\tsdk.NewAttribute(types.AttributeDenom, msg.GetDenom()),\n\t\t\tsdk.NewAttribute(types.AttributeNewAdmin, msg.NewAdmin),\n\t\t),\n\t})\n\n\treturn &types.MsgChangeAdminResponse{}, nil\n}\n\nfunc (server msgServer) SetDenomMetadata(goCtx context.Context, msg *types.MsgSetDenomMetadata) (*types.MsgSetDenomMetadataResponse, error) {\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\n\tif !types.IsCapabilityEnabled(server.Keeper.enabledCapabilities, types.EnableSetMetadata) {\n\t\treturn nil, types.ErrCapabilityNotEnabled\n\t}\n\n\t// Defense in depth validation of metadata\n\terr := msg.Metadata.Validate()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tauthorityMetadata, err := server.Keeper.GetAuthorityMetadata(ctx, msg.Metadata.Base)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif msg.Sender != authorityMetadata.GetAdmin() {\n\t\treturn nil, types.ErrUnauthorized\n\t}\n\n\tserver.Keeper.bankKeeper.SetDenomMetaData(ctx, msg.Metadata)\n\n\tctx.EventManager().EmitEvents(sdk.Events{\n\t\tsdk.NewEvent(\n\t\t\ttypes.TypeMsgSetDenomMetadata,\n\t\t\tsdk.NewAttribute(types.AttributeDenom, msg.Metadata.Base),\n\t\t\tsdk.NewAttribute(types.AttributeDenomMetadata, msg.Metadata.String()),\n\t\t),\n\t})\n\n\treturn &types.MsgSetDenomMetadataResponse{}, nil\n}\n\nfunc (server msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) {\n\tif server.authority != req.Authority {\n\t\treturn nil, errors.Wrapf(govtypes.ErrInvalidSigner, \"invalid authority; expected %s, got %s\", server.authority, req.Authority)\n\t}\n\n\tctx := sdk.UnwrapSDKContext(goCtx)\n\tif err := server.SetParams(ctx, req.Params); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &types.MsgUpdateParamsResponse{}, nil\n}\n"
  },
  {
    "path": "x/tokenfactory/keeper/msg_server_test.go",
    "content": "package keeper_test\n\nimport (\n\t\"fmt\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\n// TestMintDenomMsg tests TypeMsgMint message is emitted on a successful mint\nfunc (suite *KeeperTestSuite) TestMintDenomMsg() {\n\t// Create a denom\n\tsuite.CreateDefaultDenom()\n\n\tfor _, tc := range []struct {\n\t\tdesc                  string\n\t\tamount                int64\n\t\tmintDenom             string\n\t\tadmin                 string\n\t\tvalid                 bool\n\t\texpectedMessageEvents int\n\t}{\n\t\t{\n\t\t\tdesc:      \"denom does not exist\",\n\t\t\tamount:    10,\n\t\t\tmintDenom: \"factory/osmo1t7egva48prqmzl59x5ngv4zx0dtrwewc9m7z44/evmos\",\n\t\t\tadmin:     suite.TestAccs[0].String(),\n\t\t\tvalid:     false,\n\t\t},\n\t\t{\n\t\t\tdesc:                  \"success case\",\n\t\t\tamount:                10,\n\t\t\tmintDenom:             suite.defaultDenom,\n\t\t\tadmin:                 suite.TestAccs[0].String(),\n\t\t\tvalid:                 true,\n\t\t\texpectedMessageEvents: 1,\n\t\t},\n\t} {\n\t\tsuite.Run(fmt.Sprintf(\"Case %s\", tc.desc), func() {\n\t\t\tctx := suite.Ctx.WithEventManager(sdk.NewEventManager())\n\t\t\tsuite.Require().Equal(0, len(ctx.EventManager().Events()))\n\t\t\t// Test mint message\n\t\t\tsuite.msgServer.Mint(sdk.WrapSDKContext(ctx), types.NewMsgMint(tc.admin, sdk.NewInt64Coin(tc.mintDenom, 10))) //nolint:errcheck\n\t\t\t// Ensure current number and type of event is emitted\n\t\t\tsuite.AssertEventEmitted(ctx, types.TypeMsgMint, tc.expectedMessageEvents)\n\t\t})\n\t}\n}\n\n// TestBurnDenomMsg tests TypeMsgBurn message is emitted on a successful burn\nfunc (suite *KeeperTestSuite) TestBurnDenomMsg() {\n\t// Create a denom.\n\tsuite.CreateDefaultDenom()\n\t// mint 10 default token for testAcc[0]\n\tsuite.msgServer.Mint(sdk.WrapSDKContext(suite.Ctx), types.NewMsgMint(suite.TestAccs[0].String(), sdk.NewInt64Coin(suite.defaultDenom, 10))) //nolint:errcheck\n\n\tfor _, tc := range []struct {\n\t\tdesc                  string\n\t\tamount                int64\n\t\tburnDenom             string\n\t\tadmin                 string\n\t\tvalid                 bool\n\t\texpectedMessageEvents int\n\t}{\n\t\t{\n\t\t\tdesc:      \"denom does not exist\",\n\t\t\tburnDenom: \"factory/osmo1t7egva48prqmzl59x5ngv4zx0dtrwewc9m7z44/evmos\",\n\t\t\tadmin:     suite.TestAccs[0].String(),\n\t\t\tvalid:     false,\n\t\t},\n\t\t{\n\t\t\tdesc:                  \"success case\",\n\t\t\tburnDenom:             suite.defaultDenom,\n\t\t\tadmin:                 suite.TestAccs[0].String(),\n\t\t\tvalid:                 true,\n\t\t\texpectedMessageEvents: 1,\n\t\t},\n\t} {\n\t\tsuite.Run(fmt.Sprintf(\"Case %s\", tc.desc), func() {\n\t\t\tctx := suite.Ctx.WithEventManager(sdk.NewEventManager())\n\t\t\tsuite.Require().Equal(0, len(ctx.EventManager().Events()))\n\t\t\t// Test burn message\n\t\t\tsuite.msgServer.Burn(sdk.WrapSDKContext(ctx), types.NewMsgBurn(tc.admin, sdk.NewInt64Coin(tc.burnDenom, 10))) //nolint:errcheck\n\t\t\t// Ensure current number and type of event is emitted\n\t\t\tsuite.AssertEventEmitted(ctx, types.TypeMsgBurn, tc.expectedMessageEvents)\n\t\t})\n\t}\n}\n\n// TestCreateDenomMsg tests TypeMsgCreateDenom message is emitted on a successful denom creation\nfunc (suite *KeeperTestSuite) TestCreateDenomMsg() {\n\tdefaultDenomCreationFee := types.Params{DenomCreationFee: sdk.NewCoins(sdk.NewCoin(\"stake\", sdk.NewInt(50000000)))}\n\tfor _, tc := range []struct {\n\t\tdesc                  string\n\t\tdenomCreationFee      types.Params\n\t\tsubdenom              string\n\t\tvalid                 bool\n\t\texpectedMessageEvents int\n\t}{\n\t\t{\n\t\t\tdesc:             \"subdenom too long\",\n\t\t\tdenomCreationFee: defaultDenomCreationFee,\n\t\t\tsubdenom:         \"assadsadsadasdasdsadsadsadsadsadsadsklkadaskkkdasdasedskhanhassyeunganassfnlksdflksafjlkasd\",\n\t\t\tvalid:            false,\n\t\t},\n\t\t{\n\t\t\tdesc:                  \"success case: defaultDenomCreationFee\",\n\t\t\tdenomCreationFee:      defaultDenomCreationFee,\n\t\t\tsubdenom:              \"evmos\",\n\t\t\tvalid:                 true,\n\t\t\texpectedMessageEvents: 1,\n\t\t},\n\t} {\n\t\tsuite.SetupTest()\n\t\tsuite.Run(fmt.Sprintf(\"Case %s\", tc.desc), func() {\n\t\t\ttokenFactoryKeeper := suite.App.AppKeepers.TokenFactoryKeeper\n\t\t\tctx := suite.Ctx.WithEventManager(sdk.NewEventManager())\n\t\t\tsuite.Require().Equal(0, len(ctx.EventManager().Events()))\n\t\t\t// Set denom creation fee in params\n\t\t\tif err := tokenFactoryKeeper.SetParams(suite.Ctx, tc.denomCreationFee); err != nil {\n\t\t\t\tsuite.Require().NoError(err)\n\t\t\t}\n\t\t\t// Test create denom message\n\t\t\tsuite.msgServer.CreateDenom(sdk.WrapSDKContext(ctx), types.NewMsgCreateDenom(suite.TestAccs[0].String(), tc.subdenom)) //nolint:errcheck\n\t\t\t// Ensure current number and type of event is emitted\n\t\t\tsuite.AssertEventEmitted(ctx, types.TypeMsgCreateDenom, tc.expectedMessageEvents)\n\t\t})\n\t}\n}\n\n// TestChangeAdminDenomMsg tests TypeMsgChangeAdmin message is emitted on a successful admin change\nfunc (suite *KeeperTestSuite) TestChangeAdminDenomMsg() {\n\tfor _, tc := range []struct {\n\t\tdesc                    string\n\t\tmsgChangeAdmin          func(denom string) *types.MsgChangeAdmin\n\t\texpectedChangeAdminPass bool\n\t\texpectedAdminIndex      int\n\t\tmsgMint                 func(denom string) *types.MsgMint\n\t\texpectedMintPass        bool\n\t\texpectedMessageEvents   int\n\t}{\n\t\t{\n\t\t\tdesc: \"non-admins can't change the existing admin\",\n\t\t\tmsgChangeAdmin: func(denom string) *types.MsgChangeAdmin {\n\t\t\t\treturn types.NewMsgChangeAdmin(suite.TestAccs[1].String(), denom, suite.TestAccs[2].String())\n\t\t\t},\n\t\t\texpectedChangeAdminPass: false,\n\t\t\texpectedAdminIndex:      0,\n\t\t},\n\t\t{\n\t\t\tdesc: \"success change admin\",\n\t\t\tmsgChangeAdmin: func(denom string) *types.MsgChangeAdmin {\n\t\t\t\treturn types.NewMsgChangeAdmin(suite.TestAccs[0].String(), denom, suite.TestAccs[1].String())\n\t\t\t},\n\t\t\texpectedAdminIndex:      1,\n\t\t\texpectedChangeAdminPass: true,\n\t\t\texpectedMessageEvents:   1,\n\t\t\tmsgMint: func(denom string) *types.MsgMint {\n\t\t\t\treturn types.NewMsgMint(suite.TestAccs[1].String(), sdk.NewInt64Coin(denom, 5))\n\t\t\t},\n\t\t\texpectedMintPass: true,\n\t\t},\n\t} {\n\t\tsuite.Run(fmt.Sprintf(\"Case %s\", tc.desc), func() {\n\t\t\t// setup test\n\t\t\tsuite.SetupTest()\n\t\t\tctx := suite.Ctx.WithEventManager(sdk.NewEventManager())\n\t\t\tsuite.Require().Equal(0, len(ctx.EventManager().Events()))\n\t\t\t// Create a denom and mint\n\t\t\tres, err := suite.msgServer.CreateDenom(sdk.WrapSDKContext(ctx), types.NewMsgCreateDenom(suite.TestAccs[0].String(), \"bitcoin\"))\n\t\t\tsuite.Require().NoError(err)\n\t\t\ttestDenom := res.GetNewTokenDenom()\n\t\t\tsuite.msgServer.Mint(sdk.WrapSDKContext(ctx), types.NewMsgMint(suite.TestAccs[0].String(), sdk.NewInt64Coin(testDenom, 10))) //nolint:errcheck\n\t\t\t// Test change admin message\n\t\t\tsuite.msgServer.ChangeAdmin(sdk.WrapSDKContext(ctx), tc.msgChangeAdmin(testDenom)) //nolint:errcheck\n\t\t\t// Ensure current number and type of event is emitted\n\t\t\tsuite.AssertEventEmitted(ctx, types.TypeMsgChangeAdmin, tc.expectedMessageEvents)\n\t\t})\n\t}\n}\n\n// TestSetDenomMetaDataMsg tests TypeMsgSetDenomMetadata message is emitted on a successful denom metadata change\nfunc (suite *KeeperTestSuite) TestSetDenomMetaDataMsg() {\n\t// setup test\n\tsuite.SetupTest()\n\tsuite.CreateDefaultDenom()\n\n\tfor _, tc := range []struct {\n\t\tdesc                  string\n\t\tmsgSetDenomMetadata   types.MsgSetDenomMetadata\n\t\texpectedPass          bool\n\t\texpectedMessageEvents int\n\t}{\n\t\t{\n\t\t\tdesc: \"successful set denom metadata\",\n\t\t\tmsgSetDenomMetadata: *types.NewMsgSetDenomMetadata(suite.TestAccs[0].String(), banktypes.Metadata{\n\t\t\t\tDescription: \"yeehaw\",\n\t\t\t\tDenomUnits: []*banktypes.DenomUnit{\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom:    suite.defaultDenom,\n\t\t\t\t\t\tExponent: 0,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom:    \"uosmo\",\n\t\t\t\t\t\tExponent: 6,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tBase:    suite.defaultDenom,\n\t\t\t\tDisplay: \"uosmo\",\n\t\t\t\tName:    \"OSMO\",\n\t\t\t\tSymbol:  \"OSMO\",\n\t\t\t}),\n\t\t\texpectedPass:          true,\n\t\t\texpectedMessageEvents: 1,\n\t\t},\n\t\t{\n\t\t\tdesc: \"non existent factory denom name\",\n\t\t\tmsgSetDenomMetadata: *types.NewMsgSetDenomMetadata(suite.TestAccs[0].String(), banktypes.Metadata{\n\t\t\t\tDescription: \"yeehaw\",\n\t\t\t\tDenomUnits: []*banktypes.DenomUnit{\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom:    fmt.Sprintf(\"factory/%s/litecoin\", suite.TestAccs[0].String()),\n\t\t\t\t\t\tExponent: 0,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom:    \"uosmo\",\n\t\t\t\t\t\tExponent: 6,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tBase:    fmt.Sprintf(\"factory/%s/litecoin\", suite.TestAccs[0].String()),\n\t\t\t\tDisplay: \"uosmo\",\n\t\t\t\tName:    \"OSMO\",\n\t\t\t\tSymbol:  \"OSMO\",\n\t\t\t}),\n\t\t\texpectedPass: false,\n\t\t},\n\t} {\n\t\tsuite.Run(fmt.Sprintf(\"Case %s\", tc.desc), func() {\n\t\t\ttc := tc\n\t\t\tctx := suite.Ctx.WithEventManager(sdk.NewEventManager())\n\t\t\tsuite.Require().Equal(0, len(ctx.EventManager().Events()))\n\t\t\t// Test set denom metadata message\n\t\t\tsuite.msgServer.SetDenomMetadata(sdk.WrapSDKContext(ctx), &tc.msgSetDenomMetadata) //nolint:errcheck\n\t\t\t// Ensure current number and type of event is emitted\n\t\t\tsuite.AssertEventEmitted(ctx, types.TypeMsgSetDenomMetadata, tc.expectedMessageEvents)\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "x/tokenfactory/keeper/params.go",
    "content": "package keeper\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\n// GetParams returns the total set params.\nfunc (k Keeper) GetParams(ctx sdk.Context) (p types.Params) {\n\tstore := ctx.KVStore(k.storeKey)\n\tbz := store.Get(types.ParamsKey)\n\tif bz == nil {\n\t\treturn p\n\t}\n\tk.cdc.MustUnmarshal(bz, &p)\n\treturn p\n}\n\n// SetParams sets the total set of params.\nfunc (k Keeper) SetParams(ctx sdk.Context, p types.Params) error {\n\tif err := p.Validate(); err != nil {\n\t\treturn err\n\t}\n\n\tstore := ctx.KVStore(k.storeKey)\n\tbz := k.cdc.MustMarshal(&p)\n\tstore.Set(types.ParamsKey, bz)\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/tokenfactory/migrations/v2/migrate.go",
    "content": "package v2\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/exported\"\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\nconst ModuleName = \"tokenfactory\"\n\nvar ParamsKey = []byte{0x00}\n\n// Migrate migrates the x/tokenfactory module state from the consensus version 1 to\n// version 2. Specifically, it takes the parameters that are currently stored\n// and managed by the x/params modules and stores them directly into the x/tokenfactory\n// module state.\nfunc Migrate(\n\t_ sdk.Context,\n\tstore sdk.KVStore,\n\t_ exported.Subspace,\n\tcdc codec.BinaryCodec,\n) error {\n\t// Migrates mainnet params -> the new keeper params storeKey (from x/params)\n\tcurrParams := types.Params{\n\t\tDenomCreationFee:        nil,\n\t\tDenomCreationGasConsume: 2_000_000,\n\t}\n\n\tif err := currParams.Validate(); err != nil {\n\t\treturn err\n\t}\n\n\tbz := cdc.MustMarshal(&currParams)\n\tstore.Set(ParamsKey, bz)\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/tokenfactory/migrations/v2/migrate_test.go",
    "content": "package v2_test\n\nimport (\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/require\"\n\n\t\"github.com/cosmos/cosmos-sdk/testutil\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tmoduletestutil \"github.com/cosmos/cosmos-sdk/types/module/testutil\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory\"\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/exported\"\n\tv2 \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/migrations/v2\"\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\ntype mockSubspace struct {\n\tps types.Params\n}\n\nfunc newMockSubspace(ps types.Params) mockSubspace {\n\treturn mockSubspace{ps: ps}\n}\n\nfunc (ms mockSubspace) GetParamSet(_ sdk.Context, ps exported.ParamSet) {\n\t*ps.(*types.Params) = ms.ps\n}\n\nfunc TestMigrate(t *testing.T) {\n\t// x/param conversion\n\tencCfg := moduletestutil.MakeTestEncodingConfig(tokenfactory.AppModuleBasic{})\n\tcdc := encCfg.Codec\n\n\tstoreKey := sdk.NewKVStoreKey(v2.ModuleName)\n\ttKey := sdk.NewTransientStoreKey(\"transient_test\")\n\tctx := testutil.DefaultContext(storeKey, tKey)\n\tstore := ctx.KVStore(storeKey)\n\n\tlegacySubspace := newMockSubspace(types.Params{\n\t\tDenomCreationFee:        nil,\n\t\tDenomCreationGasConsume: 2_000_000,\n\t})\n\trequire.NoError(t, v2.Migrate(ctx, store, legacySubspace, cdc))\n\n\tvar res types.Params\n\tbz := store.Get(v2.ParamsKey)\n\trequire.NoError(t, cdc.Unmarshal(bz, &res))\n\trequire.Equal(t, legacySubspace.ps, res)\n}\n"
  },
  {
    "path": "x/tokenfactory/module.go",
    "content": "/*\nThe tokenfactory module allows any account to create a new token with\nthe name `factory/{creator address}/{subdenom}`.\n\n- Mint and burn user denom to and form any account\n- Create a transfer of their denom between any two accounts\n- Change the admin. In the future, more admin capabilities may be added.\n*/\npackage tokenfactory\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/gorilla/mux\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/runtime\"\n\t\"github.com/spf13/cobra\"\n\n\tabci \"github.com/cometbft/cometbft/abci/types\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tcdctypes \"github.com/cosmos/cosmos-sdk/codec/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/module\"\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/client/cli\"\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/exported\"\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/keeper\"\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\nvar (\n\t_ module.AppModule      = AppModule{}\n\t_ module.AppModuleBasic = AppModuleBasic{}\n)\n\n// ConsensusVersion defines the current x/tokenfactory module consensus version.\nconst ConsensusVersion = 2\n\n// ----------------------------------------------------------------------------\n// AppModuleBasic\n// ----------------------------------------------------------------------------\n\n// AppModuleBasic implements the AppModuleBasic interface for the capability module.\ntype AppModuleBasic struct{}\n\nfunc NewAppModuleBasic() AppModuleBasic {\n\treturn AppModuleBasic{}\n}\n\n// Name returns the x/tokenfactory module's name.\nfunc (AppModuleBasic) Name() string {\n\treturn types.ModuleName\n}\n\nfunc (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {\n\ttypes.RegisterLegacyAminoCodec(cdc)\n}\n\n// RegisterInterfaces registers the module's interface types\nfunc (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) {\n\ttypes.RegisterInterfaces(reg)\n}\n\n// DefaultGenesis returns the x/tokenfactory module's default genesis state.\nfunc (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage {\n\treturn cdc.MustMarshalJSON(types.DefaultGenesis())\n}\n\n// ValidateGenesis performs genesis state validation for the x/tokenfactory module.\nfunc (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, _ client.TxEncodingConfig, bz json.RawMessage) error {\n\tvar genState types.GenesisState\n\tif err := cdc.UnmarshalJSON(bz, &genState); err != nil {\n\t\treturn fmt.Errorf(\"failed to unmarshal %s genesis state: %w\", types.ModuleName, err)\n\t}\n\n\treturn genState.Validate()\n}\n\n// RegisterRESTRoutes registers the capability module's REST service handlers.\nfunc (AppModuleBasic) RegisterRESTRoutes(_ client.Context, _ *mux.Router) {\n}\n\n// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module.\nfunc (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) {\n\ttypes.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) //nolint:errcheck\n}\n\n// GetTxCmd returns the x/tokenfactory module's root tx command.\nfunc (a AppModuleBasic) GetTxCmd() *cobra.Command {\n\treturn cli.GetTxCmd()\n}\n\n// GetQueryCmd returns the x/tokenfactory module's root query command.\nfunc (AppModuleBasic) GetQueryCmd() *cobra.Command {\n\treturn cli.GetQueryCmd()\n}\n\n// ----------------------------------------------------------------------------\n// AppModule\n// ----------------------------------------------------------------------------\n\n// AppModule implements the AppModule interface for the capability module.\ntype AppModule struct {\n\tAppModuleBasic\n\n\tkeeper        keeper.Keeper\n\taccountKeeper types.AccountKeeper\n\tbankKeeper    types.BankKeeper\n\n\tlegacySubspace exported.Subspace\n}\n\nfunc NewAppModule(\n\tkeeper keeper.Keeper,\n\taccountKeeper types.AccountKeeper,\n\tbankKeeper types.BankKeeper,\n\n\t// legacySubspace is used solely for migration of x/params managed parameters\n\tlegacySubspace exported.Subspace,\n) AppModule {\n\treturn AppModule{\n\t\tAppModuleBasic: NewAppModuleBasic(),\n\t\tkeeper:         keeper,\n\t\taccountKeeper:  accountKeeper,\n\t\tbankKeeper:     bankKeeper,\n\t\tlegacySubspace: legacySubspace,\n\t}\n}\n\n// Name returns the x/tokenfactory module's name.\nfunc (am AppModule) Name() string {\n\treturn am.AppModuleBasic.Name()\n}\n\n// RegisterServices registers a GRPC query service to respond to the\n// module-specific GRPC queries.\nfunc (am AppModule) RegisterServices(cfg module.Configurator) {\n\ttypes.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper))\n\ttypes.RegisterQueryServer(cfg.QueryServer(), am.keeper)\n\n\tm := keeper.NewMigrator(am.keeper, am.legacySubspace)\n\tif err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil {\n\t\tpanic(fmt.Sprintf(\"failed to migrate x/%s from version 1 to 2: %v\", types.ModuleName, err))\n\t}\n}\n\n// RegisterInvariants registers the x/tokenfactory module's invariants.\nfunc (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {}\n\n// InitGenesis performs the x/tokenfactory module's genesis initialization. It\n// returns no validator updates.\nfunc (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) []abci.ValidatorUpdate {\n\tvar genState types.GenesisState\n\tcdc.MustUnmarshalJSON(gs, &genState)\n\n\tam.keeper.InitGenesis(ctx, genState)\n\n\treturn []abci.ValidatorUpdate{}\n}\n\n// ExportGenesis returns the x/tokenfactory module's exported genesis state as raw\n// JSON bytes.\nfunc (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage {\n\tgenState := am.keeper.ExportGenesis(ctx)\n\treturn cdc.MustMarshalJSON(genState)\n}\n\n// ConsensusVersion implements ConsensusVersion.\nfunc (AppModule) ConsensusVersion() uint64 {\n\treturn ConsensusVersion\n}\n\n// BeginBlock executes all ABCI BeginBlock logic respective to the tokenfactory module.\nfunc (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {}\n\n// EndBlock executes all ABCI EndBlock logic respective to the tokenfactory module. It\n// returns no validator updates.\nfunc (am AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate {\n\treturn []abci.ValidatorUpdate{}\n}\n"
  },
  {
    "path": "x/tokenfactory/testhelpers/authz.go",
    "content": "package testhelpers\n\nimport (\n\t\"encoding/json\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/stretchr/testify/require\"\n\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tcdctypes \"github.com/cosmos/cosmos-sdk/codec/types\"\n\tcryptocodec \"github.com/cosmos/cosmos-sdk/crypto/codec\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/x/authz\"\n)\n\nvar (\n\tAmino          = codec.NewLegacyAmino()\n\tAuthzModuleCdc = codec.NewAminoCodec(Amino)\n)\n\nfunc init() {\n\tcryptocodec.RegisterCrypto(Amino)\n\tcodec.RegisterEvidences(Amino)\n\tsdk.RegisterLegacyAminoCodec(Amino)\n}\n\nfunc TestMessageAuthzSerialization(t *testing.T, msg sdk.Msg) {\n\tsomeDate := time.Date(1, 1, 1, 1, 1, 1, 1, time.UTC)\n\tconst (\n\t\tmockGranter string = \"cosmos1abc\"\n\t\tmockGrantee string = \"cosmos1xyz\"\n\t)\n\n\tvar (\n\t\tmockMsgGrant  authz.MsgGrant\n\t\tmockMsgRevoke authz.MsgRevoke\n\t\tmockMsgExec   authz.MsgExec\n\t)\n\n\t// Authz: Grant Msg\n\ttypeURL := sdk.MsgTypeURL(msg)\n\tlater := someDate.Add(time.Hour)\n\tgrant, err := authz.NewGrant(someDate, authz.NewGenericAuthorization(typeURL), &later)\n\trequire.NoError(t, err)\n\n\tmsgGrant := authz.MsgGrant{Granter: mockGranter, Grantee: mockGrantee, Grant: grant}\n\tmsgGrantBytes := json.RawMessage(sdk.MustSortJSON(AuthzModuleCdc.MustMarshalJSON(&msgGrant)))\n\terr = AuthzModuleCdc.UnmarshalJSON(msgGrantBytes, &mockMsgGrant)\n\trequire.NoError(t, err)\n\n\t// Authz: Revoke Msg\n\tmsgRevoke := authz.MsgRevoke{Granter: mockGranter, Grantee: mockGrantee, MsgTypeUrl: typeURL}\n\tmsgRevokeByte := json.RawMessage(sdk.MustSortJSON(AuthzModuleCdc.MustMarshalJSON(&msgRevoke)))\n\terr = AuthzModuleCdc.UnmarshalJSON(msgRevokeByte, &mockMsgRevoke)\n\trequire.NoError(t, err)\n\n\t// Authz: Exec Msg\n\tmsgAny, err := cdctypes.NewAnyWithValue(msg)\n\trequire.NoError(t, err)\n\tmsgExec := authz.MsgExec{Grantee: mockGrantee, Msgs: []*cdctypes.Any{msgAny}}\n\texecMsgByte := json.RawMessage(sdk.MustSortJSON(AuthzModuleCdc.MustMarshalJSON(&msgExec)))\n\terr = AuthzModuleCdc.UnmarshalJSON(execMsgByte, &mockMsgExec)\n\trequire.NoError(t, err)\n\trequire.Equal(t, msgExec.Msgs[0].Value, mockMsgExec.Msgs[0].Value)\n}\n"
  },
  {
    "path": "x/tokenfactory/types/authorityMetadata.go",
    "content": "package types\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\nfunc (metadata DenomAuthorityMetadata) Validate() error {\n\tif metadata.Admin != \"\" {\n\t\t_, err := sdk.AccAddressFromBech32(metadata.Admin)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "x/tokenfactory/types/authorityMetadata.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: osmosis/tokenfactory/v1beta1/authorityMetadata.proto\n\npackage types\n\nimport (\n\tfmt \"fmt\"\n\t_ \"github.com/cosmos/cosmos-sdk/types\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\n// DenomAuthorityMetadata specifies metadata for addresses that have specific\n// capabilities over a token factory denom. Right now there is only one Admin\n// permission, but is planned to be extended to the future.\ntype DenomAuthorityMetadata struct {\n\t// Can be empty for no admin, or a valid osmosis address\n\tAdmin string `protobuf:\"bytes,1,opt,name=admin,proto3\" json:\"admin,omitempty\" yaml:\"admin\"`\n}\n\nfunc (m *DenomAuthorityMetadata) Reset()         { *m = DenomAuthorityMetadata{} }\nfunc (m *DenomAuthorityMetadata) String() string { return proto.CompactTextString(m) }\nfunc (*DenomAuthorityMetadata) ProtoMessage()    {}\nfunc (*DenomAuthorityMetadata) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_99435de88ae175f7, []int{0}\n}\nfunc (m *DenomAuthorityMetadata) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *DenomAuthorityMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_DenomAuthorityMetadata.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *DenomAuthorityMetadata) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_DenomAuthorityMetadata.Merge(m, src)\n}\nfunc (m *DenomAuthorityMetadata) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *DenomAuthorityMetadata) XXX_DiscardUnknown() {\n\txxx_messageInfo_DenomAuthorityMetadata.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_DenomAuthorityMetadata proto.InternalMessageInfo\n\nfunc (m *DenomAuthorityMetadata) GetAdmin() string {\n\tif m != nil {\n\t\treturn m.Admin\n\t}\n\treturn \"\"\n}\n\nfunc init() {\n\tproto.RegisterType((*DenomAuthorityMetadata)(nil), \"osmosis.tokenfactory.v1beta1.DenomAuthorityMetadata\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"osmosis/tokenfactory/v1beta1/authorityMetadata.proto\", fileDescriptor_99435de88ae175f7)\n}\n\nvar fileDescriptor_99435de88ae175f7 = []byte{\n\t// 243 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0xc9, 0x2f, 0xce, 0xcd,\n\t0x2f, 0xce, 0x2c, 0xd6, 0x2f, 0xc9, 0xcf, 0x4e, 0xcd, 0x4b, 0x4b, 0x4c, 0x2e, 0xc9, 0x2f, 0xaa,\n\t0xd4, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x4f, 0x2c, 0x2d, 0xc9, 0xc8, 0x2f, 0xca,\n\t0x2c, 0xa9, 0xf4, 0x4d, 0x2d, 0x49, 0x4c, 0x49, 0x2c, 0x49, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9,\n\t0x17, 0x92, 0x81, 0xea, 0xd2, 0x43, 0xd6, 0xa5, 0x07, 0xd5, 0x25, 0x25, 0x92, 0x9e, 0x9f, 0x9e,\n\t0x0f, 0x56, 0xa8, 0x0f, 0x62, 0x41, 0xf4, 0x48, 0xc9, 0x25, 0x83, 0x35, 0xe9, 0x27, 0x25, 0x16,\n\t0xa7, 0xc2, 0x2d, 0x48, 0xce, 0xcf, 0xcc, 0x83, 0xc8, 0x2b, 0xb9, 0x71, 0x89, 0xb9, 0xa4, 0xe6,\n\t0xe5, 0xe7, 0x3a, 0xa2, 0xdb, 0x29, 0xa4, 0xc6, 0xc5, 0x9a, 0x98, 0x92, 0x9b, 0x99, 0x27, 0xc1,\n\t0xa8, 0xc0, 0xa8, 0xc1, 0xe9, 0x24, 0xf0, 0xe9, 0x9e, 0x3c, 0x4f, 0x65, 0x62, 0x6e, 0x8e, 0x95,\n\t0x12, 0x58, 0x58, 0x29, 0x08, 0x22, 0x6d, 0xc5, 0xf2, 0x62, 0x81, 0x3c, 0xa3, 0x93, 0xdf, 0x89,\n\t0x47, 0x72, 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, 0x38, 0xe1, 0xb1, 0x1c, 0xc3,\n\t0x85, 0xc7, 0x72, 0x0c, 0x37, 0x1e, 0xcb, 0x31, 0x44, 0x99, 0xa4, 0x67, 0x96, 0x64, 0x94, 0x26,\n\t0xe9, 0x25, 0xe7, 0xe7, 0xea, 0x3b, 0x83, 0x1d, 0xe3, 0x9c, 0x9f, 0x57, 0x52, 0x94, 0x98, 0x5c,\n\t0x52, 0xac, 0x9f, 0x55, 0x9a, 0x97, 0xaf, 0x5f, 0x81, 0x1a, 0x0a, 0x25, 0x95, 0x05, 0xa9, 0xc5,\n\t0x49, 0x6c, 0x60, 0xe7, 0x19, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x33, 0x00, 0x78, 0xbe, 0x2a,\n\t0x01, 0x00, 0x00,\n}\n\nfunc (this *DenomAuthorityMetadata) Equal(that interface{}) bool {\n\tif that == nil {\n\t\treturn this == nil\n\t}\n\n\tthat1, ok := that.(*DenomAuthorityMetadata)\n\tif !ok {\n\t\tthat2, ok := that.(DenomAuthorityMetadata)\n\t\tif ok {\n\t\t\tthat1 = &that2\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\tif that1 == nil {\n\t\treturn this == nil\n\t} else if this == nil {\n\t\treturn false\n\t}\n\tif this.Admin != that1.Admin {\n\t\treturn false\n\t}\n\treturn true\n}\nfunc (m *DenomAuthorityMetadata) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *DenomAuthorityMetadata) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *DenomAuthorityMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Admin) > 0 {\n\t\ti -= len(m.Admin)\n\t\tcopy(dAtA[i:], m.Admin)\n\t\ti = encodeVarintAuthorityMetadata(dAtA, i, uint64(len(m.Admin)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintAuthorityMetadata(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovAuthorityMetadata(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\nfunc (m *DenomAuthorityMetadata) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Admin)\n\tif l > 0 {\n\t\tn += 1 + l + sovAuthorityMetadata(uint64(l))\n\t}\n\treturn n\n}\n\nfunc sovAuthorityMetadata(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\nfunc sozAuthorityMetadata(x uint64) (n int) {\n\treturn sovAuthorityMetadata(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\nfunc (m *DenomAuthorityMetadata) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowAuthorityMetadata\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: DenomAuthorityMetadata: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: DenomAuthorityMetadata: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Admin\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowAuthorityMetadata\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthAuthorityMetadata\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthAuthorityMetadata\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Admin = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipAuthorityMetadata(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthAuthorityMetadata\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc skipAuthorityMetadata(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowAuthorityMetadata\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowAuthorityMetadata\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowAuthorityMetadata\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthAuthorityMetadata\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupAuthorityMetadata\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthAuthorityMetadata\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthAuthorityMetadata        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowAuthorityMetadata          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupAuthorityMetadata = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/tokenfactory/types/capabilities.go",
    "content": "package types\n\nconst (\n\tEnableSetMetadata   = \"enable_metadata\"\n\tEnableForceTransfer = \"enable_force_transfer\"\n\tEnableBurnFrom      = \"enable_burn_from\"\n)\n\nfunc IsCapabilityEnabled(enabledCapabilities []string, capability string) bool {\n\tif len(enabledCapabilities) == 0 {\n\t\treturn true\n\t}\n\n\tfor _, v := range enabledCapabilities {\n\t\tif v == capability {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n"
  },
  {
    "path": "x/tokenfactory/types/codec.go",
    "content": "package types\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tcodectypes \"github.com/cosmos/cosmos-sdk/codec/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\t\"github.com/cosmos/cosmos-sdk/types/msgservice\"\n\tauthzcodec \"github.com/cosmos/cosmos-sdk/x/authz/codec\"\n)\n\nvar (\n\tamino = codec.NewLegacyAmino()\n\n\t// ModuleCdc references the global erc20 module codec. Note, the codec should\n\t// ONLY be used in certain instances of tests and for JSON encoding.\n\t//\n\t// The actual codec used for serialization should be provided to modules/erc20 and\n\t// defined at the application level.\n\tModuleCdc = codec.NewProtoCodec(codectypes.NewInterfaceRegistry())\n\n\t// AminoCdc is a amino codec created to support amino JSON compatible msgs.\n\tAminoCdc = codec.NewAminoCodec(amino)\n)\n\nconst (\n\t// Amino names\n\tcreateTFDenom        = \"osmosis/tokenfactory/create-denom\"\n\tmintTFDenom          = \"osmosis/tokenfactory/mint\"\n\tburnTFDenom          = \"osmosis/tokenfactory/burn\"\n\tforceTransferTFDenom = \"osmosis/tokenfactory/force-transfer\"\n\tchangeAdminTFDenom   = \"osmosis/tokenfactory/change-admin\"\n\tupdateTFparams       = \"osmosis/tokenfactory/msg-update-params\"\n)\n\n// NOTE: This is required for the GetSignBytes function\nfunc init() {\n\tRegisterLegacyAminoCodec(amino)\n\n\tsdk.RegisterLegacyAminoCodec(amino)\n\t// cryptocodec.RegisterCrypto(amino)\n\t// codec.RegisterEvidences(amino)\n\n\t// Register all Amino interfaces and concrete types on the authz Amino codec\n\t// so that this can later be used to properly serialize MsgGrant and MsgExec\n\t// instances.\n\tRegisterLegacyAminoCodec(authzcodec.Amino)\n\n\tamino.Seal()\n}\n\nfunc RegisterInterfaces(registry codectypes.InterfaceRegistry) {\n\tregistry.RegisterImplementations(\n\t\t(*sdk.Msg)(nil),\n\t\t&MsgCreateDenom{},\n\t\t&MsgMint{},\n\t\t&MsgBurn{},\n\t\t&MsgForceTransfer{},\n\t\t&MsgChangeAdmin{},\n\t\t&MsgUpdateParams{},\n\t)\n\tmsgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc)\n}\n\nfunc RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {\n\tcdc.RegisterConcrete(&MsgCreateDenom{}, createTFDenom, nil)\n\tcdc.RegisterConcrete(&MsgMint{}, mintTFDenom, nil)\n\tcdc.RegisterConcrete(&MsgBurn{}, burnTFDenom, nil)\n\tcdc.RegisterConcrete(&MsgForceTransfer{}, forceTransferTFDenom, nil)\n\tcdc.RegisterConcrete(&MsgChangeAdmin{}, changeAdminTFDenom, nil)\n\tcdc.RegisterConcrete(&MsgUpdateParams{}, updateTFparams, nil)\n}\n"
  },
  {
    "path": "x/tokenfactory/types/codec_test.go",
    "content": "package types\n\nimport (\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/suite\"\n\n\tcodectypes \"github.com/cosmos/cosmos-sdk/codec/types\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\ntype CodecTestSuite struct {\n\tsuite.Suite\n}\n\nfunc TestCodecSuite(t *testing.T) {\n\tsuite.Run(t, new(CodecTestSuite))\n}\n\nfunc (suite *CodecTestSuite) TestRegisterInterfaces() {\n\tregistry := codectypes.NewInterfaceRegistry()\n\tregistry.RegisterInterface(sdk.MsgInterfaceProtoName, (*sdk.Msg)(nil))\n\tRegisterInterfaces(registry)\n\n\timpls := registry.ListImplementations(sdk.MsgInterfaceProtoName)\n\tsuite.Require().Equal(7, len(impls))\n\tsuite.Require().ElementsMatch([]string{\n\t\t\"/osmosis.tokenfactory.v1beta1.MsgCreateDenom\",\n\t\t\"/osmosis.tokenfactory.v1beta1.MsgMint\",\n\t\t\"/osmosis.tokenfactory.v1beta1.MsgBurn\",\n\t\t\"/osmosis.tokenfactory.v1beta1.MsgChangeAdmin\",\n\t\t\"/osmosis.tokenfactory.v1beta1.MsgSetDenomMetadata\",\n\t\t\"/osmosis.tokenfactory.v1beta1.MsgForceTransfer\",\n\t\t\"/osmosis.tokenfactory.v1beta1.MsgUpdateParams\",\n\t}, impls)\n}\n"
  },
  {
    "path": "x/tokenfactory/types/denoms.go",
    "content": "package types\n\nimport (\n\t\"strings\"\n\n\terrorsmod \"cosmossdk.io/errors\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\nconst (\n\tModuleDenomPrefix = \"factory\"\n\t// See the TokenFactory readme for a derivation of these.\n\t// TL;DR, MaxSubdenomLength + MaxHrpLength = 60 comes from SDK max denom length = 128\n\t// and the structure of tokenfactory denoms.\n\tMaxSubdenomLength = 44\n\tMaxHrpLength      = 16\n\t// MaxCreatorLength = 59 + MaxHrpLength\n\tMaxCreatorLength = 59 + MaxHrpLength\n)\n\n// GetTokenDenom constructs a denom string for tokens created by tokenfactory\n// based on an input creator address and a subdenom\n// The denom constructed is factory/{creator}/{subdenom}\nfunc GetTokenDenom(creator, subdenom string) (string, error) {\n\tif len(subdenom) > MaxSubdenomLength {\n\t\treturn \"\", ErrSubdenomTooLong\n\t}\n\tif len(creator) > MaxCreatorLength {\n\t\treturn \"\", ErrCreatorTooLong\n\t}\n\tif strings.Contains(creator, \"/\") {\n\t\treturn \"\", ErrInvalidCreator\n\t}\n\tdenom := strings.Join([]string{ModuleDenomPrefix, creator, subdenom}, \"/\")\n\treturn denom, sdk.ValidateDenom(denom)\n}\n\n// DeconstructDenom takes a token denom string and verifies that it is a valid\n// denom of the tokenfactory module, and is of the form `factory/{creator}/{subdenom}`\n// If valid, it returns the creator address and subdenom\nfunc DeconstructDenom(denom string) (creator string, subdenom string, err error) {\n\terr = sdk.ValidateDenom(denom)\n\tif err != nil {\n\t\treturn \"\", \"\", err\n\t}\n\n\tstrParts := strings.Split(denom, \"/\")\n\tif len(strParts) < 3 {\n\t\treturn \"\", \"\", errorsmod.Wrapf(ErrInvalidDenom, \"not enough parts of denom %s\", denom)\n\t}\n\n\tif strParts[0] != ModuleDenomPrefix {\n\t\treturn \"\", \"\", errorsmod.Wrapf(ErrInvalidDenom, \"denom prefix is incorrect. Is: %s.  Should be: %s\", strParts[0], ModuleDenomPrefix)\n\t}\n\n\tcreator = strParts[1]\n\tcreatorAddr, err := sdk.AccAddressFromBech32(creator)\n\tif err != nil {\n\t\treturn \"\", \"\", errorsmod.Wrapf(ErrInvalidDenom, \"Invalid creator address (%s)\", err)\n\t}\n\n\t// Handle the case where a denom has a slash in its subdenom. For example,\n\t// when we did the split, we'd turn factory/accaddr/atomderivative/sikka into [\"factory\", \"accaddr\", \"atomderivative\", \"sikka\"]\n\t// So we have to join [2:] with a \"/\" as the delimiter to get back the correct subdenom which should be \"atomderivative/sikka\"\n\tsubdenom = strings.Join(strParts[2:], \"/\")\n\n\treturn creatorAddr.String(), subdenom, nil\n}\n"
  },
  {
    "path": "x/tokenfactory/types/denoms_test.go",
    "content": "package types_test\n\nimport (\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/require\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\nfunc TestDeconstructDenom(t *testing.T) {\n\t// Note: this seems to be used in osmosis to add some more checks (only 20 or 32 byte addresses),\n\t// which is good, but not required for these tests as they make code less reuable\n\t// appparams.SetAddressPrefixes()\n\n\tfor _, tc := range []struct {\n\t\tdesc             string\n\t\tdenom            string\n\t\texpectedSubdenom string\n\t\terr              error\n\t}{\n\t\t{\n\t\t\tdesc:  \"empty is invalid\",\n\t\t\tdenom: \"\",\n\t\t\terr:   types.ErrInvalidDenom,\n\t\t},\n\t\t{\n\t\t\tdesc:             \"normal\",\n\t\t\tdenom:            \"factory/cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8/bitcoin\",\n\t\t\texpectedSubdenom: \"bitcoin\",\n\t\t},\n\t\t{\n\t\t\tdesc:             \"multiple slashes in subdenom\",\n\t\t\tdenom:            \"factory/cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8/bitcoin/1\",\n\t\t\texpectedSubdenom: \"bitcoin/1\",\n\t\t},\n\t\t{\n\t\t\tdesc:             \"no subdenom\",\n\t\t\tdenom:            \"factory/cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8/\",\n\t\t\texpectedSubdenom: \"\",\n\t\t},\n\t\t{\n\t\t\tdesc:  \"incorrect prefix\",\n\t\t\tdenom: \"ibc/cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8/bitcoin\",\n\t\t\terr:   types.ErrInvalidDenom,\n\t\t},\n\t\t{\n\t\t\tdesc:             \"subdenom of only slashes\",\n\t\t\tdenom:            \"factory/cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8/////\",\n\t\t\texpectedSubdenom: \"////\",\n\t\t},\n\t\t{\n\t\t\tdesc:  \"too long name\",\n\t\t\tdenom: \"factory/cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8/adsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsf\",\n\t\t\terr:   types.ErrInvalidDenom,\n\t\t},\n\t} {\n\t\tt.Run(tc.desc, func(t *testing.T) {\n\t\t\texpectedCreator := \"cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8\"\n\t\t\tcreator, subdenom, err := types.DeconstructDenom(tc.denom)\n\t\t\tif tc.err != nil {\n\t\t\t\trequire.ErrorContains(t, err, tc.err.Error())\n\t\t\t} else {\n\t\t\t\trequire.NoError(t, err)\n\t\t\t\trequire.Equal(t, expectedCreator, creator)\n\t\t\t\trequire.Equal(t, tc.expectedSubdenom, subdenom)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestGetTokenDenom(t *testing.T) {\n\t// appparams.SetAddressPrefixes()\n\tfor _, tc := range []struct {\n\t\tdesc     string\n\t\tcreator  string\n\t\tsubdenom string\n\t\tvalid    bool\n\t}{\n\t\t{\n\t\t\tdesc:     \"normal\",\n\t\t\tcreator:  \"cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8\",\n\t\t\tsubdenom: \"bitcoin\",\n\t\t\tvalid:    true,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"multiple slashes in subdenom\",\n\t\t\tcreator:  \"cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8\",\n\t\t\tsubdenom: \"bitcoin/1\",\n\t\t\tvalid:    true,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"no subdenom\",\n\t\t\tcreator:  \"cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8\",\n\t\t\tsubdenom: \"\",\n\t\t\tvalid:    true,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"subdenom of only slashes\",\n\t\t\tcreator:  \"cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8\",\n\t\t\tsubdenom: \"/////\",\n\t\t\tvalid:    true,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"too long name\",\n\t\t\tcreator:  \"cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8\",\n\t\t\tsubdenom: \"adsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsfadsf\",\n\t\t\tvalid:    false,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"subdenom is exactly max length\",\n\t\t\tcreator:  \"cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8\",\n\t\t\tsubdenom: \"bitcoinfsadfsdfeadfsafwefsefsefsdfsdafasefsf\",\n\t\t\tvalid:    true,\n\t\t},\n\t\t{\n\t\t\tdesc:     \"creator is exactly max length\",\n\t\t\tcreator:  \"cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8jhgjhgkhjklhkjhkjhgjhgjgjghelu\",\n\t\t\tsubdenom: \"bitcoin\",\n\t\t\tvalid:    true,\n\t\t},\n\t} {\n\t\tt.Run(tc.desc, func(t *testing.T) {\n\t\t\t_, err := types.GetTokenDenom(tc.creator, tc.subdenom)\n\t\t\tif tc.valid {\n\t\t\t\trequire.NoError(t, err)\n\t\t\t} else {\n\t\t\t\trequire.Error(t, err)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "x/tokenfactory/types/errors.go",
    "content": "package types\n\n// DONTCOVER\n\nimport (\n\tfmt \"fmt\"\n\n\terrorsmod \"cosmossdk.io/errors\"\n)\n\n// x/tokenfactory module sentinel errors\nvar (\n\tErrDenomExists              = errorsmod.Register(ModuleName, 2, \"attempting to create a denom that already exists (has bank metadata)\")\n\tErrUnauthorized             = errorsmod.Register(ModuleName, 3, \"unauthorized account\")\n\tErrInvalidDenom             = errorsmod.Register(ModuleName, 4, \"invalid denom\")\n\tErrInvalidCreator           = errorsmod.Register(ModuleName, 5, \"invalid creator\")\n\tErrInvalidAuthorityMetadata = errorsmod.Register(ModuleName, 6, \"invalid authority metadata\")\n\tErrInvalidGenesis           = errorsmod.Register(ModuleName, 7, \"invalid genesis\")\n\tErrSubdenomTooLong          = errorsmod.Register(ModuleName, 8, fmt.Sprintf(\"subdenom too long, max length is %d bytes\", MaxSubdenomLength))\n\tErrCreatorTooLong           = errorsmod.Register(ModuleName, 9, fmt.Sprintf(\"creator too long, max length is %d bytes\", MaxCreatorLength))\n\tErrDenomDoesNotExist        = errorsmod.Register(ModuleName, 10, \"denom does not exist\")\n\tErrCapabilityNotEnabled     = errorsmod.Register(ModuleName, 11, \"this capability is not enabled on chain\")\n)\n"
  },
  {
    "path": "x/tokenfactory/types/events.go",
    "content": "package types\n\n// event types\n//\n//nolint:gosec\nconst (\n\tAttributeAmount              = \"amount\"\n\tAttributeCreator             = \"creator\"\n\tAttributeSubdenom            = \"subdenom\"\n\tAttributeNewTokenDenom       = \"new_token_denom\"\n\tAttributeMintToAddress       = \"mint_to_address\"\n\tAttributeBurnFromAddress     = \"burn_from_address\"\n\tAttributeTransferFromAddress = \"transfer_from_address\"\n\tAttributeTransferToAddress   = \"transfer_to_address\"\n\tAttributeDenom               = \"denom\"\n\tAttributeNewAdmin            = \"new_admin\"\n\tAttributeDenomMetadata       = \"denom_metadata\"\n)\n"
  },
  {
    "path": "x/tokenfactory/types/expected_keepers.go",
    "content": "package types\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tauthtypes \"github.com/cosmos/cosmos-sdk/x/auth/types\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n)\n\ntype BankKeeper interface {\n\t// Methods imported from bank should be defined here\n\tGetDenomMetaData(ctx sdk.Context, denom string) (banktypes.Metadata, bool)\n\tSetDenomMetaData(ctx sdk.Context, denomMetaData banktypes.Metadata)\n\n\tHasSupply(ctx sdk.Context, denom string) bool\n\tIterateTotalSupply(ctx sdk.Context, cb func(sdk.Coin) bool)\n\n\tSendCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error\n\tSendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error\n\tMintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error\n\tBurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error\n\n\tSendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error\n\tHasBalance(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coin) bool\n\tGetAllBalances(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins\n\tSpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins\n\tGetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin\n\n\tBlockedAddr(addr sdk.AccAddress) bool\n}\n\ntype AccountKeeper interface {\n\tSetModuleAccount(ctx sdk.Context, macc authtypes.ModuleAccountI)\n\tGetAccount(ctx sdk.Context, addr sdk.AccAddress) authtypes.AccountI\n\tGetModuleAccount(ctx sdk.Context, moduleName string) authtypes.ModuleAccountI\n}\n\n// CommunityPoolKeeper defines the contract needed to be fulfilled for community pool interactions.\ntype CommunityPoolKeeper interface {\n\tFundCommunityPool(ctx sdk.Context, amount sdk.Coins, sender sdk.AccAddress) error\n}\n"
  },
  {
    "path": "x/tokenfactory/types/genesis.go",
    "content": "package types\n\nimport (\n\terrorsmod \"cosmossdk.io/errors\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\n// this line is used by starport scaffolding # genesis/types/import\n\n// DefaultIndex is the default capability global index\nconst DefaultIndex uint64 = 1\n\n// DefaultGenesis returns the default Capability genesis state\nfunc DefaultGenesis() *GenesisState {\n\treturn &GenesisState{\n\t\tParams:        DefaultParams(),\n\t\tFactoryDenoms: []GenesisDenom{},\n\t}\n}\n\n// Validate performs basic genesis state validation returning an error upon any\n// failure.\nfunc (gs GenesisState) Validate() error {\n\terr := gs.Params.Validate()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tseenDenoms := map[string]bool{}\n\n\tfor _, denom := range gs.GetFactoryDenoms() {\n\t\tif seenDenoms[denom.GetDenom()] {\n\t\t\treturn errorsmod.Wrapf(ErrInvalidGenesis, \"duplicate denom: %s\", denom.GetDenom())\n\t\t}\n\t\tseenDenoms[denom.GetDenom()] = true\n\n\t\t_, _, err := DeconstructDenom(denom.GetDenom())\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif denom.AuthorityMetadata.Admin != \"\" {\n\t\t\t_, err = sdk.AccAddressFromBech32(denom.AuthorityMetadata.Admin)\n\t\t\tif err != nil {\n\t\t\t\treturn errorsmod.Wrapf(ErrInvalidAuthorityMetadata, \"Invalid admin address (%s)\", err)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/tokenfactory/types/genesis.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: osmosis/tokenfactory/v1beta1/genesis.proto\n\npackage types\n\nimport (\n\tfmt \"fmt\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\n// GenesisState defines the tokenfactory module's genesis state.\ntype GenesisState struct {\n\t// params defines the parameters of the module.\n\tParams        Params         `protobuf:\"bytes,1,opt,name=params,proto3\" json:\"params\"`\n\tFactoryDenoms []GenesisDenom `protobuf:\"bytes,2,rep,name=factory_denoms,json=factoryDenoms,proto3\" json:\"factory_denoms\" yaml:\"factory_denoms\"`\n}\n\nfunc (m *GenesisState) Reset()         { *m = GenesisState{} }\nfunc (m *GenesisState) String() string { return proto.CompactTextString(m) }\nfunc (*GenesisState) ProtoMessage()    {}\nfunc (*GenesisState) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_5749c3f71850298b, []int{0}\n}\nfunc (m *GenesisState) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_GenesisState.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *GenesisState) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GenesisState.Merge(m, src)\n}\nfunc (m *GenesisState) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *GenesisState) XXX_DiscardUnknown() {\n\txxx_messageInfo_GenesisState.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GenesisState proto.InternalMessageInfo\n\nfunc (m *GenesisState) GetParams() Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn Params{}\n}\n\nfunc (m *GenesisState) GetFactoryDenoms() []GenesisDenom {\n\tif m != nil {\n\t\treturn m.FactoryDenoms\n\t}\n\treturn nil\n}\n\n// GenesisDenom defines a tokenfactory denom that is defined within genesis\n// state. The structure contains DenomAuthorityMetadata which defines the\n// denom's admin.\ntype GenesisDenom struct {\n\tDenom             string                 `protobuf:\"bytes,1,opt,name=denom,proto3\" json:\"denom,omitempty\" yaml:\"denom\"`\n\tAuthorityMetadata DenomAuthorityMetadata `protobuf:\"bytes,2,opt,name=authority_metadata,json=authorityMetadata,proto3\" json:\"authority_metadata\" yaml:\"authority_metadata\"`\n}\n\nfunc (m *GenesisDenom) Reset()         { *m = GenesisDenom{} }\nfunc (m *GenesisDenom) String() string { return proto.CompactTextString(m) }\nfunc (*GenesisDenom) ProtoMessage()    {}\nfunc (*GenesisDenom) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_5749c3f71850298b, []int{1}\n}\nfunc (m *GenesisDenom) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *GenesisDenom) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_GenesisDenom.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *GenesisDenom) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GenesisDenom.Merge(m, src)\n}\nfunc (m *GenesisDenom) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *GenesisDenom) XXX_DiscardUnknown() {\n\txxx_messageInfo_GenesisDenom.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GenesisDenom proto.InternalMessageInfo\n\nfunc (m *GenesisDenom) GetDenom() string {\n\tif m != nil {\n\t\treturn m.Denom\n\t}\n\treturn \"\"\n}\n\nfunc (m *GenesisDenom) GetAuthorityMetadata() DenomAuthorityMetadata {\n\tif m != nil {\n\t\treturn m.AuthorityMetadata\n\t}\n\treturn DenomAuthorityMetadata{}\n}\n\nfunc init() {\n\tproto.RegisterType((*GenesisState)(nil), \"osmosis.tokenfactory.v1beta1.GenesisState\")\n\tproto.RegisterType((*GenesisDenom)(nil), \"osmosis.tokenfactory.v1beta1.GenesisDenom\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"osmosis/tokenfactory/v1beta1/genesis.proto\", fileDescriptor_5749c3f71850298b)\n}\n\nvar fileDescriptor_5749c3f71850298b = []byte{\n\t// 369 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xc1, 0x4e, 0xf2, 0x40,\n\t0x14, 0x85, 0x3b, 0xfc, 0xfc, 0x24, 0x16, 0x34, 0xda, 0x68, 0x82, 0x44, 0x5b, 0x6c, 0x8c, 0x41,\n\t0x16, 0x6d, 0x40, 0x56, 0xec, 0x2c, 0x24, 0xae, 0x34, 0xa6, 0xee, 0xdc, 0x90, 0x01, 0xc6, 0x52,\n\t0xb5, 0x9d, 0xa6, 0x73, 0x31, 0xf6, 0x05, 0x5c, 0xfb, 0x08, 0x3e, 0x8c, 0x26, 0x2c, 0x59, 0xba,\n\t0x22, 0x06, 0x36, 0xae, 0x79, 0x02, 0xc3, 0xcc, 0x44, 0x45, 0x92, 0xee, 0xda, 0x3b, 0xdf, 0x39,\n\t0x73, 0xee, 0x1c, 0xb5, 0x4a, 0x59, 0x40, 0x99, 0xcf, 0x6c, 0xa0, 0x77, 0x24, 0xbc, 0xc1, 0x3d,\n\t0xa0, 0x71, 0x62, 0x3f, 0xd4, 0xba, 0x04, 0x70, 0xcd, 0xf6, 0x48, 0x48, 0x98, 0xcf, 0xac, 0x28,\n\t0xa6, 0x40, 0xb5, 0x3d, 0xc9, 0x5a, 0xbf, 0x59, 0x4b, 0xb2, 0xa5, 0x6d, 0x8f, 0x7a, 0x94, 0x83,\n\t0xf6, 0xe2, 0x4b, 0x68, 0x4a, 0x8d, 0x54, 0x7f, 0x3c, 0x84, 0x01, 0x8d, 0x7d, 0x48, 0xce, 0x09,\n\t0xe0, 0x3e, 0x06, 0x2c, 0x55, 0xc7, 0xa9, 0xaa, 0x08, 0xc7, 0x38, 0x90, 0xa1, 0xcc, 0x57, 0xa4,\n\t0x16, 0xce, 0x44, 0xcc, 0x2b, 0xc0, 0x40, 0x34, 0x47, 0xcd, 0x09, 0xa0, 0x88, 0xca, 0xa8, 0x92,\n\t0xaf, 0x1f, 0x5a, 0x69, 0xb1, 0xad, 0x4b, 0xce, 0x3a, 0xd9, 0xd1, 0xc4, 0x50, 0x5c, 0xa9, 0xd4,\n\t0x22, 0x75, 0x43, 0x72, 0x9d, 0x3e, 0x09, 0x69, 0xc0, 0x8a, 0x99, 0xf2, 0xbf, 0x4a, 0xbe, 0x5e,\n\t0x4d, 0xf7, 0x92, 0x39, 0xda, 0x0b, 0x89, 0xb3, 0xbf, 0x70, 0x9c, 0x4f, 0x8c, 0x9d, 0x04, 0x07,\n\t0xf7, 0x4d, 0x73, 0xd9, 0xcf, 0x74, 0xd7, 0xe5, 0xa0, 0x2d, 0xfe, 0xdf, 0x7e, 0xd6, 0xe0, 0x13,\n\t0xed, 0x48, 0xfd, 0xcf, 0x51, 0xbe, 0xc5, 0x9a, 0xb3, 0x39, 0x9f, 0x18, 0x05, 0xe1, 0xc4, 0xc7,\n\t0xa6, 0x2b, 0x8e, 0xb5, 0x27, 0xa4, 0x6a, 0xdf, 0xcf, 0xd8, 0x09, 0xe4, 0x3b, 0x16, 0x33, 0x7c,\n\t0xf7, 0x46, 0x7a, 0x5e, 0x7e, 0xd3, 0xe9, 0xdf, 0x0e, 0x9c, 0x03, 0x99, 0x7c, 0x57, 0xdc, 0xb7,\n\t0xea, 0x6e, 0xba, 0x5b, 0x2b, 0xcd, 0x35, 0xb3, 0x9f, 0x2f, 0x06, 0x72, 0x2e, 0x46, 0x53, 0x1d,\n\t0x8d, 0xa7, 0x3a, 0xfa, 0x98, 0xea, 0xe8, 0x79, 0xa6, 0x2b, 0xe3, 0x99, 0xae, 0xbc, 0xcf, 0x74,\n\t0xe5, 0xba, 0xe1, 0xf9, 0x30, 0x18, 0x76, 0xad, 0x1e, 0x0d, 0xec, 0x16, 0x8f, 0xd5, 0xa2, 0x21,\n\t0xc4, 0xb8, 0x07, 0xcc, 0xbe, 0x1d, 0x86, 0xd4, 0x7e, 0x5c, 0x6e, 0x1b, 0x92, 0x88, 0xb0, 0x6e,\n\t0x8e, 0xb7, 0x7c, 0xf2, 0x15, 0x00, 0x00, 0xff, 0xff, 0xa0, 0x2e, 0xfa, 0xa4, 0xa8, 0x02, 0x00,\n\t0x00,\n}\n\nfunc (this *GenesisDenom) Equal(that interface{}) bool {\n\tif that == nil {\n\t\treturn this == nil\n\t}\n\n\tthat1, ok := that.(*GenesisDenom)\n\tif !ok {\n\t\tthat2, ok := that.(GenesisDenom)\n\t\tif ok {\n\t\t\tthat1 = &that2\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\tif that1 == nil {\n\t\treturn this == nil\n\t} else if this == nil {\n\t\treturn false\n\t}\n\tif this.Denom != that1.Denom {\n\t\treturn false\n\t}\n\tif !this.AuthorityMetadata.Equal(&that1.AuthorityMetadata) {\n\t\treturn false\n\t}\n\treturn true\n}\nfunc (m *GenesisState) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *GenesisState) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.FactoryDenoms) > 0 {\n\t\tfor iNdEx := len(m.FactoryDenoms) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.FactoryDenoms[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintGenesis(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0x12\n\t\t}\n\t}\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintGenesis(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *GenesisDenom) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *GenesisDenom) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *GenesisDenom) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.AuthorityMetadata.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintGenesis(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x12\n\tif len(m.Denom) > 0 {\n\t\ti -= len(m.Denom)\n\t\tcopy(dAtA[i:], m.Denom)\n\t\ti = encodeVarintGenesis(dAtA, i, uint64(len(m.Denom)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintGenesis(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovGenesis(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\nfunc (m *GenesisState) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Params.Size()\n\tn += 1 + l + sovGenesis(uint64(l))\n\tif len(m.FactoryDenoms) > 0 {\n\t\tfor _, e := range m.FactoryDenoms {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovGenesis(uint64(l))\n\t\t}\n\t}\n\treturn n\n}\n\nfunc (m *GenesisDenom) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Denom)\n\tif l > 0 {\n\t\tn += 1 + l + sovGenesis(uint64(l))\n\t}\n\tl = m.AuthorityMetadata.Size()\n\tn += 1 + l + sovGenesis(uint64(l))\n\treturn n\n}\n\nfunc sovGenesis(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\nfunc sozGenesis(x uint64) (n int) {\n\treturn sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\nfunc (m *GenesisState) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: GenesisState: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: GenesisState: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field FactoryDenoms\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.FactoryDenoms = append(m.FactoryDenoms, GenesisDenom{})\n\t\t\tif err := m.FactoryDenoms[len(m.FactoryDenoms)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipGenesis(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *GenesisDenom) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: GenesisDenom: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: GenesisDenom: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Denom\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Denom = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field AuthorityMetadata\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.AuthorityMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipGenesis(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc skipGenesis(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowGenesis\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthGenesis\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupGenesis\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthGenesis\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthGenesis        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowGenesis          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupGenesis = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/tokenfactory/types/genesis_test.go",
    "content": "package types_test\n\nimport (\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/require\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\nfunc TestGenesisState_Validate(t *testing.T) {\n\tfor _, tc := range []struct {\n\t\tdesc     string\n\t\tgenState *types.GenesisState\n\t\tvalid    bool\n\t}{\n\t\t{\n\t\t\tdesc:     \"default is valid\",\n\t\t\tgenState: types.DefaultGenesis(),\n\t\t\tvalid:    true,\n\t\t},\n\t\t{\n\t\t\tdesc: \"valid genesis state\",\n\t\t\tgenState: &types.GenesisState{\n\t\t\t\tFactoryDenoms: []types.GenesisDenom{\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom: \"factory/cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8/bitcoin\",\n\t\t\t\t\t\tAuthorityMetadata: types.DenomAuthorityMetadata{\n\t\t\t\t\t\t\tAdmin: \"cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tvalid: true,\n\t\t},\n\t\t{\n\t\t\tdesc: \"different admin from creator\",\n\t\t\tgenState: &types.GenesisState{\n\t\t\t\tFactoryDenoms: []types.GenesisDenom{\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom: \"factory/cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8/bitcoin\",\n\t\t\t\t\t\tAuthorityMetadata: types.DenomAuthorityMetadata{\n\t\t\t\t\t\t\tAdmin: \"cosmos1ft6e5esdtdegnvcr3djd3ftk4kwpcr6jta8eyh\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tvalid: true,\n\t\t},\n\t\t{\n\t\t\tdesc: \"empty admin\",\n\t\t\tgenState: &types.GenesisState{\n\t\t\t\tFactoryDenoms: []types.GenesisDenom{\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom: \"factory/cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8/bitcoin\",\n\t\t\t\t\t\tAuthorityMetadata: types.DenomAuthorityMetadata{\n\t\t\t\t\t\t\tAdmin: \"\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tvalid: true,\n\t\t},\n\t\t{\n\t\t\tdesc: \"no admin\",\n\t\t\tgenState: &types.GenesisState{\n\t\t\t\tFactoryDenoms: []types.GenesisDenom{\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom: \"factory/cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8/bitcoin\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tvalid: true,\n\t\t},\n\t\t{\n\t\t\tdesc: \"invalid admin\",\n\t\t\tgenState: &types.GenesisState{\n\t\t\t\tFactoryDenoms: []types.GenesisDenom{\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom: \"factory/cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8/bitcoin\",\n\t\t\t\t\t\tAuthorityMetadata: types.DenomAuthorityMetadata{\n\t\t\t\t\t\t\tAdmin: \"moose\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tvalid: false,\n\t\t},\n\t\t{\n\t\t\tdesc: \"multiple denoms\",\n\t\t\tgenState: &types.GenesisState{\n\t\t\t\tFactoryDenoms: []types.GenesisDenom{\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom: \"factory/cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8/bitcoin\",\n\t\t\t\t\t\tAuthorityMetadata: types.DenomAuthorityMetadata{\n\t\t\t\t\t\t\tAdmin: \"\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom: \"factory/cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8/litecoin\",\n\t\t\t\t\t\tAuthorityMetadata: types.DenomAuthorityMetadata{\n\t\t\t\t\t\t\tAdmin: \"\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tvalid: true,\n\t\t},\n\t\t{\n\t\t\tdesc: \"duplicate denoms\",\n\t\t\tgenState: &types.GenesisState{\n\t\t\t\tFactoryDenoms: []types.GenesisDenom{\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom: \"factory/cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8/bitcoin\",\n\t\t\t\t\t\tAuthorityMetadata: types.DenomAuthorityMetadata{\n\t\t\t\t\t\t\tAdmin: \"\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tDenom: \"factory/cosmos1t7egva48prqmzl59x5ngv4zx0dtrwewcdqdjr8/bitcoin\",\n\t\t\t\t\t\tAuthorityMetadata: types.DenomAuthorityMetadata{\n\t\t\t\t\t\t\tAdmin: \"\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tvalid: false,\n\t\t},\n\t} {\n\t\tt.Run(tc.desc, func(t *testing.T) {\n\t\t\terr := tc.genState.Validate()\n\t\t\tif tc.valid {\n\t\t\t\trequire.NoError(t, err)\n\t\t\t} else {\n\t\t\t\trequire.Error(t, err)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "x/tokenfactory/types/keys.go",
    "content": "package types\n\nimport (\n\t\"strings\"\n)\n\nvar ParamsKey = []byte{0x00}\n\nconst (\n\t// ModuleName defines the module name\n\tModuleName = \"tokenfactory\"\n\n\t// StoreKey defines the primary module store key\n\tStoreKey = ModuleName\n\n\t// RouterKey is the message route for slashing\n\tRouterKey = ModuleName\n\n\t// MemStoreKey defines the in-memory store key\n\tMemStoreKey = \"mem_tokenfactory\"\n)\n\n// KeySeparator is used to combine parts of the keys in the store\nconst KeySeparator = \"|\"\n\nvar (\n\tDenomAuthorityMetadataKey = \"authoritymetadata\"\n\tDenomsPrefixKey           = \"denoms\"\n\tCreatorPrefixKey          = \"creator\"\n\tAdminPrefixKey            = \"admin\"\n)\n\n// GetDenomPrefixStore returns the store prefix where all the data associated with a specific denom\n// is stored\nfunc GetDenomPrefixStore(denom string) []byte {\n\treturn []byte(strings.Join([]string{DenomsPrefixKey, denom, \"\"}, KeySeparator))\n}\n\n// GetCreatorsPrefix returns the store prefix where the list of the denoms created by a specific\n// creator are stored\nfunc GetCreatorPrefix(creator string) []byte {\n\treturn []byte(strings.Join([]string{CreatorPrefixKey, creator, \"\"}, KeySeparator))\n}\n\n// GetCreatorsPrefix returns the store prefix where a list of all creator addresses are stored\nfunc GetCreatorsPrefix() []byte {\n\treturn []byte(strings.Join([]string{CreatorPrefixKey, \"\"}, KeySeparator))\n}\n"
  },
  {
    "path": "x/tokenfactory/types/msgs.go",
    "content": "package types\n\nimport (\n\terrorsmod \"cosmossdk.io/errors\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tsdkerrors \"github.com/cosmos/cosmos-sdk/types/errors\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n)\n\nconst (\n\tTypeMsgCreateDenom      = \"create_denom\"\n\tTypeMsgMint             = \"tf_mint\"\n\tTypeMsgBurn             = \"tf_burn\"\n\tTypeMsgForceTransfer    = \"force_transfer\"\n\tTypeMsgChangeAdmin      = \"change_admin\"\n\tTypeMsgSetDenomMetadata = \"set_denom_metadata\"\n)\n\nvar _ sdk.Msg = &MsgCreateDenom{}\n\n// NewMsgCreateDenom creates a msg to create a new denom\nfunc NewMsgCreateDenom(sender, subdenom string) *MsgCreateDenom {\n\treturn &MsgCreateDenom{\n\t\tSender:   sender,\n\t\tSubdenom: subdenom,\n\t}\n}\n\nfunc (m MsgCreateDenom) Route() string { return RouterKey }\nfunc (m MsgCreateDenom) Type() string  { return TypeMsgCreateDenom }\nfunc (m MsgCreateDenom) ValidateBasic() error {\n\t_, err := sdk.AccAddressFromBech32(m.Sender)\n\tif err != nil {\n\t\treturn errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid sender address (%s)\", err)\n\t}\n\n\t_, err = GetTokenDenom(m.Sender, m.Subdenom)\n\tif err != nil {\n\t\treturn errorsmod.Wrap(ErrInvalidDenom, err.Error())\n\t}\n\n\treturn nil\n}\n\nfunc (m MsgCreateDenom) GetSignBytes() []byte {\n\treturn sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))\n}\n\nfunc (m MsgCreateDenom) GetSigners() []sdk.AccAddress {\n\tsender, _ := sdk.AccAddressFromBech32(m.Sender)\n\treturn []sdk.AccAddress{sender}\n}\n\nvar _ sdk.Msg = &MsgMint{}\n\n// NewMsgMint creates a message to mint tokens\nfunc NewMsgMint(sender string, amount sdk.Coin) *MsgMint {\n\treturn &MsgMint{\n\t\tSender: sender,\n\t\tAmount: amount,\n\t}\n}\n\nfunc NewMsgMintTo(sender string, amount sdk.Coin, mintToAddress string) *MsgMint {\n\treturn &MsgMint{\n\t\tSender:        sender,\n\t\tAmount:        amount,\n\t\tMintToAddress: mintToAddress,\n\t}\n}\n\nfunc (m MsgMint) Route() string { return RouterKey }\nfunc (m MsgMint) Type() string  { return TypeMsgMint }\nfunc (m MsgMint) ValidateBasic() error {\n\t_, err := sdk.AccAddressFromBech32(m.Sender)\n\tif err != nil {\n\t\treturn errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid sender address (%s)\", err)\n\t}\n\n\tif m.MintToAddress != \"\" {\n\t\t_, err = sdk.AccAddressFromBech32(m.MintToAddress)\n\t\tif err != nil {\n\t\t\treturn errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid mint to address (%s)\", err)\n\t\t}\n\t}\n\n\tif !m.Amount.IsValid() || m.Amount.Amount.Equal(sdk.ZeroInt()) {\n\t\treturn errorsmod.Wrap(sdkerrors.ErrInvalidCoins, m.Amount.String())\n\t}\n\n\treturn nil\n}\n\nfunc (m MsgMint) GetSignBytes() []byte {\n\treturn sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))\n}\n\nfunc (m MsgMint) GetSigners() []sdk.AccAddress {\n\tsender, _ := sdk.AccAddressFromBech32(m.Sender)\n\treturn []sdk.AccAddress{sender}\n}\n\nvar _ sdk.Msg = &MsgBurn{}\n\n// NewMsgBurn creates a message to burn tokens\nfunc NewMsgBurn(sender string, amount sdk.Coin) *MsgBurn {\n\treturn &MsgBurn{\n\t\tSender: sender,\n\t\tAmount: amount,\n\t}\n}\n\n// NewMsgBurn creates a message to burn tokens\nfunc NewMsgBurnFrom(sender string, amount sdk.Coin, burnFromAddress string) *MsgBurn {\n\treturn &MsgBurn{\n\t\tSender:          sender,\n\t\tAmount:          amount,\n\t\tBurnFromAddress: burnFromAddress,\n\t}\n}\n\nfunc (m MsgBurn) Route() string { return RouterKey }\nfunc (m MsgBurn) Type() string  { return TypeMsgBurn }\nfunc (m MsgBurn) ValidateBasic() error {\n\t_, err := sdk.AccAddressFromBech32(m.Sender)\n\tif err != nil {\n\t\treturn errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid sender address (%s)\", err)\n\t}\n\n\tif !m.Amount.IsValid() || m.Amount.Amount.Equal(sdk.ZeroInt()) {\n\t\treturn errorsmod.Wrap(sdkerrors.ErrInvalidCoins, m.Amount.String())\n\t}\n\n\tif m.BurnFromAddress != \"\" {\n\t\t_, err = sdk.AccAddressFromBech32(m.BurnFromAddress)\n\t\tif err != nil {\n\t\t\treturn errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid burn from address (%s)\", err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (m MsgBurn) GetSignBytes() []byte {\n\treturn sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))\n}\n\nfunc (m MsgBurn) GetSigners() []sdk.AccAddress {\n\tsender, _ := sdk.AccAddressFromBech32(m.Sender)\n\treturn []sdk.AccAddress{sender}\n}\n\nvar _ sdk.Msg = &MsgForceTransfer{}\n\n// NewMsgForceTransfer creates a transfer funds from one account to another\nfunc NewMsgForceTransfer(sender string, amount sdk.Coin, fromAddr, toAddr string) *MsgForceTransfer {\n\treturn &MsgForceTransfer{\n\t\tSender:              sender,\n\t\tAmount:              amount,\n\t\tTransferFromAddress: fromAddr,\n\t\tTransferToAddress:   toAddr,\n\t}\n}\n\nfunc (m MsgForceTransfer) Route() string { return RouterKey }\nfunc (m MsgForceTransfer) Type() string  { return TypeMsgForceTransfer }\nfunc (m MsgForceTransfer) ValidateBasic() error {\n\t_, err := sdk.AccAddressFromBech32(m.Sender)\n\tif err != nil {\n\t\treturn errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid sender address (%s)\", err)\n\t}\n\n\t_, err = sdk.AccAddressFromBech32(m.TransferFromAddress)\n\tif err != nil {\n\t\treturn errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid from address (%s)\", err)\n\t}\n\t_, err = sdk.AccAddressFromBech32(m.TransferToAddress)\n\tif err != nil {\n\t\treturn errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid to address (%s)\", err)\n\t}\n\n\tif !m.Amount.IsValid() {\n\t\treturn errorsmod.Wrap(sdkerrors.ErrInvalidCoins, m.Amount.String())\n\t}\n\n\treturn nil\n}\n\nfunc (m MsgForceTransfer) GetSignBytes() []byte {\n\treturn sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))\n}\n\nfunc (m MsgForceTransfer) GetSigners() []sdk.AccAddress {\n\tsender, _ := sdk.AccAddressFromBech32(m.Sender)\n\treturn []sdk.AccAddress{sender}\n}\n\nvar _ sdk.Msg = &MsgChangeAdmin{}\n\n// NewMsgChangeAdmin creates a message to burn tokens\nfunc NewMsgChangeAdmin(sender, denom, newAdmin string) *MsgChangeAdmin {\n\treturn &MsgChangeAdmin{\n\t\tSender:   sender,\n\t\tDenom:    denom,\n\t\tNewAdmin: newAdmin,\n\t}\n}\n\nfunc (m MsgChangeAdmin) Route() string { return RouterKey }\nfunc (m MsgChangeAdmin) Type() string  { return TypeMsgChangeAdmin }\nfunc (m MsgChangeAdmin) ValidateBasic() error {\n\t_, err := sdk.AccAddressFromBech32(m.Sender)\n\tif err != nil {\n\t\treturn errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid sender address (%s)\", err)\n\t}\n\n\t_, err = sdk.AccAddressFromBech32(m.NewAdmin)\n\tif err != nil {\n\t\treturn errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid address (%s)\", err)\n\t}\n\n\t_, _, err = DeconstructDenom(m.Denom)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc (m MsgChangeAdmin) GetSignBytes() []byte {\n\treturn sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))\n}\n\nfunc (m MsgChangeAdmin) GetSigners() []sdk.AccAddress {\n\tsender, _ := sdk.AccAddressFromBech32(m.Sender)\n\treturn []sdk.AccAddress{sender}\n}\n\nvar _ sdk.Msg = &MsgSetDenomMetadata{}\n\n// NewMsgChangeAdmin creates a message to burn tokens\nfunc NewMsgSetDenomMetadata(sender string, metadata banktypes.Metadata) *MsgSetDenomMetadata {\n\treturn &MsgSetDenomMetadata{\n\t\tSender:   sender,\n\t\tMetadata: metadata,\n\t}\n}\n\nfunc (m MsgSetDenomMetadata) Route() string { return RouterKey }\nfunc (m MsgSetDenomMetadata) Type() string  { return TypeMsgSetDenomMetadata }\nfunc (m MsgSetDenomMetadata) ValidateBasic() error {\n\t_, err := sdk.AccAddressFromBech32(m.Sender)\n\tif err != nil {\n\t\treturn errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, \"Invalid sender address (%s)\", err)\n\t}\n\n\terr = m.Metadata.Validate()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t_, _, err = DeconstructDenom(m.Metadata.Base)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc (m MsgSetDenomMetadata) GetSignBytes() []byte {\n\treturn sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))\n}\n\nfunc (m MsgSetDenomMetadata) GetSigners() []sdk.AccAddress {\n\tsender, _ := sdk.AccAddressFromBech32(m.Sender)\n\treturn []sdk.AccAddress{sender}\n}\n\nvar _ sdk.Msg = &MsgUpdateParams{}\n\n// GetSignBytes implements the LegacyMsg interface.\nfunc (m MsgUpdateParams) GetSignBytes() []byte {\n\treturn sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))\n}\n\n// GetSigners returns the expected signers for a MsgUpdateParams message.\nfunc (m *MsgUpdateParams) GetSigners() []sdk.AccAddress {\n\taddr, _ := sdk.AccAddressFromBech32(m.Authority)\n\treturn []sdk.AccAddress{addr}\n}\n\n// ValidateBasic does a sanity check on the provided data.\nfunc (m *MsgUpdateParams) ValidateBasic() error {\n\tif _, err := sdk.AccAddressFromBech32(m.Authority); err != nil {\n\t\treturn errorsmod.Wrap(err, \"invalid authority address\")\n\t}\n\n\treturn m.Params.Validate()\n}\n"
  },
  {
    "path": "x/tokenfactory/types/msgs_test.go",
    "content": "package types_test\n\nimport (\n\tfmt \"fmt\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/require\"\n\n\t\"github.com/cometbft/cometbft/crypto/ed25519\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/testhelpers\"\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n)\n\n// Test authz serialize and de-serializes for tokenfactory msg.\nfunc TestAuthzMsg(t *testing.T) {\n\tt.Skip(\"TODO: figure out how to register authz interfaces for tests\")\n\tpk1 := ed25519.GenPrivKey().PubKey()\n\taddr1 := sdk.AccAddress(pk1.Address()).String()\n\tcoin := sdk.NewCoin(\"denom\", sdk.NewInt(1))\n\n\ttestCases := []struct {\n\t\tname string\n\t\tmsg  sdk.Msg\n\t}{\n\t\t{\n\t\t\tname: \"MsgCreateDenom\",\n\t\t\tmsg: &types.MsgCreateDenom{\n\t\t\t\tSender:   addr1,\n\t\t\t\tSubdenom: \"valoper1xyz\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"MsgBurn\",\n\t\t\tmsg: &types.MsgBurn{\n\t\t\t\tSender: addr1,\n\t\t\t\tAmount: coin,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"MsgMint\",\n\t\t\tmsg: &types.MsgMint{\n\t\t\t\tSender: addr1,\n\t\t\t\tAmount: coin,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"MsgChangeAdmin\",\n\t\t\tmsg: &types.MsgChangeAdmin{\n\t\t\t\tSender:   addr1,\n\t\t\t\tDenom:    \"denom\",\n\t\t\t\tNewAdmin: \"osmo1q8tq5qhrhw6t970egemuuwywhlhpnmdmts6xnu\",\n\t\t\t},\n\t\t},\n\t}\n\tfor _, tc := range testCases {\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\ttesthelpers.TestMessageAuthzSerialization(t, tc.msg)\n\t\t})\n\t}\n}\n\n// TestMsgCreateDenom tests if valid/invalid create denom messages are properly validated/invalidated\nfunc TestMsgCreateDenom(t *testing.T) {\n\t// generate a private/public key pair and get the respective address\n\tpk1 := ed25519.GenPrivKey().PubKey()\n\taddr1 := sdk.AccAddress(pk1.Address())\n\n\t// make a proper createDenom message\n\tcreateMsg := func(after func(msg types.MsgCreateDenom) types.MsgCreateDenom) types.MsgCreateDenom {\n\t\tproperMsg := *types.NewMsgCreateDenom(\n\t\t\taddr1.String(),\n\t\t\t\"bitcoin\",\n\t\t)\n\n\t\treturn after(properMsg)\n\t}\n\n\t// validate createDenom message was created as intended\n\tmsg := createMsg(func(msg types.MsgCreateDenom) types.MsgCreateDenom {\n\t\treturn msg\n\t})\n\trequire.Equal(t, msg.Route(), types.RouterKey)\n\trequire.Equal(t, msg.Type(), \"create_denom\")\n\tsigners := msg.GetSigners()\n\trequire.Equal(t, len(signers), 1)\n\trequire.Equal(t, signers[0].String(), addr1.String())\n\n\ttests := []struct {\n\t\tname       string\n\t\tmsg        types.MsgCreateDenom\n\t\texpectPass bool\n\t}{\n\t\t{\n\t\t\tname: \"proper msg\",\n\t\t\tmsg: createMsg(func(msg types.MsgCreateDenom) types.MsgCreateDenom {\n\t\t\t\treturn msg\n\t\t\t}),\n\t\t\texpectPass: true,\n\t\t},\n\t\t{\n\t\t\tname: \"empty sender\",\n\t\t\tmsg: createMsg(func(msg types.MsgCreateDenom) types.MsgCreateDenom {\n\t\t\t\tmsg.Sender = \"\"\n\t\t\t\treturn msg\n\t\t\t}),\n\t\t\texpectPass: false,\n\t\t},\n\t\t{\n\t\t\tname: \"invalid subdenom\",\n\t\t\tmsg: createMsg(func(msg types.MsgCreateDenom) types.MsgCreateDenom {\n\t\t\t\tmsg.Subdenom = \"thissubdenomismuchtoolongasdkfjaasdfdsafsdlkfnmlksadmflksmdlfmlsakmfdsafasdfasdf\"\n\t\t\t\treturn msg\n\t\t\t}),\n\t\t\texpectPass: false,\n\t\t},\n\t}\n\n\tfor _, test := range tests {\n\t\tif test.expectPass {\n\t\t\trequire.NoError(t, test.msg.ValidateBasic(), \"test: %v\", test.name)\n\t\t} else {\n\t\t\trequire.Error(t, test.msg.ValidateBasic(), \"test: %v\", test.name)\n\t\t}\n\t}\n}\n\n// TestMsgMint tests if valid/invalid create denom messages are properly validated/invalidated\nfunc TestMsgMint(t *testing.T) {\n\t// generate a private/public key pair and get the respective address\n\tpk1 := ed25519.GenPrivKey().PubKey()\n\taddr1 := sdk.AccAddress(pk1.Address())\n\n\t// make a proper mint message\n\tcreateMsg := func(after func(msg types.MsgMint) types.MsgMint) types.MsgMint {\n\t\tproperMsg := *types.NewMsgMint(\n\t\t\taddr1.String(),\n\t\t\tsdk.NewCoin(\"bitcoin\", sdk.NewInt(500000000)),\n\t\t)\n\n\t\treturn after(properMsg)\n\t}\n\n\t// validate mint message was created as intended\n\tmsg := createMsg(func(msg types.MsgMint) types.MsgMint {\n\t\treturn msg\n\t})\n\trequire.Equal(t, msg.Route(), types.RouterKey)\n\trequire.Equal(t, msg.Type(), \"tf_mint\")\n\tsigners := msg.GetSigners()\n\trequire.Equal(t, len(signers), 1)\n\trequire.Equal(t, signers[0].String(), addr1.String())\n\n\ttests := []struct {\n\t\tname       string\n\t\tmsg        types.MsgMint\n\t\texpectPass bool\n\t}{\n\t\t{\n\t\t\tname: \"proper msg\",\n\t\t\tmsg: createMsg(func(msg types.MsgMint) types.MsgMint {\n\t\t\t\treturn msg\n\t\t\t}),\n\t\t\texpectPass: true,\n\t\t},\n\t\t{\n\t\t\tname: \"empty sender\",\n\t\t\tmsg: createMsg(func(msg types.MsgMint) types.MsgMint {\n\t\t\t\tmsg.Sender = \"\"\n\t\t\t\treturn msg\n\t\t\t}),\n\t\t\texpectPass: false,\n\t\t},\n\t\t{\n\t\t\tname: \"zero amount\",\n\t\t\tmsg: createMsg(func(msg types.MsgMint) types.MsgMint {\n\t\t\t\tmsg.Amount = sdk.NewCoin(\"bitcoin\", sdk.ZeroInt())\n\t\t\t\treturn msg\n\t\t\t}),\n\t\t\texpectPass: false,\n\t\t},\n\t\t{\n\t\t\tname: \"negative amount\",\n\t\t\tmsg: createMsg(func(msg types.MsgMint) types.MsgMint {\n\t\t\t\tmsg.Amount.Amount = sdk.NewInt(-10000000)\n\t\t\t\treturn msg\n\t\t\t}),\n\t\t\texpectPass: false,\n\t\t},\n\t}\n\n\tfor _, test := range tests {\n\t\tif test.expectPass {\n\t\t\trequire.NoError(t, test.msg.ValidateBasic(), \"test: %v\", test.name)\n\t\t} else {\n\t\t\trequire.Error(t, test.msg.ValidateBasic(), \"test: %v\", test.name)\n\t\t}\n\t}\n}\n\n// TestMsgBurn tests if valid/invalid create denom messages are properly validated/invalidated\nfunc TestMsgBurn(t *testing.T) {\n\t// generate a private/public key pair and get the respective address\n\tpk1 := ed25519.GenPrivKey().PubKey()\n\taddr1 := sdk.AccAddress(pk1.Address())\n\n\t// make a proper burn message\n\tbaseMsg := types.NewMsgBurn(\n\t\taddr1.String(),\n\t\tsdk.NewCoin(\"bitcoin\", sdk.NewInt(500000000)),\n\t)\n\n\t// validate burn message was created as intended\n\trequire.Equal(t, baseMsg.Route(), types.RouterKey)\n\trequire.Equal(t, baseMsg.Type(), \"tf_burn\")\n\tsigners := baseMsg.GetSigners()\n\trequire.Equal(t, len(signers), 1)\n\trequire.Equal(t, signers[0].String(), addr1.String())\n\n\ttests := []struct {\n\t\tname       string\n\t\tmsg        func() *types.MsgBurn\n\t\texpectPass bool\n\t}{\n\t\t{\n\t\t\tname: \"proper msg\",\n\t\t\tmsg: func() *types.MsgBurn {\n\t\t\t\tmsg := baseMsg\n\t\t\t\treturn msg\n\t\t\t},\n\t\t\texpectPass: true,\n\t\t},\n\t\t{\n\t\t\tname: \"empty sender\",\n\t\t\tmsg: func() *types.MsgBurn {\n\t\t\t\tmsg := baseMsg\n\t\t\t\tmsg.Sender = \"\"\n\t\t\t\treturn msg\n\t\t\t},\n\t\t\texpectPass: false,\n\t\t},\n\t\t{\n\t\t\tname: \"zero amount\",\n\t\t\tmsg: func() *types.MsgBurn {\n\t\t\t\tmsg := baseMsg\n\t\t\t\tmsg.Amount.Amount = sdk.ZeroInt()\n\t\t\t\treturn msg\n\t\t\t},\n\t\t\texpectPass: false,\n\t\t},\n\t\t{\n\t\t\tname: \"negative amount\",\n\t\t\tmsg: func() *types.MsgBurn {\n\t\t\t\tmsg := baseMsg\n\t\t\t\tmsg.Amount.Amount = sdk.NewInt(-10000000)\n\t\t\t\treturn msg\n\t\t\t},\n\t\t\texpectPass: false,\n\t\t},\n\t}\n\n\tfor _, test := range tests {\n\t\tif test.expectPass {\n\t\t\trequire.NoError(t, test.msg().ValidateBasic(), \"test: %v\", test.name)\n\t\t} else {\n\t\t\trequire.Error(t, test.msg().ValidateBasic(), \"test: %v\", test.name)\n\t\t}\n\t}\n}\n\n// TestMsgChangeAdmin tests if valid/invalid create denom messages are properly validated/invalidated\nfunc TestMsgChangeAdmin(t *testing.T) {\n\t// generate a private/public key pair and get the respective address\n\tpk1 := ed25519.GenPrivKey().PubKey()\n\taddr1 := sdk.AccAddress(pk1.Address())\n\tpk2 := ed25519.GenPrivKey().PubKey()\n\taddr2 := sdk.AccAddress(pk2.Address())\n\ttokenFactoryDenom := fmt.Sprintf(\"factory/%s/bitcoin\", addr1.String())\n\n\t// make a proper changeAdmin message\n\tbaseMsg := types.NewMsgChangeAdmin(\n\t\taddr1.String(),\n\t\ttokenFactoryDenom,\n\t\taddr2.String(),\n\t)\n\n\t// validate changeAdmin message was created as intended\n\trequire.Equal(t, baseMsg.Route(), types.RouterKey)\n\trequire.Equal(t, baseMsg.Type(), \"change_admin\")\n\tsigners := baseMsg.GetSigners()\n\trequire.Equal(t, len(signers), 1)\n\trequire.Equal(t, signers[0].String(), addr1.String())\n\n\ttests := []struct {\n\t\tname       string\n\t\tmsg        func() *types.MsgChangeAdmin\n\t\texpectPass bool\n\t}{\n\t\t{\n\t\t\tname: \"proper msg\",\n\t\t\tmsg: func() *types.MsgChangeAdmin {\n\t\t\t\tmsg := baseMsg\n\t\t\t\treturn msg\n\t\t\t},\n\t\t\texpectPass: true,\n\t\t},\n\t\t{\n\t\t\tname: \"empty sender\",\n\t\t\tmsg: func() *types.MsgChangeAdmin {\n\t\t\t\tmsg := baseMsg\n\t\t\t\tmsg.Sender = \"\"\n\t\t\t\treturn msg\n\t\t\t},\n\t\t\texpectPass: false,\n\t\t},\n\t\t{\n\t\t\tname: \"empty newAdmin\",\n\t\t\tmsg: func() *types.MsgChangeAdmin {\n\t\t\t\tmsg := baseMsg\n\t\t\t\tmsg.NewAdmin = \"\"\n\t\t\t\treturn msg\n\t\t\t},\n\t\t\texpectPass: false,\n\t\t},\n\t\t{\n\t\t\tname: \"invalid denom\",\n\t\t\tmsg: func() *types.MsgChangeAdmin {\n\t\t\t\tmsg := baseMsg\n\t\t\t\tmsg.Denom = \"bitcoin\"\n\t\t\t\treturn msg\n\t\t\t},\n\t\t\texpectPass: false,\n\t\t},\n\t}\n\n\tfor _, test := range tests {\n\t\tif test.expectPass {\n\t\t\trequire.NoError(t, test.msg().ValidateBasic(), \"test: %v\", test.name)\n\t\t} else {\n\t\t\trequire.Error(t, test.msg().ValidateBasic(), \"test: %v\", test.name)\n\t\t}\n\t}\n}\n\n// TestMsgSetDenomMetadata tests if valid/invalid create denom messages are properly validated/invalidated\nfunc TestMsgSetDenomMetadata(t *testing.T) {\n\t// generate a private/public key pair and get the respective address\n\tpk1 := ed25519.GenPrivKey().PubKey()\n\taddr1 := sdk.AccAddress(pk1.Address())\n\ttokenFactoryDenom := fmt.Sprintf(\"factory/%s/bitcoin\", addr1.String())\n\tdenomMetadata := banktypes.Metadata{\n\t\tDescription: \"nakamoto\",\n\t\tDenomUnits: []*banktypes.DenomUnit{\n\t\t\t{\n\t\t\t\tDenom:    tokenFactoryDenom,\n\t\t\t\tExponent: 0,\n\t\t\t},\n\t\t\t{\n\t\t\t\tDenom:    \"sats\",\n\t\t\t\tExponent: 6,\n\t\t\t},\n\t\t},\n\t\tDisplay: \"sats\",\n\t\tBase:    tokenFactoryDenom,\n\t\tName:    \"bitcoin\",\n\t\tSymbol:  \"BTC\",\n\t}\n\tinvalidDenomMetadata := banktypes.Metadata{\n\t\tDescription: \"nakamoto\",\n\t\tDenomUnits: []*banktypes.DenomUnit{\n\t\t\t{\n\t\t\t\tDenom:    \"bitcoin\",\n\t\t\t\tExponent: 0,\n\t\t\t},\n\t\t\t{\n\t\t\t\tDenom:    \"sats\",\n\t\t\t\tExponent: 6,\n\t\t\t},\n\t\t},\n\t\tDisplay: \"sats\",\n\t\tBase:    \"bitcoin\",\n\t\tName:    \"bitcoin\",\n\t\tSymbol:  \"BTC\",\n\t}\n\n\t// make a proper setDenomMetadata message\n\tbaseMsg := types.NewMsgSetDenomMetadata(\n\t\taddr1.String(),\n\t\tdenomMetadata,\n\t)\n\n\t// validate setDenomMetadata message was created as intended\n\trequire.Equal(t, baseMsg.Route(), types.RouterKey)\n\trequire.Equal(t, baseMsg.Type(), \"set_denom_metadata\")\n\tsigners := baseMsg.GetSigners()\n\trequire.Equal(t, len(signers), 1)\n\trequire.Equal(t, signers[0].String(), addr1.String())\n\n\ttests := []struct {\n\t\tname       string\n\t\tmsg        func() *types.MsgSetDenomMetadata\n\t\texpectPass bool\n\t}{\n\t\t{\n\t\t\tname: \"proper msg\",\n\t\t\tmsg: func() *types.MsgSetDenomMetadata {\n\t\t\t\tmsg := baseMsg\n\t\t\t\treturn msg\n\t\t\t},\n\t\t\texpectPass: true,\n\t\t},\n\t\t{\n\t\t\tname: \"empty sender\",\n\t\t\tmsg: func() *types.MsgSetDenomMetadata {\n\t\t\t\tmsg := baseMsg\n\t\t\t\tmsg.Sender = \"\"\n\t\t\t\treturn msg\n\t\t\t},\n\t\t\texpectPass: false,\n\t\t},\n\t\t{\n\t\t\tname: \"invalid metadata\",\n\t\t\tmsg: func() *types.MsgSetDenomMetadata {\n\t\t\t\tmsg := baseMsg\n\t\t\t\tmsg.Metadata.Name = \"\"\n\t\t\t\treturn msg\n\t\t\t},\n\n\t\t\texpectPass: false,\n\t\t},\n\t\t{\n\t\t\tname: \"invalid base\",\n\t\t\tmsg: func() *types.MsgSetDenomMetadata {\n\t\t\t\tmsg := baseMsg\n\t\t\t\tmsg.Metadata = invalidDenomMetadata\n\t\t\t\treturn msg\n\t\t\t},\n\t\t\texpectPass: false,\n\t\t},\n\t}\n\n\tfor _, test := range tests {\n\t\tif test.expectPass {\n\t\t\trequire.NoError(t, test.msg().ValidateBasic(), \"test: %v\", test.name)\n\t\t} else {\n\t\t\trequire.Error(t, test.msg().ValidateBasic(), \"test: %v\", test.name)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "x/tokenfactory/types/params.go",
    "content": "package types\n\nimport (\n\t\"fmt\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\nfunc NewParams(denomCreationFee sdk.Coins) Params {\n\treturn Params{\n\t\tDenomCreationFee: denomCreationFee,\n\t}\n}\n\n// default tokenfactory module parameters.\nfunc DefaultParams() Params {\n\treturn Params{\n\t\tDenomCreationFee:        sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 10_000_000)),\n\t\tDenomCreationGasConsume: 2_000_000,\n\t}\n}\n\n// validate params.\nfunc (p Params) Validate() error {\n\terr := validateDenomCreationFee(p.DenomCreationFee)\n\n\treturn err\n}\n\nfunc validateDenomCreationFee(i interface{}) error {\n\tv, ok := i.(sdk.Coins)\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\tif v.Validate() != nil {\n\t\treturn fmt.Errorf(\"invalid denom creation fee: %+v\", i)\n\t}\n\n\treturn nil\n}\n\nfunc validateDenomCreationFeeGasConsume(i interface{}) error {\n\t_, ok := i.(uint64)\n\tif !ok {\n\t\treturn fmt.Errorf(\"invalid parameter type: %T\", i)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "x/tokenfactory/types/params.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: osmosis/tokenfactory/v1beta1/params.proto\n\npackage types\n\nimport (\n\tfmt \"fmt\"\n\t_ \"github.com/cosmos/cosmos-proto\"\n\tgithub_com_cosmos_cosmos_sdk_types \"github.com/cosmos/cosmos-sdk/types\"\n\ttypes \"github.com/cosmos/cosmos-sdk/types\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\n// Params defines the parameters for the tokenfactory module.\ntype Params struct {\n\tDenomCreationFee github_com_cosmos_cosmos_sdk_types.Coins `protobuf:\"bytes,1,rep,name=denom_creation_fee,json=denomCreationFee,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins\" json:\"denom_creation_fee\" yaml:\"denom_creation_fee\"`\n\t// if denom_creation_fee is an empty array, then this field is used to add more gas consumption\n\t// to the base cost.\n\t// https://github.com/CosmWasm/token-factory/issues/11\n\tDenomCreationGasConsume uint64 `protobuf:\"varint,2,opt,name=denom_creation_gas_consume,json=denomCreationGasConsume,proto3\" json:\"denom_creation_gas_consume,omitempty\" yaml:\"denom_creation_gas_consume\"`\n}\n\nfunc (m *Params) Reset()         { *m = Params{} }\nfunc (m *Params) String() string { return proto.CompactTextString(m) }\nfunc (*Params) ProtoMessage()    {}\nfunc (*Params) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_cc8299d306f3ff47, []int{0}\n}\nfunc (m *Params) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_Params.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *Params) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Params.Merge(m, src)\n}\nfunc (m *Params) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *Params) XXX_DiscardUnknown() {\n\txxx_messageInfo_Params.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Params proto.InternalMessageInfo\n\nfunc (m *Params) GetDenomCreationFee() github_com_cosmos_cosmos_sdk_types.Coins {\n\tif m != nil {\n\t\treturn m.DenomCreationFee\n\t}\n\treturn nil\n}\n\nfunc (m *Params) GetDenomCreationGasConsume() uint64 {\n\tif m != nil {\n\t\treturn m.DenomCreationGasConsume\n\t}\n\treturn 0\n}\n\nfunc init() {\n\tproto.RegisterType((*Params)(nil), \"osmosis.tokenfactory.v1beta1.Params\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"osmosis/tokenfactory/v1beta1/params.proto\", fileDescriptor_cc8299d306f3ff47)\n}\n\nvar fileDescriptor_cc8299d306f3ff47 = []byte{\n\t// 356 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xc1, 0x4e, 0xea, 0x40,\n\t0x14, 0x86, 0x5b, 0xee, 0x0d, 0x8b, 0xde, 0xcd, 0x4d, 0x73, 0x93, 0x0b, 0xc4, 0xb4, 0xd8, 0x15,\n\t0x2c, 0xec, 0x04, 0x65, 0xe5, 0x92, 0x26, 0xba, 0xc2, 0x18, 0x96, 0x6e, 0x9a, 0xd3, 0x61, 0x28,\n\t0x15, 0x3b, 0x87, 0x74, 0xa6, 0xc6, 0x3e, 0x82, 0x3b, 0x57, 0x3e, 0x84, 0x4f, 0xc2, 0x92, 0xa5,\n\t0xab, 0x6a, 0xe0, 0x0d, 0x78, 0x02, 0xc3, 0x74, 0x34, 0xa0, 0xc6, 0x55, 0x7b, 0xf2, 0xff, 0xff,\n\t0x37, 0xff, 0x99, 0xb1, 0xba, 0x28, 0x52, 0x14, 0x89, 0x20, 0x12, 0x67, 0x8c, 0x4f, 0x80, 0x4a,\n\t0xcc, 0x0a, 0x72, 0xdb, 0x8b, 0x98, 0x84, 0x1e, 0x99, 0x43, 0x06, 0xa9, 0xf0, 0xe7, 0x19, 0x4a,\n\t0xb4, 0x0f, 0xb4, 0xd5, 0xdf, 0xb5, 0xfa, 0xda, 0xda, 0xfa, 0x17, 0x63, 0x8c, 0xca, 0x48, 0xb6,\n\t0x7f, 0x55, 0xa6, 0xd5, 0xff, 0x11, 0x0f, 0xb9, 0x9c, 0x62, 0x96, 0xc8, 0x62, 0xc8, 0x24, 0x8c,\n\t0x41, 0x82, 0x4e, 0x35, 0xa9, 0x8a, 0x85, 0x15, 0xae, 0x1a, 0xb4, 0xe4, 0x54, 0x13, 0x89, 0x40,\n\t0xb0, 0x0f, 0x0e, 0xc5, 0x84, 0x57, 0xba, 0x77, 0x5f, 0xb3, 0xea, 0x97, 0xaa, 0xb5, 0xfd, 0x68,\n\t0x5a, 0xf6, 0x98, 0x71, 0x4c, 0x43, 0x9a, 0x31, 0x90, 0x09, 0xf2, 0x70, 0xc2, 0x58, 0xc3, 0x6c,\n\t0xff, 0xea, 0xfc, 0x39, 0x6e, 0xfa, 0x1a, 0xbb, 0x05, 0xbd, 0x2f, 0xe1, 0x07, 0x98, 0xf0, 0xc1,\n\t0x70, 0x51, 0xba, 0xc6, 0xa6, 0x74, 0x9b, 0x05, 0xa4, 0x37, 0xa7, 0xde, 0x57, 0x84, 0xf7, 0xf4,\n\t0xe2, 0x76, 0xe2, 0x44, 0x4e, 0xf3, 0xc8, 0xa7, 0x98, 0xea, 0x82, 0xfa, 0x73, 0x24, 0xc6, 0x33,\n\t0x22, 0x8b, 0x39, 0x13, 0x8a, 0x26, 0x46, 0x7f, 0x15, 0x20, 0xd0, 0xf9, 0x33, 0xc6, 0xec, 0x89,\n\t0xd5, 0xfa, 0x04, 0x8d, 0x41, 0x84, 0x14, 0xb9, 0xc8, 0x53, 0xd6, 0xa8, 0xb5, 0xcd, 0xce, 0xef,\n\t0x41, 0x77, 0x51, 0xba, 0xe6, 0xa6, 0x74, 0x0f, 0xbf, 0x2d, 0xb1, 0xe3, 0xf7, 0x46, 0xff, 0xf7,\n\t0x0e, 0x38, 0x07, 0x11, 0x54, 0xca, 0xe0, 0x62, 0xb1, 0x72, 0xcc, 0xe5, 0xca, 0x31, 0x5f, 0x57,\n\t0x8e, 0xf9, 0xb0, 0x76, 0x8c, 0xe5, 0xda, 0x31, 0x9e, 0xd7, 0x8e, 0x71, 0xd5, 0xdf, 0x69, 0x1f,\n\t0xa8, 0xda, 0x01, 0x72, 0x99, 0x01, 0x95, 0x82, 0x5c, 0xe7, 0x1c, 0xc9, 0xdd, 0xfe, 0x83, 0xa9,\n\t0x7d, 0xa2, 0xba, 0xba, 0xe2, 0x93, 0xb7, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe4, 0xe8, 0xa8, 0x46,\n\t0x34, 0x02, 0x00, 0x00,\n}\n\nfunc (m *Params) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *Params) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif m.DenomCreationGasConsume != 0 {\n\t\ti = encodeVarintParams(dAtA, i, uint64(m.DenomCreationGasConsume))\n\t\ti--\n\t\tdAtA[i] = 0x10\n\t}\n\tif len(m.DenomCreationFee) > 0 {\n\t\tfor iNdEx := len(m.DenomCreationFee) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.DenomCreationFee[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintParams(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0xa\n\t\t}\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintParams(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovParams(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\nfunc (m *Params) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif len(m.DenomCreationFee) > 0 {\n\t\tfor _, e := range m.DenomCreationFee {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovParams(uint64(l))\n\t\t}\n\t}\n\tif m.DenomCreationGasConsume != 0 {\n\t\tn += 1 + sovParams(uint64(m.DenomCreationGasConsume))\n\t}\n\treturn n\n}\n\nfunc sovParams(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\nfunc sozParams(x uint64) (n int) {\n\treturn sovParams(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\nfunc (m *Params) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowParams\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: Params: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: Params: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field DenomCreationFee\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowParams\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthParams\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthParams\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.DenomCreationFee = append(m.DenomCreationFee, types.Coin{})\n\t\t\tif err := m.DenomCreationFee[len(m.DenomCreationFee)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field DenomCreationGasConsume\", wireType)\n\t\t\t}\n\t\t\tm.DenomCreationGasConsume = 0\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowParams\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tm.DenomCreationGasConsume |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipParams(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthParams\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc skipParams(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowParams\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowParams\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowParams\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthParams\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupParams\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthParams\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthParams        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowParams          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupParams = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/tokenfactory/types/params_legacy.go",
    "content": "/*\nNOTE: Usage of x/params to manage parameters is deprecated in favor of x/gov\ncontrolled execution of MsgUpdateParams messages. These types remains solely\nfor migration purposes and will be removed in a future release.\n*/\npackage types\n\nimport (\n\tparamtypes \"github.com/cosmos/cosmos-sdk/x/params/types\"\n)\n\n// Parameter legacy store keys.\nvar (\n\tKeyDenomCreationFee        = []byte(\"DenomCreationFee\")\n\tKeyDenomCreationGasConsume = []byte(\"DenomCreationGasConsume\")\n)\n\n// ParamTable for tokenfactory module.\n// Deprecated: Type declaration for parameters\nfunc ParamKeyTable() paramtypes.KeyTable {\n\treturn paramtypes.NewKeyTable().RegisterParamSet(&Params{})\n}\n\n// Implements params.ParamSet.\n// Deprecated: legacy code. Remove after v47 upgrade.\nfunc (p *Params) ParamSetPairs() paramtypes.ParamSetPairs {\n\treturn paramtypes.ParamSetPairs{\n\t\tparamtypes.NewParamSetPair(KeyDenomCreationFee, &p.DenomCreationFee, validateDenomCreationFee),\n\t\tparamtypes.NewParamSetPair(KeyDenomCreationGasConsume, &p.DenomCreationGasConsume, validateDenomCreationFeeGasConsume),\n\t}\n}\n"
  },
  {
    "path": "x/tokenfactory/types/query.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: osmosis/tokenfactory/v1beta1/query.proto\n\npackage types\n\nimport (\n\tcontext \"context\"\n\tfmt \"fmt\"\n\t_ \"github.com/cosmos/cosmos-sdk/types/query\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tgrpc1 \"github.com/cosmos/gogoproto/grpc\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\n// QueryParamsRequest is the request type for the Query/Params RPC method.\ntype QueryParamsRequest struct {\n}\n\nfunc (m *QueryParamsRequest) Reset()         { *m = QueryParamsRequest{} }\nfunc (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryParamsRequest) ProtoMessage()    {}\nfunc (*QueryParamsRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_6f22013ad0f72e3f, []int{0}\n}\nfunc (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryParamsRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryParamsRequest.Merge(m, src)\n}\nfunc (m *QueryParamsRequest) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryParamsRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryParamsRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo\n\n// QueryParamsResponse is the response type for the Query/Params RPC method.\ntype QueryParamsResponse struct {\n\t// params defines the parameters of the module.\n\tParams Params `protobuf:\"bytes,1,opt,name=params,proto3\" json:\"params\"`\n}\n\nfunc (m *QueryParamsResponse) Reset()         { *m = QueryParamsResponse{} }\nfunc (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryParamsResponse) ProtoMessage()    {}\nfunc (*QueryParamsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_6f22013ad0f72e3f, []int{1}\n}\nfunc (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryParamsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryParamsResponse.Merge(m, src)\n}\nfunc (m *QueryParamsResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryParamsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryParamsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo\n\nfunc (m *QueryParamsResponse) GetParams() Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn Params{}\n}\n\n// QueryDenomAuthorityMetadataRequest defines the request structure for the\n// DenomAuthorityMetadata gRPC query.\ntype QueryDenomAuthorityMetadataRequest struct {\n\tDenom string `protobuf:\"bytes,1,opt,name=denom,proto3\" json:\"denom,omitempty\" yaml:\"denom\"`\n}\n\nfunc (m *QueryDenomAuthorityMetadataRequest) Reset()         { *m = QueryDenomAuthorityMetadataRequest{} }\nfunc (m *QueryDenomAuthorityMetadataRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryDenomAuthorityMetadataRequest) ProtoMessage()    {}\nfunc (*QueryDenomAuthorityMetadataRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_6f22013ad0f72e3f, []int{2}\n}\nfunc (m *QueryDenomAuthorityMetadataRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryDenomAuthorityMetadataRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryDenomAuthorityMetadataRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryDenomAuthorityMetadataRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryDenomAuthorityMetadataRequest.Merge(m, src)\n}\nfunc (m *QueryDenomAuthorityMetadataRequest) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryDenomAuthorityMetadataRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryDenomAuthorityMetadataRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryDenomAuthorityMetadataRequest proto.InternalMessageInfo\n\nfunc (m *QueryDenomAuthorityMetadataRequest) GetDenom() string {\n\tif m != nil {\n\t\treturn m.Denom\n\t}\n\treturn \"\"\n}\n\n// QueryDenomAuthorityMetadataResponse defines the response structure for the\n// DenomAuthorityMetadata gRPC query.\ntype QueryDenomAuthorityMetadataResponse struct {\n\tAuthorityMetadata DenomAuthorityMetadata `protobuf:\"bytes,1,opt,name=authority_metadata,json=authorityMetadata,proto3\" json:\"authority_metadata\" yaml:\"authority_metadata\"`\n}\n\nfunc (m *QueryDenomAuthorityMetadataResponse) Reset()         { *m = QueryDenomAuthorityMetadataResponse{} }\nfunc (m *QueryDenomAuthorityMetadataResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryDenomAuthorityMetadataResponse) ProtoMessage()    {}\nfunc (*QueryDenomAuthorityMetadataResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_6f22013ad0f72e3f, []int{3}\n}\nfunc (m *QueryDenomAuthorityMetadataResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryDenomAuthorityMetadataResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryDenomAuthorityMetadataResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryDenomAuthorityMetadataResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryDenomAuthorityMetadataResponse.Merge(m, src)\n}\nfunc (m *QueryDenomAuthorityMetadataResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryDenomAuthorityMetadataResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryDenomAuthorityMetadataResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryDenomAuthorityMetadataResponse proto.InternalMessageInfo\n\nfunc (m *QueryDenomAuthorityMetadataResponse) GetAuthorityMetadata() DenomAuthorityMetadata {\n\tif m != nil {\n\t\treturn m.AuthorityMetadata\n\t}\n\treturn DenomAuthorityMetadata{}\n}\n\n// QueryDenomsFromCreatorRequest defines the request structure for the\n// DenomsFromCreator gRPC query.\ntype QueryDenomsFromCreatorRequest struct {\n\tCreator string `protobuf:\"bytes,1,opt,name=creator,proto3\" json:\"creator,omitempty\" yaml:\"creator\"`\n}\n\nfunc (m *QueryDenomsFromCreatorRequest) Reset()         { *m = QueryDenomsFromCreatorRequest{} }\nfunc (m *QueryDenomsFromCreatorRequest) String() string { return proto.CompactTextString(m) }\nfunc (*QueryDenomsFromCreatorRequest) ProtoMessage()    {}\nfunc (*QueryDenomsFromCreatorRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_6f22013ad0f72e3f, []int{4}\n}\nfunc (m *QueryDenomsFromCreatorRequest) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryDenomsFromCreatorRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryDenomsFromCreatorRequest.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryDenomsFromCreatorRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryDenomsFromCreatorRequest.Merge(m, src)\n}\nfunc (m *QueryDenomsFromCreatorRequest) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryDenomsFromCreatorRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryDenomsFromCreatorRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryDenomsFromCreatorRequest proto.InternalMessageInfo\n\nfunc (m *QueryDenomsFromCreatorRequest) GetCreator() string {\n\tif m != nil {\n\t\treturn m.Creator\n\t}\n\treturn \"\"\n}\n\n// QueryDenomsFromCreatorRequest defines the response structure for the\n// DenomsFromCreator gRPC query.\ntype QueryDenomsFromCreatorResponse struct {\n\tDenoms []string `protobuf:\"bytes,1,rep,name=denoms,proto3\" json:\"denoms,omitempty\" yaml:\"denoms\"`\n}\n\nfunc (m *QueryDenomsFromCreatorResponse) Reset()         { *m = QueryDenomsFromCreatorResponse{} }\nfunc (m *QueryDenomsFromCreatorResponse) String() string { return proto.CompactTextString(m) }\nfunc (*QueryDenomsFromCreatorResponse) ProtoMessage()    {}\nfunc (*QueryDenomsFromCreatorResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_6f22013ad0f72e3f, []int{5}\n}\nfunc (m *QueryDenomsFromCreatorResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *QueryDenomsFromCreatorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_QueryDenomsFromCreatorResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *QueryDenomsFromCreatorResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryDenomsFromCreatorResponse.Merge(m, src)\n}\nfunc (m *QueryDenomsFromCreatorResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *QueryDenomsFromCreatorResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryDenomsFromCreatorResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryDenomsFromCreatorResponse proto.InternalMessageInfo\n\nfunc (m *QueryDenomsFromCreatorResponse) GetDenoms() []string {\n\tif m != nil {\n\t\treturn m.Denoms\n\t}\n\treturn nil\n}\n\nfunc init() {\n\tproto.RegisterType((*QueryParamsRequest)(nil), \"osmosis.tokenfactory.v1beta1.QueryParamsRequest\")\n\tproto.RegisterType((*QueryParamsResponse)(nil), \"osmosis.tokenfactory.v1beta1.QueryParamsResponse\")\n\tproto.RegisterType((*QueryDenomAuthorityMetadataRequest)(nil), \"osmosis.tokenfactory.v1beta1.QueryDenomAuthorityMetadataRequest\")\n\tproto.RegisterType((*QueryDenomAuthorityMetadataResponse)(nil), \"osmosis.tokenfactory.v1beta1.QueryDenomAuthorityMetadataResponse\")\n\tproto.RegisterType((*QueryDenomsFromCreatorRequest)(nil), \"osmosis.tokenfactory.v1beta1.QueryDenomsFromCreatorRequest\")\n\tproto.RegisterType((*QueryDenomsFromCreatorResponse)(nil), \"osmosis.tokenfactory.v1beta1.QueryDenomsFromCreatorResponse\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"osmosis/tokenfactory/v1beta1/query.proto\", fileDescriptor_6f22013ad0f72e3f)\n}\n\nvar fileDescriptor_6f22013ad0f72e3f = []byte{\n\t// 575 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x4d, 0x6f, 0x13, 0x31,\n\t0x10, 0xcd, 0x42, 0x1b, 0x54, 0xf3, 0x21, 0x62, 0x2a, 0x04, 0x51, 0xd9, 0x80, 0xa9, 0xaa, 0x14,\n\t0x55, 0x6b, 0x52, 0x72, 0xa2, 0x20, 0xc8, 0x06, 0xc1, 0x01, 0x8a, 0x60, 0x6f, 0x70, 0x89, 0x9c,\n\t0xd4, 0xdd, 0x2e, 0x74, 0x77, 0xb6, 0xb6, 0x83, 0x88, 0xaa, 0x5e, 0x38, 0x70, 0x46, 0xe2, 0xc8,\n\t0x7f, 0xe0, 0x77, 0xf4, 0x58, 0xa9, 0x17, 0x4e, 0x11, 0x4a, 0x2a, 0x7e, 0x40, 0x7e, 0x01, 0x8a,\n\t0xed, 0x96, 0x96, 0x84, 0x55, 0x80, 0x53, 0x56, 0x9e, 0xf7, 0xde, 0xbc, 0x37, 0x33, 0x0a, 0x2a,\n\t0x83, 0x8c, 0x41, 0x46, 0x92, 0x2a, 0x78, 0xcb, 0x93, 0x75, 0xd6, 0x52, 0x20, 0x3a, 0xf4, 0x5d,\n\t0xa5, 0xc9, 0x15, 0xab, 0xd0, 0xad, 0x36, 0x17, 0x1d, 0x2f, 0x15, 0xa0, 0x00, 0xcf, 0x59, 0xa4,\n\t0x77, 0x1c, 0xe9, 0x59, 0x64, 0x71, 0x36, 0x84, 0x10, 0x34, 0x90, 0x0e, 0xbf, 0x0c, 0xa7, 0x38,\n\t0x17, 0x02, 0x84, 0x9b, 0x9c, 0xb2, 0x34, 0xa2, 0x2c, 0x49, 0x40, 0x31, 0x15, 0x41, 0x22, 0x6d,\n\t0xf5, 0x56, 0x4b, 0x4b, 0xd2, 0x26, 0x93, 0xdc, 0xb4, 0x3a, 0x6a, 0x9c, 0xb2, 0x30, 0x4a, 0x34,\n\t0xd8, 0x62, 0xab, 0x99, 0x3e, 0x59, 0x5b, 0x6d, 0x80, 0x88, 0x54, 0x67, 0x95, 0x2b, 0xb6, 0xc6,\n\t0x14, 0xb3, 0xac, 0xc5, 0x4c, 0x56, 0xca, 0x04, 0x8b, 0xad, 0x19, 0x32, 0x8b, 0xf0, 0xcb, 0xa1,\n\t0x85, 0x17, 0xfa, 0x31, 0xe0, 0x5b, 0x6d, 0x2e, 0x15, 0x79, 0x85, 0x2e, 0x9d, 0x78, 0x95, 0x29,\n\t0x24, 0x92, 0x63, 0x1f, 0xe5, 0x0d, 0xf9, 0x8a, 0x73, 0xdd, 0x29, 0x9f, 0x5d, 0x9e, 0xf7, 0xb2,\n\t0x86, 0xe3, 0x19, 0xb6, 0x3f, 0xb5, 0xdb, 0x2d, 0xe5, 0x02, 0xcb, 0x24, 0xcf, 0x10, 0xd1, 0xd2,\n\t0x8f, 0x78, 0x02, 0x71, 0xed, 0xf7, 0x00, 0xd6, 0x00, 0x5e, 0x40, 0xd3, 0x6b, 0x43, 0x80, 0x6e,\n\t0x34, 0xe3, 0x5f, 0x1c, 0x74, 0x4b, 0xe7, 0x3a, 0x2c, 0xde, 0xbc, 0x4b, 0xf4, 0x33, 0x09, 0x4c,\n\t0x99, 0x7c, 0x75, 0xd0, 0xcd, 0x4c, 0x39, 0xeb, 0xfc, 0xa3, 0x83, 0xf0, 0xd1, 0xb4, 0x1a, 0xb1,\n\t0x2d, 0xdb, 0x18, 0xd5, 0xec, 0x18, 0xe3, 0xa5, 0xfd, 0x1b, 0xc3, 0x58, 0x83, 0x6e, 0xe9, 0xaa,\n\t0xf1, 0x35, 0xaa, 0x4e, 0x82, 0xc2, 0xc8, 0x82, 0xc8, 0x2a, 0xba, 0xf6, 0xcb, 0xaf, 0x7c, 0x2c,\n\t0x20, 0xae, 0x0b, 0xce, 0x14, 0x88, 0xc3, 0xe4, 0x4b, 0xe8, 0x4c, 0xcb, 0xbc, 0xd8, 0xec, 0x78,\n\t0xd0, 0x2d, 0x5d, 0x30, 0x3d, 0x6c, 0x81, 0x04, 0x87, 0x10, 0xf2, 0x14, 0xb9, 0x7f, 0x92, 0xb3,\n\t0xc9, 0x17, 0x51, 0x5e, 0x8f, 0x6a, 0xb8, 0xb3, 0xd3, 0xe5, 0x19, 0xbf, 0x30, 0xe8, 0x96, 0xce,\n\t0x1f, 0x1b, 0xa5, 0x24, 0x81, 0x05, 0x2c, 0x1f, 0x4c, 0xa1, 0x69, 0xad, 0x86, 0xbf, 0x38, 0x28,\n\t0x6f, 0xb6, 0x87, 0x6f, 0x67, 0x0f, 0x67, 0xf4, 0x78, 0x8a, 0x95, 0xbf, 0x60, 0x18, 0x93, 0x64,\n\t0xe9, 0xc3, 0xfe, 0xc1, 0xe7, 0x53, 0x0b, 0x78, 0x9e, 0x4e, 0x70, 0xb9, 0xf8, 0x87, 0x83, 0x2e,\n\t0x8f, 0x5f, 0x0a, 0x7e, 0x38, 0x41, 0xef, 0xcc, 0xcb, 0x2b, 0xd6, 0xfe, 0x43, 0xc1, 0xa6, 0x79,\n\t0xa2, 0xd3, 0xd4, 0xf0, 0x83, 0xec, 0x34, 0x66, 0xea, 0x74, 0x5b, 0xff, 0xee, 0xd0, 0xd1, 0x03,\n\t0xc2, 0xfb, 0x0e, 0x2a, 0x8c, 0x6c, 0x16, 0xaf, 0x4c, 0xea, 0x70, 0xcc, 0x79, 0x15, 0xef, 0xfd,\n\t0x1b, 0xd9, 0x26, 0xab, 0xeb, 0x64, 0xf7, 0xf1, 0xca, 0x24, 0xc9, 0x1a, 0xeb, 0x02, 0xe2, 0x86,\n\t0xbd, 0x54, 0xba, 0x6d, 0x3f, 0x76, 0xfc, 0xe7, 0xbb, 0x3d, 0xd7, 0xd9, 0xeb, 0xb9, 0xce, 0xf7,\n\t0x9e, 0xeb, 0x7c, 0xea, 0xbb, 0xb9, 0xbd, 0xbe, 0x9b, 0xfb, 0xd6, 0x77, 0x73, 0xaf, 0xab, 0x61,\n\t0xa4, 0x36, 0xda, 0x4d, 0xaf, 0x05, 0x31, 0xad, 0xeb, 0x0e, 0x75, 0x48, 0x94, 0x60, 0x2d, 0x25,\n\t0xe9, 0x9b, 0x76, 0x02, 0xf4, 0xfd, 0xc9, 0x7e, 0xaa, 0x93, 0x72, 0xd9, 0xcc, 0xeb, 0x7f, 0xb2,\n\t0x3b, 0x3f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xa7, 0x10, 0x27, 0x8d, 0xd4, 0x05, 0x00, 0x00,\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ context.Context\nvar _ grpc.ClientConn\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// QueryClient is the client API for Query service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype QueryClient interface {\n\t// Params defines a gRPC query method that returns the tokenfactory module's\n\t// parameters.\n\tParams(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error)\n\t// DenomAuthorityMetadata defines a gRPC query method for fetching\n\t// DenomAuthorityMetadata for a particular denom.\n\tDenomAuthorityMetadata(ctx context.Context, in *QueryDenomAuthorityMetadataRequest, opts ...grpc.CallOption) (*QueryDenomAuthorityMetadataResponse, error)\n\t// DenomsFromCreator defines a gRPC query method for fetching all\n\t// denominations created by a specific admin/creator.\n\tDenomsFromCreator(ctx context.Context, in *QueryDenomsFromCreatorRequest, opts ...grpc.CallOption) (*QueryDenomsFromCreatorResponse, error)\n}\n\ntype queryClient struct {\n\tcc grpc1.ClientConn\n}\n\nfunc NewQueryClient(cc grpc1.ClientConn) QueryClient {\n\treturn &queryClient{cc}\n}\n\nfunc (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) {\n\tout := new(QueryParamsResponse)\n\terr := c.cc.Invoke(ctx, \"/osmosis.tokenfactory.v1beta1.Query/Params\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) DenomAuthorityMetadata(ctx context.Context, in *QueryDenomAuthorityMetadataRequest, opts ...grpc.CallOption) (*QueryDenomAuthorityMetadataResponse, error) {\n\tout := new(QueryDenomAuthorityMetadataResponse)\n\terr := c.cc.Invoke(ctx, \"/osmosis.tokenfactory.v1beta1.Query/DenomAuthorityMetadata\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *queryClient) DenomsFromCreator(ctx context.Context, in *QueryDenomsFromCreatorRequest, opts ...grpc.CallOption) (*QueryDenomsFromCreatorResponse, error) {\n\tout := new(QueryDenomsFromCreatorResponse)\n\terr := c.cc.Invoke(ctx, \"/osmosis.tokenfactory.v1beta1.Query/DenomsFromCreator\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// QueryServer is the server API for Query service.\ntype QueryServer interface {\n\t// Params defines a gRPC query method that returns the tokenfactory module's\n\t// parameters.\n\tParams(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error)\n\t// DenomAuthorityMetadata defines a gRPC query method for fetching\n\t// DenomAuthorityMetadata for a particular denom.\n\tDenomAuthorityMetadata(context.Context, *QueryDenomAuthorityMetadataRequest) (*QueryDenomAuthorityMetadataResponse, error)\n\t// DenomsFromCreator defines a gRPC query method for fetching all\n\t// denominations created by a specific admin/creator.\n\tDenomsFromCreator(context.Context, *QueryDenomsFromCreatorRequest) (*QueryDenomsFromCreatorResponse, error)\n}\n\n// UnimplementedQueryServer can be embedded to have forward compatible implementations.\ntype UnimplementedQueryServer struct {\n}\n\nfunc (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Params not implemented\")\n}\nfunc (*UnimplementedQueryServer) DenomAuthorityMetadata(ctx context.Context, req *QueryDenomAuthorityMetadataRequest) (*QueryDenomAuthorityMetadataResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method DenomAuthorityMetadata not implemented\")\n}\nfunc (*UnimplementedQueryServer) DenomsFromCreator(ctx context.Context, req *QueryDenomsFromCreatorRequest) (*QueryDenomsFromCreatorResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method DenomsFromCreator not implemented\")\n}\n\nfunc RegisterQueryServer(s grpc1.Server, srv QueryServer) {\n\ts.RegisterService(&_Query_serviceDesc, srv)\n}\n\nfunc _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryParamsRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).Params(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/osmosis.tokenfactory.v1beta1.Query/Params\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_DenomAuthorityMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryDenomAuthorityMetadataRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).DenomAuthorityMetadata(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/osmosis.tokenfactory.v1beta1.Query/DenomAuthorityMetadata\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).DenomAuthorityMetadata(ctx, req.(*QueryDenomAuthorityMetadataRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Query_DenomsFromCreator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(QueryDenomsFromCreatorRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(QueryServer).DenomsFromCreator(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/osmosis.tokenfactory.v1beta1.Query/DenomsFromCreator\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(QueryServer).DenomsFromCreator(ctx, req.(*QueryDenomsFromCreatorRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _Query_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"osmosis.tokenfactory.v1beta1.Query\",\n\tHandlerType: (*QueryServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Params\",\n\t\t\tHandler:    _Query_Params_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"DenomAuthorityMetadata\",\n\t\t\tHandler:    _Query_DenomAuthorityMetadata_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"DenomsFromCreator\",\n\t\t\tHandler:    _Query_DenomsFromCreator_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"osmosis/tokenfactory/v1beta1/query.proto\",\n}\n\nfunc (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryDenomAuthorityMetadataRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryDenomAuthorityMetadataRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryDenomAuthorityMetadataRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Denom) > 0 {\n\t\ti -= len(m.Denom)\n\t\tcopy(dAtA[i:], m.Denom)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.Denom)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryDenomAuthorityMetadataResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryDenomAuthorityMetadataResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryDenomAuthorityMetadataResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.AuthorityMetadata.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintQuery(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0xa\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryDenomsFromCreatorRequest) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryDenomsFromCreatorRequest) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryDenomsFromCreatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Creator) > 0 {\n\t\ti -= len(m.Creator)\n\t\tcopy(dAtA[i:], m.Creator)\n\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.Creator)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *QueryDenomsFromCreatorResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *QueryDenomsFromCreatorResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *QueryDenomsFromCreatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Denoms) > 0 {\n\t\tfor iNdEx := len(m.Denoms) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\ti -= len(m.Denoms[iNdEx])\n\t\t\tcopy(dAtA[i:], m.Denoms[iNdEx])\n\t\t\ti = encodeVarintQuery(dAtA, i, uint64(len(m.Denoms[iNdEx])))\n\t\t\ti--\n\t\t\tdAtA[i] = 0xa\n\t\t}\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintQuery(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovQuery(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\nfunc (m *QueryParamsRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *QueryParamsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.Params.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc (m *QueryDenomAuthorityMetadataRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Denom)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryDenomAuthorityMetadataResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = m.AuthorityMetadata.Size()\n\tn += 1 + l + sovQuery(uint64(l))\n\treturn n\n}\n\nfunc (m *QueryDenomsFromCreatorRequest) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Creator)\n\tif l > 0 {\n\t\tn += 1 + l + sovQuery(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *QueryDenomsFromCreatorResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tif len(m.Denoms) > 0 {\n\t\tfor _, s := range m.Denoms {\n\t\t\tl = len(s)\n\t\t\tn += 1 + l + sovQuery(uint64(l))\n\t\t}\n\t}\n\treturn n\n}\n\nfunc sovQuery(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\nfunc sozQuery(x uint64) (n int) {\n\treturn sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\nfunc (m *QueryParamsRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *QueryParamsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryParamsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *QueryDenomAuthorityMetadataRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryDenomAuthorityMetadataRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryDenomAuthorityMetadataRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Denom\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Denom = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *QueryDenomAuthorityMetadataResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryDenomAuthorityMetadataResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryDenomAuthorityMetadataResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field AuthorityMetadata\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.AuthorityMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *QueryDenomsFromCreatorRequest) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryDenomsFromCreatorRequest: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryDenomsFromCreatorRequest: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Creator\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Creator = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *QueryDenomsFromCreatorResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: QueryDenomsFromCreatorResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: QueryDenomsFromCreatorResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Denoms\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Denoms = append(m.Denoms, string(dAtA[iNdEx:postIndex]))\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipQuery(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc skipQuery(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowQuery\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthQuery\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupQuery\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthQuery\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthQuery        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowQuery          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupQuery = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/tokenfactory/types/query.pb.gw.go",
    "content": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: osmosis/tokenfactory/v1beta1/query.proto\n\n/*\nPackage types is a reverse proxy.\n\nIt translates gRPC into RESTful JSON APIs.\n*/\npackage types\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/golang/protobuf/descriptor\"\n\t\"github.com/golang/protobuf/proto\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/runtime\"\n\t\"github.com/grpc-ecosystem/grpc-gateway/utilities\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// Suppress \"imported and not used\" errors\nvar _ codes.Code\nvar _ io.Reader\nvar _ status.Status\nvar _ = runtime.String\nvar _ = utilities.NewDoubleArray\nvar _ = descriptor.ForMessage\nvar _ = metadata.Join\n\nfunc request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryParamsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n\n}\n\nfunc local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryParamsRequest\n\tvar metadata runtime.ServerMetadata\n\n\tmsg, err := server.Params(ctx, &protoReq)\n\treturn msg, metadata, err\n\n}\n\nfunc request_Query_DenomAuthorityMetadata_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryDenomAuthorityMetadataRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"denom\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"denom\")\n\t}\n\n\tprotoReq.Denom, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"denom\", err)\n\t}\n\n\tmsg, err := client.DenomAuthorityMetadata(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n\n}\n\nfunc local_request_Query_DenomAuthorityMetadata_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryDenomAuthorityMetadataRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"denom\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"denom\")\n\t}\n\n\tprotoReq.Denom, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"denom\", err)\n\t}\n\n\tmsg, err := server.DenomAuthorityMetadata(ctx, &protoReq)\n\treturn msg, metadata, err\n\n}\n\nfunc request_Query_DenomsFromCreator_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryDenomsFromCreatorRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"creator\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"creator\")\n\t}\n\n\tprotoReq.Creator, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"creator\", err)\n\t}\n\n\tmsg, err := client.DenomsFromCreator(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))\n\treturn msg, metadata, err\n\n}\n\nfunc local_request_Query_DenomsFromCreator_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {\n\tvar protoReq QueryDenomsFromCreatorRequest\n\tvar metadata runtime.ServerMetadata\n\n\tvar (\n\t\tval string\n\t\tok  bool\n\t\terr error\n\t\t_   = err\n\t)\n\n\tval, ok = pathParams[\"creator\"]\n\tif !ok {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"missing parameter %s\", \"creator\")\n\t}\n\n\tprotoReq.Creator, err = runtime.String(val)\n\n\tif err != nil {\n\t\treturn nil, metadata, status.Errorf(codes.InvalidArgument, \"type mismatch, parameter: %s, error: %v\", \"creator\", err)\n\t}\n\n\tmsg, err := server.DenomsFromCreator(ctx, &protoReq)\n\treturn msg, metadata, err\n\n}\n\n// RegisterQueryHandlerServer registers the http handlers for service Query to \"mux\".\n// UnaryRPC     :call QueryServer directly.\n// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.\n// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead.\nfunc RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error {\n\n\tmux.Handle(\"GET\", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_DenomAuthorityMetadata_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_DenomAuthorityMetadata_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_DenomAuthorityMetadata_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_DenomsFromCreator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tvar stream runtime.ServerTransportStream\n\t\tctx = grpc.NewContextWithServerTransportStream(ctx, &stream)\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := local_request_Query_DenomsFromCreator_0(rctx, inboundMarshaler, server, req, pathParams)\n\t\tmd.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_DenomsFromCreator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\treturn nil\n}\n\n// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but\n// automatically dials to \"endpoint\" and closes the connection when \"ctx\" gets done.\nfunc RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {\n\tconn, err := grpc.Dial(endpoint, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Infof(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tif cerr := conn.Close(); cerr != nil {\n\t\t\t\tgrpclog.Infof(\"Failed to close conn to %s: %v\", endpoint, cerr)\n\t\t\t}\n\t\t}()\n\t}()\n\n\treturn RegisterQueryHandler(ctx, mux, conn)\n}\n\n// RegisterQueryHandler registers the http handlers for service Query to \"mux\".\n// The handlers forward requests to the grpc endpoint over \"conn\".\nfunc RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {\n\treturn RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn))\n}\n\n// RegisterQueryHandlerClient registers the http handlers for service Query\n// to \"mux\". The handlers forward requests to the grpc endpoint over the given implementation of \"QueryClient\".\n// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in \"QueryClient\"\n// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in\n// \"QueryClient\" to call the correct interceptors.\nfunc RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error {\n\n\tmux.Handle(\"GET\", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_DenomAuthorityMetadata_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_DenomAuthorityMetadata_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_DenomAuthorityMetadata_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\tmux.Handle(\"GET\", pattern_Query_DenomsFromCreator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {\n\t\tctx, cancel := context.WithCancel(req.Context())\n\t\tdefer cancel()\n\t\tinboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)\n\t\trctx, err := runtime.AnnotateContext(ctx, mux, req)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\t\tresp, md, err := request_Query_DenomsFromCreator_0(rctx, inboundMarshaler, client, req, pathParams)\n\t\tctx = runtime.NewServerMetadataContext(ctx, md)\n\t\tif err != nil {\n\t\t\truntime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)\n\t\t\treturn\n\t\t}\n\n\t\tforward_Query_DenomsFromCreator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)\n\n\t})\n\n\treturn nil\n}\n\nvar (\n\tpattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{\"osmosis\", \"tokenfactory\", \"v1beta1\", \"params\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_DenomAuthorityMetadata_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{\"osmosis\", \"tokenfactory\", \"v1beta1\", \"denoms\", \"denom\", \"authority_metadata\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n\n\tpattern_Query_DenomsFromCreator_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{\"osmosis\", \"tokenfactory\", \"v1beta1\", \"denoms_from_creator\", \"creator\"}, \"\", runtime.AssumeColonVerbOpt(false)))\n)\n\nvar (\n\tforward_Query_Params_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_DenomAuthorityMetadata_0 = runtime.ForwardResponseMessage\n\n\tforward_Query_DenomsFromCreator_0 = runtime.ForwardResponseMessage\n)\n"
  },
  {
    "path": "x/tokenfactory/types/tx.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: osmosis/tokenfactory/v1beta1/tx.proto\n\npackage types\n\nimport (\n\tcontext \"context\"\n\tfmt \"fmt\"\n\t_ \"github.com/cosmos/cosmos-proto\"\n\ttypes \"github.com/cosmos/cosmos-sdk/types\"\n\t_ \"github.com/cosmos/cosmos-sdk/types/msgservice\"\n\ttypes1 \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n\t_ \"github.com/cosmos/gogoproto/gogoproto\"\n\tgrpc1 \"github.com/cosmos/gogoproto/grpc\"\n\tproto \"github.com/cosmos/gogoproto/proto\"\n\tgrpc \"google.golang.org/grpc\"\n\tcodes \"google.golang.org/grpc/codes\"\n\tstatus \"google.golang.org/grpc/status\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\n// MsgCreateDenom defines the message structure for the CreateDenom gRPC service\n// method. It allows an account to create a new denom. It requires a sender\n// address and a sub denomination. The (sender_address, sub_denomination) tuple\n// must be unique and cannot be re-used.\n//\n// The resulting denom created is defined as\n// <factory/{creatorAddress}/{subdenom}>. The resulting denom's admin is\n// originally set to be the creator, but this can be changed later. The token\n// denom does not indicate the current admin.\ntype MsgCreateDenom struct {\n\tSender string `protobuf:\"bytes,1,opt,name=sender,proto3\" json:\"sender,omitempty\" yaml:\"sender\"`\n\t// subdenom can be up to 44 \"alphanumeric\" characters long.\n\tSubdenom string `protobuf:\"bytes,2,opt,name=subdenom,proto3\" json:\"subdenom,omitempty\" yaml:\"subdenom\"`\n}\n\nfunc (m *MsgCreateDenom) Reset()         { *m = MsgCreateDenom{} }\nfunc (m *MsgCreateDenom) String() string { return proto.CompactTextString(m) }\nfunc (*MsgCreateDenom) ProtoMessage()    {}\nfunc (*MsgCreateDenom) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_283b6c9a90a846b4, []int{0}\n}\nfunc (m *MsgCreateDenom) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgCreateDenom) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgCreateDenom.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgCreateDenom) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgCreateDenom.Merge(m, src)\n}\nfunc (m *MsgCreateDenom) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgCreateDenom) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgCreateDenom.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgCreateDenom proto.InternalMessageInfo\n\nfunc (m *MsgCreateDenom) GetSender() string {\n\tif m != nil {\n\t\treturn m.Sender\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgCreateDenom) GetSubdenom() string {\n\tif m != nil {\n\t\treturn m.Subdenom\n\t}\n\treturn \"\"\n}\n\n// MsgCreateDenomResponse is the return value of MsgCreateDenom\n// It returns the full string of the newly created denom\ntype MsgCreateDenomResponse struct {\n\tNewTokenDenom string `protobuf:\"bytes,1,opt,name=new_token_denom,json=newTokenDenom,proto3\" json:\"new_token_denom,omitempty\" yaml:\"new_token_denom\"`\n}\n\nfunc (m *MsgCreateDenomResponse) Reset()         { *m = MsgCreateDenomResponse{} }\nfunc (m *MsgCreateDenomResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgCreateDenomResponse) ProtoMessage()    {}\nfunc (*MsgCreateDenomResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_283b6c9a90a846b4, []int{1}\n}\nfunc (m *MsgCreateDenomResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgCreateDenomResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgCreateDenomResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgCreateDenomResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgCreateDenomResponse.Merge(m, src)\n}\nfunc (m *MsgCreateDenomResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgCreateDenomResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgCreateDenomResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgCreateDenomResponse proto.InternalMessageInfo\n\nfunc (m *MsgCreateDenomResponse) GetNewTokenDenom() string {\n\tif m != nil {\n\t\treturn m.NewTokenDenom\n\t}\n\treturn \"\"\n}\n\n// MsgMint is the sdk.Msg type for allowing an admin account to mint\n// more of a token.  For now, we only support minting to the sender account\ntype MsgMint struct {\n\tSender        string     `protobuf:\"bytes,1,opt,name=sender,proto3\" json:\"sender,omitempty\" yaml:\"sender\"`\n\tAmount        types.Coin `protobuf:\"bytes,2,opt,name=amount,proto3\" json:\"amount\" yaml:\"amount\"`\n\tMintToAddress string     `protobuf:\"bytes,3,opt,name=mintToAddress,proto3\" json:\"mintToAddress,omitempty\" yaml:\"mint_to_address\"`\n}\n\nfunc (m *MsgMint) Reset()         { *m = MsgMint{} }\nfunc (m *MsgMint) String() string { return proto.CompactTextString(m) }\nfunc (*MsgMint) ProtoMessage()    {}\nfunc (*MsgMint) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_283b6c9a90a846b4, []int{2}\n}\nfunc (m *MsgMint) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgMint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgMint.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgMint) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgMint.Merge(m, src)\n}\nfunc (m *MsgMint) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgMint) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgMint.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgMint proto.InternalMessageInfo\n\nfunc (m *MsgMint) GetSender() string {\n\tif m != nil {\n\t\treturn m.Sender\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgMint) GetAmount() types.Coin {\n\tif m != nil {\n\t\treturn m.Amount\n\t}\n\treturn types.Coin{}\n}\n\nfunc (m *MsgMint) GetMintToAddress() string {\n\tif m != nil {\n\t\treturn m.MintToAddress\n\t}\n\treturn \"\"\n}\n\ntype MsgMintResponse struct {\n}\n\nfunc (m *MsgMintResponse) Reset()         { *m = MsgMintResponse{} }\nfunc (m *MsgMintResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgMintResponse) ProtoMessage()    {}\nfunc (*MsgMintResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_283b6c9a90a846b4, []int{3}\n}\nfunc (m *MsgMintResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgMintResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgMintResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgMintResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgMintResponse.Merge(m, src)\n}\nfunc (m *MsgMintResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgMintResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgMintResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgMintResponse proto.InternalMessageInfo\n\n// MsgBurn is the sdk.Msg type for allowing an admin account to burn\n// a token.  For now, we only support burning from the sender account.\ntype MsgBurn struct {\n\tSender          string     `protobuf:\"bytes,1,opt,name=sender,proto3\" json:\"sender,omitempty\" yaml:\"sender\"`\n\tAmount          types.Coin `protobuf:\"bytes,2,opt,name=amount,proto3\" json:\"amount\" yaml:\"amount\"`\n\tBurnFromAddress string     `protobuf:\"bytes,3,opt,name=burnFromAddress,proto3\" json:\"burnFromAddress,omitempty\" yaml:\"burn_from_address\"`\n}\n\nfunc (m *MsgBurn) Reset()         { *m = MsgBurn{} }\nfunc (m *MsgBurn) String() string { return proto.CompactTextString(m) }\nfunc (*MsgBurn) ProtoMessage()    {}\nfunc (*MsgBurn) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_283b6c9a90a846b4, []int{4}\n}\nfunc (m *MsgBurn) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgBurn) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgBurn.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgBurn) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgBurn.Merge(m, src)\n}\nfunc (m *MsgBurn) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgBurn) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgBurn.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgBurn proto.InternalMessageInfo\n\nfunc (m *MsgBurn) GetSender() string {\n\tif m != nil {\n\t\treturn m.Sender\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgBurn) GetAmount() types.Coin {\n\tif m != nil {\n\t\treturn m.Amount\n\t}\n\treturn types.Coin{}\n}\n\nfunc (m *MsgBurn) GetBurnFromAddress() string {\n\tif m != nil {\n\t\treturn m.BurnFromAddress\n\t}\n\treturn \"\"\n}\n\ntype MsgBurnResponse struct {\n}\n\nfunc (m *MsgBurnResponse) Reset()         { *m = MsgBurnResponse{} }\nfunc (m *MsgBurnResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgBurnResponse) ProtoMessage()    {}\nfunc (*MsgBurnResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_283b6c9a90a846b4, []int{5}\n}\nfunc (m *MsgBurnResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgBurnResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgBurnResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgBurnResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgBurnResponse.Merge(m, src)\n}\nfunc (m *MsgBurnResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgBurnResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgBurnResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgBurnResponse proto.InternalMessageInfo\n\n// MsgChangeAdmin is the sdk.Msg type for allowing an admin account to reassign\n// adminship of a denom to a new account\ntype MsgChangeAdmin struct {\n\tSender   string `protobuf:\"bytes,1,opt,name=sender,proto3\" json:\"sender,omitempty\" yaml:\"sender\"`\n\tDenom    string `protobuf:\"bytes,2,opt,name=denom,proto3\" json:\"denom,omitempty\" yaml:\"denom\"`\n\tNewAdmin string `protobuf:\"bytes,3,opt,name=new_admin,json=newAdmin,proto3\" json:\"new_admin,omitempty\" yaml:\"new_admin\"`\n}\n\nfunc (m *MsgChangeAdmin) Reset()         { *m = MsgChangeAdmin{} }\nfunc (m *MsgChangeAdmin) String() string { return proto.CompactTextString(m) }\nfunc (*MsgChangeAdmin) ProtoMessage()    {}\nfunc (*MsgChangeAdmin) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_283b6c9a90a846b4, []int{6}\n}\nfunc (m *MsgChangeAdmin) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgChangeAdmin) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgChangeAdmin.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgChangeAdmin) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgChangeAdmin.Merge(m, src)\n}\nfunc (m *MsgChangeAdmin) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgChangeAdmin) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgChangeAdmin.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgChangeAdmin proto.InternalMessageInfo\n\nfunc (m *MsgChangeAdmin) GetSender() string {\n\tif m != nil {\n\t\treturn m.Sender\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgChangeAdmin) GetDenom() string {\n\tif m != nil {\n\t\treturn m.Denom\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgChangeAdmin) GetNewAdmin() string {\n\tif m != nil {\n\t\treturn m.NewAdmin\n\t}\n\treturn \"\"\n}\n\n// MsgChangeAdminResponse defines the response structure for an executed\n// MsgChangeAdmin message.\ntype MsgChangeAdminResponse struct {\n}\n\nfunc (m *MsgChangeAdminResponse) Reset()         { *m = MsgChangeAdminResponse{} }\nfunc (m *MsgChangeAdminResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgChangeAdminResponse) ProtoMessage()    {}\nfunc (*MsgChangeAdminResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_283b6c9a90a846b4, []int{7}\n}\nfunc (m *MsgChangeAdminResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgChangeAdminResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgChangeAdminResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgChangeAdminResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgChangeAdminResponse.Merge(m, src)\n}\nfunc (m *MsgChangeAdminResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgChangeAdminResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgChangeAdminResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgChangeAdminResponse proto.InternalMessageInfo\n\n// MsgSetDenomMetadata is the sdk.Msg type for allowing an admin account to set\n// the denom's bank metadata\ntype MsgSetDenomMetadata struct {\n\tSender   string          `protobuf:\"bytes,1,opt,name=sender,proto3\" json:\"sender,omitempty\" yaml:\"sender\"`\n\tMetadata types1.Metadata `protobuf:\"bytes,2,opt,name=metadata,proto3\" json:\"metadata\" yaml:\"metadata\"`\n}\n\nfunc (m *MsgSetDenomMetadata) Reset()         { *m = MsgSetDenomMetadata{} }\nfunc (m *MsgSetDenomMetadata) String() string { return proto.CompactTextString(m) }\nfunc (*MsgSetDenomMetadata) ProtoMessage()    {}\nfunc (*MsgSetDenomMetadata) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_283b6c9a90a846b4, []int{8}\n}\nfunc (m *MsgSetDenomMetadata) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgSetDenomMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgSetDenomMetadata.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgSetDenomMetadata) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgSetDenomMetadata.Merge(m, src)\n}\nfunc (m *MsgSetDenomMetadata) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgSetDenomMetadata) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgSetDenomMetadata.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgSetDenomMetadata proto.InternalMessageInfo\n\nfunc (m *MsgSetDenomMetadata) GetSender() string {\n\tif m != nil {\n\t\treturn m.Sender\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgSetDenomMetadata) GetMetadata() types1.Metadata {\n\tif m != nil {\n\t\treturn m.Metadata\n\t}\n\treturn types1.Metadata{}\n}\n\n// MsgSetDenomMetadataResponse defines the response structure for an executed\n// MsgSetDenomMetadata message.\ntype MsgSetDenomMetadataResponse struct {\n}\n\nfunc (m *MsgSetDenomMetadataResponse) Reset()         { *m = MsgSetDenomMetadataResponse{} }\nfunc (m *MsgSetDenomMetadataResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgSetDenomMetadataResponse) ProtoMessage()    {}\nfunc (*MsgSetDenomMetadataResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_283b6c9a90a846b4, []int{9}\n}\nfunc (m *MsgSetDenomMetadataResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgSetDenomMetadataResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgSetDenomMetadataResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgSetDenomMetadataResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgSetDenomMetadataResponse.Merge(m, src)\n}\nfunc (m *MsgSetDenomMetadataResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgSetDenomMetadataResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgSetDenomMetadataResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgSetDenomMetadataResponse proto.InternalMessageInfo\n\ntype MsgForceTransfer struct {\n\tSender              string     `protobuf:\"bytes,1,opt,name=sender,proto3\" json:\"sender,omitempty\" yaml:\"sender\"`\n\tAmount              types.Coin `protobuf:\"bytes,2,opt,name=amount,proto3\" json:\"amount\" yaml:\"amount\"`\n\tTransferFromAddress string     `protobuf:\"bytes,3,opt,name=transferFromAddress,proto3\" json:\"transferFromAddress,omitempty\" yaml:\"transfer_from_address\"`\n\tTransferToAddress   string     `protobuf:\"bytes,4,opt,name=transferToAddress,proto3\" json:\"transferToAddress,omitempty\" yaml:\"transfer_to_address\"`\n}\n\nfunc (m *MsgForceTransfer) Reset()         { *m = MsgForceTransfer{} }\nfunc (m *MsgForceTransfer) String() string { return proto.CompactTextString(m) }\nfunc (*MsgForceTransfer) ProtoMessage()    {}\nfunc (*MsgForceTransfer) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_283b6c9a90a846b4, []int{10}\n}\nfunc (m *MsgForceTransfer) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgForceTransfer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgForceTransfer.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgForceTransfer) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgForceTransfer.Merge(m, src)\n}\nfunc (m *MsgForceTransfer) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgForceTransfer) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgForceTransfer.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgForceTransfer proto.InternalMessageInfo\n\nfunc (m *MsgForceTransfer) GetSender() string {\n\tif m != nil {\n\t\treturn m.Sender\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgForceTransfer) GetAmount() types.Coin {\n\tif m != nil {\n\t\treturn m.Amount\n\t}\n\treturn types.Coin{}\n}\n\nfunc (m *MsgForceTransfer) GetTransferFromAddress() string {\n\tif m != nil {\n\t\treturn m.TransferFromAddress\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgForceTransfer) GetTransferToAddress() string {\n\tif m != nil {\n\t\treturn m.TransferToAddress\n\t}\n\treturn \"\"\n}\n\ntype MsgForceTransferResponse struct {\n}\n\nfunc (m *MsgForceTransferResponse) Reset()         { *m = MsgForceTransferResponse{} }\nfunc (m *MsgForceTransferResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgForceTransferResponse) ProtoMessage()    {}\nfunc (*MsgForceTransferResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_283b6c9a90a846b4, []int{11}\n}\nfunc (m *MsgForceTransferResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgForceTransferResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgForceTransferResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgForceTransferResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgForceTransferResponse.Merge(m, src)\n}\nfunc (m *MsgForceTransferResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgForceTransferResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgForceTransferResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgForceTransferResponse proto.InternalMessageInfo\n\n// MsgUpdateParams is the Msg/UpdateParams request type.\n//\n// Since: cosmos-sdk 0.47\ntype MsgUpdateParams struct {\n\t// authority is the address of the governance account.\n\tAuthority string `protobuf:\"bytes,1,opt,name=authority,proto3\" json:\"authority,omitempty\"`\n\t// params defines the x/mint parameters to update.\n\t//\n\t// NOTE: All parameters must be supplied.\n\tParams Params `protobuf:\"bytes,2,opt,name=params,proto3\" json:\"params\"`\n}\n\nfunc (m *MsgUpdateParams) Reset()         { *m = MsgUpdateParams{} }\nfunc (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) }\nfunc (*MsgUpdateParams) ProtoMessage()    {}\nfunc (*MsgUpdateParams) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_283b6c9a90a846b4, []int{12}\n}\nfunc (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgUpdateParams.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgUpdateParams) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgUpdateParams.Merge(m, src)\n}\nfunc (m *MsgUpdateParams) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgUpdateParams) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgUpdateParams.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo\n\nfunc (m *MsgUpdateParams) GetAuthority() string {\n\tif m != nil {\n\t\treturn m.Authority\n\t}\n\treturn \"\"\n}\n\nfunc (m *MsgUpdateParams) GetParams() Params {\n\tif m != nil {\n\t\treturn m.Params\n\t}\n\treturn Params{}\n}\n\n// MsgUpdateParamsResponse defines the response structure for executing a\n// MsgUpdateParams message.\n//\n// Since: cosmos-sdk 0.47\ntype MsgUpdateParamsResponse struct {\n}\n\nfunc (m *MsgUpdateParamsResponse) Reset()         { *m = MsgUpdateParamsResponse{} }\nfunc (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*MsgUpdateParamsResponse) ProtoMessage()    {}\nfunc (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_283b6c9a90a846b4, []int{13}\n}\nfunc (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_MsgUpdateParamsResponse.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src)\n}\nfunc (m *MsgUpdateParamsResponse) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo\n\nfunc init() {\n\tproto.RegisterType((*MsgCreateDenom)(nil), \"osmosis.tokenfactory.v1beta1.MsgCreateDenom\")\n\tproto.RegisterType((*MsgCreateDenomResponse)(nil), \"osmosis.tokenfactory.v1beta1.MsgCreateDenomResponse\")\n\tproto.RegisterType((*MsgMint)(nil), \"osmosis.tokenfactory.v1beta1.MsgMint\")\n\tproto.RegisterType((*MsgMintResponse)(nil), \"osmosis.tokenfactory.v1beta1.MsgMintResponse\")\n\tproto.RegisterType((*MsgBurn)(nil), \"osmosis.tokenfactory.v1beta1.MsgBurn\")\n\tproto.RegisterType((*MsgBurnResponse)(nil), \"osmosis.tokenfactory.v1beta1.MsgBurnResponse\")\n\tproto.RegisterType((*MsgChangeAdmin)(nil), \"osmosis.tokenfactory.v1beta1.MsgChangeAdmin\")\n\tproto.RegisterType((*MsgChangeAdminResponse)(nil), \"osmosis.tokenfactory.v1beta1.MsgChangeAdminResponse\")\n\tproto.RegisterType((*MsgSetDenomMetadata)(nil), \"osmosis.tokenfactory.v1beta1.MsgSetDenomMetadata\")\n\tproto.RegisterType((*MsgSetDenomMetadataResponse)(nil), \"osmosis.tokenfactory.v1beta1.MsgSetDenomMetadataResponse\")\n\tproto.RegisterType((*MsgForceTransfer)(nil), \"osmosis.tokenfactory.v1beta1.MsgForceTransfer\")\n\tproto.RegisterType((*MsgForceTransferResponse)(nil), \"osmosis.tokenfactory.v1beta1.MsgForceTransferResponse\")\n\tproto.RegisterType((*MsgUpdateParams)(nil), \"osmosis.tokenfactory.v1beta1.MsgUpdateParams\")\n\tproto.RegisterType((*MsgUpdateParamsResponse)(nil), \"osmosis.tokenfactory.v1beta1.MsgUpdateParamsResponse\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"osmosis/tokenfactory/v1beta1/tx.proto\", fileDescriptor_283b6c9a90a846b4)\n}\n\nvar fileDescriptor_283b6c9a90a846b4 = []byte{\n\t// 876 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0x4f, 0x6f, 0xdc, 0x44,\n\t0x14, 0x8f, 0xdb, 0xb0, 0x24, 0xd3, 0xa6, 0x49, 0x9c, 0xd0, 0x6c, 0x4c, 0x6a, 0x57, 0x23, 0x8a,\n\t0x28, 0xa2, 0xb6, 0xb6, 0x94, 0x4a, 0xf4, 0x44, 0x1d, 0x14, 0x71, 0x60, 0x11, 0x72, 0xc3, 0x05,\n\t0x55, 0x5a, 0xcd, 0xee, 0x4e, 0x1c, 0x93, 0x7a, 0x66, 0x99, 0x99, 0x6d, 0xba, 0x37, 0xc4, 0x27,\n\t0xe0, 0x80, 0x90, 0x38, 0xf0, 0x01, 0xb8, 0x71, 0xe0, 0x03, 0x70, 0x42, 0x3d, 0x56, 0x9c, 0x38,\n\t0x59, 0x28, 0x39, 0x70, 0xf7, 0x27, 0xa8, 0x3c, 0x33, 0xfe, 0xbb, 0x55, 0x76, 0xf7, 0x94, 0x53,\n\t0x62, 0xbf, 0xdf, 0xef, 0x37, 0xef, 0xf7, 0xde, 0x9b, 0xb7, 0x06, 0x77, 0x28, 0x8f, 0x29, 0x8f,\n\t0xb8, 0x27, 0xe8, 0x09, 0x26, 0x47, 0x68, 0x20, 0x28, 0x9b, 0x78, 0xcf, 0x3b, 0x7d, 0x2c, 0x50,\n\t0xc7, 0x13, 0x2f, 0xdc, 0x11, 0xa3, 0x82, 0x9a, 0x7b, 0x1a, 0xe6, 0x56, 0x61, 0xae, 0x86, 0x59,\n\t0xdb, 0x21, 0x0d, 0xa9, 0x04, 0x7a, 0xd9, 0x7f, 0x8a, 0x63, 0xd9, 0x03, 0x49, 0xf2, 0xfa, 0x88,\n\t0xe3, 0x42, 0x71, 0x40, 0x23, 0x32, 0x15, 0x27, 0x27, 0x45, 0x3c, 0x7b, 0xd0, 0xf1, 0xbb, 0x17,\n\t0xa6, 0x36, 0x42, 0x0c, 0xc5, 0x5c, 0x43, 0x77, 0xb4, 0x54, 0xcc, 0x43, 0xef, 0x79, 0x27, 0xfb,\n\t0xa3, 0x03, 0xbb, 0x2a, 0xd0, 0x53, 0xc9, 0xa9, 0x07, 0x15, 0x82, 0xcf, 0xc0, 0x8d, 0x2e, 0x0f,\n\t0xf7, 0x19, 0x46, 0x02, 0x7f, 0x8e, 0x09, 0x8d, 0xcd, 0xbb, 0xa0, 0xc5, 0x31, 0x19, 0x62, 0xd6,\n\t0x36, 0x6e, 0x1b, 0x1f, 0xac, 0xfa, 0x9b, 0x69, 0xe2, 0xac, 0x4d, 0x50, 0xfc, 0xec, 0x11, 0x54,\n\t0xef, 0x61, 0xa0, 0x01, 0xa6, 0x07, 0x56, 0xf8, 0xb8, 0x3f, 0xcc, 0x68, 0xed, 0x2b, 0x12, 0xbc,\n\t0x95, 0x26, 0xce, 0xba, 0x06, 0xeb, 0x08, 0x0c, 0x0a, 0x10, 0x7c, 0x0a, 0x6e, 0xd6, 0x4f, 0x0b,\n\t0x30, 0x1f, 0x51, 0xc2, 0xb1, 0xe9, 0x83, 0x75, 0x82, 0x4f, 0x7b, 0xd2, 0x64, 0x4f, 0x29, 0xaa,\n\t0xe3, 0xad, 0x34, 0x71, 0x6e, 0x2a, 0xc5, 0x06, 0x00, 0x06, 0x6b, 0x04, 0x9f, 0x1e, 0x66, 0x2f,\n\t0xa4, 0x16, 0xfc, 0xcb, 0x00, 0x6f, 0x77, 0x79, 0xd8, 0x8d, 0x88, 0x58, 0xc4, 0xc5, 0x17, 0xa0,\n\t0x85, 0x62, 0x3a, 0x26, 0x42, 0x7a, 0xb8, 0x76, 0x7f, 0xd7, 0xd5, 0x15, 0xca, 0x5a, 0x96, 0x77,\n\t0xd7, 0xdd, 0xa7, 0x11, 0xf1, 0xdf, 0x79, 0x99, 0x38, 0x4b, 0xa5, 0x92, 0xa2, 0xc1, 0x40, 0xf3,\n\t0xcd, 0xcf, 0xc0, 0x5a, 0x1c, 0x11, 0x71, 0x48, 0x1f, 0x0f, 0x87, 0x0c, 0x73, 0xde, 0xbe, 0xda,\n\t0xb4, 0x90, 0x85, 0x7b, 0x82, 0xf6, 0x90, 0x02, 0xc0, 0xa0, 0x4e, 0x80, 0x9b, 0x60, 0x5d, 0x3b,\n\t0xc8, 0x2b, 0x03, 0xff, 0x56, 0xae, 0xfc, 0x31, 0x23, 0x97, 0xe3, 0xea, 0x00, 0xac, 0xf7, 0xc7,\n\t0x8c, 0x1c, 0x30, 0x1a, 0xd7, 0x7d, 0xed, 0xa5, 0x89, 0xd3, 0x56, 0x9c, 0x0c, 0xd0, 0x3b, 0x62,\n\t0x34, 0x2e, 0x9d, 0x35, 0x49, 0xda, 0x5b, 0xe6, 0xa3, 0xf0, 0xf6, 0x8b, 0xa1, 0xc6, 0xef, 0x18,\n\t0x91, 0x10, 0x3f, 0x1e, 0xc6, 0xd1, 0x42, 0x16, 0xdf, 0x07, 0x6f, 0x55, 0x67, 0x6f, 0x23, 0x4d,\n\t0x9c, 0xeb, 0x0a, 0xa9, 0xe7, 0x43, 0x85, 0xcd, 0x0e, 0x58, 0xcd, 0x46, 0x07, 0x65, 0xfa, 0x3a,\n\t0xf5, 0xed, 0x34, 0x71, 0x36, 0xca, 0xa9, 0x92, 0x21, 0x18, 0xac, 0x10, 0x7c, 0x2a, 0xb3, 0x80,\n\t0x6d, 0x35, 0xa8, 0x65, 0x5e, 0x45, 0xca, 0x3f, 0x1b, 0x60, 0xab, 0xcb, 0xc3, 0x27, 0x58, 0xc8,\n\t0xa1, 0xeb, 0x62, 0x81, 0x86, 0x48, 0xa0, 0x45, 0xf2, 0x0e, 0xc0, 0x4a, 0xac, 0x69, 0xba, 0x39,\n\t0xb7, 0xca, 0xe6, 0x90, 0x93, 0xa2, 0x39, 0xb9, 0xb6, 0xbf, 0xa3, 0x1b, 0xa4, 0x6f, 0x56, 0x4e,\n\t0x86, 0x41, 0xa1, 0x03, 0x6f, 0x81, 0x77, 0xdf, 0x90, 0x55, 0x91, 0xf5, 0xef, 0x57, 0xc0, 0x46,\n\t0x97, 0x87, 0x07, 0x94, 0x0d, 0xf0, 0x21, 0x43, 0x84, 0x1f, 0x61, 0x76, 0x39, 0xd3, 0x14, 0x80,\n\t0x2d, 0xa1, 0x13, 0x98, 0x9e, 0xa8, 0xdb, 0x69, 0xe2, 0xec, 0x29, 0x5e, 0x0e, 0x6a, 0x4c, 0xd5,\n\t0x9b, 0xc8, 0xe6, 0x97, 0x60, 0x33, 0x7f, 0x5d, 0xde, 0xbd, 0x65, 0xa9, 0x68, 0xa7, 0x89, 0x63,\n\t0x35, 0x14, 0xab, 0xf7, 0x6f, 0x9a, 0x08, 0x2d, 0xd0, 0x6e, 0x96, 0xaa, 0xa8, 0xe3, 0x6f, 0x86,\n\t0x1c, 0xe2, 0x6f, 0x46, 0x43, 0x24, 0xf0, 0xd7, 0x72, 0xf9, 0x9a, 0x0f, 0xc1, 0x2a, 0x1a, 0x8b,\n\t0x63, 0xca, 0x22, 0x31, 0xd1, 0x95, 0x6c, 0xff, 0xf3, 0xe7, 0xbd, 0x6d, 0x5d, 0x21, 0x2d, 0xfb,\n\t0x44, 0xb0, 0x88, 0x84, 0x41, 0x09, 0x35, 0x7d, 0xd0, 0x52, 0xeb, 0x5b, 0xd7, 0xf4, 0x3d, 0xf7,\n\t0xa2, 0x9f, 0x17, 0x57, 0x9d, 0xe6, 0x2f, 0x67, 0xe5, 0x0d, 0x34, 0xf3, 0xd1, 0x8d, 0x1f, 0xff,\n\t0xff, 0xe3, 0xc3, 0x52, 0x13, 0xee, 0x82, 0x9d, 0x46, 0x7a, 0x79, 0xea, 0xf7, 0x7f, 0x6d, 0x81,\n\t0xab, 0x5d, 0x1e, 0x9a, 0xdf, 0x83, 0x6b, 0xd5, 0x75, 0xff, 0xd1, 0xc5, 0xa7, 0xd6, 0xd7, 0xb5,\n\t0xf5, 0x60, 0x11, 0x74, 0xb1, 0xdc, 0x9f, 0x82, 0x65, 0xb9, 0x94, 0xef, 0xcc, 0x64, 0x67, 0x30,\n\t0xeb, 0xde, 0x5c, 0xb0, 0xaa, 0xba, 0x5c, 0x8e, 0xb3, 0xd5, 0x33, 0xd8, 0x1c, 0xea, 0xd5, 0x15,\n\t0x25, 0xcb, 0x55, 0x59, 0x4f, 0x73, 0x94, 0xab, 0x44, 0xcf, 0x53, 0xae, 0xe9, 0x15, 0x63, 0xfe,\n\t0x60, 0x80, 0x8d, 0xa9, 0xfd, 0xd2, 0x99, 0x29, 0xd5, 0xa4, 0x58, 0x9f, 0x2e, 0x4c, 0x29, 0x52,\n\t0x38, 0x05, 0x6b, 0xf5, 0x5d, 0xe1, 0xce, 0xd4, 0xaa, 0xe1, 0xad, 0x87, 0x8b, 0xe1, 0x8b, 0x83,\n\t0x05, 0xb8, 0x5e, 0xbb, 0x5c, 0xb3, 0xbb, 0x55, 0x85, 0x5b, 0x9f, 0x2c, 0x04, 0xcf, 0x4f, 0xf5,\n\t0xbf, 0x7a, 0x79, 0x66, 0x1b, 0xaf, 0xce, 0x6c, 0xe3, 0xbf, 0x33, 0xdb, 0xf8, 0xe9, 0xdc, 0x5e,\n\t0x7a, 0x75, 0x6e, 0x2f, 0xfd, 0x7b, 0x6e, 0x2f, 0x7d, 0xfb, 0x20, 0x8c, 0xc4, 0xf1, 0xb8, 0xef,\n\t0x0e, 0x68, 0xec, 0xed, 0x4b, 0xed, 0x7d, 0x4a, 0x04, 0x43, 0x03, 0xc1, 0xbd, 0xef, 0xc6, 0x84,\n\t0x7a, 0x2f, 0xea, 0x1f, 0x66, 0x62, 0x32, 0xc2, 0xbc, 0xdf, 0x92, 0x1f, 0x57, 0x1f, 0xbf, 0x0e,\n\t0x00, 0x00, 0xff, 0xff, 0xc9, 0xb3, 0x74, 0xf3, 0x58, 0x0a, 0x00, 0x00,\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ context.Context\nvar _ grpc.ClientConn\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// MsgClient is the client API for Msg service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype MsgClient interface {\n\tCreateDenom(ctx context.Context, in *MsgCreateDenom, opts ...grpc.CallOption) (*MsgCreateDenomResponse, error)\n\tMint(ctx context.Context, in *MsgMint, opts ...grpc.CallOption) (*MsgMintResponse, error)\n\tBurn(ctx context.Context, in *MsgBurn, opts ...grpc.CallOption) (*MsgBurnResponse, error)\n\tChangeAdmin(ctx context.Context, in *MsgChangeAdmin, opts ...grpc.CallOption) (*MsgChangeAdminResponse, error)\n\tSetDenomMetadata(ctx context.Context, in *MsgSetDenomMetadata, opts ...grpc.CallOption) (*MsgSetDenomMetadataResponse, error)\n\tForceTransfer(ctx context.Context, in *MsgForceTransfer, opts ...grpc.CallOption) (*MsgForceTransferResponse, error)\n\t// UpdateParams defines a governance operation for updating the x/mint module\n\t// parameters. The authority is hard-coded to the x/gov module account.\n\t//\n\t// Since: cosmos-sdk 0.47\n\tUpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error)\n}\n\ntype msgClient struct {\n\tcc grpc1.ClientConn\n}\n\nfunc NewMsgClient(cc grpc1.ClientConn) MsgClient {\n\treturn &msgClient{cc}\n}\n\nfunc (c *msgClient) CreateDenom(ctx context.Context, in *MsgCreateDenom, opts ...grpc.CallOption) (*MsgCreateDenomResponse, error) {\n\tout := new(MsgCreateDenomResponse)\n\terr := c.cc.Invoke(ctx, \"/osmosis.tokenfactory.v1beta1.Msg/CreateDenom\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) Mint(ctx context.Context, in *MsgMint, opts ...grpc.CallOption) (*MsgMintResponse, error) {\n\tout := new(MsgMintResponse)\n\terr := c.cc.Invoke(ctx, \"/osmosis.tokenfactory.v1beta1.Msg/Mint\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) Burn(ctx context.Context, in *MsgBurn, opts ...grpc.CallOption) (*MsgBurnResponse, error) {\n\tout := new(MsgBurnResponse)\n\terr := c.cc.Invoke(ctx, \"/osmosis.tokenfactory.v1beta1.Msg/Burn\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) ChangeAdmin(ctx context.Context, in *MsgChangeAdmin, opts ...grpc.CallOption) (*MsgChangeAdminResponse, error) {\n\tout := new(MsgChangeAdminResponse)\n\terr := c.cc.Invoke(ctx, \"/osmosis.tokenfactory.v1beta1.Msg/ChangeAdmin\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) SetDenomMetadata(ctx context.Context, in *MsgSetDenomMetadata, opts ...grpc.CallOption) (*MsgSetDenomMetadataResponse, error) {\n\tout := new(MsgSetDenomMetadataResponse)\n\terr := c.cc.Invoke(ctx, \"/osmosis.tokenfactory.v1beta1.Msg/SetDenomMetadata\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) ForceTransfer(ctx context.Context, in *MsgForceTransfer, opts ...grpc.CallOption) (*MsgForceTransferResponse, error) {\n\tout := new(MsgForceTransferResponse)\n\terr := c.cc.Invoke(ctx, \"/osmosis.tokenfactory.v1beta1.Msg/ForceTransfer\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) {\n\tout := new(MsgUpdateParamsResponse)\n\terr := c.cc.Invoke(ctx, \"/osmosis.tokenfactory.v1beta1.Msg/UpdateParams\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// MsgServer is the server API for Msg service.\ntype MsgServer interface {\n\tCreateDenom(context.Context, *MsgCreateDenom) (*MsgCreateDenomResponse, error)\n\tMint(context.Context, *MsgMint) (*MsgMintResponse, error)\n\tBurn(context.Context, *MsgBurn) (*MsgBurnResponse, error)\n\tChangeAdmin(context.Context, *MsgChangeAdmin) (*MsgChangeAdminResponse, error)\n\tSetDenomMetadata(context.Context, *MsgSetDenomMetadata) (*MsgSetDenomMetadataResponse, error)\n\tForceTransfer(context.Context, *MsgForceTransfer) (*MsgForceTransferResponse, error)\n\t// UpdateParams defines a governance operation for updating the x/mint module\n\t// parameters. The authority is hard-coded to the x/gov module account.\n\t//\n\t// Since: cosmos-sdk 0.47\n\tUpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error)\n}\n\n// UnimplementedMsgServer can be embedded to have forward compatible implementations.\ntype UnimplementedMsgServer struct {\n}\n\nfunc (*UnimplementedMsgServer) CreateDenom(ctx context.Context, req *MsgCreateDenom) (*MsgCreateDenomResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method CreateDenom not implemented\")\n}\nfunc (*UnimplementedMsgServer) Mint(ctx context.Context, req *MsgMint) (*MsgMintResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Mint not implemented\")\n}\nfunc (*UnimplementedMsgServer) Burn(ctx context.Context, req *MsgBurn) (*MsgBurnResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method Burn not implemented\")\n}\nfunc (*UnimplementedMsgServer) ChangeAdmin(ctx context.Context, req *MsgChangeAdmin) (*MsgChangeAdminResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method ChangeAdmin not implemented\")\n}\nfunc (*UnimplementedMsgServer) SetDenomMetadata(ctx context.Context, req *MsgSetDenomMetadata) (*MsgSetDenomMetadataResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method SetDenomMetadata not implemented\")\n}\nfunc (*UnimplementedMsgServer) ForceTransfer(ctx context.Context, req *MsgForceTransfer) (*MsgForceTransferResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method ForceTransfer not implemented\")\n}\nfunc (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) {\n\treturn nil, status.Errorf(codes.Unimplemented, \"method UpdateParams not implemented\")\n}\n\nfunc RegisterMsgServer(s grpc1.Server, srv MsgServer) {\n\ts.RegisterService(&_Msg_serviceDesc, srv)\n}\n\nfunc _Msg_CreateDenom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgCreateDenom)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).CreateDenom(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/osmosis.tokenfactory.v1beta1.Msg/CreateDenom\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).CreateDenom(ctx, req.(*MsgCreateDenom))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_Mint_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgMint)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).Mint(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/osmosis.tokenfactory.v1beta1.Msg/Mint\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).Mint(ctx, req.(*MsgMint))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_Burn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgBurn)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).Burn(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/osmosis.tokenfactory.v1beta1.Msg/Burn\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).Burn(ctx, req.(*MsgBurn))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_ChangeAdmin_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgChangeAdmin)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).ChangeAdmin(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/osmosis.tokenfactory.v1beta1.Msg/ChangeAdmin\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).ChangeAdmin(ctx, req.(*MsgChangeAdmin))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_SetDenomMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgSetDenomMetadata)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).SetDenomMetadata(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/osmosis.tokenfactory.v1beta1.Msg/SetDenomMetadata\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).SetDenomMetadata(ctx, req.(*MsgSetDenomMetadata))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_ForceTransfer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgForceTransfer)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).ForceTransfer(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/osmosis.tokenfactory.v1beta1.Msg/ForceTransfer\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).ForceTransfer(ctx, req.(*MsgForceTransfer))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(MsgUpdateParams)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(MsgServer).UpdateParams(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/osmosis.tokenfactory.v1beta1.Msg/UpdateParams\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _Msg_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"osmosis.tokenfactory.v1beta1.Msg\",\n\tHandlerType: (*MsgServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"CreateDenom\",\n\t\t\tHandler:    _Msg_CreateDenom_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Mint\",\n\t\t\tHandler:    _Msg_Mint_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Burn\",\n\t\t\tHandler:    _Msg_Burn_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ChangeAdmin\",\n\t\t\tHandler:    _Msg_ChangeAdmin_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"SetDenomMetadata\",\n\t\t\tHandler:    _Msg_SetDenomMetadata_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ForceTransfer\",\n\t\t\tHandler:    _Msg_ForceTransfer_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"UpdateParams\",\n\t\t\tHandler:    _Msg_UpdateParams_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"osmosis/tokenfactory/v1beta1/tx.proto\",\n}\n\nfunc (m *MsgCreateDenom) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgCreateDenom) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgCreateDenom) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Subdenom) > 0 {\n\t\ti -= len(m.Subdenom)\n\t\tcopy(dAtA[i:], m.Subdenom)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Subdenom)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Sender) > 0 {\n\t\ti -= len(m.Sender)\n\t\tcopy(dAtA[i:], m.Sender)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Sender)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgCreateDenomResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgCreateDenomResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgCreateDenomResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.NewTokenDenom) > 0 {\n\t\ti -= len(m.NewTokenDenom)\n\t\tcopy(dAtA[i:], m.NewTokenDenom)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.NewTokenDenom)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgMint) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgMint) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgMint) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.MintToAddress) > 0 {\n\t\ti -= len(m.MintToAddress)\n\t\tcopy(dAtA[i:], m.MintToAddress)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.MintToAddress)))\n\t\ti--\n\t\tdAtA[i] = 0x1a\n\t}\n\t{\n\t\tsize, err := m.Amount.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x12\n\tif len(m.Sender) > 0 {\n\t\ti -= len(m.Sender)\n\t\tcopy(dAtA[i:], m.Sender)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Sender)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgMintResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgMintResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgMintResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgBurn) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgBurn) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgBurn) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.BurnFromAddress) > 0 {\n\t\ti -= len(m.BurnFromAddress)\n\t\tcopy(dAtA[i:], m.BurnFromAddress)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.BurnFromAddress)))\n\t\ti--\n\t\tdAtA[i] = 0x1a\n\t}\n\t{\n\t\tsize, err := m.Amount.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x12\n\tif len(m.Sender) > 0 {\n\t\ti -= len(m.Sender)\n\t\tcopy(dAtA[i:], m.Sender)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Sender)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgBurnResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgBurnResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgBurnResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgChangeAdmin) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgChangeAdmin) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgChangeAdmin) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.NewAdmin) > 0 {\n\t\ti -= len(m.NewAdmin)\n\t\tcopy(dAtA[i:], m.NewAdmin)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.NewAdmin)))\n\t\ti--\n\t\tdAtA[i] = 0x1a\n\t}\n\tif len(m.Denom) > 0 {\n\t\ti -= len(m.Denom)\n\t\tcopy(dAtA[i:], m.Denom)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Denom)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Sender) > 0 {\n\t\ti -= len(m.Sender)\n\t\tcopy(dAtA[i:], m.Sender)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Sender)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgChangeAdminResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgChangeAdminResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgChangeAdminResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgSetDenomMetadata) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgSetDenomMetadata) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgSetDenomMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x12\n\tif len(m.Sender) > 0 {\n\t\ti -= len(m.Sender)\n\t\tcopy(dAtA[i:], m.Sender)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Sender)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgSetDenomMetadataResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgSetDenomMetadataResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgSetDenomMetadataResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgForceTransfer) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgForceTransfer) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgForceTransfer) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.TransferToAddress) > 0 {\n\t\ti -= len(m.TransferToAddress)\n\t\tcopy(dAtA[i:], m.TransferToAddress)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.TransferToAddress)))\n\t\ti--\n\t\tdAtA[i] = 0x22\n\t}\n\tif len(m.TransferFromAddress) > 0 {\n\t\ti -= len(m.TransferFromAddress)\n\t\tcopy(dAtA[i:], m.TransferFromAddress)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.TransferFromAddress)))\n\t\ti--\n\t\tdAtA[i] = 0x1a\n\t}\n\t{\n\t\tsize, err := m.Amount.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x12\n\tif len(m.Sender) > 0 {\n\t\ti -= len(m.Sender)\n\t\tcopy(dAtA[i:], m.Sender)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Sender)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgForceTransferResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgForceTransferResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgForceTransferResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\t{\n\t\tsize, err := m.Params.MarshalToSizedBuffer(dAtA[:i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\ti -= size\n\t\ti = encodeVarintTx(dAtA, i, uint64(size))\n\t}\n\ti--\n\tdAtA[i] = 0x12\n\tif len(m.Authority) > 0 {\n\t\ti -= len(m.Authority)\n\t\tcopy(dAtA[i:], m.Authority)\n\t\ti = encodeVarintTx(dAtA, i, uint64(len(m.Authority)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintTx(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovTx(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\nfunc (m *MsgCreateDenom) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Sender)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.Subdenom)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *MsgCreateDenomResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.NewTokenDenom)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *MsgMint) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Sender)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = m.Amount.Size()\n\tn += 1 + l + sovTx(uint64(l))\n\tl = len(m.MintToAddress)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *MsgMintResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgBurn) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Sender)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = m.Amount.Size()\n\tn += 1 + l + sovTx(uint64(l))\n\tl = len(m.BurnFromAddress)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *MsgBurnResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgChangeAdmin) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Sender)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.Denom)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.NewAdmin)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *MsgChangeAdminResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgSetDenomMetadata) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Sender)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = m.Metadata.Size()\n\tn += 1 + l + sovTx(uint64(l))\n\treturn n\n}\n\nfunc (m *MsgSetDenomMetadataResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgForceTransfer) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Sender)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = m.Amount.Size()\n\tn += 1 + l + sovTx(uint64(l))\n\tl = len(m.TransferFromAddress)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = len(m.TransferToAddress)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\treturn n\n}\n\nfunc (m *MsgForceTransferResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc (m *MsgUpdateParams) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Authority)\n\tif l > 0 {\n\t\tn += 1 + l + sovTx(uint64(l))\n\t}\n\tl = m.Params.Size()\n\tn += 1 + l + sovTx(uint64(l))\n\treturn n\n}\n\nfunc (m *MsgUpdateParamsResponse) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\treturn n\n}\n\nfunc sovTx(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\nfunc sozTx(x uint64) (n int) {\n\treturn sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\nfunc (m *MsgCreateDenom) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgCreateDenom: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgCreateDenom: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Sender\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Sender = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Subdenom\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Subdenom = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *MsgCreateDenomResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgCreateDenomResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgCreateDenomResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field NewTokenDenom\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.NewTokenDenom = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *MsgMint) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgMint: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgMint: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Sender\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Sender = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Amount\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field MintToAddress\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.MintToAddress = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *MsgMintResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgMintResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgMintResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *MsgBurn) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgBurn: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgBurn: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Sender\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Sender = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Amount\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field BurnFromAddress\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.BurnFromAddress = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *MsgBurnResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgBurnResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgBurnResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *MsgChangeAdmin) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeAdmin: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeAdmin: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Sender\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Sender = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Denom\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Denom = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field NewAdmin\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.NewAdmin = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *MsgChangeAdminResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeAdminResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgChangeAdminResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *MsgSetDenomMetadata) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgSetDenomMetadata: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgSetDenomMetadata: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Sender\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Sender = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Metadata\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *MsgSetDenomMetadataResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgSetDenomMetadataResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgSetDenomMetadataResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *MsgForceTransfer) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgForceTransfer: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgForceTransfer: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Sender\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Sender = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Amount\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field TransferFromAddress\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.TransferFromAddress = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 4:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field TransferToAddress\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.TransferToAddress = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *MsgForceTransferResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgForceTransferResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgForceTransferResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *MsgUpdateParams) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParams: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParams: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Authority\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Authority = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Params\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParamsResponse: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipTx(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthTx\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc skipTx(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowTx\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthTx\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupTx\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthTx\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthTx        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowTx          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupTx = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "x/tokenfactory/wasm/custom_msg_test.go",
    "content": "package wasm_test\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"testing\"\n\n\t\"github.com/CosmWasm/wasmd/x/wasm/keeper\"\n\twasmvmtypes \"github.com/CosmWasm/wasmvm/types\"\n\t\"github.com/stretchr/testify/require\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/app\"\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n\tbindings \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/wasm/types\"\n)\n\nfunc TestCreateDenomMsg(t *testing.T) {\n\tcreator := RandomAccountAddress()\n\tjunoapp, ctx := SetupCustomApp(t, creator)\n\n\tlucky := RandomAccountAddress()\n\treflect := instantiateReflectContract(t, ctx, junoapp, lucky)\n\trequire.NotEmpty(t, reflect)\n\n\t// Fund reflect contract with 100 base denom creation fees\n\treflectAmount := sdk.NewCoins(sdk.NewCoin(types.DefaultParams().DenomCreationFee[0].Denom, types.DefaultParams().DenomCreationFee[0].Amount.MulRaw(100)))\n\tfundAccount(t, ctx, junoapp, reflect, reflectAmount)\n\n\tmsg := bindings.TokenFactoryMsg{CreateDenom: &bindings.CreateDenom{\n\t\tSubdenom: \"SUN\",\n\t}}\n\terr := executeCustom(t, ctx, junoapp, reflect, lucky, msg, sdk.Coin{})\n\trequire.NoError(t, err)\n\n\t// query the denom and see if it matches\n\tquery := bindings.TokenFactoryQuery{\n\t\tFullDenom: &bindings.FullDenom{\n\t\t\tCreatorAddr: reflect.String(),\n\t\t\tSubdenom:    \"SUN\",\n\t\t},\n\t}\n\tresp := bindings.FullDenomResponse{}\n\tqueryCustom(t, ctx, junoapp, reflect, query, &resp)\n\n\trequire.Equal(t, resp.Denom, fmt.Sprintf(\"factory/%s/SUN\", reflect.String()))\n}\n\nfunc TestMintMsg(t *testing.T) {\n\tcreator := RandomAccountAddress()\n\tjunoapp, ctx := SetupCustomApp(t, creator)\n\n\tlucky := RandomAccountAddress()\n\treflect := instantiateReflectContract(t, ctx, junoapp, lucky)\n\trequire.NotEmpty(t, reflect)\n\n\t// Fund reflect contract with 100 base denom creation fees\n\treflectAmount := sdk.NewCoins(sdk.NewCoin(types.DefaultParams().DenomCreationFee[0].Denom, types.DefaultParams().DenomCreationFee[0].Amount.MulRaw(100)))\n\tfundAccount(t, ctx, junoapp, reflect, reflectAmount)\n\n\t// lucky was broke\n\tbalances := junoapp.AppKeepers.BankKeeper.GetAllBalances(ctx, lucky)\n\trequire.Empty(t, balances)\n\n\t// Create denom for minting\n\tmsg := bindings.TokenFactoryMsg{CreateDenom: &bindings.CreateDenom{\n\t\tSubdenom: \"SUN\",\n\t}}\n\terr := executeCustom(t, ctx, junoapp, reflect, lucky, msg, sdk.Coin{})\n\trequire.NoError(t, err)\n\tsunDenom := fmt.Sprintf(\"factory/%s/%s\", reflect.String(), msg.CreateDenom.Subdenom)\n\n\tamount, ok := sdk.NewIntFromString(\"808010808\")\n\trequire.True(t, ok)\n\tmsg = bindings.TokenFactoryMsg{MintTokens: &bindings.MintTokens{\n\t\tDenom:         sunDenom,\n\t\tAmount:        amount,\n\t\tMintToAddress: lucky.String(),\n\t}}\n\terr = executeCustom(t, ctx, junoapp, reflect, lucky, msg, sdk.Coin{})\n\trequire.NoError(t, err)\n\n\tbalances = junoapp.AppKeepers.BankKeeper.GetAllBalances(ctx, lucky)\n\trequire.Len(t, balances, 1)\n\tcoin := balances[0]\n\trequire.Equal(t, amount, coin.Amount)\n\trequire.Contains(t, coin.Denom, \"factory/\")\n\n\t// query the denom and see if it matches\n\tquery := bindings.TokenFactoryQuery{\n\t\tFullDenom: &bindings.FullDenom{\n\t\t\tCreatorAddr: reflect.String(),\n\t\t\tSubdenom:    \"SUN\",\n\t\t},\n\t}\n\tresp := bindings.FullDenomResponse{}\n\tqueryCustom(t, ctx, junoapp, reflect, query, &resp)\n\n\trequire.Equal(t, resp.Denom, coin.Denom)\n\n\t// mint the same denom again\n\terr = executeCustom(t, ctx, junoapp, reflect, lucky, msg, sdk.Coin{})\n\trequire.NoError(t, err)\n\n\tbalances = junoapp.AppKeepers.BankKeeper.GetAllBalances(ctx, lucky)\n\trequire.Len(t, balances, 1)\n\tcoin = balances[0]\n\trequire.Equal(t, amount.MulRaw(2), coin.Amount)\n\trequire.Contains(t, coin.Denom, \"factory/\")\n\n\t// query the denom and see if it matches\n\tquery = bindings.TokenFactoryQuery{\n\t\tFullDenom: &bindings.FullDenom{\n\t\t\tCreatorAddr: reflect.String(),\n\t\t\tSubdenom:    \"SUN\",\n\t\t},\n\t}\n\tresp = bindings.FullDenomResponse{}\n\tqueryCustom(t, ctx, junoapp, reflect, query, &resp)\n\n\trequire.Equal(t, resp.Denom, coin.Denom)\n\n\t// now mint another amount / denom\n\t// create it first\n\tmsg = bindings.TokenFactoryMsg{CreateDenom: &bindings.CreateDenom{\n\t\tSubdenom: \"MOON\",\n\t}}\n\terr = executeCustom(t, ctx, junoapp, reflect, lucky, msg, sdk.Coin{})\n\trequire.NoError(t, err)\n\tmoonDenom := fmt.Sprintf(\"factory/%s/%s\", reflect.String(), msg.CreateDenom.Subdenom)\n\n\tamount = amount.SubRaw(1)\n\tmsg = bindings.TokenFactoryMsg{MintTokens: &bindings.MintTokens{\n\t\tDenom:         moonDenom,\n\t\tAmount:        amount,\n\t\tMintToAddress: lucky.String(),\n\t}}\n\terr = executeCustom(t, ctx, junoapp, reflect, lucky, msg, sdk.Coin{})\n\trequire.NoError(t, err)\n\n\tbalances = junoapp.AppKeepers.BankKeeper.GetAllBalances(ctx, lucky)\n\trequire.Len(t, balances, 2)\n\tcoin = balances[0]\n\trequire.Equal(t, amount, coin.Amount)\n\trequire.Contains(t, coin.Denom, \"factory/\")\n\n\t// query the denom and see if it matches\n\tquery = bindings.TokenFactoryQuery{\n\t\tFullDenom: &bindings.FullDenom{\n\t\t\tCreatorAddr: reflect.String(),\n\t\t\tSubdenom:    \"MOON\",\n\t\t},\n\t}\n\tresp = bindings.FullDenomResponse{}\n\tqueryCustom(t, ctx, junoapp, reflect, query, &resp)\n\n\trequire.Equal(t, resp.Denom, coin.Denom)\n\n\t// and check the first denom is unchanged\n\tcoin = balances[1]\n\trequire.Equal(t, amount.AddRaw(1).MulRaw(2), coin.Amount)\n\trequire.Contains(t, coin.Denom, \"factory/\")\n\n\t// query the denom and see if it matches\n\tquery = bindings.TokenFactoryQuery{\n\t\tFullDenom: &bindings.FullDenom{\n\t\t\tCreatorAddr: reflect.String(),\n\t\t\tSubdenom:    \"SUN\",\n\t\t},\n\t}\n\tresp = bindings.FullDenomResponse{}\n\tqueryCustom(t, ctx, junoapp, reflect, query, &resp)\n\n\trequire.Equal(t, resp.Denom, coin.Denom)\n}\n\nfunc TestForceTransfer(t *testing.T) {\n\tcreator := RandomAccountAddress()\n\tjunoapp, ctx := SetupCustomApp(t, creator)\n\n\tlucky := RandomAccountAddress()\n\trcpt := RandomAccountAddress()\n\treflect := instantiateReflectContract(t, ctx, junoapp, lucky)\n\trequire.NotEmpty(t, reflect)\n\n\t// Fund reflect contract with 100 base denom creation fees\n\treflectAmount := sdk.NewCoins(sdk.NewCoin(types.DefaultParams().DenomCreationFee[0].Denom, types.DefaultParams().DenomCreationFee[0].Amount.MulRaw(100)))\n\tfundAccount(t, ctx, junoapp, reflect, reflectAmount)\n\n\t// lucky was broke\n\tbalances := junoapp.AppKeepers.BankKeeper.GetAllBalances(ctx, lucky)\n\trequire.Empty(t, balances)\n\n\t// Create denom for minting\n\tmsg := bindings.TokenFactoryMsg{CreateDenom: &bindings.CreateDenom{\n\t\tSubdenom: \"SUN\",\n\t}}\n\terr := executeCustom(t, ctx, junoapp, reflect, lucky, msg, sdk.Coin{})\n\trequire.NoError(t, err)\n\tsunDenom := fmt.Sprintf(\"factory/%s/%s\", reflect.String(), msg.CreateDenom.Subdenom)\n\n\tamount, ok := sdk.NewIntFromString(\"808010808\")\n\trequire.True(t, ok)\n\n\t// Mint new tokens to lucky\n\tmsg = bindings.TokenFactoryMsg{MintTokens: &bindings.MintTokens{\n\t\tDenom:         sunDenom,\n\t\tAmount:        amount,\n\t\tMintToAddress: lucky.String(),\n\t}}\n\terr = executeCustom(t, ctx, junoapp, reflect, lucky, msg, sdk.Coin{})\n\trequire.NoError(t, err)\n\n\t// Force move 100 tokens from lucky to rcpt\n\tmsg = bindings.TokenFactoryMsg{ForceTransfer: &bindings.ForceTransfer{\n\t\tDenom:       sunDenom,\n\t\tAmount:      sdk.NewInt(100),\n\t\tFromAddress: lucky.String(),\n\t\tToAddress:   rcpt.String(),\n\t}}\n\terr = executeCustom(t, ctx, junoapp, reflect, lucky, msg, sdk.Coin{})\n\trequire.NoError(t, err)\n\n\t// check the balance of rcpt\n\tbalances = junoapp.AppKeepers.BankKeeper.GetAllBalances(ctx, rcpt)\n\trequire.Len(t, balances, 1)\n\tcoin := balances[0]\n\trequire.Equal(t, sdk.NewInt(100), coin.Amount)\n}\n\nfunc TestBurnMsg(t *testing.T) {\n\tcreator := RandomAccountAddress()\n\tjunoapp, ctx := SetupCustomApp(t, creator)\n\n\tlucky := RandomAccountAddress()\n\treflect := instantiateReflectContract(t, ctx, junoapp, lucky)\n\trequire.NotEmpty(t, reflect)\n\n\t// Fund reflect contract with 100 base denom creation fees\n\treflectAmount := sdk.NewCoins(sdk.NewCoin(types.DefaultParams().DenomCreationFee[0].Denom, types.DefaultParams().DenomCreationFee[0].Amount.MulRaw(100)))\n\tfundAccount(t, ctx, junoapp, reflect, reflectAmount)\n\n\t// lucky was broke\n\tbalances := junoapp.AppKeepers.BankKeeper.GetAllBalances(ctx, lucky)\n\trequire.Empty(t, balances)\n\n\t// Create denom for minting\n\tmsg := bindings.TokenFactoryMsg{CreateDenom: &bindings.CreateDenom{\n\t\tSubdenom: \"SUN\",\n\t}}\n\terr := executeCustom(t, ctx, junoapp, reflect, lucky, msg, sdk.Coin{})\n\trequire.NoError(t, err)\n\tsunDenom := fmt.Sprintf(\"factory/%s/%s\", reflect.String(), msg.CreateDenom.Subdenom)\n\n\tamount, ok := sdk.NewIntFromString(\"808010809\")\n\trequire.True(t, ok)\n\n\tmsg = bindings.TokenFactoryMsg{MintTokens: &bindings.MintTokens{\n\t\tDenom:         sunDenom,\n\t\tAmount:        amount,\n\t\tMintToAddress: lucky.String(),\n\t}}\n\terr = executeCustom(t, ctx, junoapp, reflect, lucky, msg, sdk.Coin{})\n\trequire.NoError(t, err)\n\n\t// can burn from different address with burnFrom\n\tamt, ok := sdk.NewIntFromString(\"1\")\n\trequire.True(t, ok)\n\tmsg = bindings.TokenFactoryMsg{BurnTokens: &bindings.BurnTokens{\n\t\tDenom:           sunDenom,\n\t\tAmount:          amt,\n\t\tBurnFromAddress: lucky.String(),\n\t}}\n\terr = executeCustom(t, ctx, junoapp, reflect, lucky, msg, sdk.Coin{})\n\trequire.NoError(t, err)\n\n\t// lucky needs to send balance to reflect contract to burn it\n\tluckyBalance := junoapp.AppKeepers.BankKeeper.GetAllBalances(ctx, lucky)\n\terr = junoapp.AppKeepers.BankKeeper.SendCoins(ctx, lucky, reflect, luckyBalance)\n\trequire.NoError(t, err)\n\n\tmsg = bindings.TokenFactoryMsg{BurnTokens: &bindings.BurnTokens{\n\t\tDenom:           sunDenom,\n\t\tAmount:          amount.Abs().Sub(sdk.NewInt(1)),\n\t\tBurnFromAddress: reflect.String(),\n\t}}\n\terr = executeCustom(t, ctx, junoapp, reflect, lucky, msg, sdk.Coin{})\n\trequire.NoError(t, err)\n}\n\ntype ReflectExec struct {\n\tReflectMsg    *ReflectMsgs    `json:\"reflect_msg,omitempty\"`\n\tReflectSubMsg *ReflectSubMsgs `json:\"reflect_sub_msg,omitempty\"`\n}\n\ntype ReflectMsgs struct {\n\tMsgs []wasmvmtypes.CosmosMsg `json:\"msgs\"`\n}\n\ntype ReflectSubMsgs struct {\n\tMsgs []wasmvmtypes.SubMsg `json:\"msgs\"`\n}\n\nfunc executeCustom(t *testing.T, ctx sdk.Context, junoapp *app.App, contract sdk.AccAddress, sender sdk.AccAddress, msg bindings.TokenFactoryMsg, funds sdk.Coin) error { //nolint:unparam // funds is always nil but could change in the future.\n\tcustomBz, err := json.Marshal(msg)\n\trequire.NoError(t, err)\n\n\treflectMsg := ReflectExec{\n\t\tReflectMsg: &ReflectMsgs{\n\t\t\tMsgs: []wasmvmtypes.CosmosMsg{{\n\t\t\t\tCustom: customBz,\n\t\t\t}},\n\t\t},\n\t}\n\treflectBz, err := json.Marshal(reflectMsg)\n\trequire.NoError(t, err)\n\n\t// no funds sent if amount is 0\n\tvar coins sdk.Coins\n\tif !funds.Amount.IsNil() {\n\t\tcoins = sdk.Coins{funds}\n\t}\n\n\tcontractKeeper := keeper.NewDefaultPermissionKeeper(junoapp.AppKeepers.WasmKeeper)\n\t_, err = contractKeeper.Execute(ctx, contract, sender, reflectBz, coins)\n\treturn err\n}\n"
  },
  {
    "path": "x/tokenfactory/wasm/custom_query_test.go",
    "content": "package wasm_test\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"testing\"\n\n\twasmvmtypes \"github.com/CosmWasm/wasmvm/types\"\n\t\"github.com/stretchr/testify/require\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/app\"\n\tbindings \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/wasm/types\"\n)\n\nfunc TestQueryFullDenom(t *testing.T) {\n\tactor := RandomAccountAddress()\n\tjunoapp, ctx := SetupCustomApp(t, actor)\n\n\treflect := instantiateReflectContract(t, ctx, junoapp, actor)\n\trequire.NotEmpty(t, reflect)\n\n\t// query full denom\n\tquery := bindings.TokenFactoryQuery{\n\t\tFullDenom: &bindings.FullDenom{\n\t\t\tCreatorAddr: reflect.String(),\n\t\t\tSubdenom:    \"ustart\",\n\t\t},\n\t}\n\tresp := bindings.FullDenomResponse{}\n\tqueryCustom(t, ctx, junoapp, reflect, query, &resp)\n\n\texpected := fmt.Sprintf(\"factory/%s/ustart\", reflect.String())\n\trequire.EqualValues(t, expected, resp.Denom)\n}\n\ntype ReflectQuery struct {\n\tChain *ChainRequest `json:\"chain,omitempty\"`\n}\n\ntype ChainRequest struct {\n\tRequest wasmvmtypes.QueryRequest `json:\"request\"`\n}\n\ntype ChainResponse struct {\n\tData []byte `json:\"data\"`\n}\n\nfunc queryCustom(t *testing.T, ctx sdk.Context, junoapp *app.App, contract sdk.AccAddress, request bindings.TokenFactoryQuery, response interface{}) {\n\tmsgBz, err := json.Marshal(request)\n\trequire.NoError(t, err)\n\tfmt.Println(\"queryCustom1\", string(msgBz))\n\n\tquery := ReflectQuery{\n\t\tChain: &ChainRequest{\n\t\t\tRequest: wasmvmtypes.QueryRequest{Custom: msgBz},\n\t\t},\n\t}\n\tqueryBz, err := json.Marshal(query)\n\trequire.NoError(t, err)\n\tfmt.Println(\"queryCustom2\", string(queryBz))\n\n\tresBz, err := junoapp.AppKeepers.WasmKeeper.QuerySmart(ctx, contract, queryBz)\n\trequire.NoError(t, err)\n\tvar resp ChainResponse\n\terr = json.Unmarshal(resBz, &resp)\n\trequire.NoError(t, err)\n\terr = json.Unmarshal(resp.Data, response)\n\trequire.NoError(t, err)\n}\n"
  },
  {
    "path": "x/tokenfactory/wasm/helpers_test.go",
    "content": "package wasm_test\n\nimport (\n\t\"os\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/CosmWasm/wasmd/x/wasm/keeper\"\n\t\"github.com/stretchr/testify/require\"\n\n\t\"github.com/cometbft/cometbft/crypto\"\n\t\"github.com/cometbft/cometbft/crypto/ed25519\"\n\ttmproto \"github.com/cometbft/cometbft/proto/tendermint/types\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tbanktestutil \"github.com/cosmos/cosmos-sdk/x/bank/testutil\"\n\n\t\"github.com/cybercongress/go-cyber/v7/app\"\n)\n\nfunc CreateTestInput(t *testing.T) (*app.App, sdk.Context) {\n\tosmosis := app.Setup(t)\n\tctx := osmosis.BaseApp.NewContext(false, tmproto.Header{Height: 1, ChainID: \"testing\", Time: time.Now().UTC()})\n\treturn osmosis, ctx\n}\n\nfunc FundAccount(t *testing.T, ctx sdk.Context, junoapp *app.App, acct sdk.AccAddress) {\n\terr := banktestutil.FundAccount(junoapp.AppKeepers.BankKeeper, ctx, acct, sdk.NewCoins(\n\t\tsdk.NewCoin(\"uosmo\", sdk.NewInt(10000000000)),\n\t))\n\trequire.NoError(t, err)\n}\n\n// we need to make this deterministic (same every test run), as content might affect gas costs\nfunc keyPubAddr() (crypto.PrivKey, crypto.PubKey, sdk.AccAddress) {\n\tkey := ed25519.GenPrivKey()\n\tpub := key.PubKey()\n\taddr := sdk.AccAddress(pub.Address())\n\treturn key, pub, addr\n}\n\nfunc RandomAccountAddress() sdk.AccAddress {\n\t_, _, addr := keyPubAddr()\n\treturn addr\n}\n\nfunc RandomBech32AccountAddress() string {\n\treturn RandomAccountAddress().String()\n}\n\nfunc storeReflectCode(t *testing.T, ctx sdk.Context, junoapp *app.App, addr sdk.AccAddress) uint64 {\n\twasmCode, err := os.ReadFile(\"./testdata/token_reflect.wasm\")\n\trequire.NoError(t, err)\n\n\tcontractKeeper := keeper.NewDefaultPermissionKeeper(junoapp.AppKeepers.WasmKeeper)\n\tcodeID, _, err := contractKeeper.Create(ctx, addr, wasmCode, nil)\n\trequire.NoError(t, err)\n\n\treturn codeID\n}\n\nfunc instantiateReflectContract(t *testing.T, ctx sdk.Context, junoapp *app.App, funder sdk.AccAddress) sdk.AccAddress {\n\tinitMsgBz := []byte(\"{}\")\n\tcontractKeeper := keeper.NewDefaultPermissionKeeper(junoapp.AppKeepers.WasmKeeper)\n\tcodeID := uint64(1)\n\taddr, _, err := contractKeeper.Instantiate(ctx, codeID, funder, funder, initMsgBz, \"demo contract\", nil)\n\trequire.NoError(t, err)\n\n\treturn addr\n}\n\nfunc fundAccount(t *testing.T, ctx sdk.Context, junoapp *app.App, addr sdk.AccAddress, coins sdk.Coins) {\n\terr := banktestutil.FundAccount(\n\t\tjunoapp.AppKeepers.BankKeeper,\n\t\tctx,\n\t\taddr,\n\t\tcoins,\n\t)\n\trequire.NoError(t, err)\n}\n\nfunc SetupCustomApp(t *testing.T, addr sdk.AccAddress) (*app.App, sdk.Context) {\n\tjunoApp, ctx := CreateTestInput(t)\n\twasmKeeper := junoApp.AppKeepers.WasmKeeper\n\n\tstoreReflectCode(t, ctx, junoApp, addr)\n\n\tcInfo := wasmKeeper.GetCodeInfo(ctx, 1)\n\trequire.NotNil(t, cInfo)\n\n\treturn junoApp, ctx\n}\n"
  },
  {
    "path": "x/tokenfactory/wasm/message_plugin.go",
    "content": "package wasm\n\nimport (\n\twasmvmtypes \"github.com/CosmWasm/wasmvm/types\"\n\tpluginstypes \"github.com/cybercongress/go-cyber/v7/plugins/types\"\n\n\terrorsmod \"cosmossdk.io/errors\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tbankkeeper \"github.com/cosmos/cosmos-sdk/x/bank/keeper\"\n\tbanktypes \"github.com/cosmos/cosmos-sdk/x/bank/types\"\n\n\ttokenfactorykeeper \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/keeper\"\n\ttokenfactorytypes \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n\tbindingstypes \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/wasm/types\"\n)\n\ntype Messenger struct {\n\tbank         bankkeeper.Keeper\n\ttokenFactory *tokenfactorykeeper.Keeper\n}\n\nfunc NewMessenger(\n\tbank bankkeeper.Keeper,\n\ttokenFactory *tokenfactorykeeper.Keeper,\n) *Messenger {\n\treturn &Messenger{\n\t\tbank:         bank,\n\t\ttokenFactory: tokenFactory,\n\t}\n}\n\n// DispatchMsg executes on the contractMsg.\nfunc (m *Messenger) HandleMsg(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg pluginstypes.CyberMsg) ([]sdk.Event, [][]byte, error) {\n\tvar contractMsg = msg.TokenFactory\n\tswitch {\n\tcase contractMsg.CreateDenom != nil:\n\t\treturn m.createDenom(ctx, contractAddr, contractMsg.CreateDenom)\n\tcase contractMsg.MintTokens != nil:\n\t\treturn m.mintTokens(ctx, contractAddr, contractMsg.MintTokens)\n\tcase contractMsg.ChangeAdmin != nil:\n\t\treturn m.changeAdmin(ctx, contractAddr, contractMsg.ChangeAdmin)\n\tcase contractMsg.BurnTokens != nil:\n\t\treturn m.burnTokens(ctx, contractAddr, contractMsg.BurnTokens)\n\tcase contractMsg.SetMetadata != nil:\n\t\treturn m.setMetadata(ctx, contractAddr, contractMsg.SetMetadata)\n\tcase contractMsg.ForceTransfer != nil:\n\t\treturn m.forceTransfer(ctx, contractAddr, contractMsg.ForceTransfer)\n\tdefault:\n\t\treturn nil, nil, pluginstypes.ErrHandleMsg\n\t}\n}\n\n// createDenom creates a new token denom\nfunc (m *Messenger) createDenom(ctx sdk.Context, contractAddr sdk.AccAddress, createDenom *bindingstypes.CreateDenom) ([]sdk.Event, [][]byte, error) {\n\tbz, err := PerformCreateDenom(m.tokenFactory, m.bank, ctx, contractAddr, createDenom)\n\tif err != nil {\n\t\treturn nil, nil, errorsmod.Wrap(err, \"perform create denom\")\n\t}\n\t// TODO: double check how this is all encoded to the contract\n\treturn nil, [][]byte{bz}, nil\n}\n\n// PerformCreateDenom is used with createDenom to create a token denom; validates the msgCreateDenom.\nfunc PerformCreateDenom(f *tokenfactorykeeper.Keeper, b bankkeeper.Keeper, ctx sdk.Context, contractAddr sdk.AccAddress, createDenom *bindingstypes.CreateDenom) ([]byte, error) {\n\tif createDenom == nil {\n\t\treturn nil, wasmvmtypes.InvalidRequest{Err: \"create denom null create denom\"}\n\t}\n\n\tmsgServer := tokenfactorykeeper.NewMsgServerImpl(*f)\n\n\tmsgCreateDenom := tokenfactorytypes.NewMsgCreateDenom(contractAddr.String(), createDenom.Subdenom)\n\n\tif err := msgCreateDenom.ValidateBasic(); err != nil {\n\t\treturn nil, errorsmod.Wrap(err, \"failed validating MsgCreateDenom\")\n\t}\n\n\t// Create denom\n\tresp, err := msgServer.CreateDenom(\n\t\tsdk.WrapSDKContext(ctx),\n\t\tmsgCreateDenom,\n\t)\n\tif err != nil {\n\t\treturn nil, errorsmod.Wrap(err, \"creating denom\")\n\t}\n\n\tif createDenom.Metadata != nil {\n\t\tnewDenom := resp.NewTokenDenom\n\t\terr := PerformSetMetadata(f, b, ctx, contractAddr, newDenom, *createDenom.Metadata)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"setting metadata\")\n\t\t}\n\t}\n\n\treturn resp.Marshal()\n}\n\n// mintTokens mints tokens of a specified denom to an address.\nfunc (m *Messenger) mintTokens(ctx sdk.Context, contractAddr sdk.AccAddress, mint *bindingstypes.MintTokens) ([]sdk.Event, [][]byte, error) {\n\terr := PerformMint(m.tokenFactory, m.bank, ctx, contractAddr, mint)\n\tif err != nil {\n\t\treturn nil, nil, errorsmod.Wrap(err, \"perform mint\")\n\t}\n\treturn nil, nil, nil\n}\n\n// PerformMint used with mintTokens to validate the mint message and mint through token factory.\nfunc PerformMint(f *tokenfactorykeeper.Keeper, b bankkeeper.Keeper, ctx sdk.Context, contractAddr sdk.AccAddress, mint *bindingstypes.MintTokens) error {\n\tif mint == nil {\n\t\treturn wasmvmtypes.InvalidRequest{Err: \"mint token null mint\"}\n\t}\n\trcpt, err := parseAddress(mint.MintToAddress)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcoin := sdk.Coin{Denom: mint.Denom, Amount: mint.Amount}\n\tsdkMsg := tokenfactorytypes.NewMsgMint(contractAddr.String(), coin)\n\n\tif err = sdkMsg.ValidateBasic(); err != nil {\n\t\treturn err\n\t}\n\n\t// Mint through token factory / message server\n\tmsgServer := tokenfactorykeeper.NewMsgServerImpl(*f)\n\t_, err = msgServer.Mint(sdk.WrapSDKContext(ctx), sdkMsg)\n\tif err != nil {\n\t\treturn errorsmod.Wrap(err, \"minting coins from message\")\n\t}\n\n\tif b.BlockedAddr(rcpt) {\n\t\treturn errorsmod.Wrapf(err, \"minting coins to blocked address %s\", rcpt.String())\n\t}\n\n\terr = b.SendCoins(ctx, contractAddr, rcpt, sdk.NewCoins(coin))\n\tif err != nil {\n\t\treturn errorsmod.Wrap(err, \"sending newly minted coins from message\")\n\t}\n\treturn nil\n}\n\n// changeAdmin changes the admin.\nfunc (m *Messenger) changeAdmin(ctx sdk.Context, contractAddr sdk.AccAddress, changeAdmin *bindingstypes.ChangeAdmin) ([]sdk.Event, [][]byte, error) {\n\terr := ChangeAdmin(m.tokenFactory, ctx, contractAddr, changeAdmin)\n\tif err != nil {\n\t\treturn nil, nil, errorsmod.Wrap(err, \"failed to change admin\")\n\t}\n\treturn nil, nil, nil\n}\n\n// ChangeAdmin is used with changeAdmin to validate changeAdmin messages and to dispatch.\nfunc ChangeAdmin(f *tokenfactorykeeper.Keeper, ctx sdk.Context, contractAddr sdk.AccAddress, changeAdmin *bindingstypes.ChangeAdmin) error {\n\tif changeAdmin == nil {\n\t\treturn wasmvmtypes.InvalidRequest{Err: \"changeAdmin is nil\"}\n\t}\n\tnewAdminAddr, err := parseAddress(changeAdmin.NewAdminAddress)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tchangeAdminMsg := tokenfactorytypes.NewMsgChangeAdmin(contractAddr.String(), changeAdmin.Denom, newAdminAddr.String())\n\tif err := changeAdminMsg.ValidateBasic(); err != nil {\n\t\treturn err\n\t}\n\n\tmsgServer := tokenfactorykeeper.NewMsgServerImpl(*f)\n\t_, err = msgServer.ChangeAdmin(sdk.WrapSDKContext(ctx), changeAdminMsg)\n\tif err != nil {\n\t\treturn errorsmod.Wrap(err, \"failed changing admin from message\")\n\t}\n\treturn nil\n}\n\n// burnTokens burns tokens.\nfunc (m *Messenger) burnTokens(ctx sdk.Context, contractAddr sdk.AccAddress, burn *bindingstypes.BurnTokens) ([]sdk.Event, [][]byte, error) {\n\terr := PerformBurn(m.tokenFactory, ctx, contractAddr, burn)\n\tif err != nil {\n\t\treturn nil, nil, errorsmod.Wrap(err, \"perform burn\")\n\t}\n\treturn nil, nil, nil\n}\n\n// PerformBurn performs token burning after validating tokenBurn message.\nfunc PerformBurn(f *tokenfactorykeeper.Keeper, ctx sdk.Context, contractAddr sdk.AccAddress, burn *bindingstypes.BurnTokens) error {\n\tif burn == nil {\n\t\treturn wasmvmtypes.InvalidRequest{Err: \"burn token null mint\"}\n\t}\n\n\tcoin := sdk.Coin{Denom: burn.Denom, Amount: burn.Amount}\n\tsdkMsg := tokenfactorytypes.NewMsgBurn(contractAddr.String(), coin)\n\tif burn.BurnFromAddress != \"\" {\n\t\tsdkMsg = tokenfactorytypes.NewMsgBurnFrom(contractAddr.String(), coin, burn.BurnFromAddress)\n\t}\n\n\tif err := sdkMsg.ValidateBasic(); err != nil {\n\t\treturn err\n\t}\n\n\t// Burn through token factory / message server\n\tmsgServer := tokenfactorykeeper.NewMsgServerImpl(*f)\n\t_, err := msgServer.Burn(sdk.WrapSDKContext(ctx), sdkMsg)\n\tif err != nil {\n\t\treturn errorsmod.Wrap(err, \"burning coins from message\")\n\t}\n\treturn nil\n}\n\n// forceTransfer moves tokens.\nfunc (m *Messenger) forceTransfer(ctx sdk.Context, contractAddr sdk.AccAddress, forcetransfer *bindingstypes.ForceTransfer) ([]sdk.Event, [][]byte, error) {\n\terr := PerformForceTransfer(m.tokenFactory, ctx, contractAddr, forcetransfer)\n\tif err != nil {\n\t\treturn nil, nil, errorsmod.Wrap(err, \"perform force transfer\")\n\t}\n\treturn nil, nil, nil\n}\n\n// PerformForceTransfer performs token moving after validating tokenForceTransfer message.\nfunc PerformForceTransfer(f *tokenfactorykeeper.Keeper, ctx sdk.Context, contractAddr sdk.AccAddress, forcetransfer *bindingstypes.ForceTransfer) error {\n\tif forcetransfer == nil {\n\t\treturn wasmvmtypes.InvalidRequest{Err: \"force transfer null\"}\n\t}\n\n\t_, err := parseAddress(forcetransfer.FromAddress)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t_, err = parseAddress(forcetransfer.ToAddress)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcoin := sdk.Coin{Denom: forcetransfer.Denom, Amount: forcetransfer.Amount}\n\tsdkMsg := tokenfactorytypes.NewMsgForceTransfer(contractAddr.String(), coin, forcetransfer.FromAddress, forcetransfer.ToAddress)\n\n\tif err := sdkMsg.ValidateBasic(); err != nil {\n\t\treturn err\n\t}\n\n\t// Transfer through token factory / message server\n\tmsgServer := tokenfactorykeeper.NewMsgServerImpl(*f)\n\t_, err = msgServer.ForceTransfer(sdk.WrapSDKContext(ctx), sdkMsg)\n\tif err != nil {\n\t\treturn errorsmod.Wrap(err, \"force transferring from message\")\n\t}\n\treturn nil\n}\n\n// createDenom creates a new token denom\nfunc (m *Messenger) setMetadata(ctx sdk.Context, contractAddr sdk.AccAddress, setMetadata *bindingstypes.SetMetadata) ([]sdk.Event, [][]byte, error) {\n\terr := PerformSetMetadata(m.tokenFactory, m.bank, ctx, contractAddr, setMetadata.Denom, setMetadata.Metadata)\n\tif err != nil {\n\t\treturn nil, nil, errorsmod.Wrap(err, \"perform create denom\")\n\t}\n\treturn nil, nil, nil\n}\n\n// PerformSetMetadata is used with setMetadata to add new metadata\n// It also is called inside CreateDenom if optional metadata field is set\nfunc PerformSetMetadata(f *tokenfactorykeeper.Keeper, b bankkeeper.Keeper, ctx sdk.Context, contractAddr sdk.AccAddress, denom string, metadata bindingstypes.Metadata) error {\n\t// ensure contract address is admin of denom\n\tauth, err := f.GetAuthorityMetadata(ctx, denom)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif auth.Admin != contractAddr.String() {\n\t\treturn wasmvmtypes.InvalidRequest{Err: \"only admin can set metadata\"}\n\t}\n\n\t// ensure we are setting proper denom metadata (bank uses Base field, fill it if missing)\n\tif metadata.Base == \"\" {\n\t\tmetadata.Base = denom\n\t} else if metadata.Base != denom {\n\t\t// this is the key that we set\n\t\treturn wasmvmtypes.InvalidRequest{Err: \"Base must be the same as denom\"}\n\t}\n\n\t// Create and validate the metadata\n\tbankMetadata := WasmMetadataToSdk(metadata)\n\tif err := bankMetadata.Validate(); err != nil {\n\t\treturn err\n\t}\n\n\tb.SetDenomMetaData(ctx, bankMetadata)\n\treturn nil\n}\n\n// GetFullDenom is a function, not method, so the message_plugin can use it\nfunc GetFullDenom(contract string, subDenom string) (string, error) {\n\t// Address validation\n\tif _, err := parseAddress(contract); err != nil {\n\t\treturn \"\", err\n\t}\n\tfullDenom, err := tokenfactorytypes.GetTokenDenom(contract, subDenom)\n\tif err != nil {\n\t\treturn \"\", errorsmod.Wrap(err, \"validate sub-denom\")\n\t}\n\n\treturn fullDenom, nil\n}\n\n// parseAddress parses address from bech32 string and verifies its format.\nfunc parseAddress(addr string) (sdk.AccAddress, error) {\n\tparsed, err := sdk.AccAddressFromBech32(addr)\n\tif err != nil {\n\t\treturn nil, errorsmod.Wrap(err, \"address from bech32\")\n\t}\n\terr = sdk.VerifyAddressFormat(parsed)\n\tif err != nil {\n\t\treturn nil, errorsmod.Wrap(err, \"verify address format\")\n\t}\n\treturn parsed, nil\n}\n\nfunc WasmMetadataToSdk(metadata bindingstypes.Metadata) banktypes.Metadata {\n\tdenoms := []*banktypes.DenomUnit{}\n\tfor _, unit := range metadata.DenomUnits {\n\t\tdenoms = append(denoms, &banktypes.DenomUnit{\n\t\t\tDenom:    unit.Denom,\n\t\t\tExponent: unit.Exponent,\n\t\t\tAliases:  unit.Aliases,\n\t\t})\n\t}\n\treturn banktypes.Metadata{\n\t\tDescription: metadata.Description,\n\t\tDisplay:     metadata.Display,\n\t\tBase:        metadata.Base,\n\t\tName:        metadata.Name,\n\t\tSymbol:      metadata.Symbol,\n\t\tDenomUnits:  denoms,\n\t}\n}\n\nfunc SdkMetadataToWasm(metadata banktypes.Metadata) *bindingstypes.Metadata {\n\tdenoms := []bindingstypes.DenomUnit{}\n\tfor _, unit := range metadata.DenomUnits {\n\t\tdenoms = append(denoms, bindingstypes.DenomUnit{\n\t\t\tDenom:    unit.Denom,\n\t\t\tExponent: unit.Exponent,\n\t\t\tAliases:  unit.Aliases,\n\t\t})\n\t}\n\treturn &bindingstypes.Metadata{\n\t\tDescription: metadata.Description,\n\t\tDisplay:     metadata.Display,\n\t\tBase:        metadata.Base,\n\t\tName:        metadata.Name,\n\t\tSymbol:      metadata.Symbol,\n\t\tDenomUnits:  denoms,\n\t}\n}\n"
  },
  {
    "path": "x/tokenfactory/wasm/queries.go",
    "content": "package wasm\n\nimport (\n\t\"fmt\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tbankkeeper \"github.com/cosmos/cosmos-sdk/x/bank/keeper\"\n\n\ttokenfactorykeeper \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/keeper\"\n\tbindingstypes \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/wasm/types\"\n)\n\ntype Querier struct {\n\tbankKeeper         bankkeeper.Keeper\n\ttokenFactoryKeeper *tokenfactorykeeper.Keeper\n}\n\nfunc NewWasmQuerier(b bankkeeper.Keeper, tfk *tokenfactorykeeper.Keeper) *Querier {\n\treturn &Querier{\n\t\tbankKeeper:         b,\n\t\ttokenFactoryKeeper: tfk,\n\t}\n}\n\n// GetDenomAdmin is a query to get denom admin.\nfunc (querier *Querier) GetDenomAdmin(ctx sdk.Context, denom string) (*bindingstypes.AdminResponse, error) {\n\tmetadata, err := querier.tokenFactoryKeeper.GetAuthorityMetadata(ctx, denom)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to get admin for denom: %s\", denom)\n\t}\n\treturn &bindingstypes.AdminResponse{Admin: metadata.Admin}, nil\n}\n\nfunc (querier *Querier) GetDenomsByCreator(ctx sdk.Context, creator string) (*bindingstypes.DenomsByCreatorResponse, error) {\n\t// TODO: validate creator address\n\tdenoms := querier.tokenFactoryKeeper.GetDenomsFromCreator(ctx, creator)\n\treturn &bindingstypes.DenomsByCreatorResponse{Denoms: denoms}, nil\n}\n\nfunc (querier *Querier) GetMetadata(ctx sdk.Context, denom string) (*bindingstypes.MetadataResponse, error) {\n\tmetadata, found := querier.bankKeeper.GetDenomMetaData(ctx, denom)\n\tvar parsed *bindingstypes.Metadata\n\tif found {\n\t\tparsed = SdkMetadataToWasm(metadata)\n\t}\n\treturn &bindingstypes.MetadataResponse{Metadata: parsed}, nil\n}\n\nfunc (querier *Querier) GetParams(ctx sdk.Context) (*bindingstypes.ParamsResponse, error) {\n\tparams := querier.tokenFactoryKeeper.GetParams(ctx)\n\treturn &bindingstypes.ParamsResponse{\n\t\tParams: bindingstypes.Params{\n\t\t\tDenomCreationFee: ConvertSdkCoinsToWasmCoins(params.DenomCreationFee),\n\t\t},\n\t}, nil\n}\n"
  },
  {
    "path": "x/tokenfactory/wasm/query_plugin.go",
    "content": "package wasm\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\tpluginstypes \"github.com/cybercongress/go-cyber/v7/plugins/types\"\n\n\twasmvmtypes \"github.com/CosmWasm/wasmvm/types\"\n\n\terrorsmod \"cosmossdk.io/errors\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\tbindingstypes \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/wasm/types\"\n)\n\n// CustomQuerier dispatches custom CosmWasm wasm queries.\nfunc (querier *Querier) HandleQuery(ctx sdk.Context, query pluginstypes.CyberQuery) ([]byte, error) {\n\t//var contractQuery = query.TokenFactory\n\n\tswitch {\n\tcase query.FullDenom != nil:\n\t\tcreator := query.FullDenom.CreatorAddr\n\t\tsubdenom := query.FullDenom.Subdenom\n\n\t\tfullDenom, err := GetFullDenom(creator, subdenom)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"osmo full denom query\")\n\t\t}\n\n\t\tres := bindingstypes.FullDenomResponse{\n\t\t\tDenom: fullDenom,\n\t\t}\n\n\t\tbz, err := json.Marshal(res)\n\t\tif err != nil {\n\t\t\treturn nil, errorsmod.Wrap(err, \"failed to marshal FullDenomResponse\")\n\t\t}\n\n\t\treturn bz, nil\n\n\tcase query.Admin != nil:\n\t\tres, err := querier.GetDenomAdmin(ctx, query.Admin.Denom)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tbz, err := json.Marshal(res)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to JSON marshal AdminResponse: %w\", err)\n\t\t}\n\n\t\treturn bz, nil\n\n\tcase query.Metadata != nil:\n\t\tres, err := querier.GetMetadata(ctx, query.Metadata.Denom)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tbz, err := json.Marshal(res)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to JSON marshal MetadataResponse: %w\", err)\n\t\t}\n\n\t\treturn bz, nil\n\n\tcase query.DenomsByCreator != nil:\n\t\tres, err := querier.GetDenomsByCreator(ctx, query.DenomsByCreator.Creator)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tbz, err := json.Marshal(res)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to JSON marshal DenomsByCreatorResponse: %w\", err)\n\t\t}\n\n\t\treturn bz, nil\n\n\tcase query.Params != nil:\n\t\tres, err := querier.GetParams(ctx)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tbz, err := json.Marshal(res)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to JSON marshal ParamsResponse: %w\", err)\n\t\t}\n\n\t\treturn bz, nil\n\n\tdefault:\n\t\treturn nil, pluginstypes.ErrHandleQuery\n\t}\n\t//}\n}\n\n// ConvertSdkCoinsToWasmCoins converts sdk type coins to wasm vm type coins\nfunc ConvertSdkCoinsToWasmCoins(coins []sdk.Coin) wasmvmtypes.Coins {\n\tvar toSend wasmvmtypes.Coins\n\tfor _, coin := range coins {\n\t\tc := ConvertSdkCoinToWasmCoin(coin)\n\t\ttoSend = append(toSend, c)\n\t}\n\treturn toSend\n}\n\n// ConvertSdkCoinToWasmCoin converts a sdk type coin to a wasm vm type coin\nfunc ConvertSdkCoinToWasmCoin(coin sdk.Coin) wasmvmtypes.Coin {\n\treturn wasmvmtypes.Coin{\n\t\tDenom: coin.Denom,\n\t\t// Note: tokenfactory tokens have 18 decimal places, so 10^22 is common, no longer in u64 range\n\t\tAmount: coin.Amount.String(),\n\t}\n}\n"
  },
  {
    "path": "x/tokenfactory/wasm/types/msg.go",
    "content": "package types\n\nimport \"cosmossdk.io/math\"\n\ntype TokenFactoryMsg struct {\n\t/// Contracts can create denoms, namespaced under the contract's address.\n\t/// A contract may create any number of independent sub-denoms.\n\tCreateDenom *CreateDenom `json:\"create_denom,omitempty\"`\n\t/// Contracts can change the admin of a denom that they are the admin of.\n\tChangeAdmin *ChangeAdmin `json:\"change_admin,omitempty\"`\n\t/// Contracts can mint native tokens for an existing factory denom\n\t/// that they are the admin of.\n\tMintTokens *MintTokens `json:\"mint_tokens,omitempty\"`\n\t/// Contracts can burn native tokens for an existing factory denom\n\t/// that they are the admin of.\n\t/// Currently, the burn from address must be the admin contract.\n\tBurnTokens *BurnTokens `json:\"burn_tokens,omitempty\"`\n\t/// Sets the metadata on a denom which the contract controls\n\tSetMetadata *SetMetadata `json:\"set_metadata,omitempty\"`\n\t/// Forces a transfer of tokens from one address to another.\n\tForceTransfer *ForceTransfer `json:\"force_transfer,omitempty\"`\n}\n\n// CreateDenom creates a new factory denom, of denomination:\n// factory/{creating contract address}/{Subdenom}\n// Subdenom can be of length at most 44 characters, in [0-9a-zA-Z./]\n// The (creating contract address, subdenom) pair must be unique.\n// The created denom's admin is the creating contract address,\n// but this admin can be changed using the ChangeAdmin binding.\ntype CreateDenom struct {\n\tSubdenom string    `json:\"subdenom\"`\n\tMetadata *Metadata `json:\"metadata,omitempty\"`\n}\n\n// ChangeAdmin changes the admin for a factory denom.\n// If the NewAdminAddress is empty, the denom has no admin.\ntype ChangeAdmin struct {\n\tDenom           string `json:\"denom\"`\n\tNewAdminAddress string `json:\"new_admin_address\"`\n}\n\ntype MintTokens struct {\n\tDenom         string   `json:\"denom\"`\n\tAmount        math.Int `json:\"amount\"`\n\tMintToAddress string   `json:\"mint_to_address\"`\n}\n\ntype BurnTokens struct {\n\tDenom           string   `json:\"denom\"`\n\tAmount          math.Int `json:\"amount\"`\n\tBurnFromAddress string   `json:\"burn_from_address\"`\n}\n\ntype SetMetadata struct {\n\tDenom    string   `json:\"denom\"`\n\tMetadata Metadata `json:\"metadata\"`\n}\n\ntype ForceTransfer struct {\n\tDenom       string   `json:\"denom\"`\n\tAmount      math.Int `json:\"amount\"`\n\tFromAddress string   `json:\"from_address\"`\n\tToAddress   string   `json:\"to_address\"`\n}\n"
  },
  {
    "path": "x/tokenfactory/wasm/types/query.go",
    "content": "package types\n\n// See https://github.com/CosmWasm/token-bindings/blob/main/packages/bindings/src/query.rs\ntype TokenFactoryQuery struct {\n\t/// Given a subdenom minted by a contract via `OsmosisMsg::MintTokens`,\n\t/// returns the full denom as used by `BankMsg::Send`.\n\tFullDenom       *FullDenom       `json:\"full_denom,omitempty\"`\n\tAdmin           *DenomAdmin      `json:\"admin,omitempty\"`\n\tMetadata        *GetMetadata     `json:\"metadata,omitempty\"`\n\tDenomsByCreator *DenomsByCreator `json:\"denoms_by_creator,omitempty\"`\n\tParams          *GetParams       `json:\"params,omitempty\"`\n}\n\n// query types\n\ntype FullDenom struct {\n\tCreatorAddr string `json:\"creator_addr\"`\n\tSubdenom    string `json:\"subdenom\"`\n}\n\ntype GetMetadata struct {\n\tDenom string `json:\"denom\"`\n}\n\ntype DenomAdmin struct {\n\tDenom string `json:\"denom\"`\n}\n\ntype DenomsByCreator struct {\n\tCreator string `json:\"creator\"`\n}\n\ntype GetParams struct{}\n\n// responses\n\ntype FullDenomResponse struct {\n\tDenom string `json:\"denom\"`\n}\n\ntype AdminResponse struct {\n\tAdmin string `json:\"admin\"`\n}\n\ntype MetadataResponse struct {\n\tMetadata *Metadata `json:\"metadata,omitempty\"`\n}\n\ntype DenomsByCreatorResponse struct {\n\tDenoms []string `json:\"denoms\"`\n}\n\ntype ParamsResponse struct {\n\tParams Params `json:\"params\"`\n}\n"
  },
  {
    "path": "x/tokenfactory/wasm/types/types.go",
    "content": "package types\n\nimport (\n\twasmvmtypes \"github.com/CosmWasm/wasmvm/types\"\n)\n\ntype Metadata struct {\n\tDescription string `json:\"description\"`\n\t// DenomUnits represents the list of DenomUnit's for a given coin\n\tDenomUnits []DenomUnit `json:\"denom_units\"`\n\t// Base represents the base denom (should be the DenomUnit with exponent = 0).\n\tBase string `json:\"base\"`\n\t// Display indicates the suggested denom that should be displayed in clients.\n\tDisplay string `json:\"display\"`\n\t// Name defines the name of the token (eg: Cosmos Atom)\n\tName string `json:\"name\"`\n\t// Symbol is the token symbol usually shown on exchanges (eg: ATOM).\n\t// This can be the same as the display.\n\tSymbol string `json:\"symbol\"`\n}\n\ntype DenomUnit struct {\n\t// Denom represents the string name of the given denom unit (e.g uatom).\n\tDenom string `json:\"denom\"`\n\t// Exponent represents power of 10 exponent that one must\n\t// raise the base_denom to in order to equal the given DenomUnit's denom\n\t// 1 denom = 1^exponent base_denom\n\t// (e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' with\n\t// exponent = 6, thus: 1 atom = 10^6 uatom).\n\tExponent uint32 `json:\"exponent\"`\n\t// Aliases is a list of string aliases for the given denom\n\tAliases []string `json:\"aliases\"`\n}\n\ntype Params struct {\n\tDenomCreationFee []wasmvmtypes.Coin `json:\"denom_creation_fee\"`\n}\n"
  },
  {
    "path": "x/tokenfactory/wasm/validate_msg_test.go",
    "content": "package wasm_test\n\nimport (\n\t\"fmt\"\n\tbindings \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/wasm/types\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/require\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/cybercongress/go-cyber/v7/x/tokenfactory/types\"\n\twasmbinding \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/wasm\"\n)\n\nfunc TestCreateDenom(t *testing.T) {\n\tactor := RandomAccountAddress()\n\tjunoapp, ctx := SetupCustomApp(t, actor)\n\n\t// Fund actor with 100 base denom creation fees\n\tactorAmount := sdk.NewCoins(sdk.NewCoin(types.DefaultParams().DenomCreationFee[0].Denom, types.DefaultParams().DenomCreationFee[0].Amount.MulRaw(100)))\n\tfundAccount(t, ctx, junoapp, actor, actorAmount)\n\n\tspecs := map[string]struct {\n\t\tcreateDenom *bindings.CreateDenom\n\t\texpErr      bool\n\t}{\n\t\t\"valid sub-denom\": {\n\t\t\tcreateDenom: &bindings.CreateDenom{\n\t\t\t\tSubdenom: \"MOON\",\n\t\t\t},\n\t\t},\n\t\t\"empty sub-denom\": {\n\t\t\tcreateDenom: &bindings.CreateDenom{\n\t\t\t\tSubdenom: \"\",\n\t\t\t},\n\t\t\texpErr: false,\n\t\t},\n\t\t\"invalid sub-denom\": {\n\t\t\tcreateDenom: &bindings.CreateDenom{\n\t\t\t\tSubdenom: \"sub-denom_2\",\n\t\t\t},\n\t\t\texpErr: false,\n\t\t},\n\t\t\"null create denom\": {\n\t\t\tcreateDenom: nil,\n\t\t\texpErr:      true,\n\t\t},\n\t}\n\tfor name, spec := range specs {\n\t\tt.Run(name, func(t *testing.T) {\n\t\t\t// when\n\t\t\t_, gotErr := wasmbinding.PerformCreateDenom(&junoapp.AppKeepers.TokenFactoryKeeper, junoapp.AppKeepers.BankKeeper, ctx, actor, spec.createDenom)\n\t\t\t// then\n\t\t\tif spec.expErr {\n\t\t\t\tt.Logf(\"validate_msg_test got error: %v\", gotErr)\n\t\t\t\trequire.Error(t, gotErr)\n\t\t\t\treturn\n\t\t\t}\n\t\t\trequire.NoError(t, gotErr)\n\t\t})\n\t}\n}\n\nfunc TestChangeAdmin(t *testing.T) {\n\tconst validDenom = \"validdenom\"\n\n\ttokenCreator := RandomAccountAddress()\n\n\tspecs := map[string]struct {\n\t\tactor       sdk.AccAddress\n\t\tchangeAdmin *bindings.ChangeAdmin\n\n\t\texpErrMsg string\n\t}{\n\t\t\"valid\": {\n\t\t\tchangeAdmin: &bindings.ChangeAdmin{\n\t\t\t\tDenom:           fmt.Sprintf(\"factory/%s/%s\", tokenCreator.String(), validDenom),\n\t\t\t\tNewAdminAddress: RandomBech32AccountAddress(),\n\t\t\t},\n\t\t\tactor: tokenCreator,\n\t\t},\n\t\t\"typo in factory in denom name\": {\n\t\t\tchangeAdmin: &bindings.ChangeAdmin{\n\t\t\t\tDenom:           fmt.Sprintf(\"facory/%s/%s\", tokenCreator.String(), validDenom),\n\t\t\t\tNewAdminAddress: RandomBech32AccountAddress(),\n\t\t\t},\n\t\t\tactor:     tokenCreator,\n\t\t\texpErrMsg: \"denom prefix is incorrect. Is: facory.  Should be: factory: invalid denom\",\n\t\t},\n\t\t\"invalid address in denom\": {\n\t\t\tchangeAdmin: &bindings.ChangeAdmin{\n\t\t\t\tDenom:           fmt.Sprintf(\"factory/%s/%s\", RandomBech32AccountAddress(), validDenom),\n\t\t\t\tNewAdminAddress: RandomBech32AccountAddress(),\n\t\t\t},\n\t\t\tactor:     tokenCreator,\n\t\t\texpErrMsg: \"failed changing admin from message: unauthorized account\",\n\t\t},\n\t\t\"other denom name in 3 part name\": {\n\t\t\tchangeAdmin: &bindings.ChangeAdmin{\n\t\t\t\tDenom:           fmt.Sprintf(\"factory/%s/%s\", tokenCreator.String(), \"invalid denom\"),\n\t\t\t\tNewAdminAddress: RandomBech32AccountAddress(),\n\t\t\t},\n\t\t\tactor:     tokenCreator,\n\t\t\texpErrMsg: fmt.Sprintf(\"invalid denom: factory/%s/invalid denom\", tokenCreator.String()),\n\t\t},\n\t\t\"empty denom\": {\n\t\t\tchangeAdmin: &bindings.ChangeAdmin{\n\t\t\t\tDenom:           \"\",\n\t\t\t\tNewAdminAddress: RandomBech32AccountAddress(),\n\t\t\t},\n\t\t\tactor:     tokenCreator,\n\t\t\texpErrMsg: \"invalid denom: \",\n\t\t},\n\t\t\"empty address\": {\n\t\t\tchangeAdmin: &bindings.ChangeAdmin{\n\t\t\t\tDenom:           fmt.Sprintf(\"factory/%s/%s\", tokenCreator.String(), validDenom),\n\t\t\t\tNewAdminAddress: \"\",\n\t\t\t},\n\t\t\tactor:     tokenCreator,\n\t\t\texpErrMsg: \"address from bech32: empty address string is not allowed\",\n\t\t},\n\t\t\"creator is a different address\": {\n\t\t\tchangeAdmin: &bindings.ChangeAdmin{\n\t\t\t\tDenom:           fmt.Sprintf(\"factory/%s/%s\", tokenCreator.String(), validDenom),\n\t\t\t\tNewAdminAddress: RandomBech32AccountAddress(),\n\t\t\t},\n\t\t\tactor:     RandomAccountAddress(),\n\t\t\texpErrMsg: \"failed changing admin from message: unauthorized account\",\n\t\t},\n\t\t\"change to the same address\": {\n\t\t\tchangeAdmin: &bindings.ChangeAdmin{\n\t\t\t\tDenom:           fmt.Sprintf(\"factory/%s/%s\", tokenCreator.String(), validDenom),\n\t\t\t\tNewAdminAddress: tokenCreator.String(),\n\t\t\t},\n\t\t\tactor: tokenCreator,\n\t\t},\n\t\t\"nil binding\": {\n\t\t\tactor:     tokenCreator,\n\t\t\texpErrMsg: \"invalid request: changeAdmin is nil - original request: \",\n\t\t},\n\t}\n\tfor name, spec := range specs {\n\t\tt.Run(name, func(t *testing.T) {\n\t\t\t// Setup\n\t\t\tjunoapp, ctx := SetupCustomApp(t, tokenCreator)\n\n\t\t\t// Fund actor with 100 base denom creation fees\n\t\t\tactorAmount := sdk.NewCoins(sdk.NewCoin(types.DefaultParams().DenomCreationFee[0].Denom, types.DefaultParams().DenomCreationFee[0].Amount.MulRaw(100)))\n\t\t\tfundAccount(t, ctx, junoapp, tokenCreator, actorAmount)\n\n\t\t\t_, err := wasmbinding.PerformCreateDenom(&junoapp.AppKeepers.TokenFactoryKeeper, junoapp.AppKeepers.BankKeeper, ctx, tokenCreator, &bindings.CreateDenom{\n\t\t\t\tSubdenom: validDenom,\n\t\t\t})\n\t\t\trequire.NoError(t, err)\n\n\t\t\terr = wasmbinding.ChangeAdmin(&junoapp.AppKeepers.TokenFactoryKeeper, ctx, spec.actor, spec.changeAdmin)\n\t\t\tif len(spec.expErrMsg) > 0 {\n\t\t\t\trequire.Error(t, err)\n\t\t\t\tactualErrMsg := err.Error()\n\t\t\t\trequire.Equal(t, spec.expErrMsg, actualErrMsg)\n\t\t\t\treturn\n\t\t\t}\n\t\t\trequire.NoError(t, err)\n\t\t})\n\t}\n}\n\nfunc TestMint(t *testing.T) {\n\tcreator := RandomAccountAddress()\n\tjunoapp, ctx := SetupCustomApp(t, creator)\n\n\t// Fund actor with 100 base denom creation fees\n\ttokenCreationFeeAmt := sdk.NewCoins(sdk.NewCoin(types.DefaultParams().DenomCreationFee[0].Denom, types.DefaultParams().DenomCreationFee[0].Amount.MulRaw(100)))\n\tfundAccount(t, ctx, junoapp, creator, tokenCreationFeeAmt)\n\n\t// Create denoms for valid mint tests\n\tvalidDenom := bindings.CreateDenom{\n\t\tSubdenom: \"MOON\",\n\t}\n\t_, err := wasmbinding.PerformCreateDenom(&junoapp.AppKeepers.TokenFactoryKeeper, junoapp.AppKeepers.BankKeeper, ctx, creator, &validDenom)\n\trequire.NoError(t, err)\n\n\temptyDenom := bindings.CreateDenom{\n\t\tSubdenom: \"\",\n\t}\n\t_, err = wasmbinding.PerformCreateDenom(&junoapp.AppKeepers.TokenFactoryKeeper, junoapp.AppKeepers.BankKeeper, ctx, creator, &emptyDenom)\n\trequire.NoError(t, err)\n\n\tvalidDenomStr := fmt.Sprintf(\"factory/%s/%s\", creator.String(), validDenom.Subdenom)\n\temptyDenomStr := fmt.Sprintf(\"factory/%s/%s\", creator.String(), emptyDenom.Subdenom)\n\n\tlucky := RandomAccountAddress()\n\n\t// lucky was broke\n\tbalances := junoapp.AppKeepers.BankKeeper.GetAllBalances(ctx, lucky)\n\trequire.Empty(t, balances)\n\n\tamount, ok := sdk.NewIntFromString(\"8080\")\n\trequire.True(t, ok)\n\n\tspecs := map[string]struct {\n\t\tmint   *bindings.MintTokens\n\t\texpErr bool\n\t}{\n\t\t\"valid mint\": {\n\t\t\tmint: &bindings.MintTokens{\n\t\t\t\tDenom:         validDenomStr,\n\t\t\t\tAmount:        amount,\n\t\t\t\tMintToAddress: lucky.String(),\n\t\t\t},\n\t\t},\n\t\t\"empty sub-denom\": {\n\t\t\tmint: &bindings.MintTokens{\n\t\t\t\tDenom:         emptyDenomStr,\n\t\t\t\tAmount:        amount,\n\t\t\t\tMintToAddress: lucky.String(),\n\t\t\t},\n\t\t\texpErr: false,\n\t\t},\n\t\t\"nonexistent sub-denom\": {\n\t\t\tmint: &bindings.MintTokens{\n\t\t\t\tDenom:         fmt.Sprintf(\"factory/%s/%s\", creator.String(), \"SUN\"),\n\t\t\t\tAmount:        amount,\n\t\t\t\tMintToAddress: lucky.String(),\n\t\t\t},\n\t\t\texpErr: true,\n\t\t},\n\t\t\"invalid sub-denom\": {\n\t\t\tmint: &bindings.MintTokens{\n\t\t\t\tDenom:         \"sub-denom_2\",\n\t\t\t\tAmount:        amount,\n\t\t\t\tMintToAddress: lucky.String(),\n\t\t\t},\n\t\t\texpErr: true,\n\t\t},\n\t\t\"zero amount\": {\n\t\t\tmint: &bindings.MintTokens{\n\t\t\t\tDenom:         validDenomStr,\n\t\t\t\tAmount:        sdk.ZeroInt(),\n\t\t\t\tMintToAddress: lucky.String(),\n\t\t\t},\n\t\t\texpErr: true,\n\t\t},\n\t\t\"negative amount\": {\n\t\t\tmint: &bindings.MintTokens{\n\t\t\t\tDenom:         validDenomStr,\n\t\t\t\tAmount:        amount.Neg(),\n\t\t\t\tMintToAddress: lucky.String(),\n\t\t\t},\n\t\t\texpErr: true,\n\t\t},\n\t\t\"empty recipient\": {\n\t\t\tmint: &bindings.MintTokens{\n\t\t\t\tDenom:         validDenomStr,\n\t\t\t\tAmount:        amount,\n\t\t\t\tMintToAddress: \"\",\n\t\t\t},\n\t\t\texpErr: true,\n\t\t},\n\t\t\"invalid recipient\": {\n\t\t\tmint: &bindings.MintTokens{\n\t\t\t\tDenom:         validDenomStr,\n\t\t\t\tAmount:        amount,\n\t\t\t\tMintToAddress: \"invalid\",\n\t\t\t},\n\t\t\texpErr: true,\n\t\t},\n\t\t\"null mint\": {\n\t\t\tmint:   nil,\n\t\t\texpErr: true,\n\t\t},\n\t}\n\tfor name, spec := range specs {\n\t\tt.Run(name, func(t *testing.T) {\n\t\t\t// when\n\t\t\tgotErr := wasmbinding.PerformMint(&junoapp.AppKeepers.TokenFactoryKeeper, junoapp.AppKeepers.BankKeeper, ctx, creator, spec.mint)\n\t\t\t// then\n\t\t\tif spec.expErr {\n\t\t\t\trequire.Error(t, gotErr)\n\t\t\t\treturn\n\t\t\t}\n\t\t\trequire.NoError(t, gotErr)\n\t\t})\n\t}\n}\n\nfunc TestBurn(t *testing.T) {\n\tcreator := RandomAccountAddress()\n\tjunoapp, ctx := SetupCustomApp(t, creator)\n\n\t// Fund actor with 100 base denom creation fees\n\ttokenCreationFeeAmt := sdk.NewCoins(sdk.NewCoin(types.DefaultParams().DenomCreationFee[0].Denom, types.DefaultParams().DenomCreationFee[0].Amount.MulRaw(100)))\n\tfundAccount(t, ctx, junoapp, creator, tokenCreationFeeAmt)\n\n\t// Create denoms for valid burn tests\n\tvalidDenom := bindings.CreateDenom{\n\t\tSubdenom: \"MOON\",\n\t}\n\t_, err := wasmbinding.PerformCreateDenom(&junoapp.AppKeepers.TokenFactoryKeeper, junoapp.AppKeepers.BankKeeper, ctx, creator, &validDenom)\n\trequire.NoError(t, err)\n\n\temptyDenom := bindings.CreateDenom{\n\t\tSubdenom: \"\",\n\t}\n\t_, err = wasmbinding.PerformCreateDenom(&junoapp.AppKeepers.TokenFactoryKeeper, junoapp.AppKeepers.BankKeeper, ctx, creator, &emptyDenom)\n\trequire.NoError(t, err)\n\n\tlucky := RandomAccountAddress()\n\n\t// lucky was broke\n\tbalances := junoapp.AppKeepers.BankKeeper.GetAllBalances(ctx, lucky)\n\trequire.Empty(t, balances)\n\n\tvalidDenomStr := fmt.Sprintf(\"factory/%s/%s\", creator.String(), validDenom.Subdenom)\n\temptyDenomStr := fmt.Sprintf(\"factory/%s/%s\", creator.String(), emptyDenom.Subdenom)\n\tmintAmount, ok := sdk.NewIntFromString(\"8080\")\n\trequire.True(t, ok)\n\n\tspecs := map[string]struct {\n\t\tburn   *bindings.BurnTokens\n\t\texpErr bool\n\t}{\n\t\t\"valid burn\": {\n\t\t\tburn: &bindings.BurnTokens{\n\t\t\t\tDenom:           validDenomStr,\n\t\t\t\tAmount:          mintAmount,\n\t\t\t\tBurnFromAddress: creator.String(),\n\t\t\t},\n\t\t\texpErr: false,\n\t\t},\n\t\t\"non admin address\": {\n\t\t\tburn: &bindings.BurnTokens{\n\t\t\t\tDenom:           validDenomStr,\n\t\t\t\tAmount:          mintAmount,\n\t\t\t\tBurnFromAddress: lucky.String(),\n\t\t\t},\n\t\t\texpErr: true,\n\t\t},\n\t\t\"empty sub-denom\": {\n\t\t\tburn: &bindings.BurnTokens{\n\t\t\t\tDenom:           emptyDenomStr,\n\t\t\t\tAmount:          mintAmount,\n\t\t\t\tBurnFromAddress: creator.String(),\n\t\t\t},\n\t\t\texpErr: false,\n\t\t},\n\t\t\"invalid sub-denom\": {\n\t\t\tburn: &bindings.BurnTokens{\n\t\t\t\tDenom:           \"sub-denom_2\",\n\t\t\t\tAmount:          mintAmount,\n\t\t\t\tBurnFromAddress: creator.String(),\n\t\t\t},\n\t\t\texpErr: true,\n\t\t},\n\t\t\"non-minted denom\": {\n\t\t\tburn: &bindings.BurnTokens{\n\t\t\t\tDenom:           fmt.Sprintf(\"factory/%s/%s\", creator.String(), \"SUN\"),\n\t\t\t\tAmount:          mintAmount,\n\t\t\t\tBurnFromAddress: creator.String(),\n\t\t\t},\n\t\t\texpErr: true,\n\t\t},\n\t\t\"zero amount\": {\n\t\t\tburn: &bindings.BurnTokens{\n\t\t\t\tDenom:           validDenomStr,\n\t\t\t\tAmount:          sdk.ZeroInt(),\n\t\t\t\tBurnFromAddress: creator.String(),\n\t\t\t},\n\t\t\texpErr: true,\n\t\t},\n\t\t\"negative amount\": {\n\t\t\tburn:   nil,\n\t\t\texpErr: true,\n\t\t},\n\t\t\"null burn\": {\n\t\t\tburn: &bindings.BurnTokens{\n\t\t\t\tDenom:           validDenomStr,\n\t\t\t\tAmount:          mintAmount.Neg(),\n\t\t\t\tBurnFromAddress: creator.String(),\n\t\t\t},\n\t\t\texpErr: true,\n\t\t},\n\t}\n\n\tfor name, spec := range specs {\n\t\tt.Run(name, func(t *testing.T) {\n\t\t\t// Mint valid denom str and empty denom string for burn test\n\t\t\tmintBinding := &bindings.MintTokens{\n\t\t\t\tDenom:         validDenomStr,\n\t\t\t\tAmount:        mintAmount,\n\t\t\t\tMintToAddress: creator.String(),\n\t\t\t}\n\t\t\terr := wasmbinding.PerformMint(&junoapp.AppKeepers.TokenFactoryKeeper, junoapp.AppKeepers.BankKeeper, ctx, creator, mintBinding)\n\t\t\trequire.NoError(t, err)\n\n\t\t\temptyDenomMintBinding := &bindings.MintTokens{\n\t\t\t\tDenom:         emptyDenomStr,\n\t\t\t\tAmount:        mintAmount,\n\t\t\t\tMintToAddress: creator.String(),\n\t\t\t}\n\t\t\terr = wasmbinding.PerformMint(&junoapp.AppKeepers.TokenFactoryKeeper, junoapp.AppKeepers.BankKeeper, ctx, creator, emptyDenomMintBinding)\n\t\t\trequire.NoError(t, err)\n\n\t\t\t// when\n\t\t\tgotErr := wasmbinding.PerformBurn(&junoapp.AppKeepers.TokenFactoryKeeper, ctx, creator, spec.burn)\n\t\t\t// then\n\t\t\tif spec.expErr {\n\t\t\t\trequire.Error(t, gotErr)\n\t\t\t\treturn\n\t\t\t}\n\t\t\trequire.NoError(t, gotErr)\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "x/tokenfactory/wasm/validate_queries_test.go",
    "content": "package wasm_test\n\nimport (\n\t\"fmt\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\twasmbinding \"github.com/cybercongress/go-cyber/v7/x/tokenfactory/wasm\"\n\t\"github.com/stretchr/testify/assert\"\n\t\"github.com/stretchr/testify/require\"\n\t\"testing\"\n)\n\nfunc TestFullDenom(t *testing.T) {\n\tactor := RandomAccountAddress()\n\n\tspecs := map[string]struct {\n\t\taddr         string\n\t\tsubdenom     string\n\t\texpFullDenom string\n\t\texpErr       bool\n\t}{\n\t\t\"valid address\": {\n\t\t\taddr:         actor.String(),\n\t\t\tsubdenom:     \"subDenom1\",\n\t\t\texpFullDenom: fmt.Sprintf(\"factory/%s/subDenom1\", actor.String()),\n\t\t},\n\t\t\"empty address\": {\n\t\t\taddr:     \"\",\n\t\t\tsubdenom: \"subDenom1\",\n\t\t\texpErr:   true,\n\t\t},\n\t\t\"invalid address\": {\n\t\t\taddr:     \"invalid\",\n\t\t\tsubdenom: \"subDenom1\",\n\t\t\texpErr:   true,\n\t\t},\n\t\t\"empty sub-denom\": {\n\t\t\taddr:         actor.String(),\n\t\t\tsubdenom:     \"\",\n\t\t\texpFullDenom: fmt.Sprintf(\"factory/%s/\", actor.String()),\n\t\t},\n\t\t\"valid sub-denom (contains underscore)\": {\n\t\t\taddr:         actor.String(),\n\t\t\tsubdenom:     \"sub_denom\",\n\t\t\texpFullDenom: fmt.Sprintf(\"factory/%s/sub_denom\", actor.String()),\n\t\t},\n\t}\n\tfor name, spec := range specs {\n\t\tt.Run(name, func(t *testing.T) {\n\t\t\t// when\n\t\t\tgotFullDenom, gotErr := wasmbinding.GetFullDenom(spec.addr, spec.subdenom)\n\t\t\t// then\n\t\t\tif spec.expErr {\n\t\t\t\trequire.Error(t, gotErr)\n\t\t\t\treturn\n\t\t\t}\n\t\t\trequire.NoError(t, gotErr)\n\t\t\tassert.Equal(t, spec.expFullDenom, gotFullDenom, \"exp %s but got %s\", spec.expFullDenom, gotFullDenom)\n\t\t})\n\t}\n}\n\nfunc TestDenomAdmin(t *testing.T) {\n\taddr := RandomAccountAddress()\n\tapp, ctx := SetupCustomApp(t, addr)\n\n\t// set token creation fee to zero to make testing easier\n\ttfParams := app.AppKeepers.TokenFactoryKeeper.GetParams(ctx)\n\ttfParams.DenomCreationFee = sdk.NewCoins()\n\tif err := app.AppKeepers.TokenFactoryKeeper.SetParams(ctx, tfParams); err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\t// create a subdenom via the token factory\n\tadmin := sdk.AccAddress([]byte(\"addr1_______________\"))\n\ttfDenom, err := app.AppKeepers.TokenFactoryKeeper.CreateDenom(ctx, admin.String(), \"subdenom\")\n\trequire.NoError(t, err)\n\trequire.NotEmpty(t, tfDenom)\n\n\tqueryPlugin := wasmbinding.NewQueryPlugin(app.AppKeepers.BankKeeper, &app.AppKeepers.TokenFactoryKeeper)\n\n\ttestCases := []struct {\n\t\tname        string\n\t\tdenom       string\n\t\texpectErr   bool\n\t\texpectAdmin string\n\t}{\n\t\t{\n\t\t\tname:        \"valid token factory denom\",\n\t\t\tdenom:       tfDenom,\n\t\t\texpectAdmin: admin.String(),\n\t\t},\n\t\t{\n\t\t\tname:        \"invalid token factory denom\",\n\t\t\tdenom:       \"uosmo\",\n\t\t\texpectErr:   false,\n\t\t\texpectAdmin: \"\",\n\t\t},\n\t}\n\n\tfor _, tc := range testCases {\n\t\ttc := tc\n\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\tresp, err := queryPlugin.GetDenomAdmin(ctx, tc.denom)\n\t\t\tif tc.expectErr {\n\t\t\t\trequire.Error(t, err)\n\t\t\t} else {\n\t\t\t\trequire.NoError(t, err)\n\t\t\t\trequire.NotNil(t, resp)\n\t\t\t\trequire.Equal(t, tc.expectAdmin, resp.Admin)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  }
]